mirror of
https://github.com/eitchtee/WYGIWYH.git
synced 2026-08-26 21:34:02 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
53ed0d791a | ||
|
|
5147d939ef | ||
|
|
716bd6f57f | ||
|
|
ded4cb37d5 | ||
|
|
cd48edddab | ||
|
|
9e135560fe | ||
|
|
bdbccdec16 | ||
|
|
907c511b59 | ||
|
|
33f0904a0f | ||
|
|
1c4f23a69e | ||
|
|
8373732964 | ||
|
|
8e09f3e8d8 | ||
|
|
1516fe0281 | ||
|
|
3bd16602a0 | ||
|
|
83c2b599d7 | ||
|
|
f9eab3ce17 | ||
|
|
62a33ddd2c | ||
|
|
ea3e9fd68f | ||
|
|
d71bf3ccb3 | ||
|
|
350d78356c | ||
|
|
91dfba519c | ||
|
|
0c9b41182b | ||
|
|
7a900908dd | ||
|
|
dcd52ec189 | ||
|
|
93e73b9aa6 | ||
|
|
7947d5f874 | ||
|
|
2ab6621205 | ||
|
|
39c15eedec | ||
|
|
6dcf5a63f8 | ||
|
|
11a6b3faa6 | ||
|
|
9b1312b744 | ||
|
|
72707f46e6 | ||
|
|
cf908ae87e | ||
|
|
b145d10fbd | ||
|
|
ee39dcf9ef | ||
|
|
5d330ddfbf | ||
|
|
14011c2f60 | ||
|
|
a25adafe3b | ||
|
|
743951a862 | ||
|
|
74d3d5fcf9 | ||
|
|
75f23168ab | ||
|
|
0ec1c5c063 | ||
|
|
e69d5fbd7a | ||
|
|
5a80a3b1d3 |
@@ -17,6 +17,7 @@ PROVIDER_MAPPING = {
|
||||
"frankfurter": providers.FrankfurterProvider,
|
||||
"twelvedata": providers.TwelveDataProvider,
|
||||
"twelvedatamarkets": providers.TwelveDataMarketsProvider,
|
||||
"yfinance": providers.YFinanceMarketsProvider,
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -503,3 +503,82 @@ class TwelveDataMarketsProvider(ExchangeRateProvider):
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
|
||||
class YFinanceMarketsProvider(ExchangeRateProvider):
|
||||
"""Fetch market prices for Yahoo Finance symbols using yfinance.
|
||||
|
||||
Currency codes are passed to Yahoo Finance verbatim. For example, use
|
||||
``PETR4.SA`` for Petrobras on B3 or ``AAPL`` for Apple. The configured
|
||||
exchange currency is treated as the currency of the Yahoo quote.
|
||||
"""
|
||||
|
||||
rates_inverted = True
|
||||
|
||||
def __init__(self, api_key: str = None, ticker_factory=None):
|
||||
super().__init__(api_key)
|
||||
self._ticker_factory = ticker_factory
|
||||
|
||||
@classmethod
|
||||
def requires_api_key(cls) -> bool:
|
||||
return False
|
||||
|
||||
def _get_ticker_factory(self):
|
||||
if self._ticker_factory is None:
|
||||
try:
|
||||
import yfinance as yf
|
||||
except ImportError as exc:
|
||||
raise RuntimeError(
|
||||
"The yfinance package is required for the Yahoo Finance provider."
|
||||
) from exc
|
||||
|
||||
self._ticker_factory = yf.Ticker
|
||||
|
||||
return self._ticker_factory
|
||||
|
||||
def get_rates(
|
||||
self, target_currencies: QuerySet, exchange_currencies: set
|
||||
) -> List[Tuple[Currency, Currency, Decimal]]:
|
||||
results = []
|
||||
ticker_factory = self._get_ticker_factory()
|
||||
|
||||
for asset in target_currencies:
|
||||
exchange_currency = asset.exchange_currency
|
||||
if exchange_currency not in exchange_currencies:
|
||||
continue
|
||||
|
||||
try:
|
||||
history = ticker_factory(asset.code).history(
|
||||
period="5d", interval="1h", auto_adjust=False
|
||||
)
|
||||
|
||||
if history is None or history.empty:
|
||||
logger.warning(
|
||||
"YFinanceMarkets: no history returned for %s", asset.code
|
||||
)
|
||||
continue
|
||||
|
||||
try:
|
||||
latest_close = history["Close"].dropna().iloc[-1]
|
||||
except (IndexError, KeyError, TypeError):
|
||||
logger.warning(
|
||||
"YFinanceMarkets: no close price returned for %s", asset.code
|
||||
)
|
||||
continue
|
||||
|
||||
rate = Decimal(str(latest_close))
|
||||
if not rate.is_finite() or rate <= 0:
|
||||
logger.warning(
|
||||
"YFinanceMarkets: invalid close price %r for %s",
|
||||
latest_close,
|
||||
asset.code,
|
||||
)
|
||||
continue
|
||||
|
||||
results.append((exchange_currency, asset, rate))
|
||||
except Exception as exc:
|
||||
logger.error(
|
||||
"YFinanceMarkets: error fetching %s: %s", asset.code, exc
|
||||
)
|
||||
|
||||
return results
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
# Generated by Django 5.2.15 on 2026-07-18 17:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("currencies", "0023_add_failure_count"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="exchangerateservice",
|
||||
name="service_type",
|
||||
field=models.CharField(
|
||||
choices=[
|
||||
("coingecko_free", "CoinGecko (Demo/Free)"),
|
||||
("coingecko_pro", "CoinGecko (Pro)"),
|
||||
("transitive", "Transitive (Calculated from Existing Rates)"),
|
||||
("frankfurter", "Frankfurter"),
|
||||
("twelvedata", "TwelveData"),
|
||||
("twelvedatamarkets", "TwelveData Markets"),
|
||||
("yfinance", "Yahoo Finance"),
|
||||
],
|
||||
max_length=255,
|
||||
verbose_name="Service Type",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -105,6 +105,7 @@ class ExchangeRateService(models.Model):
|
||||
FRANKFURTER = "frankfurter", "Frankfurter"
|
||||
TWELVEDATA = "twelvedata", "TwelveData"
|
||||
TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets"
|
||||
YFINANCE = "yfinance", "Yahoo Finance"
|
||||
|
||||
class IntervalType(models.TextChoices):
|
||||
ON = "on", _("On")
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
from decimal import Decimal
|
||||
from unittest import TestCase
|
||||
|
||||
from apps.currencies.exchange_rates.fetcher import PROVIDER_MAPPING
|
||||
from apps.currencies.exchange_rates.providers import YFinanceMarketsProvider
|
||||
from apps.currencies.models import ExchangeRateService
|
||||
|
||||
|
||||
class _FakeSeries:
|
||||
def __init__(self, values):
|
||||
self._values = values
|
||||
|
||||
def dropna(self):
|
||||
return _FakeSeries([value for value in self._values if value is not None])
|
||||
|
||||
@property
|
||||
def iloc(self):
|
||||
return self
|
||||
|
||||
def __getitem__(self, index):
|
||||
return self._values[index]
|
||||
|
||||
|
||||
class _FakeHistory:
|
||||
def __init__(self, close_values):
|
||||
self._close_values = close_values
|
||||
self.empty = not close_values
|
||||
|
||||
def __getitem__(self, field):
|
||||
if field != "Close":
|
||||
raise KeyError(field)
|
||||
return _FakeSeries(self._close_values)
|
||||
|
||||
|
||||
class _FakeCurrency:
|
||||
def __init__(self, code, exchange_currency=None):
|
||||
self.code = code
|
||||
self.exchange_currency = exchange_currency
|
||||
|
||||
|
||||
class _FakeTicker:
|
||||
def __init__(self, history):
|
||||
self.history_result = history
|
||||
self.history_kwargs = None
|
||||
|
||||
def history(self, **kwargs):
|
||||
self.history_kwargs = kwargs
|
||||
return self.history_result
|
||||
|
||||
|
||||
class YFinanceMarketsProviderTests(TestCase):
|
||||
def setUp(self):
|
||||
self.brl = _FakeCurrency("BRL")
|
||||
self.asset = _FakeCurrency("AAPL", exchange_currency=self.brl)
|
||||
|
||||
def test_returns_latest_hourly_close_using_symbol_verbatim(self):
|
||||
ticker = _FakeTicker(_FakeHistory([36.90, None, 37.42]))
|
||||
requested_symbols = []
|
||||
|
||||
def ticker_factory(symbol):
|
||||
requested_symbols.append(symbol)
|
||||
return ticker
|
||||
|
||||
provider = YFinanceMarketsProvider(ticker_factory=ticker_factory)
|
||||
|
||||
rates = provider.get_rates([self.asset], {self.brl})
|
||||
|
||||
self.assertEqual(rates, [(self.brl, self.asset, Decimal("37.42"))])
|
||||
self.assertEqual(requested_symbols, ["AAPL"])
|
||||
self.assertEqual(
|
||||
ticker.history_kwargs,
|
||||
{"period": "5d", "interval": "1h", "auto_adjust": False},
|
||||
)
|
||||
|
||||
def test_passes_brazilian_symbol_verbatim_and_skips_empty_history(self):
|
||||
self.asset.code = "PETR4.SA"
|
||||
ticker = _FakeTicker(_FakeHistory([]))
|
||||
requested_symbols = []
|
||||
|
||||
provider = YFinanceMarketsProvider(
|
||||
ticker_factory=lambda symbol: requested_symbols.append(symbol)
|
||||
or ticker
|
||||
)
|
||||
|
||||
rates = provider.get_rates([self.asset], {self.brl})
|
||||
|
||||
self.assertEqual(rates, [])
|
||||
self.assertEqual(requested_symbols, ["PETR4.SA"])
|
||||
|
||||
def test_is_registered_without_an_api_key(self):
|
||||
self.assertFalse(YFinanceMarketsProvider.requires_api_key())
|
||||
self.assertIs(PROVIDER_MAPPING["yfinance"], YFinanceMarketsProvider)
|
||||
self.assertEqual(ExchangeRateService.ServiceType.YFINANCE, "yfinance")
|
||||
@@ -107,6 +107,25 @@ class MonthlySummaryFilterBehaviorTests(TestCase):
|
||||
return data
|
||||
return None
|
||||
|
||||
def _create_asset_income(self):
|
||||
asset_account = Account.objects.create(
|
||||
name="Asset Account",
|
||||
group=self.account_group,
|
||||
currency=self.currency,
|
||||
is_asset=True,
|
||||
)
|
||||
Transaction.objects.create(
|
||||
account=asset_account,
|
||||
type=Transaction.Type.INCOME,
|
||||
is_paid=True,
|
||||
date=date(2025, 12, 25),
|
||||
reference_date=date(2025, 12, 1),
|
||||
amount=Decimal("50.00"),
|
||||
description="Asset Income",
|
||||
owner=self.user,
|
||||
)
|
||||
return asset_account
|
||||
|
||||
# --- monthly_summary view tests ---
|
||||
|
||||
def test_monthly_summary_no_filter_returns_200(self):
|
||||
@@ -304,6 +323,15 @@ class MonthlySummaryFilterBehaviorTests(TestCase):
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_monthly_account_summary_includes_asset_accounts(self):
|
||||
asset_account = self._create_asset_income()
|
||||
response = self.client.get(
|
||||
"/monthly/12/2025/summary/accounts/",
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
self.assertIn(asset_account.id, response.context["account_data"])
|
||||
|
||||
def test_monthly_account_summary_with_filter_returns_200(self):
|
||||
"""Test that monthly_account_summary returns 200 with filter"""
|
||||
response = self.client.get(
|
||||
@@ -322,6 +350,16 @@ class MonthlySummaryFilterBehaviorTests(TestCase):
|
||||
)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_monthly_currency_summary_includes_asset_account_transactions(self):
|
||||
self._create_asset_income()
|
||||
response = self.client.get(
|
||||
"/monthly/12/2025/summary/currencies/",
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
usd_data = self._get_currency_data(response.context["currency_data"])
|
||||
self.assertEqual(usd_data["income_current"], Decimal("1050.00"))
|
||||
|
||||
def test_monthly_currency_summary_with_filter_returns_200(self):
|
||||
"""Test that monthly_currency_summary returns 200 with filter"""
|
||||
response = self.client.get(
|
||||
|
||||
@@ -14,7 +14,7 @@ from apps.monthly_overview.utils.daily_spending_allowance import (
|
||||
calculate_daily_allowance_currency,
|
||||
)
|
||||
from apps.transactions.filters import TransactionsFilter
|
||||
from apps.transactions.models import Transaction
|
||||
from apps.transactions.models import FilterPreset, Transaction
|
||||
from apps.transactions.utils.calculations import (
|
||||
calculate_currency_totals,
|
||||
calculate_percentage_distribution,
|
||||
@@ -58,6 +58,8 @@ def monthly_overview(request, month: int, year: int):
|
||||
"previous_month": previous_month,
|
||||
"previous_year": previous_year,
|
||||
"filter": f,
|
||||
"filter_is_active": f.has_active_filters,
|
||||
"filter_presets": FilterPreset.objects.filter(owner=request.user),
|
||||
"order": order,
|
||||
"summary_tab": summary_tab,
|
||||
},
|
||||
@@ -226,7 +228,6 @@ def monthly_account_summary(request, month: int, year: int):
|
||||
Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True)
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.exclude(account__is_asset=True)
|
||||
)
|
||||
|
||||
account_data = calculate_account_totals(transactions_queryset=queryset.all())
|
||||
@@ -280,7 +281,6 @@ def monthly_currency_summary(request, month: int, year: int):
|
||||
Q(Q(category__mute=True) & ~Q(category=None)) | Q(mute=True)
|
||||
)
|
||||
.exclude(account__in=request.user.untracked_accounts.all())
|
||||
.exclude(account__is_asset=True)
|
||||
)
|
||||
|
||||
currency_data = calculate_currency_totals(queryset.all(), ignore_empty=True)
|
||||
|
||||
@@ -1,3 +1,82 @@
|
||||
from django.test import TestCase
|
||||
import json
|
||||
import tempfile
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
# Create your tests here.
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase, override_settings
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
from apps.accounts.models import Account
|
||||
from apps.currencies.models import Currency, ExchangeRate
|
||||
from apps.transactions.models import Transaction
|
||||
|
||||
|
||||
@override_settings(
|
||||
STATIC_ROOT=tempfile.gettempdir(),
|
||||
STORAGES={
|
||||
"default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
|
||||
"staticfiles": {
|
||||
"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"
|
||||
},
|
||||
},
|
||||
)
|
||||
class NetWorthCurrencyChartTests(TestCase):
|
||||
def test_consolidated_currency_is_a_selectable_dashed_matching_color_line(self):
|
||||
user = get_user_model().objects.create_user(
|
||||
email="chart@example.com", password="password"
|
||||
)
|
||||
usd = Currency.objects.create(code="USD", name="US Dollar", prefix="$ ")
|
||||
eur = Currency.objects.create(
|
||||
code="EUR", name="Euro", prefix="€ ", exchange_currency=usd
|
||||
)
|
||||
usd_account = Account.all_objects.create(
|
||||
name="USD account", currency=usd, owner=user
|
||||
)
|
||||
eur_account = Account.all_objects.create(
|
||||
name="EUR account", currency=eur, owner=user
|
||||
)
|
||||
ExchangeRate.objects.create(
|
||||
from_currency=eur,
|
||||
to_currency=usd,
|
||||
rate=Decimal("1.234567"),
|
||||
date=timezone.now(),
|
||||
)
|
||||
for account, amount in ((usd_account, "100"), (eur_account, "50")):
|
||||
Transaction.userless_all_objects.create(
|
||||
account=account,
|
||||
owner=user,
|
||||
type=Transaction.Type.INCOME,
|
||||
amount=Decimal(amount),
|
||||
date=date(2026, 1, 15),
|
||||
reference_date=date(2026, 1, 1),
|
||||
is_paid=True,
|
||||
)
|
||||
|
||||
self.client.force_login(user)
|
||||
response = self.client.get(reverse("net_worth"))
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
chart_data = json.loads(response.context["chart_data_currency_json"])
|
||||
datasets = {dataset["label"]: dataset for dataset in chart_data["datasets"]}
|
||||
self.assertIn("US Dollar Consolidated", datasets)
|
||||
regular = datasets["US Dollar"]
|
||||
consolidated = datasets["US Dollar Consolidated"]
|
||||
self.assertEqual(consolidated["data"], [161.73])
|
||||
self.assertNotIn("borderColor", regular)
|
||||
self.assertNotIn("borderColor", consolidated)
|
||||
self.assertEqual(consolidated["colorSource"], "US Dollar")
|
||||
self.assertEqual(consolidated["borderDash"], [12, 6])
|
||||
self.assertEqual(consolidated["pointRadius"], 0)
|
||||
self.assertEqual(consolidated["pointHitRadius"], 8)
|
||||
self.assertContains(
|
||||
response,
|
||||
"showOnlyCurrencyDataset('US Dollar Consolidated', 'US Dollar')",
|
||||
html=False,
|
||||
)
|
||||
self.assertContains(
|
||||
response,
|
||||
'<span class="text-start shrink">Consolidated</span>',
|
||||
html=False,
|
||||
)
|
||||
|
||||
@@ -3,8 +3,11 @@ import json
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.shortcuts import render, redirect
|
||||
from django.utils.translation import gettext
|
||||
from django.views.decorators.http import require_http_methods
|
||||
|
||||
from apps.currencies.models import Currency
|
||||
from apps.currencies.utils.convert import convert
|
||||
from apps.net_worth.utils.calculate_net_worth import (
|
||||
calculate_historical_currency_net_worth,
|
||||
calculate_historical_account_balance,
|
||||
@@ -78,6 +81,17 @@ def net_worth(request):
|
||||
)
|
||||
|
||||
datasets = []
|
||||
currency_models = {
|
||||
currency.name: currency
|
||||
for currency in Currency.objects.filter(name__in=currencies).select_related(
|
||||
"exchange_currency"
|
||||
)
|
||||
}
|
||||
consolidated_currencies = {
|
||||
data["currency"]["name"]
|
||||
for data in currency_net_worth.values()
|
||||
if data["consolidated"]["total_final"] != data["total_final"]
|
||||
}
|
||||
for i, currency in enumerate(currencies):
|
||||
data = [
|
||||
float(month_data[currency])
|
||||
@@ -93,6 +107,45 @@ def net_worth(request):
|
||||
}
|
||||
)
|
||||
|
||||
if currency in consolidated_currencies:
|
||||
target = currency_models[currency]
|
||||
sources = [
|
||||
source
|
||||
for source in currency_models.values()
|
||||
if source.exchange_currency_id == target.id
|
||||
]
|
||||
rates = {}
|
||||
for source in sources:
|
||||
converted, _, _, _ = convert(1, source, target)
|
||||
if converted is not None:
|
||||
rates[source.name] = converted
|
||||
|
||||
consolidated_data = [
|
||||
float(
|
||||
round(
|
||||
month_data[currency]
|
||||
+ sum(
|
||||
month_data[source] * rate for source, rate in rates.items()
|
||||
),
|
||||
target.decimal_places,
|
||||
)
|
||||
)
|
||||
for month_data in historical_currency_net_worth.values()
|
||||
]
|
||||
datasets.append(
|
||||
{
|
||||
"label": f"{currency} {gettext('Consolidated')}",
|
||||
"data": consolidated_data,
|
||||
"yAxisID": f"y{i}",
|
||||
"fill": False,
|
||||
"tension": 0.1,
|
||||
"colorSource": currency,
|
||||
"borderDash": [12, 6],
|
||||
"pointRadius": 0,
|
||||
"pointHitRadius": 8,
|
||||
}
|
||||
)
|
||||
|
||||
chart_data_currency = {"labels": labels, "datasets": datasets}
|
||||
|
||||
chart_data_currency_json = json.dumps(chart_data_currency, cls=DjangoJSONEncoder)
|
||||
|
||||
@@ -41,6 +41,12 @@ class MonthYearFilter(Filter):
|
||||
|
||||
|
||||
class TransactionsFilter(django_filters.FilterSet):
|
||||
default_filter_values = {
|
||||
"type": {"IN", "EX"},
|
||||
"is_paid": {"1", "0"},
|
||||
"mute_status": {"active", "muted"},
|
||||
}
|
||||
|
||||
description = django_filters.CharFilter(
|
||||
label=_("Content"),
|
||||
method=content_filter,
|
||||
@@ -217,6 +223,23 @@ class TransactionsFilter(django_filters.FilterSet):
|
||||
]
|
||||
self.form.fields["entities"].choices = custom_entity_choices + entity_choices
|
||||
|
||||
@property
|
||||
def has_active_filters(self):
|
||||
for name in self.base_filters:
|
||||
if hasattr(self.form.data, "getlist"):
|
||||
values = self.form.data.getlist(name)
|
||||
else:
|
||||
value = self.form.data.get(name)
|
||||
values = value if isinstance(value, (list, tuple)) else [value]
|
||||
|
||||
values = [str(value) for value in values if value not in (None, "")]
|
||||
if not values:
|
||||
continue
|
||||
if set(values) == self.default_filter_values.get(name):
|
||||
continue
|
||||
return True
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def filter_category(queryset, name, value):
|
||||
if not value:
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [
|
||||
("transactions", "0049_transactionattachment"),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="FilterPreset",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("name", models.CharField(max_length=100)),
|
||||
("parameters", models.JSONField(default=dict)),
|
||||
(
|
||||
"owner",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
related_name="filter_presets",
|
||||
to=settings.AUTH_USER_MODEL,
|
||||
),
|
||||
),
|
||||
],
|
||||
options={"ordering": ["name", "id"]},
|
||||
),
|
||||
]
|
||||
@@ -30,12 +30,27 @@ from django.utils.translation import gettext_lazy as _
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
transaction_created = Signal()
|
||||
transaction_updated = Signal()
|
||||
transaction_deleted = Signal()
|
||||
|
||||
|
||||
class FilterPreset(models.Model):
|
||||
owner = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="filter_presets",
|
||||
)
|
||||
name = models.CharField(max_length=100)
|
||||
parameters = models.JSONField(default=dict)
|
||||
|
||||
class Meta:
|
||||
ordering = ["name", "id"]
|
||||
|
||||
def __str__(self):
|
||||
return self.name
|
||||
|
||||
|
||||
def transaction_attachment_path(instance, filename):
|
||||
extension = Path(filename).suffix
|
||||
return f"transaction_attachments/{instance.transaction_id}/{instance.id}{extension}"
|
||||
@@ -535,6 +550,7 @@ class Transaction(OwnedObject):
|
||||
|
||||
return new_obj
|
||||
|
||||
|
||||
class TransactionAttachment(models.Model):
|
||||
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
||||
transaction = models.ForeignKey(
|
||||
@@ -590,6 +606,7 @@ def delete_transaction_attachment_file(sender, instance, **kwargs):
|
||||
if storage.exists(instance.file.name):
|
||||
storage.delete(instance.file.name)
|
||||
|
||||
|
||||
class InstallmentPlan(models.Model):
|
||||
class Recurrence(models.TextChoices):
|
||||
YEARLY = "yearly", _("Yearly")
|
||||
@@ -937,8 +954,10 @@ class RecurringTransaction(models.Model):
|
||||
notes=self.notes if self.add_notes_to_transaction else "",
|
||||
owner=self.account.owner,
|
||||
)
|
||||
created_transaction.tags.set(self.tags.all())
|
||||
created_transaction.entities.set(self.entities.all())
|
||||
# Unfiltered managers: generation also runs without a current user, or with a
|
||||
# different one, and the scoped default manager would hide private rows.
|
||||
created_transaction.tags.set(self.tags(manager="all_objects").all())
|
||||
created_transaction.entities.set(self.entities(manager="all_objects").all())
|
||||
|
||||
def get_recurrence_delta(self):
|
||||
if self.recurrence_type == self.RecurrenceType.DAY:
|
||||
@@ -1030,9 +1049,11 @@ class RecurringTransaction(models.Model):
|
||||
self.notes if self.add_notes_to_transaction else ""
|
||||
)
|
||||
|
||||
# Update many-to-many relationships
|
||||
existing_transaction.tags.set(self.tags.all())
|
||||
existing_transaction.entities.set(self.entities.all())
|
||||
# Update many-to-many relationships (see create_transaction)
|
||||
existing_transaction.tags.set(self.tags(manager="all_objects").all())
|
||||
existing_transaction.entities.set(
|
||||
self.entities(manager="all_objects").all()
|
||||
)
|
||||
|
||||
# Save updated transaction
|
||||
existing_transaction.save()
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.test import TestCase, override_settings
|
||||
from django.urls import reverse
|
||||
|
||||
from apps.transactions.models import FilterPreset
|
||||
|
||||
|
||||
@override_settings(
|
||||
STORAGES={
|
||||
"default": {"BACKEND": "django.core.files.storage.FileSystemStorage"},
|
||||
"staticfiles": {
|
||||
"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"
|
||||
},
|
||||
},
|
||||
WHITENOISE_AUTOREFRESH=True,
|
||||
)
|
||||
class FilterPresetViewTests(TestCase):
|
||||
def setUp(self):
|
||||
user_model = get_user_model()
|
||||
self.user = user_model.objects.create_user(
|
||||
email="preset-owner@example.com", password="testpass123"
|
||||
)
|
||||
self.other_user = user_model.objects.create_user(
|
||||
email="other-user@example.com", password="testpass123"
|
||||
)
|
||||
self.client.force_login(self.user)
|
||||
self.preset = FilterPreset.objects.create(
|
||||
owner=self.user,
|
||||
name="Unpaid",
|
||||
parameters={"is_paid": ["0"], "type": ["IN", "EX"]},
|
||||
)
|
||||
|
||||
def test_create_stores_only_transaction_filter_fields(self):
|
||||
response = self.client.post(
|
||||
reverse("filter_preset_create"),
|
||||
{
|
||||
"name": "Account X Unpaid",
|
||||
"account": ["Account X"],
|
||||
"is_paid": ["0"],
|
||||
"order": "newer",
|
||||
},
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
preset = FilterPreset.objects.get(
|
||||
owner=self.user, name="Account X Unpaid"
|
||||
)
|
||||
self.assertEqual(
|
||||
preset.parameters,
|
||||
{"account": ["Account X"], "is_paid": ["0"]},
|
||||
)
|
||||
self.assertContains(response, "Account X Unpaid")
|
||||
|
||||
def test_create_rejects_a_blank_name(self):
|
||||
response = self.client.post(
|
||||
reverse("filter_preset_create"),
|
||||
{"name": " ", "is_paid": ["0"]},
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 400)
|
||||
self.assertEqual(FilterPreset.objects.filter(owner=self.user).count(), 1)
|
||||
|
||||
def test_apply_returns_the_saved_filter_form_without_changing_the_url(self):
|
||||
response = self.client.get(
|
||||
reverse("filter_preset_apply", args=[self.preset.pk]),
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, 'id="filter"')
|
||||
self.assertEqual(response.context["filter"].data.getlist("is_paid"), ["0"])
|
||||
self.assertEqual(
|
||||
response.context["filter"].data.getlist("type"), ["IN", "EX"]
|
||||
)
|
||||
self.assertNotIn("HX-Push-Url", response.headers)
|
||||
self.assertNotIn("HX-Replace-Url", response.headers)
|
||||
self.assertIs(response.context.get("filter_is_active"), True)
|
||||
self.assertContains(response, 'hx-swap-oob="outerHTML"')
|
||||
self.assertEqual(
|
||||
response.headers["HX-Trigger-After-Settle"],
|
||||
"updated",
|
||||
)
|
||||
|
||||
def test_clear_returns_the_default_filter_form_without_changing_the_url(self):
|
||||
response = self.client.get(
|
||||
"/transactions/filter/clear/",
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertContains(response, 'id="filter"')
|
||||
self.assertEqual(
|
||||
response.context["filter"].data.getlist("type"), ["IN", "EX"]
|
||||
)
|
||||
self.assertEqual(
|
||||
response.context["filter"].data.getlist("is_paid"), ["1", "0"]
|
||||
)
|
||||
self.assertNotIn("HX-Push-Url", response.headers)
|
||||
self.assertNotIn("HX-Replace-Url", response.headers)
|
||||
self.assertIs(response.context.get("filter_is_active"), False)
|
||||
self.assertContains(response, 'hx-swap-oob="outerHTML"')
|
||||
self.assertEqual(
|
||||
response.headers["HX-Trigger-After-Settle"],
|
||||
"updated",
|
||||
)
|
||||
|
||||
def test_other_users_cannot_apply_or_delete_a_preset(self):
|
||||
self.client.force_login(self.other_user)
|
||||
|
||||
apply_response = self.client.get(
|
||||
reverse("filter_preset_apply", args=[self.preset.pk]),
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
delete_response = self.client.post(
|
||||
reverse("filter_preset_delete", args=[self.preset.pk]),
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
self.assertEqual(apply_response.status_code, 404)
|
||||
self.assertEqual(delete_response.status_code, 404)
|
||||
self.assertTrue(FilterPreset.objects.filter(pk=self.preset.pk).exists())
|
||||
|
||||
def test_delete_removes_the_current_users_preset(self):
|
||||
response = self.client.post(
|
||||
reverse("filter_preset_delete", args=[self.preset.pk]),
|
||||
HTTP_HX_REQUEST="true",
|
||||
)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertFalse(FilterPreset.objects.filter(pk=self.preset.pk).exists())
|
||||
self.assertNotContains(response, self.preset.name)
|
||||
|
||||
def test_all_transactions_page_only_offers_the_current_users_presets(self):
|
||||
FilterPreset.objects.create(
|
||||
owner=self.other_user,
|
||||
name="Other User Preset",
|
||||
parameters={"type": ["IN"]},
|
||||
)
|
||||
|
||||
response = self.client.get(reverse("transactions_all_index"))
|
||||
|
||||
self.assertContains(response, self.preset.name)
|
||||
self.assertNotContains(response, "Other User Preset")
|
||||
self.assertContains(response, 'id="filter-presets"')
|
||||
self.assertNotContains(response, 'href="./?')
|
||||
self.assertContains(
|
||||
response,
|
||||
reverse("filter_preset_apply", args=[self.preset.pk]),
|
||||
)
|
||||
|
||||
def test_all_transactions_page_marks_a_filtered_query_active(self):
|
||||
response = self.client.get(
|
||||
reverse("transactions_all_index"),
|
||||
{"type": ["IN", "EX"], "is_paid": ["0"]},
|
||||
)
|
||||
|
||||
self.assertIs(response.context["filter_is_active"], True)
|
||||
|
||||
def test_all_transactions_page_does_not_mark_default_query_active(self):
|
||||
response = self.client.get(
|
||||
reverse("transactions_all_index"),
|
||||
{
|
||||
"type": ["IN", "EX"],
|
||||
"is_paid": ["1", "0"],
|
||||
"mute_status": ["active", "muted"],
|
||||
},
|
||||
)
|
||||
|
||||
self.assertIs(response.context["filter_is_active"], False)
|
||||
|
||||
def test_monthly_page_renders_preset_controls(self):
|
||||
other_preset = FilterPreset.objects.create(
|
||||
owner=self.other_user,
|
||||
name="Other Monthly Preset",
|
||||
parameters={"type": ["IN"]},
|
||||
)
|
||||
response = self.client.get(reverse("monthly_overview", args=[8, 2026]))
|
||||
|
||||
self.assertContains(response, 'id="filter-presets"')
|
||||
self.assertNotContains(response, 'href="./?')
|
||||
self.assertContains(response, reverse("filter_preset_create"))
|
||||
self.assertNotContains(response, other_preset.name)
|
||||
@@ -7,6 +7,7 @@ from django.utils import timezone
|
||||
from apps.transactions.models import (
|
||||
TransactionCategory,
|
||||
TransactionTag,
|
||||
TransactionEntity,
|
||||
Transaction,
|
||||
InstallmentPlan,
|
||||
RecurringTransaction,
|
||||
@@ -240,3 +241,27 @@ class RecurringTransactionTests(TestCase):
|
||||
self.assertFalse(recurring.is_paused)
|
||||
self.assertEqual(recurring.recurrence_interval, 1)
|
||||
self.assertEqual(recurring.account.currency.code, "USD")
|
||||
|
||||
def test_generate_upcoming_transactions_keeps_tags_and_entities(self):
|
||||
"""Generation must copy tags/entities even with no current user"""
|
||||
tag = TransactionTag.objects.create(name="Essential")
|
||||
entity = TransactionEntity.objects.create(name="Landlord")
|
||||
recurring = RecurringTransaction.objects.create(
|
||||
account=self.account,
|
||||
type=Transaction.Type.EXPENSE,
|
||||
amount=Decimal("100.00"),
|
||||
description="Monthly Payment",
|
||||
start_date=timezone.now().date(),
|
||||
recurrence_type=RecurringTransaction.RecurrenceType.MONTH,
|
||||
recurrence_interval=1,
|
||||
)
|
||||
recurring.tags.set([tag])
|
||||
recurring.entities.set([entity])
|
||||
|
||||
RecurringTransaction.generate_upcoming_transactions()
|
||||
|
||||
generated = Transaction.all_objects.filter(recurring_transaction=recurring)
|
||||
self.assertTrue(generated.exists())
|
||||
for transaction in generated:
|
||||
self.assertIn(tag, transaction.tags(manager="all_objects").all())
|
||||
self.assertIn(entity, transaction.entities(manager="all_objects").all())
|
||||
|
||||
@@ -6,6 +6,26 @@ urlpatterns = [
|
||||
path(
|
||||
"transactions/list/", views.transaction_all_list, name="transactions_all_list"
|
||||
),
|
||||
path(
|
||||
"transactions/filter-presets/create/",
|
||||
views.filter_preset_create,
|
||||
name="filter_preset_create",
|
||||
),
|
||||
path(
|
||||
"transactions/filter-presets/<int:preset_id>/apply/",
|
||||
views.filter_preset_apply,
|
||||
name="filter_preset_apply",
|
||||
),
|
||||
path(
|
||||
"transactions/filter-presets/<int:preset_id>/delete/",
|
||||
views.filter_preset_delete,
|
||||
name="filter_preset_delete",
|
||||
),
|
||||
path(
|
||||
"transactions/filter/clear/",
|
||||
views.transaction_filter_clear,
|
||||
name="transaction_filter_clear",
|
||||
),
|
||||
path(
|
||||
"transactions/trash/",
|
||||
views.transactions_trash_can_index,
|
||||
|
||||
@@ -11,7 +11,7 @@ from apps.transactions.forms import (
|
||||
TransactionForm,
|
||||
TransferForm,
|
||||
)
|
||||
from apps.transactions.models import Transaction, TransactionAttachment
|
||||
from apps.transactions.models import FilterPreset, Transaction, TransactionAttachment
|
||||
from apps.transactions.utils.calculations import (
|
||||
calculate_account_totals,
|
||||
calculate_currency_totals,
|
||||
@@ -23,7 +23,7 @@ from django.contrib import messages
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.core.paginator import Paginator
|
||||
from django.db.models import Case, IntegerField, Q, Value, When
|
||||
from django.http import FileResponse, Http404, HttpResponse, JsonResponse
|
||||
from django.http import FileResponse, Http404, HttpResponse, JsonResponse, QueryDict
|
||||
from django.shortcuts import get_object_or_404, render
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
@@ -635,7 +635,92 @@ def transaction_all_index(request):
|
||||
return render(
|
||||
request,
|
||||
"transactions/pages/transactions.html",
|
||||
{"filter": f, "order": order, "summary_tab": summary_tab},
|
||||
{
|
||||
"filter": f,
|
||||
"filter_is_active": f.has_active_filters,
|
||||
"filter_presets": FilterPreset.objects.filter(owner=request.user),
|
||||
"order": order,
|
||||
"summary_tab": summary_tab,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["POST"])
|
||||
def filter_preset_create(request):
|
||||
name = request.POST.get("name", "").strip()
|
||||
if not name or len(name) > 100:
|
||||
return HttpResponse(status=400)
|
||||
|
||||
parameters = {
|
||||
key: request.POST.getlist(key)
|
||||
for key in TransactionsFilter.base_filters
|
||||
if key in request.POST
|
||||
}
|
||||
FilterPreset.objects.create(
|
||||
owner=request.user,
|
||||
name=name,
|
||||
parameters=parameters,
|
||||
)
|
||||
return render(
|
||||
request,
|
||||
"transactions/fragments/filter_presets.html",
|
||||
{"filter_presets": FilterPreset.objects.filter(owner=request.user)},
|
||||
)
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def filter_preset_apply(request, preset_id):
|
||||
preset = get_object_or_404(FilterPreset, pk=preset_id, owner=request.user)
|
||||
data = QueryDict(mutable=True)
|
||||
for key, values in preset.parameters.items():
|
||||
if key in TransactionsFilter.base_filters:
|
||||
data.setlist(key, values)
|
||||
|
||||
transaction_filter = TransactionsFilter(data)
|
||||
response = render(
|
||||
request,
|
||||
"transactions/fragments/filter_form.html",
|
||||
{
|
||||
"filter": transaction_filter,
|
||||
"filter_is_active": transaction_filter.has_active_filters,
|
||||
"swap_filter_indicator": True,
|
||||
},
|
||||
)
|
||||
response.headers["HX-Trigger-After-Settle"] = "updated"
|
||||
return response
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["GET"])
|
||||
def transaction_filter_clear(request):
|
||||
transaction_filter = TransactionsFilter(QueryDict())
|
||||
response = render(
|
||||
request,
|
||||
"transactions/fragments/filter_form.html",
|
||||
{
|
||||
"filter": transaction_filter,
|
||||
"filter_is_active": False,
|
||||
"swap_filter_indicator": True,
|
||||
},
|
||||
)
|
||||
response.headers["HX-Trigger-After-Settle"] = "updated"
|
||||
return response
|
||||
|
||||
|
||||
@only_htmx
|
||||
@login_required
|
||||
@require_http_methods(["POST"])
|
||||
def filter_preset_delete(request, preset_id):
|
||||
get_object_or_404(FilterPreset, pk=preset_id, owner=request.user).delete()
|
||||
return render(
|
||||
request,
|
||||
"transactions/fragments/filter_presets.html",
|
||||
{"filter_presets": FilterPreset.objects.filter(owner=request.user)},
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -140,7 +140,6 @@ class UserSettingsForm(forms.ModelForm):
|
||||
"date_format",
|
||||
"datetime_format",
|
||||
"number_format",
|
||||
"volume",
|
||||
"default_account",
|
||||
]
|
||||
widgets = {
|
||||
|
||||
+225
-179
File diff suppressed because it is too large
Load Diff
+212
-176
@@ -8,7 +8,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
|
||||
"POT-Creation-Date: 2026-08-16 04:46+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
@@ -30,8 +30,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536
|
||||
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919
|
||||
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:246
|
||||
#: apps/users/forms.py:404
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:245
|
||||
#: apps/users/forms.py:403
|
||||
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
|
||||
#: templates/rules/fragments/transaction_rule/view.html:128
|
||||
msgid "Update"
|
||||
@@ -46,7 +46,7 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953
|
||||
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134
|
||||
#: apps/users/forms.py:252 apps/users/forms.py:410
|
||||
#: apps/users/forms.py:251 apps/users/forms.py:409
|
||||
#: templates/mini_tools/unit_price_calculator.html:168
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
@@ -65,9 +65,9 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:61 apps/transactions/forms.py:307
|
||||
#: apps/transactions/forms.py:475 apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:579 apps/transactions/forms.py:763
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:331
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:841
|
||||
#: apps/transactions/models.py:1089
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:346
|
||||
#: apps/transactions/models.py:658 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:1110
|
||||
#: templates/insights/fragments/category_overview/index.html:86
|
||||
#: templates/insights/fragments/category_overview/index.html:542
|
||||
#: templates/insights/fragments/month_by_month.html:84
|
||||
@@ -78,13 +78,13 @@ msgstr ""
|
||||
#: apps/accounts/forms.py:132 apps/dca/forms.py:95 apps/dca/forms.py:103
|
||||
#: apps/export_app/forms.py:43 apps/export_app/forms.py:132
|
||||
#: apps/rules/forms.py:184 apps/rules/forms.py:194 apps/rules/models.py:45
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:73
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:79
|
||||
#: apps/transactions/forms.py:69 apps/transactions/forms.py:315
|
||||
#: apps/transactions/forms.py:483 apps/transactions/forms.py:588
|
||||
#: apps/transactions/forms.py:596 apps/transactions/forms.py:756
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:337
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:845
|
||||
#: apps/transactions/models.py:1095 templates/includes/sidebar.html:150
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:352
|
||||
#: apps/transactions/models.py:660 apps/transactions/models.py:862
|
||||
#: apps/transactions/models.py:1116 templates/includes/sidebar.html:150
|
||||
#: templates/insights/fragments/category_overview/index.html:40
|
||||
#: templates/insights/fragments/month_by_month.html:29
|
||||
#: templates/insights/fragments/month_by_month.html:32
|
||||
@@ -96,8 +96,8 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
|
||||
#: apps/import_app/models.py:14 apps/rules/models.py:13
|
||||
#: apps/transactions/models.py:223 apps/transactions/models.py:248
|
||||
#: apps/transactions/models.py:272 apps/transactions/models.py:1057
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:263
|
||||
#: apps/transactions/models.py:287 apps/transactions/models.py:1078
|
||||
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
|
||||
#: templates/accounts/fragments/list.html:22
|
||||
#: templates/categories/fragments/table.html:17
|
||||
@@ -165,9 +165,9 @@ msgstr ""
|
||||
#: apps/rules/models.py:35 apps/rules/models.py:267
|
||||
#: apps/transactions/forms.py:81 apps/transactions/forms.py:327
|
||||
#: apps/transactions/forms.py:442 apps/transactions/forms.py:748
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:303
|
||||
#: apps/transactions/models.py:601 apps/transactions/models.py:823
|
||||
#: apps/transactions/models.py:1063
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:318
|
||||
#: apps/transactions/models.py:618 apps/transactions/models.py:840
|
||||
#: apps/transactions/models.py:1084
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
#: templates/quick_transactions/fragments/list.html:14
|
||||
#: templates/recurring_transactions/fragments/table.html:19
|
||||
@@ -176,7 +176,7 @@ msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:19
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:57
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:63
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:164
|
||||
@@ -344,7 +344,8 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:173
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:172
|
||||
#: templates/transactions/fragments/filter_actions.html:5
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -459,10 +460,9 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:180
|
||||
#: templates/monthly_overview/pages/overview.html:275
|
||||
#: templates/monthly_overview/pages/overview.html:287
|
||||
#: templates/transactions/pages/transactions.html:225
|
||||
#: templates/transactions/pages/transactions.html:237
|
||||
#: templates/monthly_overview/pages/overview.html:284
|
||||
#: templates/transactions/fragments/filter_actions.html:48
|
||||
#: templates/transactions/pages/transactions.html:233
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -481,7 +481,7 @@ msgstr ""
|
||||
#: apps/currencies/forms.py:66 apps/dca/models.py:158 apps/rules/forms.py:176
|
||||
#: apps/rules/forms.py:190 apps/rules/models.py:38 apps/rules/models.py:279
|
||||
#: apps/transactions/forms.py:85 apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:313
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:328
|
||||
#: templates/dca/fragments/strategy/details.html:49
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
#: templates/exchange_rates_services/fragments/table.html:11
|
||||
@@ -501,7 +501,7 @@ msgid "Decimal Places"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:25
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:64
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:70
|
||||
#: templates/currencies/fragments/list.html:9
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/sidebar.html:176
|
||||
#: templates/includes/sidebar.html:178
|
||||
@@ -546,29 +546,29 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112
|
||||
#: apps/currencies/models.py:113
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:114
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:116
|
||||
#: apps/currencies/models.py:117
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:227 apps/transactions/models.py:251
|
||||
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
|
||||
#: apps/currencies/models.py:119 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:242 apps/transactions/models.py:266
|
||||
#: apps/transactions/models.py:290 templates/categories/fragments/list.html:16
|
||||
#: templates/entities/fragments/list.html:16
|
||||
#: templates/installment_plans/fragments/list.html:16
|
||||
#: templates/recurring_transactions/fragments/list.html:16
|
||||
@@ -578,77 +578,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:129
|
||||
#: apps/currencies/models.py:130
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:133
|
||||
#: apps/currencies/models.py:134
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:137
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:143
|
||||
#: apps/currencies/models.py:144
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:153
|
||||
#: apps/currencies/models.py:154
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:156
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:165
|
||||
#: apps/currencies/models.py:166
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:170
|
||||
#: apps/currencies/models.py:171
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:171
|
||||
#: apps/currencies/models.py:172
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:223
|
||||
#: apps/currencies/models.py:224
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:232
|
||||
#: apps/currencies/models.py:233
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:246
|
||||
#: apps/currencies/models.py:247
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:257
|
||||
#: apps/currencies/models.py:258
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -747,8 +747,8 @@ msgstr ""
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:180
|
||||
#: apps/rules/forms.py:196 apps/rules/models.py:43 apps/rules/models.py:295
|
||||
#: apps/transactions/forms.py:469 apps/transactions/forms.py:616
|
||||
#: apps/transactions/models.py:327 apps/transactions/models.py:650
|
||||
#: apps/transactions/models.py:851 apps/transactions/models.py:1085
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:667
|
||||
#: apps/transactions/models.py:868 apps/transactions/models.py:1106
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -811,7 +811,7 @@ msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:31 apps/export_app/forms.py:134
|
||||
#: apps/transactions/models.py:388 templates/includes/sidebar.html:81
|
||||
#: apps/transactions/models.py:403 templates/includes/sidebar.html:81
|
||||
#: templates/includes/sidebar.html:142
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:37
|
||||
@@ -820,7 +820,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:37 apps/export_app/forms.py:131
|
||||
#: apps/transactions/filters.py:68 templates/categories/fragments/list.html:9
|
||||
#: apps/transactions/filters.py:74 templates/categories/fragments/list.html:9
|
||||
#: templates/categories/pages/index.html:4 templates/includes/sidebar.html:144
|
||||
#: templates/insights/fragments/month_by_month.html:18
|
||||
#: templates/insights/fragments/month_by_month.html:21
|
||||
@@ -831,12 +831,12 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:49 apps/export_app/forms.py:133
|
||||
#: apps/rules/forms.py:185 apps/rules/forms.py:195 apps/rules/models.py:46
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:78
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:84
|
||||
#: apps/transactions/forms.py:77 apps/transactions/forms.py:323
|
||||
#: apps/transactions/forms.py:491 apps/transactions/forms.py:771
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:286
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:646
|
||||
#: apps/transactions/models.py:848 apps/transactions/models.py:1100
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:301
|
||||
#: apps/transactions/models.py:357 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:865 apps/transactions/models.py:1121
|
||||
#: templates/entities/fragments/list.html:9
|
||||
#: templates/entities/pages/index.html:4 templates/includes/sidebar.html:156
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
@@ -848,14 +848,14 @@ msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:55 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:888 templates/includes/sidebar.html:110
|
||||
#: apps/transactions/models.py:905 templates/includes/sidebar.html:110
|
||||
#: templates/recurring_transactions/fragments/list.html:9
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:61 apps/export_app/forms.py:135
|
||||
#: apps/transactions/models.py:664 templates/includes/sidebar.html:104
|
||||
#: apps/transactions/models.py:681 templates/includes/sidebar.html:104
|
||||
#: templates/installment_plans/fragments/list.html:9
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -1007,7 +1007,7 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:118 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:203
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:209
|
||||
#: templates/insights/fragments/category_overview/index.html:96
|
||||
#: templates/insights/fragments/category_overview/index.html:407
|
||||
#: templates/insights/fragments/category_overview/index.html:436
|
||||
@@ -1105,15 +1105,15 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:174 apps/rules/forms.py:188 apps/rules/models.py:36
|
||||
#: apps/rules/models.py:271 apps/transactions/forms.py:433
|
||||
#: apps/transactions/models.py:310 apps/transactions/models.py:606
|
||||
#: apps/transactions/models.py:829 apps/transactions/models.py:1070
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:623
|
||||
#: apps/transactions/models.py:846 apps/transactions/models.py:1091
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:175 apps/rules/forms.py:189 apps/rules/models.py:37
|
||||
#: apps/rules/models.py:275 apps/transactions/filters.py:22
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:1072 templates/cotton/transaction/item.html:20
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:327
|
||||
#: apps/transactions/models.py:1093 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:31
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:10
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:13
|
||||
@@ -1123,15 +1123,15 @@ msgstr ""
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:191 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:283 apps/transactions/forms.py:89
|
||||
#: apps/transactions/forms.py:453 apps/transactions/forms.py:603
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:624 apps/transactions/models.py:853
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:870
|
||||
msgid "Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:192 apps/rules/models.py:41
|
||||
#: apps/rules/models.py:287 apps/transactions/forms.py:460
|
||||
#: apps/transactions/models.py:320 apps/transactions/models.py:834
|
||||
#: apps/transactions/models.py:1078
|
||||
#: apps/transactions/models.py:335 apps/transactions/models.py:851
|
||||
#: apps/transactions/models.py:1099
|
||||
#: templates/insights/fragments/sankey.html:102
|
||||
#: templates/installment_plans/fragments/table.html:18
|
||||
#: templates/quick_transactions/fragments/list.html:15
|
||||
@@ -1142,27 +1142,27 @@ msgstr ""
|
||||
#: apps/rules/forms.py:179 apps/rules/forms.py:193 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:42 apps/rules/models.py:291
|
||||
#: apps/transactions/forms.py:464 apps/transactions/forms.py:607
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:608
|
||||
#: apps/transactions/models.py:837 apps/transactions/models.py:1083
|
||||
#: apps/transactions/models.py:340 apps/transactions/models.py:625
|
||||
#: apps/transactions/models.py:854 apps/transactions/models.py:1104
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:182 apps/rules/forms.py:198 apps/rules/models.py:47
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:364
|
||||
#: apps/transactions/models.py:1105
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:379
|
||||
#: apps/transactions/models.py:1126
|
||||
msgid "Internal Note"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:183 apps/rules/forms.py:199 apps/rules/models.py:48
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:366
|
||||
#: apps/transactions/models.py:1107
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:381
|
||||
#: apps/transactions/models.py:1128
|
||||
msgid "Internal ID"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:186 apps/rules/forms.py:200 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:319 apps/transactions/forms.py:620
|
||||
#: apps/transactions/models.py:224 apps/transactions/models.py:315
|
||||
#: apps/transactions/models.py:1073
|
||||
#: apps/transactions/models.py:239 apps/transactions/models.py:330
|
||||
#: apps/transactions/models.py:1094
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
@@ -1175,7 +1175,7 @@ msgid "Set Values"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:407 apps/rules/forms.py:442 apps/rules/forms.py:477
|
||||
#: apps/transactions/models.py:387 apps/transactions/models.py:544
|
||||
#: apps/transactions/models.py:402 apps/transactions/models.py:560
|
||||
msgid "Transaction"
|
||||
msgstr ""
|
||||
|
||||
@@ -1322,58 +1322,58 @@ msgstr ""
|
||||
msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:45
|
||||
#: apps/transactions/filters.py:51
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:51
|
||||
#: apps/transactions/filters.py:57
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:89
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Mute Status"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:94
|
||||
#: apps/transactions/filters.py:100
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:99 apps/transactions/filters.py:109
|
||||
#: apps/transactions/filters.py:105 apps/transactions/filters.py:115
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:104
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:114
|
||||
#: apps/transactions/filters.py:120
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:119
|
||||
#: apps/transactions/filters.py:125
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: apps/transactions/filters.py:208
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
#: templates/insights/fragments/category_overview/index.html:189
|
||||
#: templates/insights/fragments/month_by_month.html:121
|
||||
#: templates/insights/fragments/year_by_year.html:75
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:215
|
||||
#: apps/transactions/filters.py:221
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:216
|
||||
#: apps/transactions/filters.py:222
|
||||
#: templates/insights/fragments/category_overview/index.html:282
|
||||
#: templates/insights/fragments/month_by_month.html:123
|
||||
#: templates/insights/fragments/year_by_year.html:77
|
||||
@@ -1448,42 +1448,42 @@ msgstr ""
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:229
|
||||
#: apps/transactions/models.py:244
|
||||
msgid ""
|
||||
"Deactivated categories won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:237
|
||||
#: apps/transactions/models.py:252
|
||||
msgid "Transaction Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:238
|
||||
#: apps/transactions/models.py:253
|
||||
msgid "Transaction Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:253
|
||||
#: apps/transactions/models.py:268
|
||||
msgid ""
|
||||
"Deactivated tags won't be able to be selected when creating new transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:261 apps/transactions/models.py:262
|
||||
#: apps/transactions/models.py:276 apps/transactions/models.py:277
|
||||
msgid "Transaction Tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:277
|
||||
#: apps/transactions/models.py:292
|
||||
msgid ""
|
||||
"Deactivated entities won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:285
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/insights/fragments/month_by_month.html:88
|
||||
#: templates/insights/fragments/year_by_year.html:56
|
||||
msgid "Entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
|
||||
#: apps/transactions/models.py:312 apps/transactions/models.py:1071
|
||||
#: templates/calendar_view/fragments/list.html:42
|
||||
#: templates/calendar_view/fragments/list.html:44
|
||||
#: templates/calendar_view/fragments/list.html:52
|
||||
@@ -1495,7 +1495,7 @@ msgstr ""
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
|
||||
#: apps/transactions/models.py:313 apps/transactions/models.py:1072
|
||||
#: templates/calendar_view/fragments/list.html:46
|
||||
#: templates/calendar_view/fragments/list.html:48
|
||||
#: templates/calendar_view/fragments/list.html:56
|
||||
@@ -1506,157 +1506,157 @@ msgstr ""
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:353 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:368 apps/transactions/models.py:680
|
||||
msgid "Installment Plan"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:362 apps/transactions/models.py:887
|
||||
#: apps/transactions/models.py:377 apps/transactions/models.py:904
|
||||
msgid "Recurring Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:370
|
||||
#: apps/transactions/models.py:385
|
||||
msgid "Deleted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:375
|
||||
#: apps/transactions/models.py:390
|
||||
msgid "Deleted At"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:489 templates/tags/fragments/table.html:69
|
||||
#: apps/transactions/models.py:504 templates/tags/fragments/table.html:69
|
||||
msgid "No tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:491
|
||||
#: apps/transactions/models.py:506
|
||||
msgid "No category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:493
|
||||
#: apps/transactions/models.py:508
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:549
|
||||
#: apps/transactions/models.py:565
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:551
|
||||
#: apps/transactions/models.py:567
|
||||
msgid "Original Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:553
|
||||
#: apps/transactions/models.py:569
|
||||
msgid "Content Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:555
|
||||
#: apps/transactions/models.py:571
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:560
|
||||
#: apps/transactions/models.py:576
|
||||
msgid "Uploaded By"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:565
|
||||
#: apps/transactions/models.py:581
|
||||
msgid "Transaction Attachment"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:566
|
||||
#: apps/transactions/models.py:582
|
||||
msgid "Transaction Attachments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:595 templates/includes/sidebar.html:57
|
||||
#: apps/transactions/models.py:612 templates/includes/sidebar.html:57
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:596 apps/users/models.py:469
|
||||
#: apps/transactions/models.py:613 apps/users/models.py:469
|
||||
#: templates/includes/sidebar.html:51
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:597
|
||||
#: apps/transactions/models.py:614
|
||||
msgid "Weekly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:598
|
||||
#: apps/transactions/models.py:615
|
||||
msgid "Daily"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:611
|
||||
#: apps/transactions/models.py:628
|
||||
msgid "Number of Installments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:616
|
||||
#: apps/transactions/models.py:633
|
||||
msgid "Installment Start"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:617
|
||||
#: apps/transactions/models.py:634
|
||||
msgid "The installment number to start counting from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:622 apps/transactions/models.py:857
|
||||
#: apps/transactions/models.py:639 apps/transactions/models.py:874
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:626 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:875
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:631
|
||||
#: apps/transactions/models.py:648
|
||||
msgid "Recurrence"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:634
|
||||
#: apps/transactions/models.py:651
|
||||
msgid "Installment Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:653 apps/transactions/models.py:877
|
||||
#: apps/transactions/models.py:670 apps/transactions/models.py:894
|
||||
msgid "Add description to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:656 apps/transactions/models.py:880
|
||||
#: apps/transactions/models.py:673 apps/transactions/models.py:897
|
||||
msgid "Add notes to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:816
|
||||
#: apps/transactions/models.py:833
|
||||
msgid "day(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:817
|
||||
#: apps/transactions/models.py:834
|
||||
msgid "week(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:818
|
||||
#: apps/transactions/models.py:835
|
||||
msgid "month(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:819
|
||||
#: apps/transactions/models.py:836
|
||||
msgid "year(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:821
|
||||
#: apps/transactions/models.py:838
|
||||
#: templates/recurring_transactions/fragments/list.html:18
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:860
|
||||
#: apps/transactions/models.py:877
|
||||
msgid "Recurrence Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:863
|
||||
#: apps/transactions/models.py:880
|
||||
msgid "Recurrence Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:866
|
||||
#: apps/transactions/models.py:883
|
||||
msgid "Keep at most"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:870
|
||||
#: apps/transactions/models.py:887
|
||||
msgid "Last Generated Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:873
|
||||
#: apps/transactions/models.py:890
|
||||
msgid "Last Generated Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1117
|
||||
#: apps/transactions/models.py:1138
|
||||
#: apps/transactions/views/quick_transactions.py:178
|
||||
#: apps/transactions/views/quick_transactions.py:187
|
||||
#: apps/transactions/views/quick_transactions.py:189
|
||||
@@ -1665,7 +1665,7 @@ msgstr ""
|
||||
msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
|
||||
#: apps/transactions/models.py:1139 templates/includes/sidebar.html:98
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:15
|
||||
msgid "Quick Transactions"
|
||||
@@ -1889,9 +1889,9 @@ msgstr ""
|
||||
|
||||
#: apps/users/forms.py:68 apps/users/forms.py:81 apps/users/forms.py:103
|
||||
#: templates/monthly_overview/pages/overview.html:98
|
||||
#: templates/monthly_overview/pages/overview.html:245
|
||||
#: templates/monthly_overview/pages/overview.html:247
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/transactions/pages/transactions.html:195
|
||||
#: templates/transactions/pages/transactions.html:196
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
@@ -1911,7 +1911,7 @@ msgstr ""
|
||||
msgid "Default Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178
|
||||
#: apps/users/forms.py:177
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1919,79 +1919,79 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:187
|
||||
#: apps/users/forms.py:186
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:190
|
||||
#: apps/users/forms.py:189
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:193
|
||||
#: apps/users/forms.py:192
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:205 apps/users/forms.py:362
|
||||
#: apps/users/forms.py:204 apps/users/forms.py:361
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:208 apps/users/forms.py:365
|
||||
#: apps/users/forms.py:207 apps/users/forms.py:364
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:275
|
||||
#: apps/users/forms.py:274
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:283
|
||||
#: apps/users/forms.py:282
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:285
|
||||
#: apps/users/forms.py:284
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:287
|
||||
#: apps/users/forms.py:286
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:307
|
||||
#: apps/users/forms.py:306
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:320
|
||||
#: apps/users/forms.py:319
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:326
|
||||
#: apps/users/forms.py:325
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:419
|
||||
#: apps/users/forms.py:418
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:439
|
||||
#: apps/users/forms.py:438
|
||||
msgid "Token name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:441
|
||||
#: apps/users/forms.py:440
|
||||
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:447
|
||||
#: apps/users/forms.py:446
|
||||
msgid "Expires in days"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:448
|
||||
#: apps/users/forms.py:447
|
||||
msgid "Leave empty for a non-expiring token."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:463
|
||||
#: apps/users/forms.py:462
|
||||
msgid "Create token"
|
||||
msgstr ""
|
||||
|
||||
@@ -2212,6 +2212,7 @@ msgstr ""
|
||||
#: templates/rules/fragments/transaction_rule/view.html:92
|
||||
#: templates/rules/fragments/transaction_rule/view.html:133
|
||||
#: templates/tags/fragments/table.html:51
|
||||
#: templates/transactions/fragments/filter_presets.html:28
|
||||
#: templates/users/fragments/api_tokens.html:93
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
@@ -2316,8 +2317,8 @@ msgid "Current balance"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/account_reconciliation.html:36
|
||||
#: templates/net_worth/net_worth.html:146
|
||||
#: templates/net_worth/net_worth.html:396
|
||||
#: templates/net_worth/net_worth.html:147
|
||||
#: templates/net_worth/net_worth.html:407
|
||||
msgid "Difference"
|
||||
msgstr ""
|
||||
|
||||
@@ -2697,19 +2698,19 @@ msgstr ""
|
||||
msgid "Amount Bought"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:384
|
||||
#: templates/dca/fragments/strategy/details.html:409
|
||||
msgid "Entry Price vs Current Price"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:398
|
||||
#: templates/dca/fragments/strategy/details.html:423
|
||||
msgid "Days Between Investments"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:444
|
||||
#: templates/dca/fragments/strategy/details.html:469
|
||||
msgid "Investment Frequency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:446
|
||||
#: templates/dca/fragments/strategy/details.html:471
|
||||
msgid "The straighter the blue line, the more consistent your DCA strategy is."
|
||||
msgstr ""
|
||||
|
||||
@@ -2946,6 +2947,7 @@ msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/scripts/hyperscript/swal.html:13
|
||||
#: templates/transactions/fragments/filter_actions.html:4
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@@ -3360,16 +3362,16 @@ msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:99
|
||||
#: templates/monthly_overview/pages/overview.html:254
|
||||
#: templates/monthly_overview/pages/overview.html:256
|
||||
#: templates/transactions/pages/transactions.html:48
|
||||
#: templates/transactions/pages/transactions.html:204
|
||||
#: templates/transactions/pages/transactions.html:205
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:100
|
||||
#: templates/monthly_overview/pages/overview.html:263
|
||||
#: templates/monthly_overview/pages/overview.html:265
|
||||
#: templates/transactions/pages/transactions.html:49
|
||||
#: templates/transactions/pages/transactions.html:213
|
||||
#: templates/transactions/pages/transactions.html:214
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
@@ -3378,8 +3380,8 @@ msgstr ""
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:235
|
||||
#: templates/transactions/pages/transactions.html:185
|
||||
#: templates/monthly_overview/pages/overview.html:237
|
||||
#: templates/transactions/pages/transactions.html:186
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
@@ -3388,24 +3390,24 @@ msgstr ""
|
||||
msgid "By currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:84
|
||||
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
|
||||
msgid "Consolidated"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:134
|
||||
#: templates/net_worth/net_worth.html:135
|
||||
msgid "Evolution"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:162
|
||||
#: templates/net_worth/net_worth.html:163
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:4
|
||||
msgid "By account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:270
|
||||
#: templates/net_worth/net_worth.html:271
|
||||
msgid "Evolution by currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:334
|
||||
#: templates/net_worth/net_worth.html:345
|
||||
msgid "Evolution by account"
|
||||
msgstr ""
|
||||
|
||||
@@ -3636,6 +3638,40 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:2
|
||||
msgid "Save filter preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:3
|
||||
msgid "Preset name"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:40
|
||||
msgid "Save preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:6
|
||||
msgid "Filter presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:21
|
||||
#, python-format
|
||||
msgid "Delete %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:26
|
||||
msgid "Delete filter preset?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:27
|
||||
#, python-format
|
||||
msgid "Delete “%(name)s”?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:34
|
||||
msgid "No saved presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:58
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
+220
-176
File diff suppressed because it is too large
Load Diff
+220
-176
File diff suppressed because it is too large
Load Diff
+216
-176
File diff suppressed because it is too large
Load Diff
+212
-176
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
|
||||
"POT-Creation-Date: 2026-08-16 04:46+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
@@ -29,8 +29,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536
|
||||
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919
|
||||
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:246
|
||||
#: apps/users/forms.py:404
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:245
|
||||
#: apps/users/forms.py:403
|
||||
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
|
||||
#: templates/rules/fragments/transaction_rule/view.html:128
|
||||
msgid "Update"
|
||||
@@ -45,7 +45,7 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953
|
||||
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134
|
||||
#: apps/users/forms.py:252 apps/users/forms.py:410
|
||||
#: apps/users/forms.py:251 apps/users/forms.py:409
|
||||
#: templates/mini_tools/unit_price_calculator.html:168
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
@@ -64,9 +64,9 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:61 apps/transactions/forms.py:307
|
||||
#: apps/transactions/forms.py:475 apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:579 apps/transactions/forms.py:763
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:331
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:841
|
||||
#: apps/transactions/models.py:1089
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:346
|
||||
#: apps/transactions/models.py:658 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:1110
|
||||
#: templates/insights/fragments/category_overview/index.html:86
|
||||
#: templates/insights/fragments/category_overview/index.html:542
|
||||
#: templates/insights/fragments/month_by_month.html:84
|
||||
@@ -77,13 +77,13 @@ msgstr ""
|
||||
#: apps/accounts/forms.py:132 apps/dca/forms.py:95 apps/dca/forms.py:103
|
||||
#: apps/export_app/forms.py:43 apps/export_app/forms.py:132
|
||||
#: apps/rules/forms.py:184 apps/rules/forms.py:194 apps/rules/models.py:45
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:73
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:79
|
||||
#: apps/transactions/forms.py:69 apps/transactions/forms.py:315
|
||||
#: apps/transactions/forms.py:483 apps/transactions/forms.py:588
|
||||
#: apps/transactions/forms.py:596 apps/transactions/forms.py:756
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:337
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:845
|
||||
#: apps/transactions/models.py:1095 templates/includes/sidebar.html:150
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:352
|
||||
#: apps/transactions/models.py:660 apps/transactions/models.py:862
|
||||
#: apps/transactions/models.py:1116 templates/includes/sidebar.html:150
|
||||
#: templates/insights/fragments/category_overview/index.html:40
|
||||
#: templates/insights/fragments/month_by_month.html:29
|
||||
#: templates/insights/fragments/month_by_month.html:32
|
||||
@@ -95,8 +95,8 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
|
||||
#: apps/import_app/models.py:14 apps/rules/models.py:13
|
||||
#: apps/transactions/models.py:223 apps/transactions/models.py:248
|
||||
#: apps/transactions/models.py:272 apps/transactions/models.py:1057
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:263
|
||||
#: apps/transactions/models.py:287 apps/transactions/models.py:1078
|
||||
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
|
||||
#: templates/accounts/fragments/list.html:22
|
||||
#: templates/categories/fragments/table.html:17
|
||||
@@ -164,9 +164,9 @@ msgstr ""
|
||||
#: apps/rules/models.py:35 apps/rules/models.py:267
|
||||
#: apps/transactions/forms.py:81 apps/transactions/forms.py:327
|
||||
#: apps/transactions/forms.py:442 apps/transactions/forms.py:748
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:303
|
||||
#: apps/transactions/models.py:601 apps/transactions/models.py:823
|
||||
#: apps/transactions/models.py:1063
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:318
|
||||
#: apps/transactions/models.py:618 apps/transactions/models.py:840
|
||||
#: apps/transactions/models.py:1084
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
#: templates/quick_transactions/fragments/list.html:14
|
||||
#: templates/recurring_transactions/fragments/table.html:19
|
||||
@@ -175,7 +175,7 @@ msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:19
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:57
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:63
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:164
|
||||
@@ -343,7 +343,8 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:173
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:172
|
||||
#: templates/transactions/fragments/filter_actions.html:5
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -458,10 +459,9 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:180
|
||||
#: templates/monthly_overview/pages/overview.html:275
|
||||
#: templates/monthly_overview/pages/overview.html:287
|
||||
#: templates/transactions/pages/transactions.html:225
|
||||
#: templates/transactions/pages/transactions.html:237
|
||||
#: templates/monthly_overview/pages/overview.html:284
|
||||
#: templates/transactions/fragments/filter_actions.html:48
|
||||
#: templates/transactions/pages/transactions.html:233
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -480,7 +480,7 @@ msgstr ""
|
||||
#: apps/currencies/forms.py:66 apps/dca/models.py:158 apps/rules/forms.py:176
|
||||
#: apps/rules/forms.py:190 apps/rules/models.py:38 apps/rules/models.py:279
|
||||
#: apps/transactions/forms.py:85 apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:313
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:328
|
||||
#: templates/dca/fragments/strategy/details.html:49
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
#: templates/exchange_rates_services/fragments/table.html:11
|
||||
@@ -500,7 +500,7 @@ msgid "Decimal Places"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:25
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:64
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:70
|
||||
#: templates/currencies/fragments/list.html:9
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/sidebar.html:176
|
||||
#: templates/includes/sidebar.html:178
|
||||
@@ -545,29 +545,29 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112
|
||||
#: apps/currencies/models.py:113
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:114
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:116
|
||||
#: apps/currencies/models.py:117
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:227 apps/transactions/models.py:251
|
||||
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
|
||||
#: apps/currencies/models.py:119 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:242 apps/transactions/models.py:266
|
||||
#: apps/transactions/models.py:290 templates/categories/fragments/list.html:16
|
||||
#: templates/entities/fragments/list.html:16
|
||||
#: templates/installment_plans/fragments/list.html:16
|
||||
#: templates/recurring_transactions/fragments/list.html:16
|
||||
@@ -577,77 +577,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:129
|
||||
#: apps/currencies/models.py:130
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:133
|
||||
#: apps/currencies/models.py:134
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:137
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:143
|
||||
#: apps/currencies/models.py:144
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:153
|
||||
#: apps/currencies/models.py:154
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:156
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:165
|
||||
#: apps/currencies/models.py:166
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:170
|
||||
#: apps/currencies/models.py:171
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:171
|
||||
#: apps/currencies/models.py:172
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:223
|
||||
#: apps/currencies/models.py:224
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:232
|
||||
#: apps/currencies/models.py:233
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:246
|
||||
#: apps/currencies/models.py:247
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:257
|
||||
#: apps/currencies/models.py:258
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -746,8 +746,8 @@ msgstr ""
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:180
|
||||
#: apps/rules/forms.py:196 apps/rules/models.py:43 apps/rules/models.py:295
|
||||
#: apps/transactions/forms.py:469 apps/transactions/forms.py:616
|
||||
#: apps/transactions/models.py:327 apps/transactions/models.py:650
|
||||
#: apps/transactions/models.py:851 apps/transactions/models.py:1085
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:667
|
||||
#: apps/transactions/models.py:868 apps/transactions/models.py:1106
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -810,7 +810,7 @@ msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:31 apps/export_app/forms.py:134
|
||||
#: apps/transactions/models.py:388 templates/includes/sidebar.html:81
|
||||
#: apps/transactions/models.py:403 templates/includes/sidebar.html:81
|
||||
#: templates/includes/sidebar.html:142
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:37
|
||||
@@ -819,7 +819,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:37 apps/export_app/forms.py:131
|
||||
#: apps/transactions/filters.py:68 templates/categories/fragments/list.html:9
|
||||
#: apps/transactions/filters.py:74 templates/categories/fragments/list.html:9
|
||||
#: templates/categories/pages/index.html:4 templates/includes/sidebar.html:144
|
||||
#: templates/insights/fragments/month_by_month.html:18
|
||||
#: templates/insights/fragments/month_by_month.html:21
|
||||
@@ -830,12 +830,12 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:49 apps/export_app/forms.py:133
|
||||
#: apps/rules/forms.py:185 apps/rules/forms.py:195 apps/rules/models.py:46
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:78
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:84
|
||||
#: apps/transactions/forms.py:77 apps/transactions/forms.py:323
|
||||
#: apps/transactions/forms.py:491 apps/transactions/forms.py:771
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:286
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:646
|
||||
#: apps/transactions/models.py:848 apps/transactions/models.py:1100
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:301
|
||||
#: apps/transactions/models.py:357 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:865 apps/transactions/models.py:1121
|
||||
#: templates/entities/fragments/list.html:9
|
||||
#: templates/entities/pages/index.html:4 templates/includes/sidebar.html:156
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
@@ -847,14 +847,14 @@ msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:55 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:888 templates/includes/sidebar.html:110
|
||||
#: apps/transactions/models.py:905 templates/includes/sidebar.html:110
|
||||
#: templates/recurring_transactions/fragments/list.html:9
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:61 apps/export_app/forms.py:135
|
||||
#: apps/transactions/models.py:664 templates/includes/sidebar.html:104
|
||||
#: apps/transactions/models.py:681 templates/includes/sidebar.html:104
|
||||
#: templates/installment_plans/fragments/list.html:9
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -1006,7 +1006,7 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:118 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:203
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:209
|
||||
#: templates/insights/fragments/category_overview/index.html:96
|
||||
#: templates/insights/fragments/category_overview/index.html:407
|
||||
#: templates/insights/fragments/category_overview/index.html:436
|
||||
@@ -1104,15 +1104,15 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:174 apps/rules/forms.py:188 apps/rules/models.py:36
|
||||
#: apps/rules/models.py:271 apps/transactions/forms.py:433
|
||||
#: apps/transactions/models.py:310 apps/transactions/models.py:606
|
||||
#: apps/transactions/models.py:829 apps/transactions/models.py:1070
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:623
|
||||
#: apps/transactions/models.py:846 apps/transactions/models.py:1091
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:175 apps/rules/forms.py:189 apps/rules/models.py:37
|
||||
#: apps/rules/models.py:275 apps/transactions/filters.py:22
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:1072 templates/cotton/transaction/item.html:20
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:327
|
||||
#: apps/transactions/models.py:1093 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:31
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:10
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:13
|
||||
@@ -1122,15 +1122,15 @@ msgstr ""
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:191 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:283 apps/transactions/forms.py:89
|
||||
#: apps/transactions/forms.py:453 apps/transactions/forms.py:603
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:624 apps/transactions/models.py:853
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:870
|
||||
msgid "Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:192 apps/rules/models.py:41
|
||||
#: apps/rules/models.py:287 apps/transactions/forms.py:460
|
||||
#: apps/transactions/models.py:320 apps/transactions/models.py:834
|
||||
#: apps/transactions/models.py:1078
|
||||
#: apps/transactions/models.py:335 apps/transactions/models.py:851
|
||||
#: apps/transactions/models.py:1099
|
||||
#: templates/insights/fragments/sankey.html:102
|
||||
#: templates/installment_plans/fragments/table.html:18
|
||||
#: templates/quick_transactions/fragments/list.html:15
|
||||
@@ -1141,27 +1141,27 @@ msgstr ""
|
||||
#: apps/rules/forms.py:179 apps/rules/forms.py:193 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:42 apps/rules/models.py:291
|
||||
#: apps/transactions/forms.py:464 apps/transactions/forms.py:607
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:608
|
||||
#: apps/transactions/models.py:837 apps/transactions/models.py:1083
|
||||
#: apps/transactions/models.py:340 apps/transactions/models.py:625
|
||||
#: apps/transactions/models.py:854 apps/transactions/models.py:1104
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:182 apps/rules/forms.py:198 apps/rules/models.py:47
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:364
|
||||
#: apps/transactions/models.py:1105
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:379
|
||||
#: apps/transactions/models.py:1126
|
||||
msgid "Internal Note"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:183 apps/rules/forms.py:199 apps/rules/models.py:48
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:366
|
||||
#: apps/transactions/models.py:1107
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:381
|
||||
#: apps/transactions/models.py:1128
|
||||
msgid "Internal ID"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:186 apps/rules/forms.py:200 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:319 apps/transactions/forms.py:620
|
||||
#: apps/transactions/models.py:224 apps/transactions/models.py:315
|
||||
#: apps/transactions/models.py:1073
|
||||
#: apps/transactions/models.py:239 apps/transactions/models.py:330
|
||||
#: apps/transactions/models.py:1094
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
@@ -1174,7 +1174,7 @@ msgid "Set Values"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:407 apps/rules/forms.py:442 apps/rules/forms.py:477
|
||||
#: apps/transactions/models.py:387 apps/transactions/models.py:544
|
||||
#: apps/transactions/models.py:402 apps/transactions/models.py:560
|
||||
msgid "Transaction"
|
||||
msgstr ""
|
||||
|
||||
@@ -1321,58 +1321,58 @@ msgstr ""
|
||||
msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:45
|
||||
#: apps/transactions/filters.py:51
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:51
|
||||
#: apps/transactions/filters.py:57
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:89
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Mute Status"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:94
|
||||
#: apps/transactions/filters.py:100
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:99 apps/transactions/filters.py:109
|
||||
#: apps/transactions/filters.py:105 apps/transactions/filters.py:115
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:104
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:114
|
||||
#: apps/transactions/filters.py:120
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:119
|
||||
#: apps/transactions/filters.py:125
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: apps/transactions/filters.py:208
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
#: templates/insights/fragments/category_overview/index.html:189
|
||||
#: templates/insights/fragments/month_by_month.html:121
|
||||
#: templates/insights/fragments/year_by_year.html:75
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:215
|
||||
#: apps/transactions/filters.py:221
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:216
|
||||
#: apps/transactions/filters.py:222
|
||||
#: templates/insights/fragments/category_overview/index.html:282
|
||||
#: templates/insights/fragments/month_by_month.html:123
|
||||
#: templates/insights/fragments/year_by_year.html:77
|
||||
@@ -1447,42 +1447,42 @@ msgstr ""
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:229
|
||||
#: apps/transactions/models.py:244
|
||||
msgid ""
|
||||
"Deactivated categories won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:237
|
||||
#: apps/transactions/models.py:252
|
||||
msgid "Transaction Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:238
|
||||
#: apps/transactions/models.py:253
|
||||
msgid "Transaction Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:253
|
||||
#: apps/transactions/models.py:268
|
||||
msgid ""
|
||||
"Deactivated tags won't be able to be selected when creating new transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:261 apps/transactions/models.py:262
|
||||
#: apps/transactions/models.py:276 apps/transactions/models.py:277
|
||||
msgid "Transaction Tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:277
|
||||
#: apps/transactions/models.py:292
|
||||
msgid ""
|
||||
"Deactivated entities won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:285
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/insights/fragments/month_by_month.html:88
|
||||
#: templates/insights/fragments/year_by_year.html:56
|
||||
msgid "Entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
|
||||
#: apps/transactions/models.py:312 apps/transactions/models.py:1071
|
||||
#: templates/calendar_view/fragments/list.html:42
|
||||
#: templates/calendar_view/fragments/list.html:44
|
||||
#: templates/calendar_view/fragments/list.html:52
|
||||
@@ -1494,7 +1494,7 @@ msgstr ""
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
|
||||
#: apps/transactions/models.py:313 apps/transactions/models.py:1072
|
||||
#: templates/calendar_view/fragments/list.html:46
|
||||
#: templates/calendar_view/fragments/list.html:48
|
||||
#: templates/calendar_view/fragments/list.html:56
|
||||
@@ -1505,157 +1505,157 @@ msgstr ""
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:353 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:368 apps/transactions/models.py:680
|
||||
msgid "Installment Plan"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:362 apps/transactions/models.py:887
|
||||
#: apps/transactions/models.py:377 apps/transactions/models.py:904
|
||||
msgid "Recurring Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:370
|
||||
#: apps/transactions/models.py:385
|
||||
msgid "Deleted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:375
|
||||
#: apps/transactions/models.py:390
|
||||
msgid "Deleted At"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:489 templates/tags/fragments/table.html:69
|
||||
#: apps/transactions/models.py:504 templates/tags/fragments/table.html:69
|
||||
msgid "No tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:491
|
||||
#: apps/transactions/models.py:506
|
||||
msgid "No category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:493
|
||||
#: apps/transactions/models.py:508
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:549
|
||||
#: apps/transactions/models.py:565
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:551
|
||||
#: apps/transactions/models.py:567
|
||||
msgid "Original Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:553
|
||||
#: apps/transactions/models.py:569
|
||||
msgid "Content Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:555
|
||||
#: apps/transactions/models.py:571
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:560
|
||||
#: apps/transactions/models.py:576
|
||||
msgid "Uploaded By"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:565
|
||||
#: apps/transactions/models.py:581
|
||||
msgid "Transaction Attachment"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:566
|
||||
#: apps/transactions/models.py:582
|
||||
msgid "Transaction Attachments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:595 templates/includes/sidebar.html:57
|
||||
#: apps/transactions/models.py:612 templates/includes/sidebar.html:57
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:596 apps/users/models.py:469
|
||||
#: apps/transactions/models.py:613 apps/users/models.py:469
|
||||
#: templates/includes/sidebar.html:51
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:597
|
||||
#: apps/transactions/models.py:614
|
||||
msgid "Weekly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:598
|
||||
#: apps/transactions/models.py:615
|
||||
msgid "Daily"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:611
|
||||
#: apps/transactions/models.py:628
|
||||
msgid "Number of Installments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:616
|
||||
#: apps/transactions/models.py:633
|
||||
msgid "Installment Start"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:617
|
||||
#: apps/transactions/models.py:634
|
||||
msgid "The installment number to start counting from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:622 apps/transactions/models.py:857
|
||||
#: apps/transactions/models.py:639 apps/transactions/models.py:874
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:626 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:875
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:631
|
||||
#: apps/transactions/models.py:648
|
||||
msgid "Recurrence"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:634
|
||||
#: apps/transactions/models.py:651
|
||||
msgid "Installment Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:653 apps/transactions/models.py:877
|
||||
#: apps/transactions/models.py:670 apps/transactions/models.py:894
|
||||
msgid "Add description to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:656 apps/transactions/models.py:880
|
||||
#: apps/transactions/models.py:673 apps/transactions/models.py:897
|
||||
msgid "Add notes to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:816
|
||||
#: apps/transactions/models.py:833
|
||||
msgid "day(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:817
|
||||
#: apps/transactions/models.py:834
|
||||
msgid "week(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:818
|
||||
#: apps/transactions/models.py:835
|
||||
msgid "month(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:819
|
||||
#: apps/transactions/models.py:836
|
||||
msgid "year(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:821
|
||||
#: apps/transactions/models.py:838
|
||||
#: templates/recurring_transactions/fragments/list.html:18
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:860
|
||||
#: apps/transactions/models.py:877
|
||||
msgid "Recurrence Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:863
|
||||
#: apps/transactions/models.py:880
|
||||
msgid "Recurrence Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:866
|
||||
#: apps/transactions/models.py:883
|
||||
msgid "Keep at most"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:870
|
||||
#: apps/transactions/models.py:887
|
||||
msgid "Last Generated Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:873
|
||||
#: apps/transactions/models.py:890
|
||||
msgid "Last Generated Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1117
|
||||
#: apps/transactions/models.py:1138
|
||||
#: apps/transactions/views/quick_transactions.py:178
|
||||
#: apps/transactions/views/quick_transactions.py:187
|
||||
#: apps/transactions/views/quick_transactions.py:189
|
||||
@@ -1664,7 +1664,7 @@ msgstr ""
|
||||
msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
|
||||
#: apps/transactions/models.py:1139 templates/includes/sidebar.html:98
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:15
|
||||
msgid "Quick Transactions"
|
||||
@@ -1888,9 +1888,9 @@ msgstr ""
|
||||
|
||||
#: apps/users/forms.py:68 apps/users/forms.py:81 apps/users/forms.py:103
|
||||
#: templates/monthly_overview/pages/overview.html:98
|
||||
#: templates/monthly_overview/pages/overview.html:245
|
||||
#: templates/monthly_overview/pages/overview.html:247
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/transactions/pages/transactions.html:195
|
||||
#: templates/transactions/pages/transactions.html:196
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
@@ -1910,7 +1910,7 @@ msgstr ""
|
||||
msgid "Default Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178
|
||||
#: apps/users/forms.py:177
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1918,79 +1918,79 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:187
|
||||
#: apps/users/forms.py:186
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:190
|
||||
#: apps/users/forms.py:189
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:193
|
||||
#: apps/users/forms.py:192
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:205 apps/users/forms.py:362
|
||||
#: apps/users/forms.py:204 apps/users/forms.py:361
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:208 apps/users/forms.py:365
|
||||
#: apps/users/forms.py:207 apps/users/forms.py:364
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:275
|
||||
#: apps/users/forms.py:274
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:283
|
||||
#: apps/users/forms.py:282
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:285
|
||||
#: apps/users/forms.py:284
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:287
|
||||
#: apps/users/forms.py:286
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:307
|
||||
#: apps/users/forms.py:306
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:320
|
||||
#: apps/users/forms.py:319
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:326
|
||||
#: apps/users/forms.py:325
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:419
|
||||
#: apps/users/forms.py:418
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:439
|
||||
#: apps/users/forms.py:438
|
||||
msgid "Token name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:441
|
||||
#: apps/users/forms.py:440
|
||||
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:447
|
||||
#: apps/users/forms.py:446
|
||||
msgid "Expires in days"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:448
|
||||
#: apps/users/forms.py:447
|
||||
msgid "Leave empty for a non-expiring token."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:463
|
||||
#: apps/users/forms.py:462
|
||||
msgid "Create token"
|
||||
msgstr ""
|
||||
|
||||
@@ -2211,6 +2211,7 @@ msgstr ""
|
||||
#: templates/rules/fragments/transaction_rule/view.html:92
|
||||
#: templates/rules/fragments/transaction_rule/view.html:133
|
||||
#: templates/tags/fragments/table.html:51
|
||||
#: templates/transactions/fragments/filter_presets.html:28
|
||||
#: templates/users/fragments/api_tokens.html:93
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
@@ -2315,8 +2316,8 @@ msgid "Current balance"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/account_reconciliation.html:36
|
||||
#: templates/net_worth/net_worth.html:146
|
||||
#: templates/net_worth/net_worth.html:396
|
||||
#: templates/net_worth/net_worth.html:147
|
||||
#: templates/net_worth/net_worth.html:407
|
||||
msgid "Difference"
|
||||
msgstr ""
|
||||
|
||||
@@ -2696,19 +2697,19 @@ msgstr ""
|
||||
msgid "Amount Bought"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:384
|
||||
#: templates/dca/fragments/strategy/details.html:409
|
||||
msgid "Entry Price vs Current Price"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:398
|
||||
#: templates/dca/fragments/strategy/details.html:423
|
||||
msgid "Days Between Investments"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:444
|
||||
#: templates/dca/fragments/strategy/details.html:469
|
||||
msgid "Investment Frequency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:446
|
||||
#: templates/dca/fragments/strategy/details.html:471
|
||||
msgid "The straighter the blue line, the more consistent your DCA strategy is."
|
||||
msgstr ""
|
||||
|
||||
@@ -2944,6 +2945,7 @@ msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/scripts/hyperscript/swal.html:13
|
||||
#: templates/transactions/fragments/filter_actions.html:4
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@@ -3358,16 +3360,16 @@ msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:99
|
||||
#: templates/monthly_overview/pages/overview.html:254
|
||||
#: templates/monthly_overview/pages/overview.html:256
|
||||
#: templates/transactions/pages/transactions.html:48
|
||||
#: templates/transactions/pages/transactions.html:204
|
||||
#: templates/transactions/pages/transactions.html:205
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:100
|
||||
#: templates/monthly_overview/pages/overview.html:263
|
||||
#: templates/monthly_overview/pages/overview.html:265
|
||||
#: templates/transactions/pages/transactions.html:49
|
||||
#: templates/transactions/pages/transactions.html:213
|
||||
#: templates/transactions/pages/transactions.html:214
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
@@ -3376,8 +3378,8 @@ msgstr ""
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:235
|
||||
#: templates/transactions/pages/transactions.html:185
|
||||
#: templates/monthly_overview/pages/overview.html:237
|
||||
#: templates/transactions/pages/transactions.html:186
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
@@ -3386,24 +3388,24 @@ msgstr ""
|
||||
msgid "By currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:84
|
||||
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
|
||||
msgid "Consolidated"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:134
|
||||
#: templates/net_worth/net_worth.html:135
|
||||
msgid "Evolution"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:162
|
||||
#: templates/net_worth/net_worth.html:163
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:4
|
||||
msgid "By account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:270
|
||||
#: templates/net_worth/net_worth.html:271
|
||||
msgid "Evolution by currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:334
|
||||
#: templates/net_worth/net_worth.html:345
|
||||
msgid "Evolution by account"
|
||||
msgstr ""
|
||||
|
||||
@@ -3634,6 +3636,40 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:2
|
||||
msgid "Save filter preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:3
|
||||
msgid "Preset name"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:40
|
||||
msgid "Save preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:6
|
||||
msgid "Filter presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:21
|
||||
#, python-format
|
||||
msgid "Delete %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:26
|
||||
msgid "Delete filter preset?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:27
|
||||
#, python-format
|
||||
msgid "Delete “%(name)s”?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:34
|
||||
msgid "No saved presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:58
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
+220
-176
File diff suppressed because it is too large
Load Diff
+220
-176
File diff suppressed because it is too large
Load Diff
+216
-176
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+216
-176
File diff suppressed because it is too large
Load Diff
+212
-176
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
|
||||
"POT-Creation-Date: 2026-08-16 04:46+0000\n"
|
||||
"PO-Revision-Date: 2025-04-14 06:16+0000\n"
|
||||
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
|
||||
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536
|
||||
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919
|
||||
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:246
|
||||
#: apps/users/forms.py:404
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:245
|
||||
#: apps/users/forms.py:403
|
||||
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
|
||||
#: templates/rules/fragments/transaction_rule/view.html:128
|
||||
msgid "Update"
|
||||
@@ -47,7 +47,7 @@ msgstr "Uppdatera"
|
||||
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953
|
||||
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134
|
||||
#: apps/users/forms.py:252 apps/users/forms.py:410
|
||||
#: apps/users/forms.py:251 apps/users/forms.py:409
|
||||
#: templates/mini_tools/unit_price_calculator.html:168
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
@@ -66,9 +66,9 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:61 apps/transactions/forms.py:307
|
||||
#: apps/transactions/forms.py:475 apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:579 apps/transactions/forms.py:763
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:331
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:841
|
||||
#: apps/transactions/models.py:1089
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:346
|
||||
#: apps/transactions/models.py:658 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:1110
|
||||
#: templates/insights/fragments/category_overview/index.html:86
|
||||
#: templates/insights/fragments/category_overview/index.html:542
|
||||
#: templates/insights/fragments/month_by_month.html:84
|
||||
@@ -79,13 +79,13 @@ msgstr ""
|
||||
#: apps/accounts/forms.py:132 apps/dca/forms.py:95 apps/dca/forms.py:103
|
||||
#: apps/export_app/forms.py:43 apps/export_app/forms.py:132
|
||||
#: apps/rules/forms.py:184 apps/rules/forms.py:194 apps/rules/models.py:45
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:73
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:79
|
||||
#: apps/transactions/forms.py:69 apps/transactions/forms.py:315
|
||||
#: apps/transactions/forms.py:483 apps/transactions/forms.py:588
|
||||
#: apps/transactions/forms.py:596 apps/transactions/forms.py:756
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:337
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:845
|
||||
#: apps/transactions/models.py:1095 templates/includes/sidebar.html:150
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:352
|
||||
#: apps/transactions/models.py:660 apps/transactions/models.py:862
|
||||
#: apps/transactions/models.py:1116 templates/includes/sidebar.html:150
|
||||
#: templates/insights/fragments/category_overview/index.html:40
|
||||
#: templates/insights/fragments/month_by_month.html:29
|
||||
#: templates/insights/fragments/month_by_month.html:32
|
||||
@@ -97,8 +97,8 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
|
||||
#: apps/import_app/models.py:14 apps/rules/models.py:13
|
||||
#: apps/transactions/models.py:223 apps/transactions/models.py:248
|
||||
#: apps/transactions/models.py:272 apps/transactions/models.py:1057
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:263
|
||||
#: apps/transactions/models.py:287 apps/transactions/models.py:1078
|
||||
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
|
||||
#: templates/accounts/fragments/list.html:22
|
||||
#: templates/categories/fragments/table.html:17
|
||||
@@ -166,9 +166,9 @@ msgstr ""
|
||||
#: apps/rules/models.py:35 apps/rules/models.py:267
|
||||
#: apps/transactions/forms.py:81 apps/transactions/forms.py:327
|
||||
#: apps/transactions/forms.py:442 apps/transactions/forms.py:748
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:303
|
||||
#: apps/transactions/models.py:601 apps/transactions/models.py:823
|
||||
#: apps/transactions/models.py:1063
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:318
|
||||
#: apps/transactions/models.py:618 apps/transactions/models.py:840
|
||||
#: apps/transactions/models.py:1084
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
#: templates/quick_transactions/fragments/list.html:14
|
||||
#: templates/recurring_transactions/fragments/table.html:19
|
||||
@@ -177,7 +177,7 @@ msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:19
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:57
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:63
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:164
|
||||
@@ -345,7 +345,8 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:173
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:172
|
||||
#: templates/transactions/fragments/filter_actions.html:5
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -460,10 +461,9 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:180
|
||||
#: templates/monthly_overview/pages/overview.html:275
|
||||
#: templates/monthly_overview/pages/overview.html:287
|
||||
#: templates/transactions/pages/transactions.html:225
|
||||
#: templates/transactions/pages/transactions.html:237
|
||||
#: templates/monthly_overview/pages/overview.html:284
|
||||
#: templates/transactions/fragments/filter_actions.html:48
|
||||
#: templates/transactions/pages/transactions.html:233
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -482,7 +482,7 @@ msgstr ""
|
||||
#: apps/currencies/forms.py:66 apps/dca/models.py:158 apps/rules/forms.py:176
|
||||
#: apps/rules/forms.py:190 apps/rules/models.py:38 apps/rules/models.py:279
|
||||
#: apps/transactions/forms.py:85 apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:313
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:328
|
||||
#: templates/dca/fragments/strategy/details.html:49
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
#: templates/exchange_rates_services/fragments/table.html:11
|
||||
@@ -502,7 +502,7 @@ msgid "Decimal Places"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:25
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:64
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:70
|
||||
#: templates/currencies/fragments/list.html:9
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/sidebar.html:176
|
||||
#: templates/includes/sidebar.html:178
|
||||
@@ -547,29 +547,29 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112
|
||||
#: apps/currencies/models.py:113
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:114
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:116
|
||||
#: apps/currencies/models.py:117
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:227 apps/transactions/models.py:251
|
||||
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
|
||||
#: apps/currencies/models.py:119 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:242 apps/transactions/models.py:266
|
||||
#: apps/transactions/models.py:290 templates/categories/fragments/list.html:16
|
||||
#: templates/entities/fragments/list.html:16
|
||||
#: templates/installment_plans/fragments/list.html:16
|
||||
#: templates/recurring_transactions/fragments/list.html:16
|
||||
@@ -579,77 +579,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:129
|
||||
#: apps/currencies/models.py:130
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:133
|
||||
#: apps/currencies/models.py:134
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:137
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:143
|
||||
#: apps/currencies/models.py:144
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:153
|
||||
#: apps/currencies/models.py:154
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:156
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:165
|
||||
#: apps/currencies/models.py:166
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:170
|
||||
#: apps/currencies/models.py:171
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:171
|
||||
#: apps/currencies/models.py:172
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:223
|
||||
#: apps/currencies/models.py:224
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:232
|
||||
#: apps/currencies/models.py:233
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:246
|
||||
#: apps/currencies/models.py:247
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:257
|
||||
#: apps/currencies/models.py:258
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -748,8 +748,8 @@ msgstr ""
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:180
|
||||
#: apps/rules/forms.py:196 apps/rules/models.py:43 apps/rules/models.py:295
|
||||
#: apps/transactions/forms.py:469 apps/transactions/forms.py:616
|
||||
#: apps/transactions/models.py:327 apps/transactions/models.py:650
|
||||
#: apps/transactions/models.py:851 apps/transactions/models.py:1085
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:667
|
||||
#: apps/transactions/models.py:868 apps/transactions/models.py:1106
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -812,7 +812,7 @@ msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:31 apps/export_app/forms.py:134
|
||||
#: apps/transactions/models.py:388 templates/includes/sidebar.html:81
|
||||
#: apps/transactions/models.py:403 templates/includes/sidebar.html:81
|
||||
#: templates/includes/sidebar.html:142
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:37
|
||||
@@ -821,7 +821,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:37 apps/export_app/forms.py:131
|
||||
#: apps/transactions/filters.py:68 templates/categories/fragments/list.html:9
|
||||
#: apps/transactions/filters.py:74 templates/categories/fragments/list.html:9
|
||||
#: templates/categories/pages/index.html:4 templates/includes/sidebar.html:144
|
||||
#: templates/insights/fragments/month_by_month.html:18
|
||||
#: templates/insights/fragments/month_by_month.html:21
|
||||
@@ -832,12 +832,12 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:49 apps/export_app/forms.py:133
|
||||
#: apps/rules/forms.py:185 apps/rules/forms.py:195 apps/rules/models.py:46
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:78
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:84
|
||||
#: apps/transactions/forms.py:77 apps/transactions/forms.py:323
|
||||
#: apps/transactions/forms.py:491 apps/transactions/forms.py:771
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:286
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:646
|
||||
#: apps/transactions/models.py:848 apps/transactions/models.py:1100
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:301
|
||||
#: apps/transactions/models.py:357 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:865 apps/transactions/models.py:1121
|
||||
#: templates/entities/fragments/list.html:9
|
||||
#: templates/entities/pages/index.html:4 templates/includes/sidebar.html:156
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
@@ -849,14 +849,14 @@ msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:55 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:888 templates/includes/sidebar.html:110
|
||||
#: apps/transactions/models.py:905 templates/includes/sidebar.html:110
|
||||
#: templates/recurring_transactions/fragments/list.html:9
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:61 apps/export_app/forms.py:135
|
||||
#: apps/transactions/models.py:664 templates/includes/sidebar.html:104
|
||||
#: apps/transactions/models.py:681 templates/includes/sidebar.html:104
|
||||
#: templates/installment_plans/fragments/list.html:9
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -1008,7 +1008,7 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:118 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:203
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:209
|
||||
#: templates/insights/fragments/category_overview/index.html:96
|
||||
#: templates/insights/fragments/category_overview/index.html:407
|
||||
#: templates/insights/fragments/category_overview/index.html:436
|
||||
@@ -1106,15 +1106,15 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:174 apps/rules/forms.py:188 apps/rules/models.py:36
|
||||
#: apps/rules/models.py:271 apps/transactions/forms.py:433
|
||||
#: apps/transactions/models.py:310 apps/transactions/models.py:606
|
||||
#: apps/transactions/models.py:829 apps/transactions/models.py:1070
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:623
|
||||
#: apps/transactions/models.py:846 apps/transactions/models.py:1091
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:175 apps/rules/forms.py:189 apps/rules/models.py:37
|
||||
#: apps/rules/models.py:275 apps/transactions/filters.py:22
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:1072 templates/cotton/transaction/item.html:20
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:327
|
||||
#: apps/transactions/models.py:1093 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:31
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:10
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:13
|
||||
@@ -1124,15 +1124,15 @@ msgstr ""
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:191 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:283 apps/transactions/forms.py:89
|
||||
#: apps/transactions/forms.py:453 apps/transactions/forms.py:603
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:624 apps/transactions/models.py:853
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:870
|
||||
msgid "Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:192 apps/rules/models.py:41
|
||||
#: apps/rules/models.py:287 apps/transactions/forms.py:460
|
||||
#: apps/transactions/models.py:320 apps/transactions/models.py:834
|
||||
#: apps/transactions/models.py:1078
|
||||
#: apps/transactions/models.py:335 apps/transactions/models.py:851
|
||||
#: apps/transactions/models.py:1099
|
||||
#: templates/insights/fragments/sankey.html:102
|
||||
#: templates/installment_plans/fragments/table.html:18
|
||||
#: templates/quick_transactions/fragments/list.html:15
|
||||
@@ -1143,27 +1143,27 @@ msgstr ""
|
||||
#: apps/rules/forms.py:179 apps/rules/forms.py:193 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:42 apps/rules/models.py:291
|
||||
#: apps/transactions/forms.py:464 apps/transactions/forms.py:607
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:608
|
||||
#: apps/transactions/models.py:837 apps/transactions/models.py:1083
|
||||
#: apps/transactions/models.py:340 apps/transactions/models.py:625
|
||||
#: apps/transactions/models.py:854 apps/transactions/models.py:1104
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:182 apps/rules/forms.py:198 apps/rules/models.py:47
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:364
|
||||
#: apps/transactions/models.py:1105
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:379
|
||||
#: apps/transactions/models.py:1126
|
||||
msgid "Internal Note"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:183 apps/rules/forms.py:199 apps/rules/models.py:48
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:366
|
||||
#: apps/transactions/models.py:1107
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:381
|
||||
#: apps/transactions/models.py:1128
|
||||
msgid "Internal ID"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:186 apps/rules/forms.py:200 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:319 apps/transactions/forms.py:620
|
||||
#: apps/transactions/models.py:224 apps/transactions/models.py:315
|
||||
#: apps/transactions/models.py:1073
|
||||
#: apps/transactions/models.py:239 apps/transactions/models.py:330
|
||||
#: apps/transactions/models.py:1094
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
@@ -1176,7 +1176,7 @@ msgid "Set Values"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:407 apps/rules/forms.py:442 apps/rules/forms.py:477
|
||||
#: apps/transactions/models.py:387 apps/transactions/models.py:544
|
||||
#: apps/transactions/models.py:402 apps/transactions/models.py:560
|
||||
msgid "Transaction"
|
||||
msgstr ""
|
||||
|
||||
@@ -1323,58 +1323,58 @@ msgstr ""
|
||||
msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:45
|
||||
#: apps/transactions/filters.py:51
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:51
|
||||
#: apps/transactions/filters.py:57
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:89
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Mute Status"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:94
|
||||
#: apps/transactions/filters.py:100
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:99 apps/transactions/filters.py:109
|
||||
#: apps/transactions/filters.py:105 apps/transactions/filters.py:115
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:104
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:114
|
||||
#: apps/transactions/filters.py:120
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:119
|
||||
#: apps/transactions/filters.py:125
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: apps/transactions/filters.py:208
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
#: templates/insights/fragments/category_overview/index.html:189
|
||||
#: templates/insights/fragments/month_by_month.html:121
|
||||
#: templates/insights/fragments/year_by_year.html:75
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:215
|
||||
#: apps/transactions/filters.py:221
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:216
|
||||
#: apps/transactions/filters.py:222
|
||||
#: templates/insights/fragments/category_overview/index.html:282
|
||||
#: templates/insights/fragments/month_by_month.html:123
|
||||
#: templates/insights/fragments/year_by_year.html:77
|
||||
@@ -1449,42 +1449,42 @@ msgstr ""
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:229
|
||||
#: apps/transactions/models.py:244
|
||||
msgid ""
|
||||
"Deactivated categories won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:237
|
||||
#: apps/transactions/models.py:252
|
||||
msgid "Transaction Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:238
|
||||
#: apps/transactions/models.py:253
|
||||
msgid "Transaction Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:253
|
||||
#: apps/transactions/models.py:268
|
||||
msgid ""
|
||||
"Deactivated tags won't be able to be selected when creating new transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:261 apps/transactions/models.py:262
|
||||
#: apps/transactions/models.py:276 apps/transactions/models.py:277
|
||||
msgid "Transaction Tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:277
|
||||
#: apps/transactions/models.py:292
|
||||
msgid ""
|
||||
"Deactivated entities won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:285
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/insights/fragments/month_by_month.html:88
|
||||
#: templates/insights/fragments/year_by_year.html:56
|
||||
msgid "Entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
|
||||
#: apps/transactions/models.py:312 apps/transactions/models.py:1071
|
||||
#: templates/calendar_view/fragments/list.html:42
|
||||
#: templates/calendar_view/fragments/list.html:44
|
||||
#: templates/calendar_view/fragments/list.html:52
|
||||
@@ -1496,7 +1496,7 @@ msgstr ""
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
|
||||
#: apps/transactions/models.py:313 apps/transactions/models.py:1072
|
||||
#: templates/calendar_view/fragments/list.html:46
|
||||
#: templates/calendar_view/fragments/list.html:48
|
||||
#: templates/calendar_view/fragments/list.html:56
|
||||
@@ -1507,157 +1507,157 @@ msgstr ""
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:353 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:368 apps/transactions/models.py:680
|
||||
msgid "Installment Plan"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:362 apps/transactions/models.py:887
|
||||
#: apps/transactions/models.py:377 apps/transactions/models.py:904
|
||||
msgid "Recurring Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:370
|
||||
#: apps/transactions/models.py:385
|
||||
msgid "Deleted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:375
|
||||
#: apps/transactions/models.py:390
|
||||
msgid "Deleted At"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:489 templates/tags/fragments/table.html:69
|
||||
#: apps/transactions/models.py:504 templates/tags/fragments/table.html:69
|
||||
msgid "No tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:491
|
||||
#: apps/transactions/models.py:506
|
||||
msgid "No category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:493
|
||||
#: apps/transactions/models.py:508
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:549
|
||||
#: apps/transactions/models.py:565
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:551
|
||||
#: apps/transactions/models.py:567
|
||||
msgid "Original Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:553
|
||||
#: apps/transactions/models.py:569
|
||||
msgid "Content Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:555
|
||||
#: apps/transactions/models.py:571
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:560
|
||||
#: apps/transactions/models.py:576
|
||||
msgid "Uploaded By"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:565
|
||||
#: apps/transactions/models.py:581
|
||||
msgid "Transaction Attachment"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:566
|
||||
#: apps/transactions/models.py:582
|
||||
msgid "Transaction Attachments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:595 templates/includes/sidebar.html:57
|
||||
#: apps/transactions/models.py:612 templates/includes/sidebar.html:57
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:596 apps/users/models.py:469
|
||||
#: apps/transactions/models.py:613 apps/users/models.py:469
|
||||
#: templates/includes/sidebar.html:51
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:597
|
||||
#: apps/transactions/models.py:614
|
||||
msgid "Weekly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:598
|
||||
#: apps/transactions/models.py:615
|
||||
msgid "Daily"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:611
|
||||
#: apps/transactions/models.py:628
|
||||
msgid "Number of Installments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:616
|
||||
#: apps/transactions/models.py:633
|
||||
msgid "Installment Start"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:617
|
||||
#: apps/transactions/models.py:634
|
||||
msgid "The installment number to start counting from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:622 apps/transactions/models.py:857
|
||||
#: apps/transactions/models.py:639 apps/transactions/models.py:874
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:626 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:875
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:631
|
||||
#: apps/transactions/models.py:648
|
||||
msgid "Recurrence"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:634
|
||||
#: apps/transactions/models.py:651
|
||||
msgid "Installment Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:653 apps/transactions/models.py:877
|
||||
#: apps/transactions/models.py:670 apps/transactions/models.py:894
|
||||
msgid "Add description to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:656 apps/transactions/models.py:880
|
||||
#: apps/transactions/models.py:673 apps/transactions/models.py:897
|
||||
msgid "Add notes to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:816
|
||||
#: apps/transactions/models.py:833
|
||||
msgid "day(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:817
|
||||
#: apps/transactions/models.py:834
|
||||
msgid "week(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:818
|
||||
#: apps/transactions/models.py:835
|
||||
msgid "month(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:819
|
||||
#: apps/transactions/models.py:836
|
||||
msgid "year(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:821
|
||||
#: apps/transactions/models.py:838
|
||||
#: templates/recurring_transactions/fragments/list.html:18
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:860
|
||||
#: apps/transactions/models.py:877
|
||||
msgid "Recurrence Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:863
|
||||
#: apps/transactions/models.py:880
|
||||
msgid "Recurrence Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:866
|
||||
#: apps/transactions/models.py:883
|
||||
msgid "Keep at most"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:870
|
||||
#: apps/transactions/models.py:887
|
||||
msgid "Last Generated Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:873
|
||||
#: apps/transactions/models.py:890
|
||||
msgid "Last Generated Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1117
|
||||
#: apps/transactions/models.py:1138
|
||||
#: apps/transactions/views/quick_transactions.py:178
|
||||
#: apps/transactions/views/quick_transactions.py:187
|
||||
#: apps/transactions/views/quick_transactions.py:189
|
||||
@@ -1666,7 +1666,7 @@ msgstr ""
|
||||
msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
|
||||
#: apps/transactions/models.py:1139 templates/includes/sidebar.html:98
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:15
|
||||
msgid "Quick Transactions"
|
||||
@@ -1890,9 +1890,9 @@ msgstr ""
|
||||
|
||||
#: apps/users/forms.py:68 apps/users/forms.py:81 apps/users/forms.py:103
|
||||
#: templates/monthly_overview/pages/overview.html:98
|
||||
#: templates/monthly_overview/pages/overview.html:245
|
||||
#: templates/monthly_overview/pages/overview.html:247
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/transactions/pages/transactions.html:195
|
||||
#: templates/transactions/pages/transactions.html:196
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
@@ -1912,7 +1912,7 @@ msgstr ""
|
||||
msgid "Default Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:178
|
||||
#: apps/users/forms.py:177
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1920,79 +1920,79 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:187
|
||||
#: apps/users/forms.py:186
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:190
|
||||
#: apps/users/forms.py:189
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:193
|
||||
#: apps/users/forms.py:192
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:205 apps/users/forms.py:362
|
||||
#: apps/users/forms.py:204 apps/users/forms.py:361
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:208 apps/users/forms.py:365
|
||||
#: apps/users/forms.py:207 apps/users/forms.py:364
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:275
|
||||
#: apps/users/forms.py:274
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:283
|
||||
#: apps/users/forms.py:282
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:285
|
||||
#: apps/users/forms.py:284
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:287
|
||||
#: apps/users/forms.py:286
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:307
|
||||
#: apps/users/forms.py:306
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:320
|
||||
#: apps/users/forms.py:319
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:326
|
||||
#: apps/users/forms.py:325
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:419
|
||||
#: apps/users/forms.py:418
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:439
|
||||
#: apps/users/forms.py:438
|
||||
msgid "Token name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:441
|
||||
#: apps/users/forms.py:440
|
||||
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:447
|
||||
#: apps/users/forms.py:446
|
||||
msgid "Expires in days"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:448
|
||||
#: apps/users/forms.py:447
|
||||
msgid "Leave empty for a non-expiring token."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:463
|
||||
#: apps/users/forms.py:462
|
||||
msgid "Create token"
|
||||
msgstr ""
|
||||
|
||||
@@ -2215,6 +2215,7 @@ msgstr ""
|
||||
#: templates/rules/fragments/transaction_rule/view.html:92
|
||||
#: templates/rules/fragments/transaction_rule/view.html:133
|
||||
#: templates/tags/fragments/table.html:51
|
||||
#: templates/transactions/fragments/filter_presets.html:28
|
||||
#: templates/users/fragments/api_tokens.html:93
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
@@ -2319,8 +2320,8 @@ msgid "Current balance"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/account_reconciliation.html:36
|
||||
#: templates/net_worth/net_worth.html:146
|
||||
#: templates/net_worth/net_worth.html:396
|
||||
#: templates/net_worth/net_worth.html:147
|
||||
#: templates/net_worth/net_worth.html:407
|
||||
msgid "Difference"
|
||||
msgstr ""
|
||||
|
||||
@@ -2700,19 +2701,19 @@ msgstr ""
|
||||
msgid "Amount Bought"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:384
|
||||
#: templates/dca/fragments/strategy/details.html:409
|
||||
msgid "Entry Price vs Current Price"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:398
|
||||
#: templates/dca/fragments/strategy/details.html:423
|
||||
msgid "Days Between Investments"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:444
|
||||
#: templates/dca/fragments/strategy/details.html:469
|
||||
msgid "Investment Frequency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:446
|
||||
#: templates/dca/fragments/strategy/details.html:471
|
||||
msgid "The straighter the blue line, the more consistent your DCA strategy is."
|
||||
msgstr ""
|
||||
|
||||
@@ -2949,6 +2950,7 @@ msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/scripts/hyperscript/swal.html:13
|
||||
#: templates/transactions/fragments/filter_actions.html:4
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@@ -3363,16 +3365,16 @@ msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:99
|
||||
#: templates/monthly_overview/pages/overview.html:254
|
||||
#: templates/monthly_overview/pages/overview.html:256
|
||||
#: templates/transactions/pages/transactions.html:48
|
||||
#: templates/transactions/pages/transactions.html:204
|
||||
#: templates/transactions/pages/transactions.html:205
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:100
|
||||
#: templates/monthly_overview/pages/overview.html:263
|
||||
#: templates/monthly_overview/pages/overview.html:265
|
||||
#: templates/transactions/pages/transactions.html:49
|
||||
#: templates/transactions/pages/transactions.html:213
|
||||
#: templates/transactions/pages/transactions.html:214
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
@@ -3381,8 +3383,8 @@ msgstr ""
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:235
|
||||
#: templates/transactions/pages/transactions.html:185
|
||||
#: templates/monthly_overview/pages/overview.html:237
|
||||
#: templates/transactions/pages/transactions.html:186
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
@@ -3391,24 +3393,24 @@ msgstr ""
|
||||
msgid "By currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:84
|
||||
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
|
||||
msgid "Consolidated"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:134
|
||||
#: templates/net_worth/net_worth.html:135
|
||||
msgid "Evolution"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:162
|
||||
#: templates/net_worth/net_worth.html:163
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:4
|
||||
msgid "By account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:270
|
||||
#: templates/net_worth/net_worth.html:271
|
||||
msgid "Evolution by currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:334
|
||||
#: templates/net_worth/net_worth.html:345
|
||||
msgid "Evolution by account"
|
||||
msgstr ""
|
||||
|
||||
@@ -3639,6 +3641,40 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:2
|
||||
msgid "Save filter preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:3
|
||||
msgid "Preset name"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:40
|
||||
msgid "Save preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:6
|
||||
msgid "Filter presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:21
|
||||
#, python-format
|
||||
msgid "Delete %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:26
|
||||
msgid "Delete filter preset?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:27
|
||||
#, python-format
|
||||
msgid "Delete “%(name)s”?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:34
|
||||
msgid "No saved presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:58
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
+212
-176
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
|
||||
"POT-Creation-Date: 2026-08-16 04:46+0000\n"
|
||||
"PO-Revision-Date: 2026-01-18 19:24+0000\n"
|
||||
"Last-Translator: Ebrahim Tayabali <ebrahimhakimuddin@gmail.com>\n"
|
||||
"Language-Team: Swahili <https://translations.herculino.com/projects/wygiwyh/"
|
||||
@@ -31,8 +31,8 @@ msgstr "Jina La Kundi"
|
||||
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536
|
||||
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919
|
||||
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:246
|
||||
#: apps/users/forms.py:404
|
||||
#: apps/transactions/forms.py:1128 apps/users/forms.py:245
|
||||
#: apps/users/forms.py:403
|
||||
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
|
||||
#: templates/rules/fragments/transaction_rule/view.html:128
|
||||
msgid "Update"
|
||||
@@ -47,7 +47,7 @@ msgstr ""
|
||||
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886
|
||||
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953
|
||||
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134
|
||||
#: apps/users/forms.py:252 apps/users/forms.py:410
|
||||
#: apps/users/forms.py:251 apps/users/forms.py:409
|
||||
#: templates/mini_tools/unit_price_calculator.html:168
|
||||
#, fuzzy
|
||||
msgid "Add"
|
||||
@@ -67,9 +67,9 @@ msgstr "Salio Mpya"
|
||||
#: apps/transactions/forms.py:61 apps/transactions/forms.py:307
|
||||
#: apps/transactions/forms.py:475 apps/transactions/forms.py:572
|
||||
#: apps/transactions/forms.py:579 apps/transactions/forms.py:763
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:331
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:841
|
||||
#: apps/transactions/models.py:1089
|
||||
#: apps/transactions/forms.py:1007 apps/transactions/models.py:346
|
||||
#: apps/transactions/models.py:658 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:1110
|
||||
#: templates/insights/fragments/category_overview/index.html:86
|
||||
#: templates/insights/fragments/category_overview/index.html:542
|
||||
#: templates/insights/fragments/month_by_month.html:84
|
||||
@@ -80,13 +80,13 @@ msgstr ""
|
||||
#: apps/accounts/forms.py:132 apps/dca/forms.py:95 apps/dca/forms.py:103
|
||||
#: apps/export_app/forms.py:43 apps/export_app/forms.py:132
|
||||
#: apps/rules/forms.py:184 apps/rules/forms.py:194 apps/rules/models.py:45
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:73
|
||||
#: apps/rules/models.py:315 apps/transactions/filters.py:79
|
||||
#: apps/transactions/forms.py:69 apps/transactions/forms.py:315
|
||||
#: apps/transactions/forms.py:483 apps/transactions/forms.py:588
|
||||
#: apps/transactions/forms.py:596 apps/transactions/forms.py:756
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:337
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:845
|
||||
#: apps/transactions/models.py:1095 templates/includes/sidebar.html:150
|
||||
#: apps/transactions/forms.py:1000 apps/transactions/models.py:352
|
||||
#: apps/transactions/models.py:660 apps/transactions/models.py:862
|
||||
#: apps/transactions/models.py:1116 templates/includes/sidebar.html:150
|
||||
#: templates/insights/fragments/category_overview/index.html:40
|
||||
#: templates/insights/fragments/month_by_month.html:29
|
||||
#: templates/insights/fragments/month_by_month.html:32
|
||||
@@ -98,8 +98,8 @@ msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:12 apps/accounts/models.py:29 apps/dca/models.py:13
|
||||
#: apps/import_app/models.py:14 apps/rules/models.py:13
|
||||
#: apps/transactions/models.py:223 apps/transactions/models.py:248
|
||||
#: apps/transactions/models.py:272 apps/transactions/models.py:1057
|
||||
#: apps/transactions/models.py:238 apps/transactions/models.py:263
|
||||
#: apps/transactions/models.py:287 apps/transactions/models.py:1078
|
||||
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
|
||||
#: templates/accounts/fragments/list.html:22
|
||||
#: templates/categories/fragments/table.html:17
|
||||
@@ -170,9 +170,9 @@ msgstr ""
|
||||
#: apps/rules/models.py:35 apps/rules/models.py:267
|
||||
#: apps/transactions/forms.py:81 apps/transactions/forms.py:327
|
||||
#: apps/transactions/forms.py:442 apps/transactions/forms.py:748
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:303
|
||||
#: apps/transactions/models.py:601 apps/transactions/models.py:823
|
||||
#: apps/transactions/models.py:1063
|
||||
#: apps/transactions/forms.py:992 apps/transactions/models.py:318
|
||||
#: apps/transactions/models.py:618 apps/transactions/models.py:840
|
||||
#: apps/transactions/models.py:1084
|
||||
#: templates/installment_plans/fragments/table.html:17
|
||||
#: templates/quick_transactions/fragments/list.html:14
|
||||
#: templates/recurring_transactions/fragments/table.html:19
|
||||
@@ -181,7 +181,7 @@ msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: apps/accounts/models.py:76 apps/export_app/forms.py:19
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:57
|
||||
#: apps/export_app/forms.py:129 apps/transactions/filters.py:63
|
||||
#: templates/accounts/fragments/list.html:9
|
||||
#: templates/accounts/pages/index.html:4 templates/includes/sidebar.html:162
|
||||
#: templates/includes/sidebar.html:164
|
||||
@@ -349,7 +349,8 @@ msgid ""
|
||||
"owner.<br/>Public: Shown for all users. Only editable by the owner."
|
||||
msgstr ""
|
||||
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:173
|
||||
#: apps/common/forms.py:76 apps/users/forms.py:172
|
||||
#: templates/transactions/fragments/filter_actions.html:5
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
@@ -464,10 +465,9 @@ msgstr ""
|
||||
|
||||
#: apps/common/widgets/tom_select.py:15
|
||||
#: templates/mini_tools/unit_price_calculator.html:180
|
||||
#: templates/monthly_overview/pages/overview.html:275
|
||||
#: templates/monthly_overview/pages/overview.html:287
|
||||
#: templates/transactions/pages/transactions.html:225
|
||||
#: templates/transactions/pages/transactions.html:237
|
||||
#: templates/monthly_overview/pages/overview.html:284
|
||||
#: templates/transactions/fragments/filter_actions.html:48
|
||||
#: templates/transactions/pages/transactions.html:233
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
@@ -486,7 +486,7 @@ msgstr ""
|
||||
#: apps/currencies/forms.py:66 apps/dca/models.py:158 apps/rules/forms.py:176
|
||||
#: apps/rules/forms.py:190 apps/rules/models.py:38 apps/rules/models.py:279
|
||||
#: apps/transactions/forms.py:85 apps/transactions/forms.py:447
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:313
|
||||
#: apps/transactions/forms.py:600 apps/transactions/models.py:328
|
||||
#: templates/dca/fragments/strategy/details.html:49
|
||||
#: templates/exchange_rates/fragments/table.html:10
|
||||
#: templates/exchange_rates_services/fragments/table.html:11
|
||||
@@ -506,7 +506,7 @@ msgid "Decimal Places"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:45 apps/export_app/forms.py:25
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:64
|
||||
#: apps/export_app/forms.py:130 apps/transactions/filters.py:70
|
||||
#: templates/currencies/fragments/list.html:9
|
||||
#: templates/currencies/pages/index.html:4 templates/includes/sidebar.html:176
|
||||
#: templates/includes/sidebar.html:178
|
||||
@@ -551,29 +551,29 @@ msgstr ""
|
||||
msgid "From and To currencies cannot be the same."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:110
|
||||
#: apps/currencies/models.py:111
|
||||
msgid "On"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:111
|
||||
#: apps/currencies/models.py:112
|
||||
msgid "Every X hours"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:112
|
||||
#: apps/currencies/models.py:113
|
||||
msgid "Not on"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:114
|
||||
#: apps/currencies/models.py:115
|
||||
msgid "Service Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:116
|
||||
#: apps/currencies/models.py:117
|
||||
msgid "Service Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:227 apps/transactions/models.py:251
|
||||
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
|
||||
#: apps/currencies/models.py:119 apps/transactions/filters.py:27
|
||||
#: apps/transactions/models.py:242 apps/transactions/models.py:266
|
||||
#: apps/transactions/models.py:290 templates/categories/fragments/list.html:16
|
||||
#: templates/entities/fragments/list.html:16
|
||||
#: templates/installment_plans/fragments/list.html:16
|
||||
#: templates/recurring_transactions/fragments/list.html:16
|
||||
@@ -583,77 +583,77 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:123
|
||||
#: apps/currencies/models.py:124
|
||||
msgid "API Key"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:124
|
||||
#: apps/currencies/models.py:125
|
||||
msgid "API key for the service (if required)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:129
|
||||
#: apps/currencies/models.py:130
|
||||
msgid "Interval Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:133
|
||||
#: apps/currencies/models.py:134
|
||||
msgid "Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:136
|
||||
#: apps/currencies/models.py:137
|
||||
msgid "Last Successful Fetch"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:143
|
||||
#: apps/currencies/models.py:144
|
||||
msgid "Target Currencies"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:145
|
||||
#: apps/currencies/models.py:146
|
||||
msgid ""
|
||||
"Select currencies to fetch exchange rates for. Rates will be fetched for "
|
||||
"each currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:153
|
||||
#: apps/currencies/models.py:154
|
||||
msgid "Target Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:155
|
||||
#: apps/currencies/models.py:156
|
||||
msgid ""
|
||||
"Select accounts to fetch exchange rates for. Rates will be fetched for each "
|
||||
"account's currency against their set exchange currency."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:162
|
||||
#: apps/currencies/models.py:163
|
||||
msgid "Single exchange rate"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:165
|
||||
#: apps/currencies/models.py:166
|
||||
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:170
|
||||
#: apps/currencies/models.py:171
|
||||
msgid "Exchange Rate Service"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:171
|
||||
#: apps/currencies/models.py:172
|
||||
msgid "Exchange Rate Services"
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:223
|
||||
#: apps/currencies/models.py:224
|
||||
msgid "'Every X hours' interval type requires a positive integer."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:232
|
||||
#: apps/currencies/models.py:233
|
||||
msgid "'Every X hours' interval must be between 1 and 24."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:246
|
||||
#: apps/currencies/models.py:247
|
||||
msgid ""
|
||||
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
|
||||
"'1-5,8,10-12')."
|
||||
msgstr ""
|
||||
|
||||
#: apps/currencies/models.py:257
|
||||
#: apps/currencies/models.py:258
|
||||
msgid ""
|
||||
"Invalid format. Please check the requirements for your selected interval "
|
||||
"type."
|
||||
@@ -752,8 +752,8 @@ msgstr ""
|
||||
#: apps/dca/models.py:26 apps/dca/models.py:181 apps/rules/forms.py:180
|
||||
#: apps/rules/forms.py:196 apps/rules/models.py:43 apps/rules/models.py:295
|
||||
#: apps/transactions/forms.py:469 apps/transactions/forms.py:616
|
||||
#: apps/transactions/models.py:327 apps/transactions/models.py:650
|
||||
#: apps/transactions/models.py:851 apps/transactions/models.py:1085
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:667
|
||||
#: apps/transactions/models.py:868 apps/transactions/models.py:1106
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
@@ -816,7 +816,7 @@ msgid "Users"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:31 apps/export_app/forms.py:134
|
||||
#: apps/transactions/models.py:388 templates/includes/sidebar.html:81
|
||||
#: apps/transactions/models.py:403 templates/includes/sidebar.html:81
|
||||
#: templates/includes/sidebar.html:142
|
||||
#: templates/recurring_transactions/fragments/list_transactions.html:5
|
||||
#: templates/recurring_transactions/fragments/table.html:37
|
||||
@@ -825,7 +825,7 @@ msgid "Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:37 apps/export_app/forms.py:131
|
||||
#: apps/transactions/filters.py:68 templates/categories/fragments/list.html:9
|
||||
#: apps/transactions/filters.py:74 templates/categories/fragments/list.html:9
|
||||
#: templates/categories/pages/index.html:4 templates/includes/sidebar.html:144
|
||||
#: templates/insights/fragments/month_by_month.html:18
|
||||
#: templates/insights/fragments/month_by_month.html:21
|
||||
@@ -836,12 +836,12 @@ msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:49 apps/export_app/forms.py:133
|
||||
#: apps/rules/forms.py:185 apps/rules/forms.py:195 apps/rules/models.py:46
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:78
|
||||
#: apps/rules/models.py:307 apps/transactions/filters.py:84
|
||||
#: apps/transactions/forms.py:77 apps/transactions/forms.py:323
|
||||
#: apps/transactions/forms.py:491 apps/transactions/forms.py:771
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:286
|
||||
#: apps/transactions/models.py:342 apps/transactions/models.py:646
|
||||
#: apps/transactions/models.py:848 apps/transactions/models.py:1100
|
||||
#: apps/transactions/forms.py:1015 apps/transactions/models.py:301
|
||||
#: apps/transactions/models.py:357 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:865 apps/transactions/models.py:1121
|
||||
#: templates/entities/fragments/list.html:9
|
||||
#: templates/entities/pages/index.html:4 templates/includes/sidebar.html:156
|
||||
#: templates/insights/fragments/category_overview/index.html:54
|
||||
@@ -853,14 +853,14 @@ msgid "Entities"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:55 apps/export_app/forms.py:137
|
||||
#: apps/transactions/models.py:888 templates/includes/sidebar.html:110
|
||||
#: apps/transactions/models.py:905 templates/includes/sidebar.html:110
|
||||
#: templates/recurring_transactions/fragments/list.html:9
|
||||
#: templates/recurring_transactions/pages/index.html:4
|
||||
msgid "Recurring Transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/export_app/forms.py:61 apps/export_app/forms.py:135
|
||||
#: apps/transactions/models.py:664 templates/includes/sidebar.html:104
|
||||
#: apps/transactions/models.py:681 templates/includes/sidebar.html:104
|
||||
#: templates/installment_plans/fragments/list.html:9
|
||||
#: templates/installment_plans/pages/index.html:4
|
||||
msgid "Installment Plans"
|
||||
@@ -1012,7 +1012,7 @@ msgid "Run deleted successfully"
|
||||
msgstr ""
|
||||
|
||||
#: apps/insights/forms.py:118 apps/insights/utils/sankey.py:36
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:203
|
||||
#: apps/insights/utils/sankey.py:167 apps/transactions/filters.py:209
|
||||
#: templates/insights/fragments/category_overview/index.html:96
|
||||
#: templates/insights/fragments/category_overview/index.html:407
|
||||
#: templates/insights/fragments/category_overview/index.html:436
|
||||
@@ -1110,15 +1110,15 @@ msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:174 apps/rules/forms.py:188 apps/rules/models.py:36
|
||||
#: apps/rules/models.py:271 apps/transactions/forms.py:433
|
||||
#: apps/transactions/models.py:310 apps/transactions/models.py:606
|
||||
#: apps/transactions/models.py:829 apps/transactions/models.py:1070
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:623
|
||||
#: apps/transactions/models.py:846 apps/transactions/models.py:1091
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:175 apps/rules/forms.py:189 apps/rules/models.py:37
|
||||
#: apps/rules/models.py:275 apps/transactions/filters.py:22
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:312
|
||||
#: apps/transactions/models.py:1072 templates/cotton/transaction/item.html:20
|
||||
#: apps/transactions/forms.py:437 apps/transactions/models.py:327
|
||||
#: apps/transactions/models.py:1093 templates/cotton/transaction/item.html:20
|
||||
#: templates/cotton/transaction/item.html:31
|
||||
#: templates/transactions/widgets/paid_toggle_button.html:10
|
||||
#: templates/transactions/widgets/unselectable_paid_toggle_button.html:13
|
||||
@@ -1128,15 +1128,15 @@ msgstr ""
|
||||
#: apps/rules/forms.py:177 apps/rules/forms.py:191 apps/rules/models.py:39
|
||||
#: apps/rules/models.py:283 apps/transactions/forms.py:89
|
||||
#: apps/transactions/forms.py:453 apps/transactions/forms.py:603
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:314
|
||||
#: apps/transactions/models.py:624 apps/transactions/models.py:853
|
||||
#: apps/transactions/forms.py:777 apps/transactions/models.py:329
|
||||
#: apps/transactions/models.py:641 apps/transactions/models.py:870
|
||||
msgid "Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:178 apps/rules/forms.py:192 apps/rules/models.py:41
|
||||
#: apps/rules/models.py:287 apps/transactions/forms.py:460
|
||||
#: apps/transactions/models.py:320 apps/transactions/models.py:834
|
||||
#: apps/transactions/models.py:1078
|
||||
#: apps/transactions/models.py:335 apps/transactions/models.py:851
|
||||
#: apps/transactions/models.py:1099
|
||||
#: templates/insights/fragments/sankey.html:102
|
||||
#: templates/installment_plans/fragments/table.html:18
|
||||
#: templates/quick_transactions/fragments/list.html:15
|
||||
@@ -1147,27 +1147,27 @@ msgstr ""
|
||||
#: apps/rules/forms.py:179 apps/rules/forms.py:193 apps/rules/models.py:14
|
||||
#: apps/rules/models.py:42 apps/rules/models.py:291
|
||||
#: apps/transactions/forms.py:464 apps/transactions/forms.py:607
|
||||
#: apps/transactions/models.py:325 apps/transactions/models.py:608
|
||||
#: apps/transactions/models.py:837 apps/transactions/models.py:1083
|
||||
#: apps/transactions/models.py:340 apps/transactions/models.py:625
|
||||
#: apps/transactions/models.py:854 apps/transactions/models.py:1104
|
||||
msgid "Description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:182 apps/rules/forms.py:198 apps/rules/models.py:47
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:364
|
||||
#: apps/transactions/models.py:1105
|
||||
#: apps/rules/models.py:299 apps/transactions/models.py:379
|
||||
#: apps/transactions/models.py:1126
|
||||
msgid "Internal Note"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:183 apps/rules/forms.py:199 apps/rules/models.py:48
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:366
|
||||
#: apps/transactions/models.py:1107
|
||||
#: apps/rules/models.py:303 apps/transactions/models.py:381
|
||||
#: apps/transactions/models.py:1128
|
||||
msgid "Internal ID"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:186 apps/rules/forms.py:200 apps/rules/models.py:40
|
||||
#: apps/rules/models.py:319 apps/transactions/forms.py:620
|
||||
#: apps/transactions/models.py:224 apps/transactions/models.py:315
|
||||
#: apps/transactions/models.py:1073
|
||||
#: apps/transactions/models.py:239 apps/transactions/models.py:330
|
||||
#: apps/transactions/models.py:1094
|
||||
msgid "Mute"
|
||||
msgstr ""
|
||||
|
||||
@@ -1180,7 +1180,7 @@ msgid "Set Values"
|
||||
msgstr ""
|
||||
|
||||
#: apps/rules/forms.py:407 apps/rules/forms.py:442 apps/rules/forms.py:477
|
||||
#: apps/transactions/models.py:387 apps/transactions/models.py:544
|
||||
#: apps/transactions/models.py:402 apps/transactions/models.py:560
|
||||
msgid "Transaction"
|
||||
msgstr ""
|
||||
|
||||
@@ -1327,58 +1327,58 @@ msgstr ""
|
||||
msgid "Muted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:45
|
||||
#: apps/transactions/filters.py:51
|
||||
msgid "Content"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:51
|
||||
#: apps/transactions/filters.py:57
|
||||
msgid "Transaction Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:89
|
||||
#: apps/transactions/filters.py:95
|
||||
msgid "Mute Status"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:94
|
||||
#: apps/transactions/filters.py:100
|
||||
msgid "Date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:99 apps/transactions/filters.py:109
|
||||
#: apps/transactions/filters.py:105 apps/transactions/filters.py:115
|
||||
msgid "Until"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:104
|
||||
#: apps/transactions/filters.py:110
|
||||
msgid "Reference date from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:114
|
||||
#: apps/transactions/filters.py:120
|
||||
msgid "Amount min"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:119
|
||||
#: apps/transactions/filters.py:125
|
||||
msgid "Amount max"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:202
|
||||
#: apps/transactions/filters.py:208
|
||||
msgid "Categorized"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
msgid "Tagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:209
|
||||
#: apps/transactions/filters.py:215
|
||||
#: templates/insights/fragments/category_overview/index.html:189
|
||||
#: templates/insights/fragments/month_by_month.html:121
|
||||
#: templates/insights/fragments/year_by_year.html:75
|
||||
msgid "Untagged"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:215
|
||||
#: apps/transactions/filters.py:221
|
||||
msgid "Any entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/filters.py:216
|
||||
#: apps/transactions/filters.py:222
|
||||
#: templates/insights/fragments/category_overview/index.html:282
|
||||
#: templates/insights/fragments/month_by_month.html:123
|
||||
#: templates/insights/fragments/year_by_year.html:77
|
||||
@@ -1453,42 +1453,42 @@ msgstr ""
|
||||
msgid "End date should be after the start date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:229
|
||||
#: apps/transactions/models.py:244
|
||||
msgid ""
|
||||
"Deactivated categories won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:237
|
||||
#: apps/transactions/models.py:252
|
||||
msgid "Transaction Category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:238
|
||||
#: apps/transactions/models.py:253
|
||||
msgid "Transaction Categories"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:253
|
||||
#: apps/transactions/models.py:268
|
||||
msgid ""
|
||||
"Deactivated tags won't be able to be selected when creating new transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:261 apps/transactions/models.py:262
|
||||
#: apps/transactions/models.py:276 apps/transactions/models.py:277
|
||||
msgid "Transaction Tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:277
|
||||
#: apps/transactions/models.py:292
|
||||
msgid ""
|
||||
"Deactivated entities won't be able to be selected when creating new "
|
||||
"transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:285
|
||||
#: apps/transactions/models.py:300
|
||||
#: templates/insights/fragments/month_by_month.html:88
|
||||
#: templates/insights/fragments/year_by_year.html:56
|
||||
msgid "Entity"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
|
||||
#: apps/transactions/models.py:312 apps/transactions/models.py:1071
|
||||
#: templates/calendar_view/fragments/list.html:42
|
||||
#: templates/calendar_view/fragments/list.html:44
|
||||
#: templates/calendar_view/fragments/list.html:52
|
||||
@@ -1500,7 +1500,7 @@ msgstr ""
|
||||
msgid "Income"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
|
||||
#: apps/transactions/models.py:313 apps/transactions/models.py:1072
|
||||
#: templates/calendar_view/fragments/list.html:46
|
||||
#: templates/calendar_view/fragments/list.html:48
|
||||
#: templates/calendar_view/fragments/list.html:56
|
||||
@@ -1511,157 +1511,157 @@ msgstr ""
|
||||
msgid "Expense"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:353 apps/transactions/models.py:663
|
||||
#: apps/transactions/models.py:368 apps/transactions/models.py:680
|
||||
msgid "Installment Plan"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:362 apps/transactions/models.py:887
|
||||
#: apps/transactions/models.py:377 apps/transactions/models.py:904
|
||||
msgid "Recurring Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:370
|
||||
#: apps/transactions/models.py:385
|
||||
msgid "Deleted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:375
|
||||
#: apps/transactions/models.py:390
|
||||
msgid "Deleted At"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:489 templates/tags/fragments/table.html:69
|
||||
#: apps/transactions/models.py:504 templates/tags/fragments/table.html:69
|
||||
msgid "No tags"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:491
|
||||
#: apps/transactions/models.py:506
|
||||
msgid "No category"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:493
|
||||
#: apps/transactions/models.py:508
|
||||
msgid "No description"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:549
|
||||
#: apps/transactions/models.py:565
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:551
|
||||
#: apps/transactions/models.py:567
|
||||
msgid "Original Name"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:553
|
||||
#: apps/transactions/models.py:569
|
||||
msgid "Content Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:555
|
||||
#: apps/transactions/models.py:571
|
||||
msgid "Size"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:560
|
||||
#: apps/transactions/models.py:576
|
||||
msgid "Uploaded By"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:565
|
||||
#: apps/transactions/models.py:581
|
||||
msgid "Transaction Attachment"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:566
|
||||
#: apps/transactions/models.py:582
|
||||
msgid "Transaction Attachments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:595 templates/includes/sidebar.html:57
|
||||
#: apps/transactions/models.py:612 templates/includes/sidebar.html:57
|
||||
msgid "Yearly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:596 apps/users/models.py:469
|
||||
#: apps/transactions/models.py:613 apps/users/models.py:469
|
||||
#: templates/includes/sidebar.html:51
|
||||
msgid "Monthly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:597
|
||||
#: apps/transactions/models.py:614
|
||||
msgid "Weekly"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:598
|
||||
#: apps/transactions/models.py:615
|
||||
msgid "Daily"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:611
|
||||
#: apps/transactions/models.py:628
|
||||
msgid "Number of Installments"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:616
|
||||
#: apps/transactions/models.py:633
|
||||
msgid "Installment Start"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:617
|
||||
#: apps/transactions/models.py:634
|
||||
msgid "The installment number to start counting from"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:622 apps/transactions/models.py:857
|
||||
#: apps/transactions/models.py:639 apps/transactions/models.py:874
|
||||
msgid "Start Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:626 apps/transactions/models.py:858
|
||||
#: apps/transactions/models.py:643 apps/transactions/models.py:875
|
||||
msgid "End Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:631
|
||||
#: apps/transactions/models.py:648
|
||||
msgid "Recurrence"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:634
|
||||
#: apps/transactions/models.py:651
|
||||
msgid "Installment Amount"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:653 apps/transactions/models.py:877
|
||||
#: apps/transactions/models.py:670 apps/transactions/models.py:894
|
||||
msgid "Add description to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:656 apps/transactions/models.py:880
|
||||
#: apps/transactions/models.py:673 apps/transactions/models.py:897
|
||||
msgid "Add notes to transactions"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:816
|
||||
#: apps/transactions/models.py:833
|
||||
msgid "day(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:817
|
||||
#: apps/transactions/models.py:834
|
||||
msgid "week(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:818
|
||||
#: apps/transactions/models.py:835
|
||||
msgid "month(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:819
|
||||
#: apps/transactions/models.py:836
|
||||
msgid "year(s)"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:821
|
||||
#: apps/transactions/models.py:838
|
||||
#: templates/recurring_transactions/fragments/list.html:18
|
||||
msgid "Paused"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:860
|
||||
#: apps/transactions/models.py:877
|
||||
msgid "Recurrence Type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:863
|
||||
#: apps/transactions/models.py:880
|
||||
msgid "Recurrence Interval"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:866
|
||||
#: apps/transactions/models.py:883
|
||||
msgid "Keep at most"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:870
|
||||
#: apps/transactions/models.py:887
|
||||
msgid "Last Generated Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:873
|
||||
#: apps/transactions/models.py:890
|
||||
msgid "Last Generated Reference Date"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1117
|
||||
#: apps/transactions/models.py:1138
|
||||
#: apps/transactions/views/quick_transactions.py:178
|
||||
#: apps/transactions/views/quick_transactions.py:187
|
||||
#: apps/transactions/views/quick_transactions.py:189
|
||||
@@ -1670,7 +1670,7 @@ msgstr ""
|
||||
msgid "Quick Transaction"
|
||||
msgstr ""
|
||||
|
||||
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
|
||||
#: apps/transactions/models.py:1139 templates/includes/sidebar.html:98
|
||||
#: templates/quick_transactions/pages/index.html:5
|
||||
#: templates/quick_transactions/pages/index.html:15
|
||||
msgid "Quick Transactions"
|
||||
@@ -1894,9 +1894,9 @@ msgstr ""
|
||||
|
||||
#: apps/users/forms.py:68 apps/users/forms.py:81 apps/users/forms.py:103
|
||||
#: templates/monthly_overview/pages/overview.html:98
|
||||
#: templates/monthly_overview/pages/overview.html:245
|
||||
#: templates/monthly_overview/pages/overview.html:247
|
||||
#: templates/transactions/pages/transactions.html:47
|
||||
#: templates/transactions/pages/transactions.html:195
|
||||
#: templates/transactions/pages/transactions.html:196
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
@@ -1918,7 +1918,7 @@ msgstr ""
|
||||
msgid "Default Account"
|
||||
msgstr "Akaunti ya Mali"
|
||||
|
||||
#: apps/users/forms.py:178
|
||||
#: apps/users/forms.py:177
|
||||
#, python-format
|
||||
msgid ""
|
||||
"This changes the language (if available) and how numbers and dates are "
|
||||
@@ -1926,81 +1926,81 @@ msgid ""
|
||||
"Consider helping translate WYGIWYH to your language at %(translation_link)s"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:187
|
||||
#: apps/users/forms.py:186
|
||||
msgid "New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:190
|
||||
#: apps/users/forms.py:189
|
||||
msgid "Leave blank to keep the current password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:193
|
||||
#: apps/users/forms.py:192
|
||||
msgid "Confirm New Password"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:205 apps/users/forms.py:362
|
||||
#: apps/users/forms.py:204 apps/users/forms.py:361
|
||||
msgid ""
|
||||
"Designates whether this user should be treated as active. Unselect this "
|
||||
"instead of deleting accounts."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:208 apps/users/forms.py:365
|
||||
#: apps/users/forms.py:207 apps/users/forms.py:364
|
||||
msgid ""
|
||||
"Designates that this user has all permissions without explicitly assigning "
|
||||
"them."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:275
|
||||
#: apps/users/forms.py:274
|
||||
msgid "This email address is already in use by another account."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:283
|
||||
#: apps/users/forms.py:282
|
||||
msgid "The two password fields didn't match."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:285
|
||||
#: apps/users/forms.py:284
|
||||
msgid "Please confirm your new password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:287
|
||||
#: apps/users/forms.py:286
|
||||
msgid "Please enter the new password first."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:307
|
||||
#: apps/users/forms.py:306
|
||||
msgid "You cannot deactivate your own account using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:320
|
||||
#: apps/users/forms.py:319
|
||||
msgid "Cannot remove status from the last superuser."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:326
|
||||
#: apps/users/forms.py:325
|
||||
msgid "You cannot remove your own superuser status using this form."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:419
|
||||
#: apps/users/forms.py:418
|
||||
msgid "A user with this email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:439
|
||||
#: apps/users/forms.py:438
|
||||
#, fuzzy
|
||||
#| msgid "Group name"
|
||||
msgid "Token name"
|
||||
msgstr "Jina La Kundi"
|
||||
|
||||
#: apps/users/forms.py:441
|
||||
#: apps/users/forms.py:440
|
||||
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:447
|
||||
#: apps/users/forms.py:446
|
||||
msgid "Expires in days"
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:448
|
||||
#: apps/users/forms.py:447
|
||||
msgid "Leave empty for a non-expiring token."
|
||||
msgstr ""
|
||||
|
||||
#: apps/users/forms.py:463
|
||||
#: apps/users/forms.py:462
|
||||
msgid "Create token"
|
||||
msgstr ""
|
||||
|
||||
@@ -2223,6 +2223,7 @@ msgstr ""
|
||||
#: templates/rules/fragments/transaction_rule/view.html:92
|
||||
#: templates/rules/fragments/transaction_rule/view.html:133
|
||||
#: templates/tags/fragments/table.html:51
|
||||
#: templates/transactions/fragments/filter_presets.html:28
|
||||
#: templates/users/fragments/api_tokens.html:93
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
@@ -2327,8 +2328,8 @@ msgid "Current balance"
|
||||
msgstr ""
|
||||
|
||||
#: templates/accounts/fragments/account_reconciliation.html:36
|
||||
#: templates/net_worth/net_worth.html:146
|
||||
#: templates/net_worth/net_worth.html:396
|
||||
#: templates/net_worth/net_worth.html:147
|
||||
#: templates/net_worth/net_worth.html:407
|
||||
msgid "Difference"
|
||||
msgstr ""
|
||||
|
||||
@@ -2708,19 +2709,19 @@ msgstr ""
|
||||
msgid "Amount Bought"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:384
|
||||
#: templates/dca/fragments/strategy/details.html:409
|
||||
msgid "Entry Price vs Current Price"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:398
|
||||
#: templates/dca/fragments/strategy/details.html:423
|
||||
msgid "Days Between Investments"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:444
|
||||
#: templates/dca/fragments/strategy/details.html:469
|
||||
msgid "Investment Frequency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/dca/fragments/strategy/details.html:446
|
||||
#: templates/dca/fragments/strategy/details.html:471
|
||||
msgid "The straighter the blue line, the more consistent your DCA strategy is."
|
||||
msgstr ""
|
||||
|
||||
@@ -2957,6 +2958,7 @@ msgid "Reload"
|
||||
msgstr ""
|
||||
|
||||
#: templates/includes/scripts/hyperscript/swal.html:13
|
||||
#: templates/transactions/fragments/filter_actions.html:4
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@@ -3371,16 +3373,16 @@ msgid "Summary"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:99
|
||||
#: templates/monthly_overview/pages/overview.html:254
|
||||
#: templates/monthly_overview/pages/overview.html:256
|
||||
#: templates/transactions/pages/transactions.html:48
|
||||
#: templates/transactions/pages/transactions.html:204
|
||||
#: templates/transactions/pages/transactions.html:205
|
||||
msgid "Oldest first"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:100
|
||||
#: templates/monthly_overview/pages/overview.html:263
|
||||
#: templates/monthly_overview/pages/overview.html:265
|
||||
#: templates/transactions/pages/transactions.html:49
|
||||
#: templates/transactions/pages/transactions.html:213
|
||||
#: templates/transactions/pages/transactions.html:214
|
||||
msgid "Newest first"
|
||||
msgstr ""
|
||||
|
||||
@@ -3389,8 +3391,8 @@ msgstr ""
|
||||
msgid "Filter transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/monthly_overview/pages/overview.html:235
|
||||
#: templates/transactions/pages/transactions.html:185
|
||||
#: templates/monthly_overview/pages/overview.html:237
|
||||
#: templates/transactions/pages/transactions.html:186
|
||||
msgid "Order by"
|
||||
msgstr ""
|
||||
|
||||
@@ -3399,24 +3401,24 @@ msgstr ""
|
||||
msgid "By currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:84
|
||||
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
|
||||
msgid "Consolidated"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:134
|
||||
#: templates/net_worth/net_worth.html:135
|
||||
msgid "Evolution"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:162
|
||||
#: templates/net_worth/net_worth.html:163
|
||||
#: templates/yearly_overview/pages/overview_by_account.html:4
|
||||
msgid "By account"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:270
|
||||
#: templates/net_worth/net_worth.html:271
|
||||
msgid "Evolution by currency"
|
||||
msgstr ""
|
||||
|
||||
#: templates/net_worth/net_worth.html:334
|
||||
#: templates/net_worth/net_worth.html:345
|
||||
msgid "Evolution by account"
|
||||
msgstr ""
|
||||
|
||||
@@ -3647,6 +3649,40 @@ msgstr ""
|
||||
msgid "transactions"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:2
|
||||
msgid "Save filter preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:3
|
||||
msgid "Preset name"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_actions.html:40
|
||||
msgid "Save preset"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:6
|
||||
msgid "Filter presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:21
|
||||
#, python-format
|
||||
msgid "Delete %(name)s"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:26
|
||||
msgid "Delete filter preset?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:27
|
||||
#, python-format
|
||||
msgid "Delete “%(name)s”?"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/filter_presets.html:34
|
||||
msgid "No saved presets"
|
||||
msgstr ""
|
||||
|
||||
#: templates/transactions/fragments/list_all.html:58
|
||||
msgid "No transactions found"
|
||||
msgstr ""
|
||||
|
||||
+212
-176
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@@ -331,6 +331,8 @@
|
||||
},
|
||||
scales: {
|
||||
x: {
|
||||
min: Math.max(0, priceData.labels.length - 20),
|
||||
max: Math.max(0, priceData.labels.length - 1),
|
||||
grid: {
|
||||
display: false
|
||||
},
|
||||
@@ -369,6 +371,29 @@
|
||||
}
|
||||
},
|
||||
plugins: {
|
||||
zoom: {
|
||||
limits: {
|
||||
x: {
|
||||
min: 0,
|
||||
max: Math.max(0, priceData.labels.length - 1),
|
||||
minRange: 5
|
||||
}
|
||||
},
|
||||
pan: {
|
||||
enabled: true,
|
||||
mode: 'x'
|
||||
},
|
||||
zoom: {
|
||||
wheel: {
|
||||
enabled: true,
|
||||
modifierKey: 'ctrl'
|
||||
},
|
||||
pinch: {
|
||||
enabled: true
|
||||
},
|
||||
mode: 'x'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
position: 'top'
|
||||
},
|
||||
|
||||
@@ -1,20 +1,12 @@
|
||||
<script type="text/hyperscript">
|
||||
on paid if body do not include #settings-mute-sound
|
||||
js
|
||||
volume = JSON.parse(document.getElementById('volume').textContent) / 10
|
||||
paidSound.pause()
|
||||
paidSound.currentTime = 0
|
||||
paidSound.volume = volume
|
||||
paidSound.play()
|
||||
playSound("sparkle")
|
||||
end
|
||||
end
|
||||
on unpaid if body do not include #settings-mute-sound
|
||||
js
|
||||
volume = JSON.parse(document.getElementById('volume').textContent) / 10
|
||||
unpaidSound.pause()
|
||||
unpaidSound.currentTime = 0
|
||||
unpaidSound.volume = volume
|
||||
unpaidSound.play()
|
||||
playSound("bloom")
|
||||
end
|
||||
end
|
||||
</script>
|
||||
|
||||
@@ -52,7 +52,8 @@
|
||||
<i class="fa-solid fa-grip"></i>
|
||||
</div>
|
||||
|
||||
<input type="search"
|
||||
<div class="relative">
|
||||
<input type="search"
|
||||
class="input w-full"
|
||||
id="calculator-input"
|
||||
_="on click me.focus()
|
||||
@@ -90,14 +91,15 @@
|
||||
then remove .swing-out-top-bck from #calculator-result-container
|
||||
end"
|
||||
placeholder="2 + 2">
|
||||
<div class="btn btn-error btn-circle absolute cursor-pointer top-0 right-0 translate-x-1/2 -translate-y-1/2 p-0 flex items-center justify-center w-5 h-5"
|
||||
_="on click trigger show on #calculator">
|
||||
<i class="fa-solid fa-xmark flex items-center justify-center w-full h-full content-center text-xs"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hidden" id="calculator-result-container">
|
||||
<div class="flex flex-row py-3 px-5 justify-between">
|
||||
<div class="text-subtle">=</div>
|
||||
<div id="calculator-result" class="select-all"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn btn-error btn-circle absolute cursor-pointer top-0 left-full start-100 -translate-x-1/2 -translate-y-1/2 p-0 flex items-center justify-center w-5 h-5"
|
||||
_="on click trigger show on #calculator">
|
||||
<i class="fa-solid fa-xmark flex items-center justify-center w-full h-full content-center text-xs"></i>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
@click="filterOpen = !filterOpen"
|
||||
:aria-expanded="filterOpen" id="filter-button"
|
||||
title="{% translate 'Filter transactions' %}"
|
||||
_="on load or change from #filter
|
||||
_="on change from #filter-container
|
||||
-- Check if any filter has a non-default value
|
||||
set hasActiveFilter to false
|
||||
|
||||
@@ -208,7 +208,7 @@
|
||||
add .hidden to #filter-active-indicator
|
||||
end">
|
||||
<i class="fa-solid fa-filter fa-fw"></i>
|
||||
<span id="filter-active-indicator" class="absolute -top-1 -right-1 w-3 h-3 bg-error rounded-full hidden z-10"></span>
|
||||
<span id="filter-active-indicator" class="absolute -top-1 -right-1 w-3 h-3 bg-error rounded-full {% if not filter_is_active %}hidden {% endif %}z-10"></span>
|
||||
</button>
|
||||
|
||||
{# Search box #}
|
||||
@@ -228,6 +228,8 @@
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
|
||||
{% include "transactions/fragments/filter_presets.html" %}
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
<div>
|
||||
<button class="btn btn-secondary join-item" type="button"
|
||||
@@ -270,21 +272,16 @@
|
||||
{# Filter transactions form #}
|
||||
<div class="z-1" x-show="filterOpen" x-collapse x-cloak>
|
||||
<div class="card card-body bg-base-200 mt-2">
|
||||
<div class="text-right">
|
||||
<button class="btn btn-outline btn-error btn-sm w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
{% include "transactions/fragments/filter_actions.html" %}
|
||||
|
||||
<form _="on change or submit or search trigger updated on window
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
{% include "transactions/fragments/filter_form.html" %}
|
||||
|
||||
<div class="text-right">
|
||||
<button class="btn btn-outline btn-error btn-sm w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
<a class="btn btn-outline btn-error btn-sm w-fit"
|
||||
href="{{ request.path }}"
|
||||
hx-get="{% url 'transaction_filter_clear' %}"
|
||||
hx-target="#filter"
|
||||
hx-swap="outerHTML">{% translate 'Clear' %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<li>
|
||||
{% if currency.consolidated and currency.consolidated.total_final != currency.total_final %}
|
||||
<a class="cursor-pointer select-auto flex justify-between items-center w-full"
|
||||
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}')">
|
||||
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}', '{{ currency.currency.name }}')">
|
||||
<span
|
||||
class="currency-name text-start font-mono shrink text-ellipsis">{{ currency.currency.name }}</span>
|
||||
<span class="text-end shrink-0">
|
||||
@@ -80,7 +80,8 @@
|
||||
</a>
|
||||
<ul>
|
||||
<li>
|
||||
<a class="text-base-content/60 select-auto flex justify-between items-center w-full">
|
||||
<a class="cursor-pointer text-base-content/60 select-auto flex justify-between items-center w-full"
|
||||
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }} {% trans "Consolidated" %}', '{{ currency.currency.name }}')">
|
||||
<span class="text-start shrink">{% trans "Consolidated" %}</span>
|
||||
<span class="text-end shrink-0">
|
||||
<c-amount.display :amount="currency.consolidated.total_final"
|
||||
@@ -95,7 +96,7 @@
|
||||
</ul>
|
||||
{% else %}
|
||||
<a class="cursor-pointer select-auto flex justify-between items-center w-full"
|
||||
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}')">
|
||||
_="on click showOnlyCurrencyDataset('{{ currency.currency.name }}', '{{ currency.currency.name }}')">
|
||||
<span class="currency-name text-start font-mono shrink">{{ currency.currency.name }}</span>
|
||||
<span class="text-end shrink-0">
|
||||
<div>
|
||||
@@ -302,6 +303,16 @@
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
for (const dataset of currencyChart.data.datasets) {
|
||||
if (!dataset.colorSource) continue;
|
||||
const source = currencyChart.data.datasets.find(
|
||||
candidate => candidate.label === dataset.colorSource
|
||||
);
|
||||
dataset.borderColor = source.borderColor;
|
||||
dataset.backgroundColor = source.backgroundColor;
|
||||
}
|
||||
currencyChart.update('none');
|
||||
}
|
||||
</script>
|
||||
<script id="accountBalanceChartScript">
|
||||
@@ -448,7 +459,7 @@
|
||||
call accountChart.update()
|
||||
end
|
||||
|
||||
def showOnlyCurrencyDataset(datasetName)
|
||||
def showOnlyCurrencyDataset(datasetName, differenceDatasetName)
|
||||
for dataset in currencyChart.data.datasets
|
||||
set isMatch to dataset.label is datasetName
|
||||
call currencyChart.setDatasetVisibility(currencyChart.data.datasets.indexOf(dataset), isMatch)
|
||||
@@ -456,7 +467,7 @@
|
||||
call currencyChart.update()
|
||||
|
||||
for dataset in monthlyDifferenceChart.data.datasets
|
||||
set isMatch to dataset.label is datasetName
|
||||
set isMatch to dataset.label is differenceDatasetName
|
||||
call monthlyDifferenceChart.setDatasetVisibility(monthlyDifferenceChart.data.datasets.indexOf(dataset), isMatch)
|
||||
end
|
||||
call monthlyDifferenceChart.update()
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
{% load i18n %}
|
||||
{% translate "Save filter preset" as save_filter_preset_title %}
|
||||
{% translate "Preset name" as preset_name_label %}
|
||||
{% translate "Cancel" as cancel_label %}
|
||||
{% translate "Save" as save_label %}
|
||||
|
||||
<div class="flex justify-end gap-2">
|
||||
<form id="save-filter-preset"
|
||||
hx-post="{% url 'filter_preset_create' %}"
|
||||
hx-include="#filter"
|
||||
hx-target="#filter-presets"
|
||||
hx-swap="outerHTML">
|
||||
<input id="filter-preset-name" type="hidden" name="name">
|
||||
<button class="btn btn-outline btn-primary btn-sm" type="button"
|
||||
data-title="{{ save_filter_preset_title }}"
|
||||
data-input-label="{{ preset_name_label }}"
|
||||
data-cancel-text="{{ cancel_label }}"
|
||||
data-confirm-text="{{ save_label }}"
|
||||
_="on click
|
||||
call Swal.fire({title: @data-title,
|
||||
input: 'text',
|
||||
inputLabel: @data-input-label,
|
||||
inputAttributes: {maxlength: '100'},
|
||||
showCancelButton: true,
|
||||
cancelButtonText: @data-cancel-text,
|
||||
confirmButtonText: @data-confirm-text,
|
||||
customClass: {
|
||||
confirmButton: 'btn btn-primary me-3',
|
||||
cancelButton: 'btn btn-error'
|
||||
},
|
||||
buttonsStyling: false})
|
||||
if result.isConfirmed
|
||||
set presetName to result.value.trim()
|
||||
if presetName is not ''
|
||||
set #filter-preset-name.value to presetName
|
||||
trigger submit on #save-filter-preset
|
||||
end
|
||||
end">
|
||||
<i class="fa-solid fa-bookmark fa-fw"></i>
|
||||
{% translate 'Save preset' %}
|
||||
</button>
|
||||
</form>
|
||||
<a class="btn btn-outline btn-error btn-sm"
|
||||
href="{{ request.path }}"
|
||||
hx-get="{% url 'transaction_filter_clear' %}"
|
||||
hx-target="#filter"
|
||||
hx-swap="outerHTML">
|
||||
{% translate 'Clear' %}
|
||||
</a>
|
||||
</div>
|
||||
@@ -0,0 +1,18 @@
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
<form _="on change or submit or search
|
||||
if event.type is 'submit'
|
||||
halt the event
|
||||
end
|
||||
trigger updated on window
|
||||
end
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
{% if swap_filter_indicator %}
|
||||
<span id="filter-active-indicator"
|
||||
class="absolute -top-1 -right-1 w-3 h-3 bg-error rounded-full {% if not filter_is_active %}hidden {% endif %}z-10"
|
||||
hx-swap-oob="outerHTML"></span>
|
||||
{% endif %}
|
||||
@@ -0,0 +1,37 @@
|
||||
{% load i18n %}
|
||||
|
||||
<div id="filter-presets">
|
||||
<button class="btn btn-secondary join-item" type="button"
|
||||
data-bs-toggle="dropdown" aria-expanded="false"
|
||||
title="{% translate 'Filter presets' %}">
|
||||
<i class="fa-solid fa-bookmark fa-fw"></i>
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end menu min-w-52">
|
||||
{% for preset in filter_presets %}
|
||||
<li class="group flex-row items-center">
|
||||
<button class="grow justify-start"
|
||||
type="button"
|
||||
hx-get="{% url 'filter_preset_apply' preset.id %}"
|
||||
hx-target="#filter"
|
||||
hx-swap="outerHTML">
|
||||
{{ preset.name }}
|
||||
</button>
|
||||
<button class="btn btn-ghost btn-xs opacity-0 group-hover:opacity-100 focus:opacity-100"
|
||||
type="button"
|
||||
aria-label="{% blocktranslate with name=preset.name %}Delete {{ name }}{% endblocktranslate %}"
|
||||
hx-post="{% url 'filter_preset_delete' preset.id %}"
|
||||
hx-trigger="confirmed"
|
||||
hx-target="#filter-presets"
|
||||
hx-swap="outerHTML"
|
||||
data-title="{% translate 'Delete filter preset?' %}"
|
||||
data-text="{% blocktranslate with name=preset.name %}Delete “{{ name }}”?{% endblocktranslate %}"
|
||||
data-confirm-text="{% translate 'Delete' %}"
|
||||
_="install prompt_swal">
|
||||
<i class="fa-solid fa-xmark fa-fw"></i>
|
||||
</button>
|
||||
</li>
|
||||
{% empty %}
|
||||
<li class="menu-disabled"><span>{% translate 'No saved presets' %}</span></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
@@ -56,7 +56,7 @@
|
||||
@click="filterOpen = !filterOpen"
|
||||
:aria-expanded="filterOpen" id="filter-button"
|
||||
title="{% translate 'Filter transactions' %}"
|
||||
_="on load or change from #filter
|
||||
_="on change from #filter-container
|
||||
-- Check if any filter has a non-default value
|
||||
set hasActiveFilter to false
|
||||
|
||||
@@ -157,7 +157,7 @@
|
||||
add .hidden to #filter-active-indicator
|
||||
end">
|
||||
<i class="fa-solid fa-filter fa-fw"></i>
|
||||
<span id="filter-active-indicator" class="absolute -top-1 -right-1 w-3 h-3 bg-error rounded-full hidden z-10"></span>
|
||||
<span id="filter-active-indicator" class="absolute -top-1 -right-1 w-3 h-3 bg-error rounded-full {% if not filter_is_active %}hidden {% endif %}z-10"></span>
|
||||
</button>
|
||||
|
||||
{# Search box #}
|
||||
@@ -177,7 +177,8 @@
|
||||
show <.transaction/> in <#transactions-list/>
|
||||
when its textContent.toLowerCase() contains my value.toLowerCase()">
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
{% include "transactions/fragments/filter_presets.html" %}
|
||||
|
||||
{# Order by icon dropdown #}
|
||||
<div>
|
||||
<button class="btn btn-secondary join-item" type="button"
|
||||
@@ -220,21 +221,16 @@
|
||||
{# Filter transactions form #}
|
||||
<div class="z-1" x-show="filterOpen" x-collapse x-cloak>
|
||||
<div class="card card-body bg-base-200 mt-2">
|
||||
<div class="text-right">
|
||||
<button class="btn btn-outline btn-error btn-sm w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
</div>
|
||||
{% include "transactions/fragments/filter_actions.html" %}
|
||||
|
||||
<form _="on change or submit or search trigger updated on window
|
||||
install init_tom_select
|
||||
install init_datepicker"
|
||||
id="filter" class="mt-3">
|
||||
{% crispy filter.form %}
|
||||
</form>
|
||||
{% include "transactions/fragments/filter_form.html" %}
|
||||
|
||||
<div class="text-right">
|
||||
<button class="btn btn-outline btn-error btn-sm w-fit"
|
||||
_="on click call #filter.reset() then trigger change on #filter">{% translate 'Clear' %}</button>
|
||||
<a class="btn btn-outline btn-error btn-sm w-fit"
|
||||
href="{{ request.path }}"
|
||||
hx-get="{% url 'transaction_filter_clear' %}"
|
||||
hx-target="#filter"
|
||||
hx-swap="outerHTML">{% translate 'Clear' %}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -3,9 +3,10 @@ FROM node:lts-alpine
|
||||
WORKDIR /usr/src/frontend
|
||||
|
||||
COPY ./frontend/package.json ./frontend/package-lock.json ./
|
||||
|
||||
RUN npm ci --verbose && npm cache clean --force
|
||||
COPY ./docker/dev/vite/entrypoint.sh /usr/local/bin/vite-entrypoint
|
||||
RUN sed -i 's/\r$//g' /usr/local/bin/vite-entrypoint && \
|
||||
chmod +x /usr/local/bin/vite-entrypoint
|
||||
|
||||
ENV PATH ./node_modules/.bin/:$PATH
|
||||
|
||||
CMD ["npm", "run", "dev"]
|
||||
ENTRYPOINT ["vite-entrypoint"]
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
#!/bin/sh
|
||||
set -eu
|
||||
|
||||
deps_hash="$(sha256sum package.json package-lock.json | sha256sum | cut -d ' ' -f 1)"
|
||||
deps_stamp="node_modules/.wygiwyh-deps-hash"
|
||||
|
||||
if [ ! -f "$deps_stamp" ] || [ "$(cat "$deps_stamp")" != "$deps_hash" ]; then
|
||||
echo "Installing frontend dependencies..."
|
||||
npm ci --no-audit --no-fund --prefer-offline
|
||||
printf '%s\n' "$deps_hash" > "$deps_stamp"
|
||||
fi
|
||||
|
||||
exec npm run dev
|
||||
Generated
+47
-11
@@ -23,11 +23,13 @@
|
||||
"bootstrap": "^5.3.8",
|
||||
"chart.js": "^4.5.1",
|
||||
"chartjs-chart-sankey": "^0.14.3",
|
||||
"chartjs-plugin-zoom": "^2.2.0",
|
||||
"cuelume": "^0.1.2",
|
||||
"daisyui": "5.5.20",
|
||||
"htmx.org": "^2.0.10",
|
||||
"hyperscript.org": "^0.9.91",
|
||||
"mathjs": "^15.2.0",
|
||||
"postcss": "^8.5.15",
|
||||
"postcss": "^8.5.26",
|
||||
"pulltorefreshjs": "^0.1.22",
|
||||
"sass": "^1.100.0",
|
||||
"sweetalert2": "^11.26.25",
|
||||
@@ -1076,6 +1078,12 @@
|
||||
"integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/hammerjs": {
|
||||
"version": "2.0.46",
|
||||
"resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.46.tgz",
|
||||
"integrity": "sha512-ynRvcq6wvqexJ9brDMS4BnBLzmr0e14d6ZJTEShTBWKymQiHwlAyGu0ZPEFI2Fh1U53F7tN9ufClWM5KvqkKOw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@vue/reactivity": {
|
||||
"version": "3.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.1.5.tgz",
|
||||
@@ -1253,6 +1261,19 @@
|
||||
"chart.js": ">=3.3.0"
|
||||
}
|
||||
},
|
||||
"node_modules/chartjs-plugin-zoom": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.2.0.tgz",
|
||||
"integrity": "sha512-in6kcdiTlP6npIVLMd4zXZ08PDUXC52gZ4FAy5oyjk1zX3gKarXMAof7B9eFiisf9WOC3bh2saHg+J5WtLXZeA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/hammerjs": "^2.0.45",
|
||||
"hammerjs": "^2.0.8"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"chart.js": ">=3.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/chokidar": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz",
|
||||
@@ -1287,6 +1308,12 @@
|
||||
"url": "https://github.com/sponsors/rawify"
|
||||
}
|
||||
},
|
||||
"node_modules/cuelume": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/cuelume/-/cuelume-0.1.2.tgz",
|
||||
"integrity": "sha512-VxL0k9l1fyKGot3VKM+wm5Xd2K75fVeBHdNTrR1EHiqKRtD6S5Dxy/vY7hwl9gXp3QT/TIywFXUos77n39YZVQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/daisyui": {
|
||||
"version": "5.5.20",
|
||||
"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.5.20.tgz",
|
||||
@@ -1401,6 +1428,15 @@
|
||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/hammerjs": {
|
||||
"version": "2.0.8",
|
||||
"resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz",
|
||||
"integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/htmx.org": {
|
||||
"version": "2.0.10",
|
||||
"resolved": "https://registry.npmjs.org/htmx.org/-/htmx.org-2.0.10.tgz",
|
||||
@@ -1417,9 +1453,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/immutable": {
|
||||
"version": "5.1.6",
|
||||
"resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.6.tgz",
|
||||
"integrity": "sha512-q1swsS8K7L8usSHuOqF2TAoCCkonYz0SG38wLAggaa4Wml70zixIvt2ql4coQ2C2B3hTjltJry4r6bULwgAXLQ==",
|
||||
"version": "5.1.9",
|
||||
"resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz",
|
||||
"integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/is-extglob": {
|
||||
@@ -1751,9 +1787,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.12",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
|
||||
"integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
|
||||
"version": "3.3.18",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
|
||||
"integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
@@ -1803,9 +1839,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.5.15",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz",
|
||||
"integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==",
|
||||
"version": "8.5.26",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
|
||||
"integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "opencollective",
|
||||
@@ -1822,7 +1858,7 @@
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.12",
|
||||
"nanoid": "^3.3.17",
|
||||
"picocolors": "^1.1.1",
|
||||
"source-map-js": "^1.2.1"
|
||||
},
|
||||
|
||||
@@ -30,11 +30,13 @@
|
||||
"bootstrap": "^5.3.8",
|
||||
"chart.js": "^4.5.1",
|
||||
"chartjs-chart-sankey": "^0.14.3",
|
||||
"chartjs-plugin-zoom": "^2.2.0",
|
||||
"cuelume": "^0.1.2",
|
||||
"daisyui": "5.5.20",
|
||||
"htmx.org": "^2.0.10",
|
||||
"hyperscript.org": "^0.9.91",
|
||||
"mathjs": "^15.2.0",
|
||||
"postcss": "^8.5.15",
|
||||
"postcss": "^8.5.26",
|
||||
"pulltorefreshjs": "^0.1.22",
|
||||
"sass": "^1.100.0",
|
||||
"sweetalert2": "^11.26.25",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import Chart from 'chart.js/auto';
|
||||
import {SankeyController, Flow} from 'chartjs-chart-sankey';
|
||||
import zoomPlugin from 'chartjs-plugin-zoom';
|
||||
|
||||
Chart.register(SankeyController, Flow);
|
||||
Chart.register(SankeyController, Flow, zoomPlugin);
|
||||
window.Chart = Chart;
|
||||
|
||||
@@ -14,11 +14,6 @@ Alpine.plugin(mask);
|
||||
Alpine.plugin(collapse);
|
||||
Alpine.start();
|
||||
|
||||
const successAudio = new Audio("/static/sounds/success.mp3");
|
||||
const popAudio = new Audio("/static/sounds/pop.mp3");
|
||||
window.paidSound = successAudio;
|
||||
window.unpaidSound = popAudio;
|
||||
|
||||
/**
|
||||
* Parse a localized number to a float.
|
||||
* @param {string} stringNumber - the localized number
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
import { play } from "cuelume";
|
||||
|
||||
|
||||
window.playSound = play;
|
||||
@@ -3,6 +3,7 @@ import 'vite/modulepreload-polyfill';
|
||||
import './js/bootstrap.js';
|
||||
import './js/datepicker.js';
|
||||
import './js/htmx.js';
|
||||
import './js/sounds.js';
|
||||
import './js/select.js';
|
||||
import './js/charts.js';
|
||||
import './js/autosize.js';
|
||||
|
||||
+2
-1
@@ -6,7 +6,7 @@ readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"crispy-bootstrap5==2026.3",
|
||||
"django~=5.2.15",
|
||||
"django~=5.2.16",
|
||||
"django-allauth[socialaccount]~=65.18.0",
|
||||
"django-browser-reload==1.21.0",
|
||||
"django-cachalot~=2.9.0",
|
||||
@@ -35,6 +35,7 @@ dependencies = [
|
||||
"watchfiles==1.2.0",
|
||||
"whitenoise[brotli]==6.12.0",
|
||||
"xlrd~=2.0.1",
|
||||
"yfinance~=1.5.1",
|
||||
]
|
||||
|
||||
[tool.setuptools]
|
||||
|
||||
@@ -1,6 +1,17 @@
|
||||
version = 1
|
||||
revision = 3
|
||||
requires-python = ">=3.11"
|
||||
resolution-markers = [
|
||||
"python_full_version >= '3.14' and sys_platform == 'win32'",
|
||||
"python_full_version >= '3.14' and sys_platform == 'emscripten'",
|
||||
"python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
||||
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
|
||||
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
|
||||
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
||||
"python_full_version < '3.12' and sys_platform == 'win32'",
|
||||
"python_full_version < '3.12' and sys_platform == 'emscripten'",
|
||||
"python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "annotated-types"
|
||||
@@ -42,6 +53,19 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "beautifulsoup4"
|
||||
version = "4.15.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "soupsieve" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/43/65/318323f98dbee45d42dff61d8f047181bc6f2268a9068cfad035a46be5af/beautifulsoup4-4.15.0.tar.gz", hash = "sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7", size = 632571, upload-time = "2026-06-07T16:44:20.453Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/88/c6/92fcd42f1ba33e1184263f25bfabf3d27c383410470f169e4b8163bf9c17/beautifulsoup4-4.15.0-py3-none-any.whl", hash = "sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9", size = 109924, upload-time = "2026-06-07T16:44:21.566Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "brotli"
|
||||
version = "1.2.0"
|
||||
@@ -285,61 +309,91 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "cryptography"
|
||||
version = "48.0.1"
|
||||
version = "50.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/12/45/870e7f4bef50e5f53b9f51d4428aee5290eedf58ba443f16b1ebb7ab8e66/cryptography-48.0.1.tar.gz", hash = "sha256:266f4ee051abb2f725b74ef8072b521ce1feacf685a3364fa6a6b45548db791a", size = 832989, upload-time = "2026-06-09T22:32:31.8Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/de/41/6cbdcf9142d00fe82836fbb51e503e58088575cf7a0fe1dbff6695bf0840/cryptography-50.0.0.tar.gz", hash = "sha256:eeac2acb5a20ed25e0ad6d1df9891a520b78b404266b6d11778f25d5d691a6c9", size = 880201, upload-time = "2026-07-31T14:25:10.11Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/bc/ee4137cbbe105652c0ee4252792b78fc8e7afa4b8e61d9d5dc05a7f45731/cryptography-48.0.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:3e4a1a3232eef2e6c732827d5722db29a0cc8b27af2a4d865b094cf954be9ca1", size = 8008324, upload-time = "2026-06-09T22:31:00.702Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/85/6379d42181bfc713094f081360fc5784d6c816b599d45e7f082502d173ce/cryptography-48.0.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32143b24adb918f078134e1e230f1eb8cc04886b92c28b5f0041aaf3e5699225", size = 4696243, upload-time = "2026-06-09T22:32:33.446Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9c/87/c85d147b53323c7eb4d850920c8901377323c2a0ff8d79c262d4fee89aa2/cryptography-48.0.1-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0d27a5696721ef7a672b8c810f6aded391058e0b9486e63e6d93baf765da691", size = 4713235, upload-time = "2026-06-09T22:31:40.141Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/79/58/67cbf8cf1ee7c54b439ca07bbecf8362c07afc11a3724fea70f745784add/cryptography-48.0.1-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb86ce1af36fe65041b6db9a8bb064ee621a7e5fded0f80d475ec243477cd242", size = 4702323, upload-time = "2026-06-09T22:31:42.191Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/c6/24266ac10c47f6cd2a865f4446062b466da1d1f10b27189eac00e61bf0c9/cryptography-48.0.1-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b024e784ad6c077ee0147b35ea9cbfc1e34e1fd4c1dcca214c2794d73a12df08", size = 5300085, upload-time = "2026-06-09T22:31:58.703Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/bb/cc4b78784f97efc8c5874c2a9743708d172be6663024b34a0467885ae0c8/cryptography-48.0.1-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3752f2dbc8f07a30aad2932c986cea495b03bb554887828225da104f732852b6", size = 4746137, upload-time = "2026-06-09T22:31:31.01Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1f/52/0c44de3f5267f8fbe8e835138017522a333436166e406f0db9b9e6e3033f/cryptography-48.0.1-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:bd81490cd5801d755cf97bb68ac191f14b708470b1c7cf4580f669b9c9264cd8", size = 4333867, upload-time = "2026-06-09T22:32:28.096Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9a/2e/772d7adbfa931537bc401640b7cac9976bff689bda187833e5d63b428e49/cryptography-48.0.1-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:66fd0771e7b9c6dcd44cf1120690d2338d16d72795cf40cae2786a39eba65429", size = 4701805, upload-time = "2026-06-09T22:31:38.284Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/a3/b06844f303873493c963caf581c04df31c7035e0c1b0f02c4814d319ec80/cryptography-48.0.1-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:3fd2ca57062b241c856670b073487d2e86c4637937ca5601e48f97bf8e11fc8f", size = 5258461, upload-time = "2026-06-09T22:31:04.187Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9f/13/8b765e2e12b07c74941caadb9d1c8fdc006c4dfbf2b8f2d610519758954d/cryptography-48.0.1-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:0ee6ea481db1ab889cba043ec1eda17bb9c1ea79db6722f779c3667f9f70322f", size = 4745488, upload-time = "2026-06-09T22:32:30.07Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2e/aa/48972bce55049b32a94f4907eda4d75fa385aad8a39506cc2fc72196ecf0/cryptography-48.0.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f2ceef93cb096aa3c4cc4b5c94ca6131f9196d28c64d6111533402a9b2054d41", size = 4830256, upload-time = "2026-06-09T22:31:43.868Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/47/a2/e5079a032fb85cf6005046ca92bbd78b0c82dad2b5751ab8c311659da06f/cryptography-48.0.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9bd3f92d76217892b15df84ca256c2c113d386fdda7a7d8691aeeced976507c6", size = 4979117, upload-time = "2026-06-09T22:31:05.845Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/a0/8f50cae9c74e718ed769d63ed5c74bd0ea830c9550a74629cebd1b9c7bc7/cryptography-48.0.1-cp311-abi3-win32.whl", hash = "sha256:b9a32b876490d66c8bcc9963ef220199569748434ab01a9d6aaeabf88e7f5158", size = 3304154, upload-time = "2026-06-09T22:32:16.845Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/69/0572c77dbace6fef72f33755bd52ea399c71367250d366237f8691826b9e/cryptography-48.0.1-cp311-abi3-win_amd64.whl", hash = "sha256:39489bfca54c7a1f6b297efcd8bc608ab92d16c4ca631b0cad4da46724588b24", size = 3817138, upload-time = "2026-06-09T22:32:00.388Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/06/3e768b4c3bc78201583fa35a0e18f640dd782ff41afba88f8545481a8874/cryptography-48.0.1-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:f817adc181390bd54f2f700107a7419040fb7c1bdf2fc26f36551a06a68c3345", size = 7989830, upload-time = "2026-06-09T22:31:07.8Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/13/6476736484b94041110c8340a3eb63962fea4975baea8cb4a512adb44d4d/cryptography-48.0.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d5d30989c6917b478b5817902e85fddaea2261efa8648383d965381ccb9e1ac4", size = 4689201, upload-time = "2026-06-09T22:31:09.745Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/79/62/65a87f34d2a431546e2509b85d55e8c90df86d668f6731da64d538512ac2/cryptography-48.0.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:df637c05205ea7c1d7fbcbe54bbfea648a52951155f997af13d895d0ecc96991", size = 4702822, upload-time = "2026-06-09T22:32:24.409Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/59/810b5204b0a9b10f4b6bc06bd551a8b609803cd931806bc3b71884b225e5/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:869c3b8a53bfe27147832df48b32adadf558249d50e76cb3769d40e986b13265", size = 4694875, upload-time = "2026-06-09T22:32:08.737Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/dc/d8ca05ffea724eec6d232ea6f18e74c269eb6bdfdcc9bfba689790d1325f/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:e361afba8918070d376df76f408a4f67fec0ee9cff81a99e48fe9a233ef59e17", size = 5290385, upload-time = "2026-06-09T22:31:15.212Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/03/8c/3be6cb4da181f5bb6c19cf560c2359d60644a6b5fc5b57854e528f47b296/cryptography-48.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d069066deead00ac7f090be101be875a06855908f7ec004c27b8fefb4acfb411", size = 4737082, upload-time = "2026-06-09T22:32:22.66Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/f6/d5f60a5a1434dbfd949e227fd0065d194c7e6b6ac526b17f5c06152b8231/cryptography-48.0.1-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:09f73a725d582cef64b91281a322cd798d14a33b2b6f2b7ad9531dc336d84c02", size = 4325328, upload-time = "2026-06-09T22:32:10.777Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/b7/ba75dd947a14b6ad907b01ae8f6b5b348cdd1b48142f0063dee9e20c1d9d/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:15254441469dd6bf027039453288e2072124f8b6603563f5d759e1c9b69273fa", size = 4694530, upload-time = "2026-06-09T22:31:53.105Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/29/50d6b9e8aff12d8b67afaeb3569335e32dc83a5723e3bbded24fdac9f809/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:8ace4507d1e6533c125f4fac754f8bb8b6a74c08e92179dabd7e16571a3efbf3", size = 5245046, upload-time = "2026-06-09T22:31:25.774Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9f/04/618f4115cfc0add0838c82507aa18a346089428da8653ad38b3ff36f5cb3/cryptography-48.0.1-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:b4e391975f038e66432328639620a4aff2d307513b004f1ca06d6225bced815c", size = 4736660, upload-time = "2026-06-09T22:32:12.676Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/9c/06e062462a0de28a3b3911322eded4c16deb9f441b1b7575d3dc59488ab5/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42fcd8e26fe555d9b3577a135f5091fefa0aa4e99129c23fb56787a1bd4ada72", size = 4822229, upload-time = "2026-06-09T22:31:17.062Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/be/0561971eaaee4b8a0e7d5113c536921063ab91aaf23278ac374eaf881e11/cryptography-48.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1400da5e32a43253392277eac7490a60e497d810a63dd5608d71bbd7af507c9", size = 4966364, upload-time = "2026-06-09T22:31:32.842Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a4/27/728c77876f12b000820b69ae490f3c4083775e79e07827e9e60be07ad209/cryptography-48.0.1-cp314-cp314t-win32.whl", hash = "sha256:0df56b056bc17c1b7d6821dfa65216e62bd232d8ab05eb3db44e71d235651471", size = 3278498, upload-time = "2026-06-09T22:31:29.154Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/e3/79a612c6d7b1e6ee0edd43633d53035bec2cfb78c82b76f7864f39e36f34/cryptography-48.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:9de21387aa95e2a895823d0745b430bed4f33503ba9ab5e0b5311f33e37d66d2", size = 3798790, upload-time = "2026-06-09T22:31:56.697Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/6c/00fa2a95997164c8b2072ce327c23d4ab20809ccc323ea5fab91e53a4bba/cryptography-48.0.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:4fdc69f8e4316bcf0c8c8ec1f26f285d12e8142d88d96c876a59a03be3f6ae67", size = 7987408, upload-time = "2026-06-09T22:32:20.777Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/d9/45f309a7e4e5f3f8f121d6d3be9e94024a7726ec598d6e08ae04edb2f04d/cryptography-48.0.1-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48fe40804d4caa2288f24e70ca8c64c42dd826da0ad7e4f1b41b2128d679e6c8", size = 4690196, upload-time = "2026-06-09T22:31:54.74Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/9f/a1bc8bcc798811b8527eb374bbccf30a3f3e806829d967118222bf1125eb/cryptography-48.0.1-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86be3b1b0b6bf09482fb50a979c508d2950ed95f5621ec77f4e385962006b83a", size = 4696782, upload-time = "2026-06-09T22:31:45.615Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/c2/81a4fb4e4373c500bb526bc337ac5719dd31dd15b970b84a238168c6aa08/cryptography-48.0.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab0a343c807bbcd90c971cd1ecf072937cd01847a9e002bef88fb47ac6be577", size = 4696618, upload-time = "2026-06-09T22:31:11.564Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/0b/aa68b221dde92d09cb29a024ede17550ee21e77a404e59fc093c82bb51e1/cryptography-48.0.1-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:9621de99d2da096006b629979efd8ae7eb2d8b822488d0c89ee4000c306c59b1", size = 5289970, upload-time = "2026-06-09T22:31:20.368Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/78/13/fba657f958d2af66ea959a4ba01212632089249d34af1ae48054136344d7/cryptography-48.0.1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:88c852a0ae366e262e5a1744b685e6a433dc8788dd2a277e418bf4904203609d", size = 4731873, upload-time = "2026-06-09T22:31:22.253Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4c/4c/9a964756d24a26b3e34dfcb16f961b89838786e6700b635b0d1e3adff4b6/cryptography-48.0.1-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:43c5835e2cb98c8733d86f57d6fc879b613f5c3478607281c3e36daffc6dd8a6", size = 4330804, upload-time = "2026-06-09T22:31:36.56Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/0f/a10f3a6eb12950a10e3a874070283aa2dd5875b2bfd15fad8a3e17b3f13e/cryptography-48.0.1-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:fe0180af5bf9236518a087e35bf2d9a347d5f5f51e63c579d683ddff424e3d46", size = 4696217, upload-time = "2026-06-09T22:31:13.351Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/6f/5cd12f951165ea73ef85266775d97e4c763b2474ccfd816dd69d3a18d6f8/cryptography-48.0.1-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:b7a2d1a937a738a881737cec135a38bb61470589b17515b9f73f571d0ae10401", size = 5245252, upload-time = "2026-06-09T22:32:02.193Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/68/ab/8aaa12e4516ec4464033ab79b6f3b592bd5a92102467c4ace8a0d970203f/cryptography-48.0.1-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b74ca3b8e5ecdd833bf6a002ca41b4793bb27fb8f1c06ffaf2643c9e9140e31b", size = 4731388, upload-time = "2026-06-09T22:32:04.019Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/24/50027ea4dca85ec1f40688f3c24fb32ccacd520583c9592c3cc95628e6fb/cryptography-48.0.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2c37f2461406063b417837f5f3daab668652acd82423efcd7f0a9f04be972de1", size = 4824186, upload-time = "2026-06-09T22:32:18.707Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/52/41/04cb5eb17085ade6f50cc611fb657df6a0f5885350de8764ece89c050197/cryptography-48.0.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:86fe77abb1bd87afb251d4d02ada7ecf53a32cee9b67d976abb2e45a13297475", size = 4964539, upload-time = "2026-06-09T22:31:18.793Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/36/bf/ed70785c496e89d7e73b7cda2d21f2447fd6d4e821714b8d04ff217fed92/cryptography-48.0.1-cp39-abi3-win32.whl", hash = "sha256:6b2c0c3e6ccf3ade7750f836ef3ee36eea250cc467d45c256895573ac08cc6f1", size = 3282307, upload-time = "2026-06-09T22:30:53.162Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/ff/371ea7d252656ee1eb6d83eeeef3d1d0c6baf1d6497687d081ea03814670/cryptography-48.0.1-cp39-abi3-win_amd64.whl", hash = "sha256:9a49ca6c81417f6a5edb50375a60cccdd70fa0a91a5211829dbea74eba94d2ac", size = 3793408, upload-time = "2026-06-09T22:32:15.191Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a9/d3/eb4e394e587341fdad09a09101fa76478ead3a78b0ad63e55c22f0d75c02/cryptography-48.0.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:08a597acce1ff37f347400087776599e2348a3a8bc53b44120e463cd274efe4a", size = 3951747, upload-time = "2026-06-09T22:31:23.871Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/4a/3f43451b4f858bfceaaaffc649e6e787e8d4fb332a1d443af39ab02cc8f1/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:735824ec41b7f74a7c45fb1591349333e4c696cb6c044e5f46356e560143e4cd", size = 4641226, upload-time = "2026-06-09T22:31:02.532Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/4e/855584c2c23b09e4ce2d3b9c30e983e679cd60b068c513c6bbdb91e11782/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:92a46e1d638daa264ba2971c0b0489c9409787943efae4d60ffda3d091ef832c", size = 4668958, upload-time = "2026-06-09T22:32:06.213Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/3b/d35750e41d803d1e516fd6d6011f065424924da7af1748cef4cc9cb3ede1/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:7e234ac052af99f2700826a5c29ea99d9c1b1f80341cde62d11c8154dc8e0bd9", size = 4640793, upload-time = "2026-06-09T22:32:26.331Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/aa/cdb7181fe865285e87e96825aaab239400f1de0c3bfba9bd9769b79f1a92/cryptography-48.0.1-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:33842cf0888951cef5bc7ac724ab844a42044c1727b967b7f8997289a0464f92", size = 4668505, upload-time = "2026-06-09T22:31:27.534Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5d/8c/ce3823c06c2804f194f9e64f0d67fa3f4094a39f2bb1a990cd03603af8fc/cryptography-48.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6184ca7b174f28d7c703f1290d4b297217c45355f77a98f67e9b7f14549ac54a", size = 3742204, upload-time = "2026-06-09T22:31:34.773Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/5c/59086b4aac5e879d38ddbcf74e4be7ade89cebc3eb199a55da998c3bb46a/cryptography-50.0.0-cp311-abi3-macosx_11_0_arm64.whl", hash = "sha256:031e2d5dd4bb9caa3ca9c82e5a197fd8ae680232cee62603d1a813f3f07e3d03", size = 4001252, upload-time = "2026-07-31T14:23:33.331Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/ef/8f2df13c7216bcad3e1c74e07f6e193d93e998e114f524a53877c9af27ad/cryptography-50.0.0-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fd9192b7b70c573d7f214eb1ae35e00d359f6f5e4b27c7e21e30de1fc6204645", size = 4719554, upload-time = "2026-07-31T14:23:35.611Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/41/029086c34d91052fc3b88bcc8056f709a7c915c7a23b235a54eb800b1c97/cryptography-50.0.0-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:06a32a980526a6ab9a4b9bf8f7385800791e2bb960903cb6b530e4817509a3b7", size = 4702130, upload-time = "2026-07-31T14:23:37.635Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/ff/b6ce0954962e7f7b969f850a883744197bb3910bdfd7b6da162eab7d9f68/cryptography-50.0.0-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:a1b30560f2acc95aa8b2e06e716a13dbfc97314747b80d9707e307f77b40d6b3", size = 4725244, upload-time = "2026-07-31T14:23:39.471Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/1e/63a1027cb7fec360a182208e1b7767d5aa1fe57be3d6aa856e69a321edc0/cryptography-50.0.0-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:8d89f3976b10b4ce31118de72329025f70d2c6ead14a8217c5514dd2c6d5a78f", size = 5342265, upload-time = "2026-07-31T14:23:41.286Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6b/72/a1116d683a6d7ece94590013882515de087edf9ef0e6292aae615a44df73/cryptography-50.0.0-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b42a28c1844fd9de8f3f7d540e36b66f3a9c83fceac7170ebc7a6a19edd9dcae", size = 4734609, upload-time = "2026-07-31T14:23:43.139Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/15/37/36a9c479bbe49acea2636c7fd3360d20f7b7e079c300352011c44850b181/cryptography-50.0.0-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:900131fafd8aead39ac7dd3a7e833be754c17a95cfd91221636949fe4eb0aa8a", size = 4356517, upload-time = "2026-07-31T14:23:44.939Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/98/8a151d64367204cbc63ec65d37502f1d9c53cf4bfc6ec3c532614dbec60d/cryptography-50.0.0-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:07949c449a1abcf60d1ee6e88956d89404c7df3c8258f46589e912988e551987", size = 4724529, upload-time = "2026-07-31T14:23:46.93Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/f6/ec13b470172126464a86bf54d2294a46d29837fc51ba3e45d4047946fb5e/cryptography-50.0.0-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:f89831ef99dd7dd169ab06d63a831adb9e20a87aac6d380266bbda5823349169", size = 5299852, upload-time = "2026-07-31T14:23:48.851Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/da/3a/f05e32c99d440c9bb891ea0e36c9091891e36be5a9a87ab2ee6ea20729f6/cryptography-50.0.0-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:82148ec5bddac30b51a5b3c1945075f896fa022cb93f8e4a01e9f6ee95292c5f", size = 4734462, upload-time = "2026-07-31T14:23:50.861Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/dc/bd72b26be8953f80625f63151efd38eee71c76ca6cf591c08ff34615a79e/cryptography-50.0.0-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1489e263a8048bb8b6a8bac662eb2d402ea5d2b7b4699b72f385f1e2772db105", size = 4852708, upload-time = "2026-07-31T14:23:52.715Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/27/20/c930314a2ab476d15dec966ec87e2e9637bb02b06106b12c0396c57bb603/cryptography-50.0.0-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7cec5b856506da6defb290f30c9ee687d5f5e8cb0bd3f6459dde43b0b4fa40ef", size = 5004179, upload-time = "2026-07-31T14:23:54.887Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/2e/c9db68a0c4bfa28e310707527c0ee3a2bd254104d2e02e68f368e197aa4c/cryptography-50.0.0-cp311-abi3-win_amd64.whl", hash = "sha256:bd1c592e4d5974f0d08d4888e432157adba757c66da0246918e43677fafa2d30", size = 3840395, upload-time = "2026-07-31T14:23:56.677Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c3/fb/951032a3bf22a5697c83183fb6294a4843772947a70e616c57b3ff5f522e/cryptography-50.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:49e7d93abdbd2990caced757e5fade25302f719c3c8fb6e6fff2dde98999fc41", size = 3989258, upload-time = "2026-07-31T14:23:58.881Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d4/67/91eb047e69c5e845f2f14b8a2e4a1aab0f283cb885531e9e22c8adb176bc/cryptography-50.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:19736989797678c6af1e55cd49055cdbcb55d8f6b5583ac5335f933aba9101dc", size = 4700648, upload-time = "2026-07-31T14:24:00.702Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/82/85f0f7425c856b9f96459411eb12e74ef72df9caf6f8f15bf23a33ff131f/cryptography-50.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:80b63928fa35083b33966ce1efb70e5b9607181e49dcd1c22c8c005e319f667f", size = 4682442, upload-time = "2026-07-31T14:24:02.538Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1a/28/b555a365adff1cca2fbe7b9e487d68a40de6bc67ff2cb587473eb43de0e7/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:d58c3db7cd6eed54e6c06744db55456b65ebd7492ddeae9c1e93cfca7aa857d3", size = 4707596, upload-time = "2026-07-31T14:24:04.394Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/d8/f52538140cc719df62a01cf87d1c7142318d235817109d6f4054d7c352d6/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:df2a58a472f332225671c35b0a830208b86d004f82baa8530fa3782c85646533", size = 5314552, upload-time = "2026-07-31T14:24:06.31Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/38/14/6120e5bd7c5aa022ad15424ba4d5c5269d0d9448ed4d55e492ea91e3c1c4/cryptography-50.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:11b74db56cdbe3cdee6e3f6982ecb70334fa10dce99ed58bf7894aaaa3b2a037", size = 4717113, upload-time = "2026-07-31T14:24:08.349Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fa/71/190bf38c3ee2e0f8efc9860ae100c9df4169742eef274b91e7aa1cb133b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:f59e38625469987d7ef6d495323c55e7db6c212eaf6112267e0d3b565a2e9c9f", size = 4338580, upload-time = "2026-07-31T14:24:10.227Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/63/504ccfbbe61fd8aa983f7f146399cdf034c72c2fc55f5b2dfdcdcdb20c99/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:ecfed7367f965a0328cfbdd70da860f15441f002f613185668c6e6ebf5a0ac11", size = 4707038, upload-time = "2026-07-31T14:24:12.169Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/77/2cf79bbfc4d12ca106437a6e170d6aaa01a373e93093118aaaef0e801bd4/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:9aa87839c383bdbab6ef865787a1fb877af8dd03464c4400322726feaaadfc6d", size = 5273110, upload-time = "2026-07-31T14:24:14.38Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e5/45/8aae2972c520145377ea3559a605a899bebe227bf070b33cdb445929a9b9/cryptography-50.0.0-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:6ba6a53445bd3cfa809ef3ef5f1589aa6ba08784a1d962bf47d0940e871dab1c", size = 4716439, upload-time = "2026-07-31T14:24:16.415Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/20/4fe50b619a48c2525cc46e2dbc1ac490708d704be5d467bdaac6dc955682/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3f5735ffe4996d28b809371756219f5354864902a3b9e7c0b9ee87041209fc9c", size = 4837383, upload-time = "2026-07-31T14:24:18.553Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/91/3a31366e183343d3703f8995c095f5734676bd6938118047e50fcf279eb4/cryptography-50.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1b4a266766514614f8aa60416e71f2fc6e575d36e7bdc90f644fadb2f4b75b95", size = 4985772, upload-time = "2026-07-31T14:24:20.385Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/74/9a/02ffe35b2853d121689871eb5dce862092562b3a1ed5cc98f1aaed441506/cryptography-50.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:12b9c6996425c76ea6c457ace4f3073e715b8c545add07cd1a8f3a4f90691269", size = 3816291, upload-time = "2026-07-31T14:24:22.125Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/03/37/73d005be173aff344af30e9fd2a576575cb2391a7101d9cd3842e1fa8cce/cryptography-50.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:ccdc4a71a4dabae05de219404f9f4abc38e3b58422177ff93d0da05967dafa07", size = 4036009, upload-time = "2026-07-31T14:24:24.122Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ff/c6/7a6202a534e32103a285b7834a120869557fe198d51d7cfe59754c8bda9c/cryptography-50.0.0-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:910e1d2668e7de9648f2bcee30e180db2a6b15c30f887d7c4c93ddf96e3992e3", size = 4745252, upload-time = "2026-07-31T14:24:26.118Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/85/4f/0fa8c2f4428198f15d9ff8d63400e27afbf94ce833f6108da1eb3753f945/cryptography-50.0.0-cp39-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a91296cb61e8df6f86d0c19cc4068228da256bf59bf86049fbd821084565327f", size = 4728939, upload-time = "2026-07-31T14:24:27.994Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/63/54dd723490ba2dc09b299682c10b38db38f159728bcaae8c591b8af2f22d/cryptography-50.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e722f16708d854fe924790e051061f6704a472c3bac347b6fd88033ea8dd0dc5", size = 4748483, upload-time = "2026-07-31T14:24:30.254Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/dd/7c77d26285cc7f6991efce64a0f5b4f9383bfa5dd8c5033003eaf7db4cdb/cryptography-50.0.0-cp39-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d764dcf130c428ef66786f866dd750f53182bc608813489915e9fc106bb0c82f", size = 5367599, upload-time = "2026-07-31T14:24:32.457Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/46/c9/f60aed34c013f317f92817b6c171c2d22a78270fa41109bd4b08af26b194/cryptography-50.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:105110f43a471dbd0060b9c9516cb8a6a79233631a04cc2ba16f28323ac6e025", size = 4762647, upload-time = "2026-07-31T14:24:34.599Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/be/f3/f9a0173b139372c3a48ed98154b45cc6b9de17c789d5ab552e621c293609/cryptography-50.0.0-cp39-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:828743d939e9629bc267b8e2d08d8bb67cd4319c771a33d4b18b22dd8fb7440a", size = 4385197, upload-time = "2026-07-31T14:24:36.647Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/36/83bb81f6e569bc38e1e4a7bc80f29b46bb9601920bc455fc8e888f5d5742/cryptography-50.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:2a8183b489dc1f7f80f135780fadc1108f14b31b8a40411c7a5b17425f65f28b", size = 4748095, upload-time = "2026-07-31T14:24:39.493Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6b/16/d3008eff98c764979865834c3d386d4fd041b5f52e7f34fc29ac1a5eb515/cryptography-50.0.0-cp39-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:6e7d61120573a7f2cd94cc095f9e81f6967c61ccdf194285aa143ecec8e0b708", size = 5325948, upload-time = "2026-07-31T14:24:41.556Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9c/f8/d97f9603efda3888187bfdb893f26c41be4735c10631d05d284ee6b047c4/cryptography-50.0.0-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:37fdb0d0111f1e2ff07139dfb79f1b49531f8e213c46f1163dd7642979b58c47", size = 4762400, upload-time = "2026-07-31T14:24:43.636Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/a2/4615c8f7d81a00b1d6e6afe19f694e1543582349fb5f4076f6cb5dc36485/cryptography-50.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c87f62a3d3b9888ed0fdde100ec06aa61ca9cd44bad9057d1dff9a516b5f5bb9", size = 4878208, upload-time = "2026-07-31T14:24:45.522Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/1a/efcfb02f91407149a0dacffffab791f7e19bf6385f63b3666dc8b5e5c9c8/cryptography-50.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:65c2c3add92b45fd0709db8594536aea39c2a67af0e27ffcf049c498501140b7", size = 5037050, upload-time = "2026-07-31T14:24:47.697Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/30/4a22984d4f1bdfb8c054f07a92bc176b97a3134cc1d6c4b3bffb1f3688b4/cryptography-50.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:d24fead1d4d076e1bfb006dcec392074a3cd8d7b4fc8a595aa64073b2b7a96ba", size = 3874135, upload-time = "2026-07-31T14:24:50.085Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/3e/e54cde8c01631a5a8226ccd617eab9e57fd5cfdad90f1a9e6bb570794631/cryptography-50.0.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5e34edd123674534acd70147f0ca331eaa2c74e6325fb2028c886aa26ba0b68c", size = 3963170, upload-time = "2026-07-31T14:24:51.968Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/b6/0b9e125e90f3d2dcf599a218a899cda7326a3158cfa258723f0b398b08f6/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8eb5e1172eb569ea8a872796576e6a67c276351728b6455d5beb01242b027c6a", size = 4692441, upload-time = "2026-07-31T14:24:53.743Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/c9/a5151588710785a96d7bc4de27d4cd62f263bbbcb203cfe29df537eb6505/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:910d11e1a385c654bf738bf3e6b8e6ed5de0f5610fcae2be9e5b398d8081d20e", size = 4699810, upload-time = "2026-07-31T14:24:55.746Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/1a/15b92b25eb6ce3089cd49377ae990a0f3ad485a510f968aed1f19dbdcdf2/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:62598a8a57f815db4c6259a4e97d857dab56697e7de8e8ab02352ab74da1995d", size = 4691924, upload-time = "2026-07-31T14:24:58.082Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/15/219075012ab13e8905f3cd572204f4acb4b111df787104346b9bc0cea789/cryptography-50.0.0-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:07479a1cb08219ab719147e742e76090c9c773321959bb94946fffdd397a6437", size = 4699593, upload-time = "2026-07-31T14:24:59.951Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/b5/c2c5fce26f0ee40d21bafe7f191d29a34b35a65ac4fe8a1191d1983612e9/cryptography-50.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c99c003e088647b8a5b7c145d6f78c335f6348332b62e142d411c4b63d1460b9", size = 3813796, upload-time = "2026-07-31T14:25:02.298Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "curl-cffi"
|
||||
version = "0.15.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "certifi" },
|
||||
{ name = "cffi" },
|
||||
{ name = "rich" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/48/5b/89fcfebd3e5e85134147ac99e9f2b2271165fd4d71984fc65da5f17819b7/curl_cffi-0.15.0.tar.gz", hash = "sha256:ea0c67652bf6893d34ee0f82c944f37e488f6147e9421bef1771cc6545b02ded", size = 196437, upload-time = "2026-04-03T11:12:31.525Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/5e/42/54ddd442c795f30ce5dd4e49f87ce77505958d3777cd96a91567a3975d2a/curl_cffi-0.15.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:bda66404010e9ed743b1b83c20c86f24fe21a9a6873e17479d6e67e29d8ded28", size = 2795267, upload-time = "2026-04-03T11:11:46.48Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/2d/3915e238579b3c5a92cead5c79130c3b8d20caaba7616cc4d894650e1d6b/curl_cffi-0.15.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:a25620d9bf989c9c029a7d1642999c4c265abb0bad811deb2f77b0b5b2b12e5b", size = 2573544, upload-time = "2026-04-03T11:11:47.951Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/b3/9d2f1057749a1b07ba1989db3c1503ce8bed998310bae9aea2c43aa64f20/curl_cffi-0.15.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:582e570aa2586b96ed47cf4a17586b9a3c462cbe43f780487c3dc245c6ef1527", size = 10515369, upload-time = "2026-04-03T11:11:50.126Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/1d/6d10dded5ce3fd8157e558ebd97d09e551b77a62cdc1c31e93d0a633cee5/curl_cffi-0.15.0-cp310-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:838e48212447d9c81364b04707a5c861daf08f8320f9ecb3406a8919d1d5c3b3", size = 10160045, upload-time = "2026-04-03T11:11:52.664Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5c/12/c70b835487ace3b9ba1502631912e3440082b8ae3a162f60b59cb0b6444d/curl_cffi-0.15.0-cp310-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b6c847d86283b07ae69bb72c82eb8a59242277142aa35b89850f89e792a02fc", size = 11090433, upload-time = "2026-04-03T11:11:55.049Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/0d/78edcc4f71934225db99df68197a107386d59080742fc7bf6bb4d007924f/curl_cffi-0.15.0-cp310-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:9e5e69eee735f659287e2c84444319d68a1fa68dd37abf228943a4074864283a", size = 10479178, upload-time = "2026-04-03T11:11:57.685Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5b/84/1e101c1acb1ea2f0b4992f5c3024f596d8e21db0d53540b9d583f673c4e7/curl_cffi-0.15.0-cp310-abi3-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:aa1323950224db24f4c510d010b3affa02196ca853fb424191fa917a513d3f4b", size = 10317051, upload-time = "2026-04-03T11:12:00.295Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/42/8ef236b22a6c23d096c85a1dc507efe37bfdfc7a2f8a4b34efb590197369/curl_cffi-0.15.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:41f80170ba844009273b2660da1964ec31e99e5719d16b3422ada87177e32e13", size = 11299660, upload-time = "2026-04-03T11:12:02.791Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/01/56aeb055d962da87a1be0d74c6c644e251c7e88129b5471dc44ac724e678/curl_cffi-0.15.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1977e1e12cfb5c11352cbb74acef1bed24eb7d226dab61ca57c168c21acd4d61", size = 11945049, upload-time = "2026-04-03T11:12:05.912Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/8c/2abf99a38d6340d66cf0557e0c750ef3f8883dfc5d450087e01c85861343/curl_cffi-0.15.0-cp310-abi3-win_amd64.whl", hash = "sha256:5a0c1896a0d5a5ac1eb89cd24b008d2b718dd1df6fd2f75451b59ca66e49e572", size = 1661649, upload-time = "2026-04-03T11:12:07.948Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3d/39/dfd54f2240d3a9b96d77bacc62b97813b35e2aa8ecf5cd5013c683f1ba96/curl_cffi-0.15.0-cp310-abi3-win_arm64.whl", hash = "sha256:a6d57f8389273a3a1f94370473c74897467bcc36af0a17336989780c507fa43d", size = 1410741, upload-time = "2026-04-03T11:12:10.073Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/19/6a/c24df8a4fc22fa84070dcd94abeba43c15e08cc09e35869565c0bad196fd/curl_cffi-0.15.0-cp313-abi3-android_24_arm64_v8a.whl", hash = "sha256:4682dc38d4336e0eb0b185374db90a760efde63cbea994b4e63f3521d44c4c92", size = 7190427, upload-time = "2026-04-03T11:12:12.142Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/11/56/132225cb3491d07cc6adcce5fe395e059bde87c68cff1ef87a31c88c7819/curl_cffi-0.15.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:967ad7355bd8e9586f8c2d02eaa99953747549e7ea4a9b25cd53353e6b67fe6d", size = 2795723, upload-time = "2026-04-03T11:12:13.668Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/07/8f/f4f83cd303bef7e8f1749512e5dd157e7e5d08b0a36c8211f9640a2757bf/curl_cffi-0.15.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7e63539d0d839d0a8c5eacf86229bc68c57803547f35e0db7ee0986328b478c3", size = 2573739, upload-time = "2026-04-03T11:12:15.08Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/5c/643d65c7fc9acd742876aa55c2d7823c438cb7665810acd2e66c9976c4d9/curl_cffi-0.15.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:08c799b89740b9bc49c09fbc3d5907f13ac1f845ca52620507ef9466d4639dd5", size = 10521046, upload-time = "2026-04-03T11:12:17.034Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/0b/9b8037113c93f4c5323096163471fa7c35c7676c3f608eeaf1287cd99d58/curl_cffi-0.15.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b7a92767a888ee90147e18964b396d8435ff42737030d6fb00824ffd6094805", size = 11096115, upload-time = "2026-04-03T11:12:19.694Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/96/fff2fcbd924ef4042e0d67379f751a8a4e3186a91e75e35a4cf218b306ee/curl_cffi-0.15.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:829cc357061ecb99cc2d406301f609a039e05665322f5c025ec67c38b0dc49ce", size = 11305346, upload-time = "2026-04-03T11:12:22.151Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/1b/304b253a45ab28691c8c5e8cca1e6cbb9cf8e46dfceae4648dd536f75e73/curl_cffi-0.15.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:408d6f14e346841cd889c2e0962832bb235ba3b6749ebf609f347f747da5e60f", size = 11949834, upload-time = "2026-04-03T11:12:24.986Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/ff/4723d92f08259c707a974aba27a08d0a822b9555e35ca581bf18d055a364/curl_cffi-0.15.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b624c7ce087bfda967a013ed0a64702a525444e5b6e97d23534d567ccc6525aa", size = 1702771, upload-time = "2026-04-03T11:12:28.201Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/59/8c/36bbe06d66fa2b765e4a07199f643a59a9cd1a754207a96335402a9520f4/curl_cffi-0.15.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0b6c0543b993996670e9e4b78e305a2d60809d5681903ffb5568e21a387434d3", size = 1466312, upload-time = "2026-04-03T11:12:30.054Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -353,16 +407,16 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "django"
|
||||
version = "5.2.15"
|
||||
version = "5.2.16"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "asgiref" },
|
||||
{ name = "sqlparse" },
|
||||
{ name = "tzdata", marker = "sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/2b/e3/31722f7284c9f43333daff9aee9184678e4487adcb5506af0db8cea09ce1/django-5.2.15.tar.gz", hash = "sha256:5154a9bf84ac01dde011e367f355c07dbb329532e06810dcf3ef2af269e236e7", size = 10873669, upload-time = "2026-06-03T13:03:35.892Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/a9/26/889449d521ae508b26de715954faecd8bcf3f740affb81b2d146a83b42a5/django-5.2.16.tar.gz", hash = "sha256:59ea02020c3136fce14bef0bbece21a10a4febef5eed1c51c22ae468efa22200", size = 10890894, upload-time = "2026-07-07T13:52:17.005Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/92/b5/38140b1643c00d5c46ce69c78e6980fd285aee223100319631bedee4f5e7/django-5.2.15-py3-none-any.whl", hash = "sha256:0eb4a9bb1853a35b0286dbc6d916bd352c8c2687195a7f2d6f80cefd840e4970", size = 8311957, upload-time = "2026-06-03T13:03:31.329Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4e/13/1e5e3e4c15dcecb04281b3cb2a46a4670e1cef131068e202f6040df19224/django-5.2.16-py3-none-any.whl", hash = "sha256:04f354bf9d807a86ad1a8392fe3808d362358a8eafc322848e0e43e59b24371d", size = 8311943, upload-time = "2026-07-07T13:52:11.223Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -632,6 +686,27 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/72/24/fb7da4d6613de7001feaf540d4b5969c6b5a1c42839043b0196cb13aa057/jwcrypto-1.5.7-py3-none-any.whl", hash = "sha256:729463fefe28b6de5cf1ebfda3e94f1a1b41d2799148ef98a01cb9678ebe2bb0", size = 94799, upload-time = "2026-04-07T00:35:35.085Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "4.2.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "mdurl" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mdurl"
|
||||
version = "0.1.2"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mistune"
|
||||
version = "3.3.0"
|
||||
@@ -641,6 +716,158 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/76/b90f9d48d43fbd80a79a20d3eab2e5109859c7a56dc663b23187385898f3/mistune-3.3.0-py3-none-any.whl", hash = "sha256:a758e578acda49d8195f9a860b132dae2cf7bf409381393b1c4e6e489a65397b", size = 61250, upload-time = "2026-06-21T13:11:37.938Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "multitasking"
|
||||
version = "0.0.13"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/be/c3/ac2cc9307fb15cc28ed6d4a9266b216c83ee7fe64299f0264047982bce88/multitasking-0.0.13.tar.gz", hash = "sha256:d896b5df877c9ca5eeddbf0e5994124694d6cb535aba698fb23344c7025155a1", size = 20585, upload-time = "2026-04-23T12:14:15.049Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d3/1c/24dbf69b247f287401c904a396233a43c89fd4fb9b7cd2e50e430e9cd57c/multitasking-0.0.13-py3-none-any.whl", hash = "sha256:ec9243af140c67bfe52dc98d7173c294512735a88e8425c458b250db99dc2b48", size = 16380, upload-time = "2026-04-23T12:14:13.776Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.4.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
resolution-markers = [
|
||||
"python_full_version < '3.12' and sys_platform == 'win32'",
|
||||
"python_full_version < '3.12' and sys_platform == 'emscripten'",
|
||||
"python_full_version < '3.12' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/d0/ad/fed0499ce6a338d2a03ebae59cd15093910c8875328855781952abf6c2fe/numpy-2.4.6.tar.gz", hash = "sha256:f3a3570c4a2a16746ac2c31a7c7c7b0c186b95ce902e33db6f28094ed7387dda", size = 20735807, upload-time = "2026-05-18T23:37:14.07Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b3/49/ec46835a70be8fa6446c495126ac84fdb28cb2558e1620ffb87a10c8b64c/numpy-2.4.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4", size = 16969194, upload-time = "2026-05-18T23:33:13.503Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0e/0d/f5957185c0ee2f3e12f78715aa9e3b353fd83633316c8532b38faa37e3f6/numpy-2.4.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:110f8b71aacb688ec69062bb7f6938a0f8acb01b7c1c4beb453c65b6d234584d", size = 14964111, upload-time = "2026-05-18T23:33:17.795Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/40/40a40ee0ddf7ceb782c49af278894b686e586d65d8c1889c8b5da01a3d7d/numpy-2.4.6-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:4cfe66903cc32a9921a6733d96b19bb6abf310397581bbad89c228f5abaf0ee8", size = 5469159, upload-time = "2026-05-18T23:33:20.654Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/13/f9a8046535cb21deae82f8d03de9617e08882d274fad2539630761888228/numpy-2.4.6-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8155154c7c691289fe18f510b5d4657c68c67989f293f0535a91360392ff6538", size = 6798936, upload-time = "2026-05-18T23:33:22.987Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/a8/6fa8c1a345a8c85dbb21932c447bee07c30a2c2a3f31e369c0a84b300147/numpy-2.4.6-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ab0a9c4ffb1a6d95ef519fe4247dba8eb6b18ad93999f76b7f657039acabd47", size = 15966692, upload-time = "2026-05-18T23:33:26.62Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/03/74fe2a4cb3817d94d86402f2506554130a2f01414e299b5a843e5a8a957f/numpy-2.4.6-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:89cd468399cfd2504718f0ba50e410dca55a170b61a02ad92bb18c8a65186e93", size = 16918164, upload-time = "2026-05-18T23:33:29.955Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/80/3615be3313f7e7696609bc194b9f0101da809df79e859bdb84e0cd043f46/numpy-2.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2d37ab77531417474168eb79d6d80b14f821a966818505d03013d0833edb7a8", size = 17322877, upload-time = "2026-05-18T23:33:34.724Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/ac/a691e0fe2675e370d0e08ff905adc49a1c8830e8cae03efe4477e92cd55d/numpy-2.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f407cb6b8e9d6d8c626bc73c945db1706035af8fd632295547bf1c9e46d092d6", size = 18651487, upload-time = "2026-05-18T23:33:38.217Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/15/a7/9bc1cd626d7bf6869bfedf27b91b6ab5dd607758bf8e959d6fa80c6a59cb/numpy-2.4.6-cp311-cp311-win32.whl", hash = "sha256:ddea102b48f9e339f3948bf22040944184627a30fdf7f858667673b9c5f033c8", size = 6233945, upload-time = "2026-05-18T23:33:41.331Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/31/7fc6239c12bce7e931463251cca4426c465e1876ba3cc785402ef4dd8f4e/numpy-2.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:1e254a00cdf42b1e4d5b3d68d33af63268d41340d8885df2ab6470f2e1500147", size = 12608406, upload-time = "2026-05-18T23:33:44.131Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/27/83/140f85a466595a16382996a1bf06b2b54bcd597488921b0c9daaeeda72af/numpy-2.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:ed9749eef4cbd126da3dc1d6bcb3a57f5eb7ac6a6484146bdbf743f552dfc577", size = 10479528, upload-time = "2026-05-18T23:33:50.725Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/2a/3d7b5ac8aac24feaf9ad7ed58f45b0bbc06d37e4338ae84c9f2298b570f9/numpy-2.4.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1", size = 16689119, upload-time = "2026-05-18T23:33:54.065Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/12/92c4c131527599e8288d6918e888d88726f84d805d784b771f32408aeaef/numpy-2.4.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ebfb099f8dcf083deef3ac1ca4c1503f387cf76296fcb3816b66f5ecb5f54fdb", size = 14699246, upload-time = "2026-05-18T23:33:57.621Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ad/fe/c0a6b7b2ca128a8fb228575147073b660656734b8ebe4d76c8fd748dcc79/numpy-2.4.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3213d622a0283a39a93d188f3cf72b26862df52fbb4ca3697f51705016523d41", size = 5204410, upload-time = "2026-05-18T23:34:00.302Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/d4/9770d14ba719432bb90a421bfd443872ed0f70f7264b64bec12ea363d5fd/numpy-2.4.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:357cc07a6d7b0b182ff02249616a03742827ebb1277546b5c7cd7f7620a45698", size = 6551240, upload-time = "2026-05-18T23:34:02.852Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c9/c6/50a46a6205feba2343f1d6d17438107c5dc491ed1c736e6ea68689fd906b/numpy-2.4.6-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f9fb9157b4ce2971008323afe46053787b526ef624fea915b261468a8421a0f", size = 15671012, upload-time = "2026-05-18T23:34:05.485Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/99/60/14115e6364fa676c5397c2ad3004e527e9aa487abf5d0706ec81bbd08529/numpy-2.4.6-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90f9849678c75fe7afa2d348ac842c168b0a4d3d61919687216dfc547976d853", size = 16645538, upload-time = "2026-05-18T23:34:09.265Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ae/c5/693cbe59e57db94d2231fa519ca3978dc9e19da5a8f088588f5c6e947ff2/numpy-2.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c1a2af6c6ef86344a6b0db6b97834208bf598db514f2b155042439b62605601a", size = 17020706, upload-time = "2026-05-18T23:34:13.053Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ef/fc/85b7c4eff9b4966ade25c2273cf7e7012e92366c032058653934b37de044/numpy-2.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e5805d5a22fd19c8ccff10a9561f9df94436b0545619ea579db2d3c35294bce2", size = 18368541, upload-time = "2026-05-18T23:34:17.024Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f6/81/e1b27545deedce7f4a0b348618c6b62d74e36a4dc9ccd42f3eb2f85eee32/numpy-2.4.6-cp312-cp312-win32.whl", hash = "sha256:e3eeb0aabd6bd5ce64faae67e9935203a6991b4bc2a485a767fbafb2c5125f45", size = 5962825, upload-time = "2026-05-18T23:34:20.3Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/ca/feab00bd44aa5fe1ad2c18f08b4d3bb92e26484b0b1d1443897809ed528c/numpy-2.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:d8e8286dd7cea7895157318d1b91cdacac64c479f3cbc8dce548331728484751", size = 12321687, upload-time = "2026-05-18T23:34:23.095Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/cf/5a6d34850a39d1093558564f77ee8e8e0bee5061151b8f05a55711001ec7/numpy-2.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:4081eb135ac24158bd51cdfbef16f1c64df7063b1143f24731387137c092bec8", size = 10221482, upload-time = "2026-05-18T23:34:25.876Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/82/bdab26d7438c6791ca31b7c024ca37c1eab8b726ba236129005cd4a06e45/numpy-2.4.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:511dbaf848decaaaf4b4ca48032619fb3138710c4bf7da7617765edad1ef96b0", size = 16684648, upload-time = "2026-05-18T23:34:29.41Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1b/30/a80189bcc7f5e4258b3fbc3968d909d1756f54d023299ecc39ad6fdb9ef8/numpy-2.4.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bf162abab1c1a736333192707cef898e735a5ca00f38f27eeedf44b39d9e85eb", size = 14693902, upload-time = "2026-05-18T23:34:33.013Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/97/12/70b5d0d7c15e1ebb8a6a84a8caa1d19e181d84fb58bb6d70aca29099dec1/numpy-2.4.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:043191bfa8eab18c776647b62723ac9dddece59743b13f49b2016094129c2b3f", size = 5198992, upload-time = "2026-05-18T23:34:36.132Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ba/8c/ebd2a8f8a83541f8d38cc5667e8c2b69cecfd30da6e45693e8158857d44b/numpy-2.4.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:6180d8b35af935aed8ece3a85e0a43f87393ae0ac87c8d2c8bd2c993f7270ef3", size = 6546944, upload-time = "2026-05-18T23:34:38.484Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bb/c5/7b863a97a91671a0338f4253bd3b5a3d3852f0692dae91711c9f4a10e787/numpy-2.4.6-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72fbe16c6fac95aedf5937fa873445cec2110be35d8a4e9433d7501fd98dae6b", size = 15669392, upload-time = "2026-05-18T23:34:41.257Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a5/9d/3584b9984ca4c047aea75214ce1a4c4c73d849bd71b604264b7f5653f8a8/numpy-2.4.6-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7830bab239b79cda9c08c2da014761cafb48da6150e1da17ac06283f43b6089", size = 16633220, upload-time = "2026-05-18T23:34:45.075Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/05/ae/7c67fba23bd98caec7c99261f3a16072ade14813486b0282cb29846de832/numpy-2.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ef4aea96ce4d3b074422cb4f2f64e216bf9e213004bb58ecfdf50ea02ea8eb9a", size = 17020800, upload-time = "2026-05-18T23:34:49.065Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/5d/3b6725cb31d983c5e66916f5d36f6d7e5521129e4c4404d64f918292a5b6/numpy-2.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dfa20cc6ca228e6b155b11da03825975ce66aea520985dbbddf0f2a5a495c605", size = 18357600, upload-time = "2026-05-18T23:34:52.709Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f7/da/2ccc6c2fe8898dee01d90c75c5f5f914a23daf99e3e0f59516a08760c8b5/numpy-2.4.6-cp313-cp313-win32.whl", hash = "sha256:56b39e5e0622a09a25bf5baf62f4bcf0cb8a41ae6e2819cf49bbc5a74c083f91", size = 5961134, upload-time = "2026-05-18T23:34:55.618Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/cd/9cc4dc876fb065d5c220aae4d5e14826b2715331bb7618ce1fb07a679d99/numpy-2.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:c4fc99836233ea196540b17ab0983aff60ed07941751930f5f4d05bc3b3b7359", size = 12318598, upload-time = "2026-05-18T23:34:58.928Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/39/1e/c0bcba1f8694116485fe28fd1be698c278fcda4141c5b0e53a2aed8b12a8/numpy-2.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a7c711e21628b52034bb5ab8d1bce291f752fcc5e92accc615778acee1ff4778", size = 10222272, upload-time = "2026-05-18T23:35:02.167Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/6d/cc5619247c8f4204e507f5883528372e4ac4bb189e579fb859a12e480b1f/numpy-2.4.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:112b06a867b235ef466ed3508ddf0238050df9c727cafb5301ac385b899189a1", size = 14821197, upload-time = "2026-05-18T23:35:05.468Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/00/58/f1c39161c87d9e9bed660f1ed4bafc0e403d5ec9650b6dd77aead07d489b/numpy-2.4.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:eaf7fa2de5c0be8ae6ff8e9bea2ccd725e980541244521d8d4b5f3354a27babe", size = 5326287, upload-time = "2026-05-18T23:35:08.693Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/af/57/3917ab0fd97f271a8694513581b8a36c655f111c446852c302f04ccdb6fc/numpy-2.4.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:7265a2f3d436e54ef9f2b52b5c937e6be778781bd97a590319d7348f1c1ca997", size = 6646763, upload-time = "2026-05-18T23:35:11.459Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/0f/037e64c494b67581ae18193d770adef354c41f3f2c8ebf865602d949bf8f/numpy-2.4.6-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f74a575920ab21fe304421a3fc28793d82e299cae9eccb37084e9fc7f3617c20", size = 15728070, upload-time = "2026-05-18T23:35:14.79Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/21/a6/5d2bae9c9542eb4df16dc9c46dc79c186e9bad53805dfa5399a6023c6db0/numpy-2.4.6-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ede83e07a75dd06bc501566c1eca2afc0d61677c1472ac9ad93fdee6e638a48d", size = 16681752, upload-time = "2026-05-18T23:35:18.836Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/14/23d1dfb410ae362cd59ce53e936b1513d545eb40db3949ced632e19a459e/numpy-2.4.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:68bb27509ac1b9a3443094260f6326150663b06abe40b73a2f81160623da5b67", size = 17086024, upload-time = "2026-05-18T23:35:22.52Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/6e/23595a2c642cdf3bc567877064bdd7f91c8b0038a4453cf2daf7248eafe9/numpy-2.4.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a0df0043bdb289bde1f62da130d20df23d58b45429f752bc7a8fc5325a225ecd", size = 18403398, upload-time = "2026-05-18T23:35:26.398Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/90/0ac3bc947217e66dec77e7cbc6a1979d1af70b6461b82f620d3bccd5e4c8/numpy-2.4.6-cp313-cp313t-win32.whl", hash = "sha256:29a287e0cf63ff528da061de6b9f64a4618da591ca1046aafc54062e40ca7eab", size = 6084971, upload-time = "2026-05-18T23:35:29.387Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/77/71/5673e351671a1d2bd6063b91b44f70c0affea7d1516fa7a6572941ba4aa1/numpy-2.4.6-cp313-cp313t-win_amd64.whl", hash = "sha256:25c692919ac5a01f170a3bfcd62d745b24fd095c353d50812637d6fcab442e75", size = 12458532, upload-time = "2026-05-18T23:35:32.175Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3f/88/19d3503c5046e688f049274b27a3ef3d771152fa80d3ba3d01a3dff61abe/numpy-2.4.6-cp313-cp313t-win_arm64.whl", hash = "sha256:1e978ec1e8bd0e0e4de6bb75de9d30cbb74db6b6a2bb727618613703ca0167dd", size = 10291881, upload-time = "2026-05-18T23:35:35.465Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/91/3ab2044d05fd16d343c5ac2e69b127f1b2854040dd20b193257c78028bd3/numpy-2.4.6-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06ca2f61ec4385a07a6977c55ba998a4466c123642b4a32694d3128fce18c079", size = 16683458, upload-time = "2026-05-18T23:35:38.353Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/62/764ce66fa4147ae6d73071a3abf804ffe606f174618697c571acdf26a7c9/numpy-2.4.6-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:38efbc8de75c7a0fc1ac190162d892787f3f47b57cc291231aafee36b80982b7", size = 14704559, upload-time = "2026-05-18T23:35:42.14Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/60/61/23f27c172f022e04025b7dc2367f4d63c1a398120607ec896228649a6f48/numpy-2.4.6-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:d581b735e177fdcdce6fed8e7e8880a3fb6ee4e3653a3ac6af01c6f4c03effc5", size = 5209716, upload-time = "2026-05-18T23:35:45.377Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/03/71/21cf70dc6ea3e3acb95fc53a265b2fc248b981f0194ceb5b475271b8809d/numpy-2.4.6-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:0a041d3d761dc3c35cc56ce0351506a02bcbc25f7b169f652435141a17db9096", size = 6543947, upload-time = "2026-05-18T23:35:47.926Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/91/64288395ee1799bd2e0b04a305dce9666da90c961e1f3fe982a05ee1c036/numpy-2.4.6-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40fdc1ae7125e518ea98e53e69a4ebc27e1fd50510c47b7ea130cf21e5e1d42b", size = 15685197, upload-time = "2026-05-18T23:35:50.863Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f3/eb/ebffaa97dc55502df69584a8f0dcf07f69a3e0b3e2323670a2722db9aa39/numpy-2.4.6-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2c306dea656c12c68f51f4cea133cbe78ca7435eb28c735eac1d3ebe73be6e8", size = 16638245, upload-time = "2026-05-18T23:35:54.752Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/0b/54f9da33128d7e350fab89c7455902eeae70349ee52bddb448dc4a576f45/numpy-2.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:33111801a01c12a8a1e3721f0a9232f8cfc8ae2c6b7098167e6f623c6073f402", size = 17036587, upload-time = "2026-05-18T23:35:58.355Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b6/f0/fdebc1052db1cc37c64beb22072d67cd6d1c71adca1299f53dec2b5e20d3/numpy-2.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae506e6902902557576a26ff33eda8695e7ecb3cb36c3b573a0765dee114ebdb", size = 18363226, upload-time = "2026-05-18T23:36:02.845Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/aa/b4/298628d98c72b57e57f7165ae6a481a1deaf6f3c28262a6e4c739c275930/numpy-2.4.6-cp314-cp314-win32.whl", hash = "sha256:aaf159caa35993cb1f56fb9b8e4610d35758e7ca005412eb1daa856a78c9c4b1", size = 6010196, upload-time = "2026-05-18T23:36:05.92Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/df/ac/46de6dda46478f7942f839e094970be2d4a861e005c4b3bf07c92e291a09/numpy-2.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:b507f5c4c1d508876d1819b6bf9a49d365b96320b5d4993426b33a23ca4b8261", size = 12450334, upload-time = "2026-05-18T23:36:09.107Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/78/92/b8b798ac784102c0da830d2257d59358e3d3d90d1e2b3f2575dad976c5cf/numpy-2.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:6f41ae150c4e32db4f3310cdaf64b1593a03dbabe29eec77fc9b50fe64061df6", size = 10495678, upload-time = "2026-05-18T23:36:12.766Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/34/ec28d1aa8115971537c01469ab2011ee96827930f0a124de1000cc2a7ed7/numpy-2.4.6-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ece3d2cfe132e7d51f44a832b303895e6f2d499c5e74dfbdb06ee246147a304a", size = 14823672, upload-time = "2026-05-18T23:36:16.473Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/bd/f6d1fede4e54e8042a7ff97bb495510f3c220f94bcd9e8b228e87c92cc0d/numpy-2.4.6-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:e3e5193ef5a3dc73bceee50f7fdc2c90dbb76c42df8d8fae3d1067a583df579e", size = 5328731, upload-time = "2026-05-18T23:36:19.767Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/f0/e105b9e2fd728a9910103884decd6951d9dd73896b914a98d9a231de02ee/numpy-2.4.6-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:17f9ade344e7d9b464a084d69bcf18fc691cb1db67c62ed80820bf4926d78f0e", size = 6649805, upload-time = "2026-05-18T23:36:22.266Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/82/dd/1206a7ca6ab15e3f02069707ca96222e202af681bb73756da7527f3cb837/numpy-2.4.6-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cd5ffd25db4e7ba6a375693b3fc0fc1791ec636c17db3720da19bde7180ec43", size = 15730496, upload-time = "2026-05-18T23:36:25.713Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/51/e7/38d3ea825dcab85a591734decb2f6c67caa7c8367d374df1a1c3842f9b07/numpy-2.4.6-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7d92c3819208a60205a12a245c91ad70cb0a85336659b19b834205573ac8456e", size = 16679616, upload-time = "2026-05-18T23:36:29.652Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/93/b7/caabfdf53edf663e0b4eb74d7d405d83baef09eb5e83bcd32d601d72b93e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e85b752a1e912b70eaad4fafbd4d1238007ab221de2009b9a2f5ae7461239895", size = 17085145, upload-time = "2026-05-18T23:36:33.449Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f9/45/68d7c33a6bcf3e5aa3bdbd57a367e6f615286dfd6482f97e8ffeb734306e/numpy-2.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:29cb7f67d10b479ff07c17d33e39f78c07f71c40ef30d63c153d340e96cd3fb4", size = 18403813, upload-time = "2026-05-18T23:36:37.369Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9c/50/0753655aa844c99cd9e018aacf76f130f1bd81d881bb74bc0aef5d73a8ba/numpy-2.4.6-cp314-cp314t-win32.whl", hash = "sha256:260a5d70215b61ab4fadf5c7baacd64821842975eea312125ed3c39a6391b063", size = 6156982, upload-time = "2026-05-18T23:36:40.817Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/d4/7c67becf668f973cb490cec3e98dfd799d866f9c989a54d355672cfa0db6/numpy-2.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:81a1cca95ed5bb92aa8b10dd2cdc9a0d3853a50fad926c28b5d7e8ea54389627", size = 12638908, upload-time = "2026-05-18T23:36:43.996Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/43/bb/e1c71a4295b1b1d1393d50dbb4f2a36283c6859d9d3892e84f00ec5a91d5/numpy-2.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:0c9136e14ed34a9e343a31c533d78a9813a69a3148332bce5e9821cb2f996e66", size = 10565867, upload-time = "2026-05-18T23:36:47.114Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/de/12/b422cc84439adc0d00de605bf4a308890ae5c26f2c71fbd73e5d08fbb0dd/numpy-2.4.6-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:55cced7c52e981362f708ad635198e97a752dfba412cc03c23bbf3bd8d5cd662", size = 16847511, upload-time = "2026-05-18T23:36:50.673Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/44/53/f481bef68011740f8849418d82db07230e825013f31f4eef5ba5b805316a/numpy-2.4.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d6da64deb6b8ed903e7560180a92f2d804ee1ba5eeb849ac2748b8c1aba1f6d7", size = 14889064, upload-time = "2026-05-18T23:36:53.879Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/57/42ed575c10ced8af951d426bc4e1f8aff16fd851db33f067036215a7f860/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:68a5124b13fa6cc2086764a20005d30bc0548146f7f5322f02fce212ca14317f", size = 5394157, upload-time = "2026-05-18T23:36:57.194Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6a/ef/f66cc724fcc36c1e364c67f51ae9146090b8b584f27d58b97fdae3edd737/numpy-2.4.6-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:948424b06129ce883307e8cff868c31396d8dc7630a59c61d70d98dbe70f222c", size = 6708728, upload-time = "2026-05-18T23:36:59.575Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1a/9c/c531f2293b91265d8b48e9b329f54fdd7ffae73cb4134ea10cca4237e9cc/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5dbbdb29840ca3d91ee0fece42fc29278886d908280bfec0a5846c6f901a3eb0", size = 15798374, upload-time = "2026-05-18T23:37:02.674Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1a/b0/413077f6b1153ed3cba361401c6783bbad6114804a000cc22eb71c13e190/numpy-2.4.6-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8ad03c0965fb3c692200e74d458ca28c1dbb4ce96f9a479a8aa041ad5fabca02", size = 16747286, upload-time = "2026-05-18T23:37:06.327Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/15/ce/e5ec180bc41812edcd8daeb8639d205622c0e8c02259d8ab25a0201b3c2a/numpy-2.4.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:2803abfebfc990042cd494d8ce2d5f82e9d847af6d35ec486923aa19dbad5e73", size = 12504263, upload-time = "2026-05-18T23:37:09.715Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "numpy"
|
||||
version = "2.5.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
resolution-markers = [
|
||||
"python_full_version >= '3.14' and sys_platform == 'win32'",
|
||||
"python_full_version >= '3.14' and sys_platform == 'emscripten'",
|
||||
"python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
||||
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'",
|
||||
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'emscripten'",
|
||||
"python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'",
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/22/fd/89965aa4ac08c74998539fcbf24fa3540f3e15237fbeb6bcf9c908f4aade/numpy-2.5.1.tar.gz", hash = "sha256:a48a113e6afea91f5608793bafa7ef2ad481fefbda87ec5069f483de61cb9fa3", size = 20755553, upload-time = "2026-07-04T17:08:00.933Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/62/7b/14687aa674250e5e546f616f486b0d56d3631cd5b2415739141ce40bdcea/numpy-2.5.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2c889b56fe48b1018f764b0eec8df59ab654e9148aa91faa12596043500de277", size = 16801574, upload-time = "2026-07-04T17:06:12.423Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e1/19/cc5bb2a3f2913d27d6dbb2c78d25921fabaedc6741d4a5a615a11f3c5bf3/numpy-2.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ab451b59c5643c570974c43aef780703ef1d3b4965d2be07afd530615a9358d1", size = 11772250, upload-time = "2026-07-04T17:06:15.726Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/77/fdf34a71dd30f54979b18603bee915e0aaf825b07afe79acd60b04b691e2/numpy-2.5.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:78798bd5b9ad744056af8efa90e3b9ddaa53272a0848a483084a1cc0a13b2dc0", size = 5331516, upload-time = "2026-07-04T17:06:17.913Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/e2/eb7efa015b4cce41e2517bf182a7fce0d7d5b9d9ed76a29bfa0f4fe4505c/numpy-2.5.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2ae0ca40bcb22d6ba59c1dfd5446f49940b0f2d821fde133f10dda11f816b84e", size = 6664863, upload-time = "2026-07-04T17:06:20.02Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a9/4b/a2b32dd94ee9ffbeecb28152240042a3949db33b1c834d44090b80e1b3b8/numpy-2.5.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61ac47e772e6b8ea489e1d2f441a34c5c3ac17327e7ce294cbdf535795ad4e75", size = 15167977, upload-time = "2026-07-04T17:06:21.621Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b8/a9/6e73d68500f80773f65f0654ea932019d6694329a0eb0ed0533de38df376/numpy-2.5.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:59fda5e192b570217ec2580c96f00e9a7e12ef6866a900eb089b62c1a32545ca", size = 16672469, upload-time = "2026-07-04T17:06:24.064Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/7d/ad3e59015135f5261c95fd4cafeff159c955febd83a99a1d9250c4233815/numpy-2.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f7119ebff1a9829e9f431a4f9d28e703023bb6b9fe7c8f724467dbfc27c94ab3", size = 16527531, upload-time = "2026-07-04T17:06:26.69Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/d0/a39b2fbcde9cb17a1dac678f254b33a6336298af9df338824c685425d5e8/numpy-2.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e824c2acf8862052246be5a44c15da1777940c60d010dd2aab897824d9c430f9", size = 18431940, upload-time = "2026-07-04T17:06:29.521Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/04/12/cff070947791c1ed425ff76413189adbdc2fbe215eba7ce7fa454a03c7f8/numpy-2.5.1-cp312-cp312-win32.whl", hash = "sha256:08d60c810432eb83360958dea0999ac4cfb94531ea8efcbf0b7f277c2068aeb2", size = 6066764, upload-time = "2026-07-04T17:06:32.571Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/66/53f31807a48a750f9d748da273bc3fcedd12b27ff1f3e373bfec55ef2dc0/numpy-2.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:f7d60026c0bdb1380e83bfa7a0419c4577ee4b9a08880afcb6dadeb74c649fa2", size = 12430966, upload-time = "2026-07-04T17:06:34.926Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/2a/d1a88066b1c14186f5d3c0d18c94f17b064511982bab0578d49ee9d43c29/numpy-2.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:17a25e09640602e10bc8de0e6fa2b3fd68eedd84ba6d7842dc8f32f9ab87bd0b", size = 10350488, upload-time = "2026-07-04T17:06:37.785Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/07/ec2a3f0c91761581d4b7104a740791800025983f9a4dc4e73f91a99aeac4/numpy-2.5.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0bfebd8695f9863592fe744be833a258120b14a9f39da255e8aa8fade2c0ddd1", size = 16796419, upload-time = "2026-07-04T17:06:40.37Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ab/ab/ddb499fc4f8780354395face5b65c7fd107bcd6e1d667a5f07d046956f6f/numpy-2.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30b44a6b53a7ae63c54c089a8726e5563ed302716c5b7ccc85afade40b0e7ff6", size = 11765832, upload-time = "2026-07-04T17:06:42.768Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/88/b3/3c28c558a09fc72100c646dac6d2fce8e834c471b0edca01a29996706117/numpy-2.5.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:6165343f81b56ef8f514f396989e529b61d9dc709b99421b07e9f3e698e2287d", size = 5325143, upload-time = "2026-07-04T17:06:45.466Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5e/0e/ce19b985bb15c596f4f05954e76cccc77c845083b3b8f938a6c68e523128/numpy-2.5.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4939237038ada79308dda3204ac6462df056b5672b2e25db1149cf873668b3e1", size = 6659749, upload-time = "2026-07-04T17:06:47.288Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2e/20/1ee6614d64332a1bba6411f38e68cb79eec1b2459e20a623777c5c5492a2/numpy-2.5.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c6759f538fb912fc46de0a6b1758ccf7b57bc7c7ebebc23974fdac3de8db0cd", size = 15164716, upload-time = "2026-07-04T17:06:49.494Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ed/a7/2bcd3fdbb87804755c35b729bf8709d62025c5f4cfd7d5b2415997097515/numpy-2.5.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9726558e8db4a5bf7929a70ae50f63abda4daf0efe810e3bfbab95976f75fc1a", size = 16661440, upload-time = "2026-07-04T17:06:52.061Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/d7/a41e3310c886fe457d36e670bbf24fae411aca8a7b6ad92a32afd924077c/numpy-2.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3935f3b419b244a02732676fa5317a9193cc596a4c0646db07e5b421229ac9f7", size = 16526305, upload-time = "2026-07-04T17:06:54.605Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/75/4333a9a707c1edd3a4e1a0c58eca52c0f31e55089fa80db02b5565b24df7/numpy-2.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc932a65ded7ce9013d120845a2514dcccb1a67bfc8deb8d37633762951904a6", size = 18423008, upload-time = "2026-07-04T17:06:57.54Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ee/90/e314a32b1c11a2ffe818ddad3a57b50b4b6e1b6c487192eb50cdef0415d0/numpy-2.5.1-cp313-cp313-win32.whl", hash = "sha256:4b4ff1608417eb7a59da7b967bbb798cacfe071d2caf526a24281cd562072ed9", size = 6063885, upload-time = "2026-07-04T17:07:00.14Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/70/800b3fca480af32df9e8ea9f3d4a0c8feb4b32d7f195d174eabbda4829ad/numpy-2.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:6c3fe51bc6a16453d452997053454f309e8e0ed7b42d6b361ce4ac8c32913d74", size = 12425674, upload-time = "2026-07-04T17:07:02.387Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8b/0b/196350c122f50f6ca56846f2d71efd5e0d24b7b2e07355e019b2e2c7a11e/numpy-2.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f7feb014281029e628ba2d5a007407443b06e418b6fe451d1e2adcbc8eba0107", size = 10350256, upload-time = "2026-07-04T17:07:04.878Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/db/f4/731b6085a83faf6ca843394cbd5e217280c214399f7e8b21b9f552af0ae2/numpy-2.5.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c786fe9a5bbe360022e584c5a34cf6b54265c71bd7ec8ac3d8fec38968071f8", size = 16795063, upload-time = "2026-07-04T17:07:07.374Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bf/64/0e215f2048dd11a55bb989ed41b3585ef57452404e638d703a211a3e4157/numpy-2.5.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32985c896d897419ef8da6917872d80b78ad0ea26d85b23245c7366ffde76d75", size = 11776652, upload-time = "2026-07-04T17:07:09.907Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/59/2b844c7a6e9deff69b404a66221e1542937734f65d5e6e39411876053862/numpy-2.5.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:efd736408cc97c79b9e6917338dfc8f06013b2274f992e96b1d9a81a71e2a2c2", size = 5335944, upload-time = "2026-07-04T17:07:12.227Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/51/9bf7cb2cabcebc9e017e4ec7e6322b378317a542c08b4cb68479c1efc716/numpy-2.5.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:ab84dc6b074fa881cae55bea94cc4f68e285181ba7f32497bf7dee6b1496165b", size = 6656266, upload-time = "2026-07-04T17:07:14.368Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/83/3e/fb7615b211b82a32f44d5180a6d421b61f84d4fadd578b48ba4ac34e189f/numpy-2.5.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caf3e317d33d60c37986b452613f4ab51246d0691350c03d0cb4a898627f4a95", size = 15179720, upload-time = "2026-07-04T17:07:16.272Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/41/5f/0f992cb24560673496c5d68de61913b57166ce530ffda07c1f280e0cc464/numpy-2.5.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:54ad769f17bc2d833b620851989f62054fb9ab93c969d9e1dc3c8e3d56beea21", size = 16664835, upload-time = "2026-07-04T17:07:19.021Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/2f/97d6475ee91afe2587797d09446f9d3e475ad4cb681662d824809327b75a/numpy-2.5.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c12afb53450fa976d4c681c50a7423729a4c51c0465ed9f32b8a9cabbc472373", size = 16539135, upload-time = "2026-07-04T17:07:22.015Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c4/5b/4db81e4ba0be7e2776b1de68c82aa862c7f8ec27e1b4927d4ae075e20678/numpy-2.5.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c11c405efc5ff6816d5983c96cdfa215bab3428961243af3ff59b228490438", size = 18426684, upload-time = "2026-07-04T17:07:24.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1f/64/c0ba2d90724d450279a7df8f32057241070250a26a7e2b5337d77347f481/numpy-2.5.1-cp314-cp314-win32.whl", hash = "sha256:f2479a47f8d5932d1718168a681ad6e536a9df484c83cfcf9de365e164537ace", size = 6116103, upload-time = "2026-07-04T17:07:27.622Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c1/1a/837f9ed7405adcd7a40538792eb169eddd8fa5630c16a1ef49dae71a30f4/numpy-2.5.1-cp314-cp314-win_amd64.whl", hash = "sha256:24d0eb82c0541d3415a33425db64ae439dffccd7b4dbcb30e7c35120205c506a", size = 12562177, upload-time = "2026-07-04T17:07:29.887Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/ed/49707938b6dd0a78a9178dd93227dc89e4c11af47f5c798d70366e8d0483/numpy-2.5.1-cp314-cp314-win_arm64.whl", hash = "sha256:5a4c988b38d261deeeaad9954e3deb091ad905c94e8bb6708654ef1d97f286b0", size = 10627739, upload-time = "2026-07-04T17:07:32.568Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a6/c7/bb4b882cfe7f299cbc8b66e42e7dd78cf9d14e40f9469fc5e3db7e15b3bd/numpy-2.5.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a33276be12fa045805f477f22482088b66bb758ffbe89a9d21457de863a32e22", size = 11894709, upload-time = "2026-07-04T17:07:34.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/40/3f/5af7f4a7f6224aef48017aa82bb6174c7a659d724be0c75017b7e64a55b4/numpy-2.5.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f089d7b00756190aacf1f5d34bdf38c3c430ac82b4f868f8cede73380460fce7", size = 5453810, upload-time = "2026-07-04T17:07:37.495Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/20/c9/3474309bc94d634d3f9c3eddf03250ecb8c22cd948ef16fef69a77cc5d7b/numpy-2.5.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:09e9bfd8d2cf479c7d174804fb3811c53a8e9f20a37444008606b57d6b7a826d", size = 6761189, upload-time = "2026-07-04T17:07:39.563Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/90/8a/558ae39fdd55d7e7f7fef9a84a6e964ac6b23edbd2a07e52bb084500507d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e68d8dd1e7eba712948f2053a29ec86917bc70ba1358df869d9f06649ef9cf09", size = 15225039, upload-time = "2026-07-04T17:07:41.682Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/63/27/ca7392b2d030277bdf0273e7d23255b3ee57d57a7c170a6f4fb3981e1e5d/numpy-2.5.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:99d5095fa265a0c4152e7bb12759e14381ef5496152f1ce58f44bdf55c44beb4", size = 16701306, upload-time = "2026-07-04T17:07:44.611Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/02/42/03d53ae7996c44d4374a8262e9dc41671fd56cbb98f7d47ef85cf5da4c6b/numpy-2.5.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ab87a91b3cc3382b8956095bd8f95e00cf679bb81554339be1a2ba404a1473c1", size = 16589955, upload-time = "2026-07-04T17:07:47.694Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/15/6c1784ae469640e65db111e9a34b3d0f14d91e8a38b9ce34810ced370dbb/numpy-2.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:224ca51130ef7da85bea2191625181cb4f337f9cb64b471f10c1a12aa8b60077", size = 18464252, upload-time = "2026-07-04T17:07:50.684Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/94/a8/f98e50356cf167df656c526c2dfeec2d7dde182f2a3da4b458a5938e2776/numpy-2.5.1-cp314-cp314t-win32.whl", hash = "sha256:6eab239876581b2b3c5a242281b6007bbdbcd1c7085d7709bb57c5929b11e6bf", size = 6263298, upload-time = "2026-07-04T17:07:53.445Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/ac/96ae880cdecad0b3275d9359fcec72667b49a4863c9f12942e43679dda02/numpy-2.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:83ce9c80d5b521b0d77ddcbe5447c218d247929b6cc056ca5351342accfff0af", size = 12748623, upload-time = "2026-07-04T17:07:55.384Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a1/5a/4d2b1601df3602dba7a14f3348ba9bfe94a18adb428e693df6154c293831/numpy-2.5.1-cp314-cp314t-win_arm64.whl", hash = "sha256:5a6db61f9aaa57e369905c67d852045d3c4f7126405b29d09b19dec118e9c9cb", size = 10697674, upload-time = "2026-07-04T17:07:58.506Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "oauthlib"
|
||||
version = "3.3.1"
|
||||
@@ -671,6 +898,85 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pandas"
|
||||
version = "3.0.3"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
||||
{ name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
||||
{ name = "python-dateutil" },
|
||||
{ name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/f8/87/4341c6252d1c47b08768c3d25ac487362bf403f0313ddae4a2a26c9b1b4c/pandas-3.0.3.tar.gz", hash = "sha256:696a4a00a2a2a35d4e5deb3fc946641b96c944f02230e4f76137fe35d806c4fc", size = 4651414, upload-time = "2026-05-11T18:54:29.21Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/42/16/b5c76b838fd9bf6ce84d3a53346b8874ec05c5f0040d75ef2c320100cd2a/pandas-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:455f6f8139d4282188f526868dbc3c828470e88a3d9d59a891bd46a455f21b98", size = 10338495, upload-time = "2026-05-11T18:52:11.558Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5a/b0/a4ffc4ae74d2d822200dcc46898987d8eb6032d1e2b219cae39da6f5cbcc/pandas-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4e15135e2ee5df1063313e2425ceef8ac0f4ae775893815b0923651b806a5639", size = 9938250, upload-time = "2026-05-11T18:52:17.005Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2e/b2/3323601a52caee42c019e370090ca4544b241437240ca04f786cce82b0cf/pandas-3.0.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:05f1f1752b8533ea03f7f39a9c15b1a058d067bb48f4748948e7a8691e0510f2", size = 10770558, upload-time = "2026-05-11T18:52:19.865Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/32/f1/bbecd2f867b97abebe0f9b53d750f862251b40337e061b36676ded3d920f/pandas-3.0.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a1e45c80cceb3b4a21bc5939d52e8cbd8d9b7305309219d59e9754d9ce09e27", size = 11274611, upload-time = "2026-05-11T18:52:22.622Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/4f/eafabf2d5fae5adf143b4d18d3706c5efdc368a7c4eb1ee8a3eddabbd0f6/pandas-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:14da8316da4d0c5a77618425996bfb1248ca87fc2c1486e6fde4652bd18b5824", size = 11784670, upload-time = "2026-05-11T18:52:25.4Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/49/44/1eb20389301b57b19cc099a1c2f662501f72f08a65f912d05822613c1532/pandas-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a55066a0505dae0ba2b50a46637db34b46f9094c65c5d4800794ef6335010938", size = 12353708, upload-time = "2026-05-11T18:52:28.139Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/eb/62/c321f13b5ba1819fc8dca456c7fce578da2dcfecff1abbf0eaddf8406c0f/pandas-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6674ab18ad8c57802867264b00e15e7bb904700cdd9046e3b2fa1fce237439ea", size = 9907609, upload-time = "2026-05-11T18:52:30.982Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/53/85/1b7f563ebc6357c27233a02a96b589bcce1fa9c6eb89fb4f0e56421d277e/pandas-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:5cc09a68b3120e0f54870dede8287a7bb1fa463907e4fcec1ea77cab6179bf7a", size = 9165596, upload-time = "2026-05-11T18:52:33.334Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/f1/392f8c5bfc16f66a0d2d41561c01627c228fe7ed2a0d056ef11315042570/pandas-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fed2ff7fd9779120e388e285fc029bd5cf9490cdd2e4166a9ee22c0e49a9ab09", size = 10357846, upload-time = "2026-05-11T18:52:36.143Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/cf/3d/b16412745651e855f357e5e66930248688378853a6e2698a214e331fba1f/pandas-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b168fc218fd80a6cbdbdbc1a97ddc7889ed057d7eb45f50d866ceab5f39904c4", size = 9899550, upload-time = "2026-05-11T18:52:38.976Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/31/a8/fa2535168fffcedf67f4f6de28d2dd903a747ca7c8ea6989451aaeb3a92f/pandas-3.0.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0383c72c75cdcca61a9e116e611143902dbfd08bff356829c2f6d1cf40a9ca8c", size = 10412965, upload-time = "2026-05-11T18:52:41.915Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/65/b6/09b01cdbc15224e2850365192d17b7bdebb8bdbd8780ed221fcdf0d9a515/pandas-3.0.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6dc0b3fd2169c9157deed50b4d519553a3655c8c6a96027136d654592be973a9", size = 10894600, upload-time = "2026-05-11T18:52:45.02Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c9/a4/2eb28f2fccb4ced4a2c79ab2a5dee9ade1ebf44922ebad6fea158c9f95d4/pandas-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7e65d5407dc0b394f509699650e4a2ec01c0514f21850f453fa60f3be79a5dbf", size = 11422824, upload-time = "2026-05-11T18:52:48.058Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f8/45/830bb57f533a4604b355e07edcb8ea18cf88b5f94e5fca92f27052d7c597/pandas-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8894dc474d648fe7b6ff0ca9b0bd73950d19952bc1a6534540762c5d79d305c", size = 11950889, upload-time = "2026-05-11T18:52:50.905Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/c5/fc1b368f303087d20e8c9bf3d6ceb186263cfac0ade735cd938538bea839/pandas-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c7be265b62cef88e253a941e4698604973736dcfe242fdb5198f0f7bc473cdcc", size = 9755463, upload-time = "2026-05-11T18:52:53.386Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/bd/fda8f9705b1b09c6ebe14bfc0fa0e4ec8584d54ea673628f157ff55131af/pandas-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:557409bc4178e70ee8d9ddb494798e51ebf6ea59330f6be22c51bab2a7db6c49", size = 9066158, upload-time = "2026-05-11T18:52:56.038Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c5/90/62d8302883c44308c477e222c3daf7c813a34c8e96985882fbd53d964352/pandas-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:67b3b64c11910cfa29f4e94a14d3bff9ee693b6fc76055e7cad549cee0aec5fa", size = 10331071, upload-time = "2026-05-11T18:52:58.838Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7f/ae/6a6493c783a101f165e4356953ba3c74d6f77f0042fa7d753da9dfbb640c/pandas-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39436b377d56d2a2e52d0395bdbee171f01068e99af5250509aceeb929f765c7", size = 9875690, upload-time = "2026-05-11T18:53:01.431Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/7c/5df8e9f56c69a2769fbe9382a5ef8f2658c007e376434e1e2cbb57ad895f/pandas-3.0.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4be06d68f9ddcfc645b87534911da79a8fbffc7573c80e0edcf42a5020624d8", size = 10381634, upload-time = "2026-05-11T18:53:04.393Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/99/68/1237369725aa617bb358263d535803e3053fdbc593513ec5ed9c9896b5b6/pandas-3.0.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4eeb6830daf35a71cc09649bd823e2b542dac246cdee9614c6e4bd65028cd6a", size = 10891243, upload-time = "2026-05-11T18:53:07.643Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/93/77d108e8af7222b4a503ebde0e30215b1c2e4f8e53a526431890f22d5586/pandas-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1928e07221f82db493cd4af1e23c1bfca524a19a4699887975bff68f49a72bfb", size = 11388659, upload-time = "2026-05-11T18:53:10.634Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d0/bd/eff5b4399f332ac386c853f6cd2bd3fa2ca0061b9f36ecd9c4d7c4265649/pandas-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51b1fe551acb77dac643c6fda86084d8d446c10fe64b06a9cc29c4cc8540e7f2", size = 11942880, upload-time = "2026-05-11T18:53:13.536Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2c/20/559ace4200982c3887d0b86bfd0d856a2143ef8ddab63cc07934951a964c/pandas-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:a82d532a3351d435432cd913edbccaf8b8e01d4dd0e5ced5a8d2e8ecd94c7e44", size = 9757091, upload-time = "2026-05-11T18:53:16.306Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3a/66/69055a09fe200f29f922a3eeec4804611900b95f52d932ece3393c3c0c19/pandas-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:275c14e0fce14a2ec20eee474aecd305478ea3c1e6f6a9d8fe219a165542717e", size = 9057282, upload-time = "2026-05-11T18:53:18.768Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/57/0e/efe801b0e6811e8e650cd21b7f2608e30f08a7067e2bf6e8752b0d56ee3c/pandas-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:46997386d528eb40376ecd6b033cf4a8a1e5282580f68f43de875b78cba2199d", size = 10767016, upload-time = "2026-05-11T18:53:21.227Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ea/dc/eb55135a1d5f0f0519f28da1f609a206d2cad1f9c35c32d51e38dd7261ae/pandas-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261e308dfb22448384b7580cf719d2f998fe2966c92893c3e77d14008af1f066", size = 10420210, upload-time = "2026-05-11T18:53:23.982Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c6/3e/b1d5d955ce33ffecb407465a60bc32769d74fcf68224b7ae67ae11d4dea4/pandas-3.0.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd1a5d1def6a46002e964510bdc67c368aa0951df5d1d9f8365336f5a1f490cd", size = 10336126, upload-time = "2026-05-11T18:53:26.731Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f5/76/a01261711ab60a22d71b862f0de20e4c504bf80457270ad8cb42110f6abc/pandas-3.0.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d72828c20c6d6e83e1e22a6a3b47b326b71664112fa9705dcbccfd7a39b62085", size = 10728051, upload-time = "2026-05-11T18:53:29.125Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/21/ea191195e587b18cf682e97f433f81b2d0fbe341380e80a3e0d6e4403c8e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d26cbe1fcfc12e8fd900e2454163e466b2d3af84f7c75481df7683ffc073d870", size = 11350796, upload-time = "2026-05-11T18:53:32.056Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/69/f0eaaf54939f0e8c6768fd06be9af2cef9b36048b96dfb9e1b2c685a807e/pandas-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e91cec1879ada0624fc3dc9953c5cbd60208e59c0db28f540c5d6d47502422f", size = 11799741, upload-time = "2026-05-11T18:53:34.985Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/45/a4/865e0e510cae5fc2194de4db28be638952de942571ba9125934fd9c01d47/pandas-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:08d789b41f87e0905880e293cedf6197ce71fe67cc081358b1e148a491b9bd13", size = 10499958, upload-time = "2026-05-11T18:53:37.857Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/54/effdcc3c0ff7a08037889200e148ebe94c16c4f653be078c7b3675955df1/pandas-3.0.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:3650109c0f22879df8bd6179ab9ee3d7f1d1d4e7e0094a3f0032d9f51e2e64ac", size = 10336065, upload-time = "2026-05-11T18:53:41.099Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/68/10/bf2d6738d72748b961a3751ab89522d58c54efc36a8e1a12161216cd45cf/pandas-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bab900348131a7db1f69a7309ef141fd5680f1487094193bcbbb61791573bf8f", size = 9926101, upload-time = "2026-05-11T18:53:43.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ae/e9/e35cf11c8a136e757b956f5f0efdcaa50aecde85ea055f1898dfc68262f3/pandas-3.0.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ba7e08b9ac1d54569cd1e256e3668975ed624d6826f7b68df0342b012007bddb", size = 10457553, upload-time = "2026-05-11T18:53:46.394Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/58/3b/1cdec6772bdbaf7b25dab360c59f03cadf05492dd724c6540af905389b07/pandas-3.0.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d71c63ae4ebdbf70209742096f1fc46a83a0613c99d4b23766cced9ff8cd62a", size = 10914065, upload-time = "2026-05-11T18:53:49.134Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c4/c2/1ef644445fcd72e3627bceec77e3560636f87ddce4ed841afe76b83b5bf9/pandas-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e3a2ec42c98ffa2565a67e08e218d06d72576d758d90facb7c00805194d8f360", size = 11459188, upload-time = "2026-05-11T18:53:52.527Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7e/49/4d8d4f42cbc9c4adc7a1870f269c02cbd6cd40d059622c06fb298addcbad/pandas-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:335f62418ed562cfc3c49e9e196375c28b729dcef8543abf4f9438e381bf3c76", size = 11982966, upload-time = "2026-05-11T18:53:55.043Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/38/55/792619469bab9882d8bbd5865d45a72f6478762d04a9af4bf0d08c503e95/pandas-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:3c20a521bbb85902f79f7270c80a59e1b5452d96d170c034f207181870f97ac5", size = 9876755, upload-time = "2026-05-11T18:53:58.067Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2a/af/33c469653b0ba03b50c3a98192d4c07f0c75c66b263ceb097fce0ee97d31/pandas-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:a2d2dff8a04f3917b55ab3910c32990f8ddf7eceba114947838cefa976a68977", size = 9198658, upload-time = "2026-05-11T18:54:00.733Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/fa/b8c257bd76b8bd060c3a9151c1fca05e9b9c5e3af5d0f549c0356f6d143d/pandas-3.0.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:0d589105b3c14645af1738ff279b2995102d8f7a03b0a66dc8d95550eb513e04", size = 10787242, upload-time = "2026-05-11T18:54:03.564Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/54/eb/f19206ffb0bf1919002969aa448b4702c6594845156a6f8050674855aac3/pandas-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:13fc1e853d9e04743d11ba75a985ccbc2a317fe07d8af61e445a6fd24dacd6a6", size = 10436369, upload-time = "2026-05-11T18:54:06.311Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fd/24/c7c39fb4fe22b71a0c2d78bf0c585c600092d85f94f086d2b3b2f6ca27e2/pandas-3.0.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:819959dab7bbd0049c15623fbac4e29a191b9528160a61fb1032242d8ced2d9c", size = 10358306, upload-time = "2026-05-11T18:54:09.085Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/ec/dd2a9eb7fa1204df88c0864164e35b228ac581062ac612ba0a67fd812e4c/pandas-3.0.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:60ae316d3fd75d1858d450d0db0103ea2be3e7d4a95ec2f064f7e2ae63f7b028", size = 10758394, upload-time = "2026-05-11T18:54:11.956Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/6e/00c61ea8e85b4f6d8d35e11852a1a4998fc7fafc91c6a602d1cc9c972d64/pandas-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bd3a518890b400d32f9023722dc9a9a5c969f00b415419a3c06c043f09bb5d7d", size = 11375717, upload-time = "2026-05-11T18:54:14.539Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/31/89/8fc1c268969fac43688d65fd92e67df24bd128d53cb4d2eee534cd307399/pandas-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c39be2d709d01fa972a0cabc522389fceca4f3969332ba25a7d6c5802cf976a", size = 11828897, upload-time = "2026-05-11T18:54:17.146Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/56/3b/e7d20dea247a3e6dc0bd8a6953854afbedc03951def4e7371e05e7263e25/pandas-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4db8c527972a821cf5286b40ccc57642a39bc62e62022b42f99f8a67fca8c3a1", size = 10900855, upload-time = "2026-05-11T18:54:19.72Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/54/68a0978d1ef8502b8492099beaa6e7a0c1b32e3b5d4f677f5810cb08711c/pandas-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b2c95f8bfc1ee412bf482605d7bfd30c12d1d26bd59fdd91efeef1d4718decb1", size = 9466464, upload-time = "2026-05-11T18:54:22.754Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "peewee"
|
||||
version = "4.2.6"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/2b/6d/45b139fba589e185dcee447414c2e0efaebb0a247c06329fdc9bd84ba4aa/peewee-4.2.6.tar.gz", hash = "sha256:f40655c64a62eaa447af228e4b84a5e80d3c812d2de34c7b9c621a3ef0c6555c", size = 779493, upload-time = "2026-07-17T18:11:21.3Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/63/26ec789e68e994d64ed957dd6ee5a08bb78c2f401c40e46fc142669cd8b0/peewee-4.2.6-py3-none-any.whl", hash = "sha256:b54c0f6e09c987465f8268bb2b4c1cba2e1b2788fcc0974c8e2233af1fd5af8f", size = 173774, upload-time = "2026-07-17T18:11:19.787Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "platformdirs"
|
||||
version = "4.10.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/52/cd/4f25b2f95b23f5d2c9c1fe43e49841bff5800562149b2666afc09309aa8f/platformdirs-4.10.1.tar.gz", hash = "sha256:ceab4084426fe6319ce18e86deada8ab1b7487c7aee7040c55e277c9ae793695", size = 31678, upload-time = "2026-07-18T03:53:43.808Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/ec/73/6fd0bb9ce84138c3857f12e9de63bc901852975a092d545f18087a204aa2/platformdirs-4.10.1-py3-none-any.whl", hash = "sha256:0e4eff26be2d75293977f7cddc153fd9b8eaa7fb0c7b64ffe4076cb443117443", size = 22906, upload-time = "2026-07-18T03:53:42.576Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "procrastinate"
|
||||
version = "3.8.1"
|
||||
@@ -694,6 +1000,21 @@ django = [
|
||||
{ name = "django" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "protobuf"
|
||||
version = "7.35.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/da/01/9ef0afd7999eb9badb3a768b4aedd78c86d4c65cfaf1958ab276199e76b4/protobuf-7.35.1.tar.gz", hash = "sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a", size = 458717, upload-time = "2026-06-11T21:55:40.257Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/10/03/8aeeb7458d22546bf64b5250ca1daeb5ff757d900e8e4a7476c6f0db843e/protobuf-7.35.1-cp310-abi3-macosx_10_9_universal2.whl", hash = "sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6", size = 433226, upload-time = "2026-06-11T21:55:31.719Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/4b/dfb89eb0e652a1ff073c39a59fb5e3a83cfe9b57a2c83fa6d78270101767/protobuf-7.35.1-cp310-abi3-manylinux2014_aarch64.whl", hash = "sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799", size = 328847, upload-time = "2026-06-11T21:55:34.035Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/58/dc12f2cd484951524af6e3382c785869b9b3fb5e52ee95ae23add53ee8f9/protobuf-7.35.1-cp310-abi3-manylinux2014_s390x.whl", hash = "sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4", size = 344030, upload-time = "2026-06-11T21:55:34.941Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e4/be/5b3cfe508bfab6761414ff944e3366eb13be4fd71efcd69450f89ba39f43/protobuf-7.35.1-cp310-abi3-manylinux2014_x86_64.whl", hash = "sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4", size = 327130, upload-time = "2026-06-11T21:55:35.921Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d8/bc/6d6c7ba8709c85f8f2c390b2b118d6fb08a783676a572271851bf45a7d22/protobuf-7.35.1-cp310-abi3-win32.whl", hash = "sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30", size = 428945, upload-time = "2026-06-11T21:55:37.034Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0a/19/8d0cb6f20a1ef7b18f1c8986ad5783f22f84cce39c6ce9a6e645ea55192e/protobuf-7.35.1-cp310-abi3-win_amd64.whl", hash = "sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87", size = 439996, upload-time = "2026-06-11T21:55:38.123Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/19/c7/5f7c636ec43e0c545e28d1f1db71990108306f7bdcb89f069ba97e428e7f/protobuf-7.35.1-py3-none-any.whl", hash = "sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9", size = 171659, upload-time = "2026-06-11T21:55:39.155Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "psycopg"
|
||||
version = "3.3.4"
|
||||
@@ -904,6 +1225,15 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pygments"
|
||||
version = "2.20.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyjwt"
|
||||
version = "2.13.0"
|
||||
@@ -1023,6 +1353,19 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "15.0.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "markdown-it-py" },
|
||||
{ name = "pygments" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz", hash = "sha256:edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36", size = 230680, upload-time = "2026-04-12T08:24:00.75Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rpds-py"
|
||||
version = "2026.5.1"
|
||||
@@ -1178,6 +1521,15 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "soupsieve"
|
||||
version = "2.8.4"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sqlparse"
|
||||
version = "0.5.5"
|
||||
@@ -1189,11 +1541,11 @@ wheels = [
|
||||
|
||||
[[package]]
|
||||
name = "tablib"
|
||||
version = "3.9.0"
|
||||
version = "3.10.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/11/00/416d2ba54d7d58a7f7c61bf62dfeb48fd553cf49614daf83312f2d2c156e/tablib-3.9.0.tar.gz", hash = "sha256:1b6abd8edb0f35601e04c6161d79660fdcde4abb4a54f66cc9f9054bd55d5fe2", size = 125565, upload-time = "2025-10-15T18:21:56.263Z" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/96/b9/59d9c8b9c34642e7a718e8a1a7a91af3eb9b48f79bac794263702d41519c/tablib-3.10.0.tar.gz", hash = "sha256:781cfa9a42de8f33c52aff857fd0a04e483de4fd1c53eaaa9a6aeac62bad11de", size = 127128, upload-time = "2026-07-31T17:30:15.577Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/66/6b/32e51d847148b299088fc42d3d896845fd09c5247190133ea69dbe71ba51/tablib-3.9.0-py3-none-any.whl", hash = "sha256:eda17cd0d4dda614efc0e710227654c60ddbeb1ca92cdcfc5c3bd1fc5f5a6e4a", size = 49580, upload-time = "2025-10-15T18:21:44.185Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fc/0f/3ae17545ff976687f679ed3a101df7017135ee04769e858a4ccea0cc3f3e/tablib-3.10.0-py3-none-any.whl", hash = "sha256:5721bf3a52d491f8f843628a3a3200db164f6ad9e92fb6eaa64dc3f945f30ad9", size = 50170, upload-time = "2026-07-31T17:30:04.925Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1348,6 +1700,105 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/f9/45d021e4a5cc7b9dd567f7cbb06d3b75f751a690063fb6cc7ec60f4e46b7/watchfiles-1.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a88fc94e647bc4eec523f1caa540258eb71d14278b9daf72fa1e2658a98df0f0", size = 457771, upload-time = "2026-05-18T04:30:56.331Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "websockets"
|
||||
version = "16.1.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/21/f7/bc3a25c5ec26ce62ce487690becc2f3710bbc7b33338f005ad390db0b986/websockets-16.1.1.tar.gz", hash = "sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57", size = 182204, upload-time = "2026-07-17T22:51:05.858Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/03/47debfe28e9d6d354be5d777b67fd44c359b9eb299a5d103500bd7cc3e37/websockets-16.1.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d0fcf657e9f13ff4b177960ab2200237b12994232dfb6df16f1cfe1d4339f93c", size = 179566, upload-time = "2026-07-17T22:48:49.596Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/72/93/31efa1ed78c17e5cfc229fd449e3966e1b9cc15753204cd585cc8dd01f4a/websockets-16.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b852788aa51764e2d8e4cf5493d559326bcae5e38d16ba25ffa322b034df272a", size = 177250, upload-time = "2026-07-17T22:48:50.942Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/4a/542378ab3972b0c1cf1df3df3eff9591cea0d30c58c3aa3c4ddbc244e787/websockets-16.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1427fb4cf0d72f66333e2cacc3ff5f575bf2d7008166ce991a4a470b21d51a22", size = 177528, upload-time = "2026-07-17T22:48:52.59Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/d9/162321f63c7eed558e9e1798ed7a1e34a4f6dab51f35419e4ed7a4907979/websockets-16.1.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:da4ca1a9d72f9030b3146b8d7022719a9f3d478f61efe6f7dd51d243f61c51b2", size = 186859, upload-time = "2026-07-17T22:48:53.915Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/de/09/87df740f7430ce564bd52402e9c9458d4d0459cc7d2ee29e530c8204851b/websockets-16.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:86d7f0f8bdb25d2c632b72527325e4776430fd5bc61b9118de4e2b8ddb5f5b01", size = 188095, upload-time = "2026-07-17T22:48:55.384Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d2/12/3d2703af7cc095f3c81904c92208cc1ae79affbc67376944b50ee9301f73/websockets-16.1.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7dfcad78ea1492ee3a9ec765cb7f51bbc17d477107aaf6b22abf7b2558d1c5a0", size = 191385, upload-time = "2026-07-17T22:48:56.742Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/69/986aa0234a964a00f5149cfc46e136e96c8faad1c783474550f40d31aef4/websockets-16.1.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fb9a0a6dc3d1b3986cb88091b6899f0396651e0f74e2c9766ab8d6ffc3842e29", size = 188653, upload-time = "2026-07-17T22:48:58.134Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/35/6b/10f9d03e3970a69ba67bd3b46b87a929b586d0300fadbfe14f57c1f85490/websockets-16.1.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29dfa8114c4a620c69591c5973860f768eac29d3fd6904f37f34266cb219c512", size = 187426, upload-time = "2026-07-17T22:48:59.515Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/56/db/bb3aad62bf63d8bb3f0634b2eabffcfb3677a34bd19492110ff6869cf703/websockets-16.1.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6ff9417c0ada4d0f7d212f928303e5579bdf3ace4c802fa4afabb30995da58c3", size = 184882, upload-time = "2026-07-17T22:49:00.916Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6c/4c/c09a2ea9bfbeccce52fdc383e5f28af4bc8843338aabac28c81489af6120/websockets-16.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fe0b50da2d84535fb4f7b4bfa951280f97ce3d558a0443b541166d609e67b57", size = 187584, upload-time = "2026-07-17T22:49:02.283Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c7/8b/31bb4eb4d9eaacf1fdd39d115772a8aeaedfc19b5dc262e57ffbc8a9d42c/websockets-16.1.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:34420aaa64440ebd51ac72ca8a45ef4626429438c9b02e633ae412ed43f925d3", size = 186174, upload-time = "2026-07-17T22:49:03.973Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2f/e4/dc02d725610a1ad49e193ef91a548194d71bdc6cdf27da83067dd1f73995/websockets-16.1.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a6a61aff018180c9c50b7b0da33bfd29d378af3497429c95006c589a23a11648", size = 187986, upload-time = "2026-07-17T22:49:05.553Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e0/73/30ed84c8bfd14c73d4af29d5ed9323c3073b48e0b7b23b67070f4e7fd59b/websockets-16.1.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:04fd29a0e2fe9414a95b00e92c67ae51bf900c50c0f8a4b2dafdad621f49ea1d", size = 185565, upload-time = "2026-07-17T22:49:06.959Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/d3/4be8d4959f51e31b4f8fc0ece12b45bd3b6c0d15ea23b9990d9c11fc805f/websockets-16.1.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5c31aa7e39ee3e8a358573257f1c0bb5c52430d1b637030dd9c8cc2c282926be", size = 186598, upload-time = "2026-07-17T22:49:08.293Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/fa/abb38597a52d84ed9cfacadc7a0c6f2db282c0ab23cdf72b58a666a21227/websockets-16.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d14bfb217eb4701e850f1525c9d29d79c44794cdf1c299ead25f39f8c78dea81", size = 186834, upload-time = "2026-07-17T22:49:09.766Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/59/80/1119ad08a228b90c4eb77fbe48df7836731a605f5f881ba701ca826a4a65/websockets-16.1.1-cp311-cp311-win32.whl", hash = "sha256:2e28e602bb13da44fbe518c1781a88e3b9d4c3d48d02c9bad83e546164336f57", size = 179940, upload-time = "2026-07-17T22:49:11.196Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/71/b2/e511c1c6f64a95c2f3fc54bffda0e14eaa7e9442be605c29270f7589b918/websockets-16.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:7421fad442de870a8cbf2287d1cad7e706ece0dbfeba5e911df132cbdc1cb56a", size = 180239, upload-time = "2026-07-17T22:49:12.519Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/9d/681cda21c9eee743203a6cb79b9d3d05adad9aa60ec660c6c9bf4dd619ca/websockets-16.1.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00", size = 179600, upload-time = "2026-07-17T22:49:13.92Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/8d/6195a88b45e8d2a8f745fc2046e36f885a3c9763e6767d2c46229bf9510c/websockets-16.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b", size = 177272, upload-time = "2026-07-17T22:49:15.453Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/e3/fe2d498c64dea0095c9a9f9a351af4cd6eef31b618395582bc1f38ba45ff/websockets-16.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175", size = 177542, upload-time = "2026-07-17T22:49:16.875Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/fe/ed/f1831681fce0e3242346e5458486003c5f124ed69e5e0b847fd029db4973/websockets-16.1.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1", size = 187137, upload-time = "2026-07-17T22:49:18.323Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6f/79/4ff9dcc1bb46f6b4c536936dde1fd60f9b564f3304307274db97f4c9496d/websockets-16.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15", size = 188374, upload-time = "2026-07-17T22:49:19.65Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/c3/5c49b6efb36cab733d23773f6de575e1dba65736ead17d5d2b2a1daef779/websockets-16.1.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa", size = 191155, upload-time = "2026-07-17T22:49:21.331Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6e/f6/56ccceda3a4838d18f1d40821480da4775397e8b1eecf4031e20c50e2e90/websockets-16.1.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab", size = 189011, upload-time = "2026-07-17T22:49:22.889Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/86/d6/ad5286241a2bce1107e2798d3bfbd62cf79aee167bdb654f8cb1e9dbf949/websockets-16.1.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847", size = 187766, upload-time = "2026-07-17T22:49:24.339Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bc/67/d65c970b7e347fdca69479beb7811c2060529956730a7a4e3ae7c66b0e31/websockets-16.1.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428", size = 185173, upload-time = "2026-07-17T22:49:25.743Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/1d/5b/14af3cd4ee69d8ea9baca58f3dc3cfb1ba78332a347fd478cb096549d60e/websockets-16.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf", size = 187809, upload-time = "2026-07-17T22:49:27.147Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/7b/11/be301710d70de97e3e7b3586e6d492c9c06d6a61bf1c2202c36cf0c75607/websockets-16.1.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751", size = 186412, upload-time = "2026-07-17T22:49:28.611Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/db/07/fe1435bf6fe738a3d3b54dbe0c18dabf12cba4d909ac8b58b539ce27c1f4/websockets-16.1.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f", size = 188290, upload-time = "2026-07-17T22:49:29.965Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8a/0a/81f394aff8efcbb01208c1ced77df0a3c7fcce584a88c7273663697946c2/websockets-16.1.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2", size = 185844, upload-time = "2026-07-17T22:49:31.447Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/39/5c/dd485b995473f415510251fe9bd708f2d24458f439fce958daf8d66dc7c6/websockets-16.1.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383", size = 186823, upload-time = "2026-07-17T22:49:33.104Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9d/0b/f78de76ff446f1e66af12b43c48a35f31744de93cfdec2f4ea67d5d7bbf1/websockets-16.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3", size = 187102, upload-time = "2026-07-17T22:49:34.616Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/a1/4cf892007778eaf84ad162bfc98046e0ed89b63ac55949e3236626b2a23f/websockets-16.1.1-cp312-cp312-win32.whl", hash = "sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747", size = 179943, upload-time = "2026-07-17T22:49:36.213Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d9/de/6abe251d28c3a3f217096575400b27750b18e0b1d2fff3a2a239960fea07/websockets-16.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7", size = 180243, upload-time = "2026-07-17T22:49:37.626Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ce/fd/6ec6c6d2850aea25b1b2aa9901a016980bb87d01e89b3eb00470b1b5d471/websockets-16.1.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1", size = 179587, upload-time = "2026-07-17T22:49:38.959Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/5f/d8/1d299d2dd34087db39831a34cc645ef8a6f89d78efada6983093513cd81c/websockets-16.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df", size = 177272, upload-time = "2026-07-17T22:49:40.293Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3d/86/0a70d3ae2f0f2256bb41302d9804dbca65d4360281e7feb3e1f94102ac46/websockets-16.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac", size = 177530, upload-time = "2026-07-17T22:49:41.786Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/c2/c676c69444d9db448b3f0a55a98dcc534affce0bce961d9d2f0b8499b10a/websockets-16.1.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8", size = 187197, upload-time = "2026-07-17T22:49:43.658Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0b/13/88137fbaf726ebe29d62c1117fa11fa2bbb6209dc79d4ad738efbe36a2aa/websockets-16.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6", size = 188433, upload-time = "2026-07-17T22:49:45.147Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/6d/46c2f2ce6751cb26f39293e1ecbf8544cb01321397cd476c2756b98c216d/websockets-16.1.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854", size = 189868, upload-time = "2026-07-17T22:49:46.581Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/29/2b/170a9e8097636cfde4dc3c592b6e00b18a44a2f5407606d96ca542dd5838/websockets-16.1.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a", size = 189059, upload-time = "2026-07-17T22:49:47.972Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/48/f0d4ebc9ab4b473b8861b9e20fdb663d515d42f7befdf62cdb60fee7a1ec/websockets-16.1.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49", size = 187814, upload-time = "2026-07-17T22:49:49.344Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d5/ba/39a41d3ae8e72696a9492581900611c5a91e2b07563b0bcd2523adea9854/websockets-16.1.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785", size = 185229, upload-time = "2026-07-17T22:49:50.787Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/3c/36/ac15b604f850d1907f0a85ed721cefe47cd45034b3620069b829746cccbe/websockets-16.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56", size = 187874, upload-time = "2026-07-17T22:49:52.228Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a8/f3/3fbd5d71d59299c3770faa5884d4f45070236ca5a35ab3a61830812c409a/websockets-16.1.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509", size = 186469, upload-time = "2026-07-17T22:49:53.776Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b4/fc/dd90349bba58af2a53ef2ddd9c32716c81eb6d59a0687939fff561860878/websockets-16.1.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1", size = 188347, upload-time = "2026-07-17T22:49:55.202Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/4c/f3/f73ba86427682da59b78c11d77ba56d5b801c32e84afe79b274bbd6a9bb2/websockets-16.1.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead", size = 185903, upload-time = "2026-07-17T22:49:56.75Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/34/7c/f95eb20e80104173b3a0a092291f89ea4047ef6e608e0a57ca06eb14eecb/websockets-16.1.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e", size = 186855, upload-time = "2026-07-17T22:49:58.467Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/35/dd875b3e050ff232d60fa377707f890e369f74d134f1be32e8f68879747c/websockets-16.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87", size = 187140, upload-time = "2026-07-17T22:50:00.016Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/dc/5cbfcb41824502f6af93b8f3943a4d06c67c23c7d2e31eb18748c4a5b2a7/websockets-16.1.1-cp313-cp313-win32.whl", hash = "sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea", size = 179928, upload-time = "2026-07-17T22:50:01.685Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b0/c1/71e5deb5b7f8f226997ab64908c184ac3105c0155ce2d486f318e5dd08a8/websockets-16.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68", size = 180242, upload-time = "2026-07-17T22:50:03.117Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/73/a2/ba78a164eeea4620df4a4df4bd2ed6017438c4655cc0f36f2c0bc0432355/websockets-16.1.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8", size = 179635, upload-time = "2026-07-17T22:50:05.001Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/08/d26d7a7628cd4ac34cbbdb63ac80914ca842ed8e42938c40a53567806df3/websockets-16.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293", size = 177320, upload-time = "2026-07-17T22:50:06.427Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0f/45/ebec83e6269536aa5932533c67b0af5c781f3e73fdbcd68672dcf43f4f44/websockets-16.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051", size = 177544, upload-time = "2026-07-17T22:50:07.834Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/c9/d5/abc614d2297f6c1c3e01e61260364457a47c25cc1cf6a879038902bc6aa8/websockets-16.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1", size = 187270, upload-time = "2026-07-17T22:50:09.275Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/52/71/4c99af3b87dff1b2927981f6876607d4acb45338c665242168d3982f7758/websockets-16.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7", size = 188509, upload-time = "2026-07-17T22:50:10.722Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/9b/b4/5c8ca14b0df7eb84ed0524165c5359150210140817a3312aee57bf62a1cf/websockets-16.1.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31", size = 189882, upload-time = "2026-07-17T22:50:12.293Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/25/c1/bedfba9e70557129cb8083748d167bdcc01483dedf0f0df143676df05cbe/websockets-16.1.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0", size = 189114, upload-time = "2026-07-17T22:50:13.789Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/df/09/aa835b2787835aebd839114be5de51b797cb480b63ba42b26d34dfe147cb/websockets-16.1.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3", size = 187861, upload-time = "2026-07-17T22:50:15.179Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/20/26/f6408330694dbc9830857d9d23bc14ac4f6875127a480cfdda8d5ca21198/websockets-16.1.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562", size = 185286, upload-time = "2026-07-17T22:50:16.741Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/9a/e0675e70dd8a80762cf35bb18799d3f290a4890ffe6439bc51d222796083/websockets-16.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b", size = 187935, upload-time = "2026-07-17T22:50:18.213Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/33/c1/3234cfb86afde01b81e9bddcc6e534c440975d60a13991259e833069ab3e/websockets-16.1.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a", size = 186444, upload-time = "2026-07-17T22:50:19.67Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/89/87/9c15206e1d778923d8daa9657de07aa62ea815e13448319c98458c37b281/websockets-16.1.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c", size = 188409, upload-time = "2026-07-17T22:50:21.28Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/f2/00/cf5de5c67676de2d3eef8b2a518f168f6796595447a5b7161ba0d012915c/websockets-16.1.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499", size = 185958, upload-time = "2026-07-17T22:50:22.719Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/c0/731b6ddede2e4136912ec4cff2cffbda35af73546be4762c3d7bd3bd79af/websockets-16.1.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985", size = 186911, upload-time = "2026-07-17T22:50:24.108Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/8c/7f/39c634472c4469a24a7c09cecddffb08fac6d0e74f73881a94ee8a40a196/websockets-16.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9", size = 187204, upload-time = "2026-07-17T22:50:25.548Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/26/89/9667c256c256dafcc62d21328ce7a40067da857969b68ee9af375b0aaf72/websockets-16.1.1-cp314-cp314-win32.whl", hash = "sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328", size = 179603, upload-time = "2026-07-17T22:50:27.086Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/bd/dd/1c099d6c0fc5deb6b46ccdbb6981fdb4b12c917869cb3952408409dc18db/websockets-16.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc", size = 179948, upload-time = "2026-07-17T22:50:28.521Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/35/25/9956b2d5e0529d5d23924f21bba1440d4c5c88a562e4f08550871ffa97a7/websockets-16.1.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573", size = 179963, upload-time = "2026-07-17T22:50:29.982Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/17/06/55ffc976c488b6aee9ea05761ff7c4e88e7c1fd82818c8ca7b556ad2f90c/websockets-16.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999", size = 177497, upload-time = "2026-07-17T22:50:31.396Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/0c/e8/f7dac2e980bacc92bdc26cebae4ae4d50cae5380732c50980598fc0bbae4/websockets-16.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe", size = 177698, upload-time = "2026-07-17T22:50:32.829Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b2/39/26762f734113e22da2b942c3aca85798e0c0405d64c256549540ff31e5a1/websockets-16.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d", size = 187561, upload-time = "2026-07-17T22:50:34.24Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/11/94/c3f330851806b9b02138b774d593478323e73c99238681b4b93efe64e02d/websockets-16.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392", size = 188732, upload-time = "2026-07-17T22:50:36.088Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/f2/eb2c450f052de334ae33cf200ece6e87b0e14d186807074e4eb1cd2cdea2/websockets-16.1.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7", size = 190872, upload-time = "2026-07-17T22:50:38.008Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/70/31/2ac8cecf3a74f7fed9132129fc3d90b3998a1554570c11a69b2a8c20332d/websockets-16.1.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499", size = 189305, upload-time = "2026-07-17T22:50:39.53Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/6a/cf/8ab19650d3c0d4562c92e70ab47c257c4aa5c6a713ed87fe63766b31fefc/websockets-16.1.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43", size = 188033, upload-time = "2026-07-17T22:50:40.912Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/66/d7/a49a38a6127a4acb134fb1912b215d900cc657605cff32445bf519f3acc4/websockets-16.1.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458", size = 185748, upload-time = "2026-07-17T22:50:42.559Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/95/3e/ad1fa40388c7f2e0bb2c7930d0090b6c5498594bd1cdaec18864df3d9e97/websockets-16.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62", size = 188285, upload-time = "2026-07-17T22:50:43.974Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/35/b8/d5db28ca264b9104f82196f92dc8843e35fd391f763d42e4ad358f5bc97e/websockets-16.1.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb", size = 186777, upload-time = "2026-07-17T22:50:45.474Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/42/9c/726cb39d0cc43ae848dce4aa2acb04eecc6738b1264ec6d700bf6bcfb9f8/websockets-16.1.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51", size = 188682, upload-time = "2026-07-17T22:50:46.973Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/be/c7/1168704de8c2dd483edabe4a22cbe4465dd8be8dd95561d214f9fe092871/websockets-16.1.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0", size = 186377, upload-time = "2026-07-17T22:50:48.413Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/ca/40/f9ff2d630ffce4e7dfea0b2288e1caf9ebbf9ff8a9ec9396136ce8b94935/websockets-16.1.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217", size = 187148, upload-time = "2026-07-17T22:50:49.845Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/71/e177c8299f78d7cbe2d14df228643c10c70c0e86e108e092056bbcc16e46/websockets-16.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737", size = 187578, upload-time = "2026-07-17T22:50:51.619Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/49/b2/b6987faf330f5af5c787a2610124c2e8403d51724f9001ec4fff6311fe7a/websockets-16.1.1-cp314-cp314t-win32.whl", hash = "sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7", size = 179729, upload-time = "2026-07-17T22:50:53.269Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/a2/6e/fbac6ed878dd362fbad7d415fa4f84d38e3e33fed8cde45c64e783acf826/websockets-16.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231", size = 180072, upload-time = "2026-07-17T22:50:54.969Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/e1/ed/71fea6e141590cafc40b14dc5943b0845606bee87bdb52a21b6a73eb4311/websockets-16.1.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:820fb8450edddae3812fd58cbc08e2bf22812cb248ecb5f06dbb82119a56e869", size = 177185, upload-time = "2026-07-17T22:50:56.665Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/ec/00e7eeca200facf9266a83e4cbbf1bed0e67fba1d4d45031d3e5b3d81b5c/websockets-16.1.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:125f22dbefaf1554fea66fc83851490edb284ce4f501d37ffed2752f418332d9", size = 177459, upload-time = "2026-07-17T22:50:58.197Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/75/fd/5774c4b33f7c0d8f0c51809c8b3a93456c48e3543579262cfa64eb5f522e/websockets-16.1.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:30bbe120437b5648a77d3519b7024ea09530e0b5b18d3698c5a0ae536fe0cc2e", size = 178294, upload-time = "2026-07-17T22:50:59.641Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/37/c3/48e2c03d2bd79bb45948841c592d24156312dd5f58cdf8f549febe652fb6/websockets-16.1.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b6b9dadbef0cccd9f4c4ee96b08898afa73e26803bbe0f6aeb5bb12b0074206d", size = 179190, upload-time = "2026-07-17T22:51:01.129Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/2d/3f/73e511ecf2496ceac57dd4ed8388efe2bcf0769338a2dbf242c8366ae87e/websockets-16.1.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:56cd5fc4f10a9ea8aa0804bddb7b42506cf9e136046f3b4c27de8fec9e2ecba5", size = 180330, upload-time = "2026-07-17T22:51:02.603Z" },
|
||||
{ url = "https://files.pythonhosted.org/packages/be/4d/2d0d67834092e354d2b0498f014a41249a89556bc406cf86f3e1557bb463/websockets-16.1.1-py3-none-any.whl", hash = "sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3", size = 173814, upload-time = "2026-07-17T22:51:04.184Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "whitenoise"
|
||||
version = "6.12.0"
|
||||
@@ -1396,12 +1847,13 @@ dependencies = [
|
||||
{ name = "watchfiles" },
|
||||
{ name = "whitenoise", extra = ["brotli"] },
|
||||
{ name = "xlrd" },
|
||||
{ name = "yfinance" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "crispy-bootstrap5", specifier = "==2026.3" },
|
||||
{ name = "django", specifier = "~=5.2.15" },
|
||||
{ name = "django", specifier = "~=5.2.16" },
|
||||
{ name = "django-allauth", extras = ["socialaccount"], specifier = "~=65.18.0" },
|
||||
{ name = "django-browser-reload", specifier = "==1.21.0" },
|
||||
{ name = "django-cachalot", specifier = "~=2.9.0" },
|
||||
@@ -1430,6 +1882,7 @@ requires-dist = [
|
||||
{ name = "watchfiles", specifier = "==1.2.0" },
|
||||
{ name = "whitenoise", extras = ["brotli"], specifier = "==6.12.0" },
|
||||
{ name = "xlrd", specifier = "~=2.0.1" },
|
||||
{ name = "yfinance", specifier = "~=1.5.1" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1440,3 +1893,26 @@ sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d199
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload-time = "2025-06-14T08:46:37.766Z" },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "yfinance"
|
||||
version = "1.5.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "beautifulsoup4" },
|
||||
{ name = "curl-cffi" },
|
||||
{ name = "multitasking" },
|
||||
{ name = "numpy", version = "2.4.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.12'" },
|
||||
{ name = "numpy", version = "2.5.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.12'" },
|
||||
{ name = "pandas" },
|
||||
{ name = "peewee" },
|
||||
{ name = "platformdirs" },
|
||||
{ name = "protobuf" },
|
||||
{ name = "pytz" },
|
||||
{ name = "requests" },
|
||||
{ name = "websockets" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/75/f1/095457c99cd5fb44802e0dafbb17051e0bfdbf264bd4531556e662f57fbf/yfinance-1.5.1.tar.gz", hash = "sha256:89c48a1d45fb870f8e3066c22643c6911118ede9cead747b48925ce8e01a6940", size = 167897, upload-time = "2026-06-28T18:13:59.593Z" }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/53/ba0f45c93c45cafe010c9fe2f509c70d1ad0f96ae7b6ca93369db0c17942/yfinance-1.5.1-py2.py3-none-any.whl", hash = "sha256:a5c9cfc1b9c990f217b643e4fb92444e023cc02b2bacdea9c1fb472509fdfe22", size = 144223, upload-time = "2026-06-28T18:13:58.349Z" },
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user