Compare commits

...
Author SHA1 Message Date
Herculino Trotta cd48edddab feat(transactions): add htmx filter presets 2026-08-16 01:40:11 -03:00
Herculino Trotta 9e135560fe feat(transactions): add filter preset model 2026-08-16 01:40:03 -03:00
Herculino Trotta 907c511b59 Merge pull request #587
feat(dca): add chart zoom navigation
2026-08-15 15:12:14 -03:00
Herculino Trotta 33f0904a0f feat(dca): add chart zoom navigation 2026-08-15 15:10:10 -03:00
eitchtee 1c4f23a69e chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-08-15 17:43:26 +00:00
Herculino Trotta 8373732964 Merge pull request #586
Add consolidated currency chart lines
2026-08-15 14:42:54 -03:00
Herculino Trotta 8e09f3e8d8 feat(net-worth): add consolidated chart lines 2026-08-15 14:36:13 -03:00
Herculino Trotta 1516fe0281 Merge pull request #585
fix(tools:calculator): prevent close button from drifiting to the right
2026-08-15 11:41:44 -03:00
Herculino Trotta 3bd16602a0 fix(tools:calculator): prevent close button from drifiting to the right 2026-08-15 11:41:15 -03:00
Herculino Trotta 83c2b599d7 Merge pull request #584
fix(docker:dev): handle CRLF endings on vite entrypoint
2026-08-15 01:32:50 -03:00
Herculino Trotta f9eab3ce17 fix(docker:dev): handle CRLF endings on vite entrypoint 2026-08-15 01:32:02 -03:00
Herculino Trotta 62a33ddd2c Merge pull request #583
feat(monthly): show asset accounts/currencies on specific sumaries
2026-08-15 01:31:30 -03:00
Herculino Trotta ea3e9fd68f feat(monthly): show asset accounts/currencies on specific sumaries 2026-08-15 01:30:57 -03:00
Herculino Trotta d71bf3ccb3 Merge pull request #570 from eitchtee/dependabot/npm_and_yarn/frontend/immutable-5.1.9
build(deps): bump immutable from 5.1.6 to 5.1.9 in /frontend
2026-08-13 00:05:53 -03:00
Herculino Trotta 350d78356c Merge pull request #576 from eitchtee/dependabot/npm_and_yarn/frontend/postcss-8.5.26
build(deps): bump postcss from 8.5.15 to 8.5.26 in /frontend
2026-08-13 00:04:37 -03:00
Herculino Trotta 91dfba519c Merge branch 'main' into dependabot/npm_and_yarn/frontend/postcss-8.5.26 2026-08-13 00:04:24 -03:00
Herculino Trotta 0c9b41182b Merge pull request #575 from eitchtee/dependabot/uv/cryptography-50.0.0
build(deps): bump cryptography from 48.0.1 to 50.0.0
2026-08-13 00:03:51 -03:00
Herculino Trotta 7a900908dd Merge pull request #578 from eitchtee/dependabot/uv/django-5.2.16
build(deps): bump django from 5.2.15 to 5.2.16
2026-08-13 00:03:28 -03:00
Herculino Trotta dcd52ec189 Merge pull request #580 from eitchtee/dependabot/npm_and_yarn/frontend/nanoid-3.3.18
build(deps): bump nanoid from 3.3.12 to 3.3.18 in /frontend
2026-08-13 00:03:18 -03:00
Herculino Trotta 93e73b9aa6 Merge pull request #582 from eitchtee/dependabot/uv/tablib-3.10.0
build(deps): bump tablib from 3.9.0 to 3.10.0
2026-08-13 00:03:02 -03:00
eitchtee 7947d5f874 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-08-13 03:01:16 +00:00
Herculino Trotta 2ab6621205 Merge pull request #581 from obervinov/fix/recurring-tags-scheduler
fix: recurring tags and entities dropped when generated for another user
2026-08-13 00:00:48 -03:00
Herculino Trotta 39c15eedec Merge pull request #579 from eitchtee/weblate
Translations update from Weblate
2026-08-12 23:59:05 -03:00
dependabot[bot] 6dcf5a63f8 build(deps): bump tablib from 3.9.0 to 3.10.0
Bumps [tablib](https://github.com/jazzband/tablib) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/jazzband/tablib/releases)
- [Changelog](https://github.com/jazzband/tablib/blob/master/HISTORY.md)
- [Commits](https://github.com/jazzband/tablib/compare/v3.9.0...v3.10.0)

---
updated-dependencies:
- dependency-name: tablib
  dependency-version: 3.10.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-12 19:48:53 +00:00
obervinov 11a6b3faa6 fix(transactions): recurring tags and entities dropped when generated for another user 2026-08-12 22:33:01 +04:00
dependabot[bot] 9b1312b744 build(deps): bump nanoid from 3.3.12 to 3.3.18 in /frontend
Bumps [nanoid](https://github.com/ai/nanoid) from 3.3.12 to 3.3.18.
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/3.3.18/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.12...3.3.18)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-version: 3.3.18
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-11 23:14:09 +00:00
GitEbu 72707f46e6 locale(German): update translation
Currently translated at 86.2% (670 of 777 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/de/
2026-08-10 12:57:27 +00:00
dependabot[bot] cf908ae87e build(deps): bump django from 5.2.15 to 5.2.16
Bumps [django](https://github.com/django/django) from 5.2.15 to 5.2.16.
- [Commits](https://github.com/django/django/compare/5.2.15...5.2.16)

---
updated-dependencies:
- dependency-name: django
  dependency-version: 5.2.16
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-10 03:07:57 +00:00
dependabot[bot] b145d10fbd build(deps): bump postcss from 8.5.15 to 8.5.26 in /frontend
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.15 to 8.5.26.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.15...8.5.26)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.26
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-07 07:51:02 +00:00
dependabot[bot] ee39dcf9ef build(deps): bump cryptography from 48.0.1 to 50.0.0
Bumps [cryptography](https://github.com/pyca/cryptography) from 48.0.1 to 50.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/48.0.1...50.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 50.0.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-05 03:39:39 +00:00
dependabot[bot] 5d330ddfbf build(deps): bump immutable from 5.1.6 to 5.1.9 in /frontend
Bumps [immutable](https://github.com/immutable-js/immutable-js) from 5.1.6 to 5.1.9.
- [Release notes](https://github.com/immutable-js/immutable-js/releases)
- [Changelog](https://github.com/immutable-js/immutable-js/blob/main/CHANGELOG.md)
- [Commits](https://github.com/immutable-js/immutable-js/compare/v5.1.6...v5.1.9)

---
updated-dependencies:
- dependency-name: immutable
  dependency-version: 5.1.9
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-24 06:23:28 +00:00
eitchtee 14011c2f60 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-07-18 18:43:53 +00:00
Herculino Trotta a25adafe3b Merge pull request #568
feat(automatic-exchange-rates): Add Yahoo Finance as a provider via yfinance
2026-07-18 15:43:28 -03:00
Herculino Trotta 743951a862 feat(automatic-exchange-rates): Add Yahoo Finance as a provider via yfinance 2026-07-18 15:42:51 -03:00
Herculino Trotta 74d3d5fcf9 Merge pull request #567
feat(docker:dev): npm dependencies are installed when container starts
2026-07-17 21:30:29 -03:00
Herculino Trotta 75f23168ab feat(docker:dev): npm dependencies are installed when container starts 2026-07-17 21:29:45 -03:00
eitchtee 0ec1c5c063 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-07-18 00:29:20 +00:00
Herculino Trotta e69d5fbd7a Merge pull request #566 from eitchtee/feat/cuelume
feat: replace mp3 sounds with cuelume; deprecate volume setting
2026-07-17 21:28:54 -03:00
Herculino Trotta 5a80a3b1d3 feat: replace mp3 sounds with cuelume; deprecate volume setting 2026-07-17 21:28:13 -03:00
53 changed files with 2640 additions and 1212 deletions
@@ -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",
),
),
]
+1
View File
@@ -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(
+3 -3
View File
@@ -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)
+81 -2
View File
@@ -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,
)
+53
View File
@@ -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)
+23
View File
@@ -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"]},
),
]
+27 -6
View File
@@ -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())
+20
View File
@@ -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,
+88 -3
View File
@@ -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)},
)
-1
View File
@@ -140,7 +140,6 @@ class UserSettingsForm(forms.ModelForm):
"date_format",
"datetime_format",
"number_format",
"volume",
"default_account",
]
widgets = {
+76 -74
View File
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
"PO-Revision-Date: 2026-04-09 11:24+0000\n"
"Last-Translator: LordTimothyHKIT <tim.hofstetter@hkit.ch>\n"
"POT-Creation-Date: 2026-08-15 17:43+0000\n"
"PO-Revision-Date: 2026-08-10 12:57+0000\n"
"Last-Translator: GitEbu <ebu@buol.ch>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
"app/de/>\n"
"Language: de\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16.2\n"
"X-Generator: Weblate 2026.8\n"
#: apps/accounts/forms.py:24
msgid "Group name"
@@ -31,8 +31,8 @@ msgstr "Gruppe Name"
#: 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 "Aktualisierung"
#: 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 "Hinzufügen"
@@ -68,7 +68,7 @@ msgstr "Neuer Saldo"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Kategorie"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Tags"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -171,7 +171,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -356,7 +356,7 @@ msgstr ""
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Speichern"
@@ -558,27 +558,27 @@ msgstr "Umrechnungskurse"
msgid "From and To currencies cannot be the same."
msgstr "Start- und Zielwährung dürfen nicht identisch sein."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "An"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Alle X Stunden"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "Nicht an"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Dienstname"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Diensttyp"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -590,31 +590,31 @@ msgstr "Diensttyp"
msgid "Active"
msgstr "Aktiv"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "API-Schlüssel"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "API-Schlüssel für den Dienst (falls benötigt)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Intervalltyp"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Intervall"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Letzter erfolgreicher Abruf"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Zielwährungen"
#: 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."
@@ -622,11 +622,11 @@ msgstr ""
"Währung auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Zielkonten"
#: 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."
@@ -634,31 +634,33 @@ msgstr ""
"Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Single exchange rate"
msgstr "Umrechnungskurs bearbeiten"
#: apps/currencies/models.py:165
#: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Legen Sie einen Wechselkurs an und aktualisieren Sie ihn regelmäßig. So "
"vermeiden Sie Unübersichtlichkeit in der Datenbank."
#: apps/currencies/models.py:170
#: apps/currencies/models.py:171
msgid "Exchange Rate Service"
msgstr "Umrechnungskurs-Dienst"
#: apps/currencies/models.py:171
#: apps/currencies/models.py:172
msgid "Exchange Rate Services"
msgstr "Umrechnungskurs-Dienste"
#: apps/currencies/models.py:223
#: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer."
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
#: 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')."
@@ -666,7 +668,7 @@ msgstr ""
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
"Zeiträume (z.B. \"1-5,8,10-12\")."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -770,7 +772,7 @@ msgstr "Startwährung"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Notizen"
@@ -858,7 +860,7 @@ msgstr "Kategorien"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1130,14 +1132,14 @@ msgstr "Bediener"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Typ"
#: 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/models.py:1076 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
@@ -1155,7 +1157,7 @@ msgstr "Referenzdatum"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1167,26 +1169,26 @@ msgstr "Betrag"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Beschreibung"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Interne Notiz"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "Interne ID"
#: 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:1077
msgid "Mute"
msgstr "Stummschalten"
@@ -1529,7 +1531,7 @@ msgstr ""
msgid "Entity"
msgstr "Entität"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1541,7 +1543,7 @@ msgstr "Entität"
msgid "Income"
msgstr "Einnahme"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1711,7 +1713,7 @@ msgstr "Letztes generiertes Datum"
msgid "Last Generated Reference Date"
msgstr "Letztes generiertes Referenzdatum"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1720,7 +1722,7 @@ msgstr "Letztes generiertes Referenzdatum"
msgid "Quick Transaction"
msgstr "Schnelle Transaktion"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1970,7 +1972,7 @@ msgstr "Zahlenformat"
msgid "Default Account"
msgstr "Standart Konto"
#: 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 "
@@ -1981,25 +1983,25 @@ msgstr ""
"angezeigt werden.\n"
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Neues Passwort"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Leer lassen um Passwort zu belassen."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Bestätige das neue Passwort"
#: 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 "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen."
#: 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."
@@ -2007,57 +2009,57 @@ msgstr ""
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
"hinzuzufügen."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "Die eingegebenen Passwörter stimmen nicht überein."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Bitte bestätige dein neues Passwort."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Bitte gebe erst dein neues Passwort ein."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
#, fuzzy
#| msgid "Tag name"
msgid "Token name"
msgstr "Tagname"
#: 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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2406,8 +2408,8 @@ msgid "Current balance"
msgstr "Aktueller Saldo"
#: 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 "Differenz"
@@ -3517,26 +3519,26 @@ msgstr "Sortieren nach"
msgid "By currency"
msgstr "Nach Währung"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Zusammengefasst"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
#, fuzzy
#| msgid "Evolution by account"
msgid "Evolution"
msgstr "Verlauf nach Konto"
#: 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 "Nach Konto"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Verlauf nach Währung"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Verlauf nach Konto"
+71 -71
View File
@@ -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-15 17:43+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 ""
@@ -67,7 +67,7 @@ msgstr ""
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -84,7 +84,7 @@ msgstr ""
#: 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/models.py:1099 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,7 +97,7 @@ 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -167,7 +167,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -344,7 +344,7 @@ 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
msgid "Save"
msgstr ""
@@ -546,27 +546,27 @@ 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/currencies/models.py:119 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
#: templates/entities/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."
@@ -748,7 +748,7 @@ msgstr ""
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr ""
@@ -836,7 +836,7 @@ msgstr ""
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1106,14 +1106,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1131,7 +1131,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1143,26 +1143,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1483,7 +1483,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: 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:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1656,7 +1656,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: 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:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -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 ""
@@ -2316,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 ""
@@ -3388,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 ""
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2026-07-10 04:57+0000\n"
"Last-Translator: Juan David Afanador <juanafanador07@gmail.com>\n"
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr "Nombre del Grupo"
#: 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 "Actualizar"
#: 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 "Agregar"
@@ -68,7 +68,7 @@ msgstr "Nuevo balance"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Categoría"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Etiquetas"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -169,7 +169,7 @@ msgstr "Las cuentas archivadas no aparecen ni cuentan para su patrimonio neto"
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -353,7 +353,7 @@ msgstr ""
"compartido. Solo el propietario puede editarlo.<br/>Público: Visible para "
"todos los usuarios. Solo el propietario puede editarlo."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Guardar"
@@ -555,27 +555,27 @@ msgstr "Tasas de cambio"
msgid "From and To currencies cannot be the same."
msgstr "Las monedas de origen y destino no pueden ser la misma."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Encendido"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Cada X horas"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "No Encendido"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Nombre del Servicio"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Tipo de Servicio"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -587,31 +587,31 @@ msgstr "Tipo de Servicio"
msgid "Active"
msgstr "Activo"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "Clave API"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "Clave API para el servicio (si es necesaria)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Intervalo"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Última Sincronización Exitosa"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Monedas de Destino"
#: 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."
@@ -620,11 +620,11 @@ msgstr ""
"tasas se consultarán para cada moneda en relación con su moneda de "
"referencia establecida."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Cuentas de Destino"
#: 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."
@@ -633,33 +633,33 @@ msgstr ""
"tasas se consultarán para la moneda de cada cuenta en relación con su moneda "
"de referencia establecida."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Single exchange rate"
msgstr "Tasa de cambio única"
#: apps/currencies/models.py:165
#: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Crea una única tasa de cambio y mantenla actualizada. Evita la acumulación "
"de datos en la base de datos."
#: apps/currencies/models.py:170
#: apps/currencies/models.py:171
msgid "Exchange Rate Service"
msgstr "Servicio de Tasas de Cambio"
#: apps/currencies/models.py:171
#: apps/currencies/models.py:172
msgid "Exchange Rate Services"
msgstr "Servicios de Tasas de Cambio"
#: apps/currencies/models.py:223
#: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer."
msgstr "El tipo de intervalo 'Cada X horas' requiere un entero positivo."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "El tipo de intervalo 'Cada X horas' debe ser ente 1 y 24."
#: 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')."
@@ -667,7 +667,7 @@ msgstr ""
"Formato de hora no válido. Usa horas separadas por coma (0-23) y/o rangos "
"(p. ej., \"1-5,8,10-12\")."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -769,7 +769,7 @@ msgstr "Moneda de pago"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Notas"
@@ -857,7 +857,7 @@ msgstr "Categorías"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1128,14 +1128,14 @@ msgstr "Operador"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Tipo"
#: 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/models.py:1076 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
@@ -1153,7 +1153,7 @@ msgstr "Fecha de Referencia"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1165,26 +1165,26 @@ msgstr "Monto"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Descripción"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Nota Interna"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "ID Interno"
#: 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:1077
msgid "Mute"
msgstr "Silenciar"
@@ -1517,7 +1517,7 @@ msgstr ""
msgid "Entity"
msgstr "Entidad"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1529,7 +1529,7 @@ msgstr "Entidad"
msgid "Income"
msgstr "Ingreso"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1690,7 +1690,7 @@ msgstr "Última Fecha Generada"
msgid "Last Generated Reference Date"
msgstr "Última Fecha de Referencia Generada"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1699,7 +1699,7 @@ msgstr "Última Fecha de Referencia Generada"
msgid "Quick Transaction"
msgstr "Transacción Rápida"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1945,7 +1945,7 @@ msgstr "Formato de Número"
msgid "Default Account"
msgstr "Cuenta por Defecto"
#: 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 "
@@ -1956,19 +1956,19 @@ msgstr ""
"y las fechas\n"
"Ayude a traducir WYGIWYH a su idioma en %(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Nueva Contraseña"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Deje en blanco para mantener la contraseña actual."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Confirmar nueva contraseña"
#: 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."
@@ -1976,7 +1976,7 @@ msgstr ""
"Establece si este usuario debe ser tratado como activo. Desmarque esta "
"opción en lugar de borrar cuentas."
#: 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."
@@ -1984,58 +1984,58 @@ msgstr ""
"Establece que este usuario tiene todos los permisos sin asignárselos "
"expresamente."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr "Esta dirección de correo es usada por otra cuenta."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "Los dos campos de contraseñas no coinciden."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Por favor, confirme su nueva contraseña."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Por favor, introduzca su nueva contraseña."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr "No puede desactivar su propia cuenta usando este formulario."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "No se puede eliminar el estado del último superusuario."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr ""
"No puedes eliminar tu propio estado de superusuario usando este formulario."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Ya existe un usuario con este correo."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
#, fuzzy
#| msgid "Tag name"
msgid "Token name"
msgstr "Nombre de etiqueta"
#: 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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2378,8 +2378,8 @@ msgid "Current balance"
msgstr "Saldo actual"
#: 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 "Diferencia"
@@ -3458,24 +3458,24 @@ msgstr "Ordenar por"
msgid "By currency"
msgstr "Por moneda"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Consolidado"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
msgid "Evolution"
msgstr "Evolución"
#: 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 "Por cuenta"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Evolución por moneda"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Evolución por cuenta"
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2026-06-27 21:57+0000\n"
"Last-Translator: sorcierwax <freakywax@gmail.com>\n"
"Language-Team: French <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr "Nom du groupe"
#: 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 "Mise à jour"
#: 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 "Ajouter"
@@ -68,7 +68,7 @@ msgstr "Nouveau solde"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Catégorie"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Etiquettes"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -171,7 +171,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -355,7 +355,7 @@ msgstr ""
"partagés. Seulement modifiable par le propriétaire.<br/> Publique : Visible "
"par tous. Seulement modifiable par le propriétaire."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Sauvegarder"
@@ -557,27 +557,27 @@ msgstr "Taux de changes"
msgid "From and To currencies cannot be the same."
msgstr "Les devises de départ et d'arrivée ne peuvent pas être identiques."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Le"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Toutes les X heures"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "Pas le"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Nom du Service"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Type de Service"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -589,31 +589,31 @@ msgstr "Type de Service"
msgid "Active"
msgstr "Actif"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "Clé API"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "Clé API pour le service (si nécessaire)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Type d'intervalle"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Intervalle"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Dernière récupération avec succès"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Devises cibles"
#: 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."
@@ -621,11 +621,11 @@ msgstr ""
"Sélectionnez les devises pour récupérer leur taux de changes. Les taux "
"seront récupérés pour chaque devises par rapport à leur devise d'échange."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Comptes cibles"
#: 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."
@@ -633,33 +633,33 @@ msgstr ""
"Sélectionnez les comptes pour récupérer leur taux de change. Les taux seront "
"récupérés pour chaque compte par rapport à leur devise d'échange."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Single exchange rate"
msgstr "Taux de change unique"
#: apps/currencies/models.py:165
#: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Ne créer qu'un seul taux de change et le mettre à jour. Evite d'engorger la "
"base de donnée."
#: apps/currencies/models.py:170
#: apps/currencies/models.py:171
msgid "Exchange Rate Service"
msgstr "Service de taux de change"
#: apps/currencies/models.py:171
#: apps/currencies/models.py:172
msgid "Exchange Rate Services"
msgstr "Services de taux de change"
#: apps/currencies/models.py:223
#: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer."
msgstr "'Toutes les X heures' l'intervalle requiert un entier positif."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "'Toutes les X heures' l'intervalle doit être compris entre 1 et 24."
#: 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')."
@@ -667,7 +667,7 @@ msgstr ""
"Format d'heure invalide. Utilisez les heures séparé par virgule (0-23) et/ou "
"une plage (ex : '1-5,8,10-12')."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -770,7 +770,7 @@ msgstr "Devise de paiement"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Notes"
@@ -858,7 +858,7 @@ msgstr "Catégories"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1130,14 +1130,14 @@ msgstr "Opérateur"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Type"
#: 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/models.py:1076 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
@@ -1155,7 +1155,7 @@ msgstr "Date de référence"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1167,26 +1167,26 @@ msgstr "Montant"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Description"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Note interne"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "ID interne"
#: 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:1077
msgid "Mute"
msgstr "Silencieux"
@@ -1521,7 +1521,7 @@ msgstr ""
msgid "Entity"
msgstr "Entité"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1533,7 +1533,7 @@ msgstr "Entité"
msgid "Income"
msgstr "Revenus"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1694,7 +1694,7 @@ msgstr "Dernière date générée"
msgid "Last Generated Reference Date"
msgstr "Dernière date de référence générée"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1703,7 +1703,7 @@ msgstr "Dernière date de référence générée"
msgid "Quick Transaction"
msgstr "Transaction rapide"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1949,7 +1949,7 @@ msgstr "Format numérique"
msgid "Default Account"
msgstr "Compte par défaut"
#: 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 "
@@ -1961,19 +1961,19 @@ msgstr ""
"Considérez d'aider à la traduction de WYGIWYH dans votre langue sur "
"%(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Nouveau mot de passe"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Laisser vide pour garder le mot de passe actuel."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Confirmer le nouveau mot de passe"
#: 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."
@@ -1981,7 +1981,7 @@ msgstr ""
"Indique si cet utilisateur doit être traité comme actif. Désélectionnez ceci "
"plutôt que supprimer des comptes."
#: 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."
@@ -1989,62 +1989,62 @@ msgstr ""
"Définir que cet utilisateur a toutes les permissions sans les assigner "
"explicitement."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr ""
"Cette adresse email est déjà utiliser dans un autre compte utilisateur."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "Les deux mot de passe ne correspondent pas."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Merci de confirmer votre mot de passe."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Merci d'indiquer d'abord le nouveau mot de passe."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr ""
"Vous ne pouvez pas désactiver votre propre compte utilisateur avec ce "
"formulaire."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "Impossible de supprimer le statut du dernier super utilisateur."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr ""
"Vous ne pouvez pas supprimer votre propre statut de super utilisateur via ce "
"formulaire."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Un utilisateur avec cette adresse email existe déjà."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
#, fuzzy
#| msgid "Tag name"
msgid "Token name"
msgstr "Libellé de l'étiquette"
#: 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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2389,8 +2389,8 @@ msgid "Current balance"
msgstr "Balance actuelle"
#: 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 "Différence"
@@ -3475,24 +3475,24 @@ msgstr "Trier par"
msgid "By currency"
msgstr "Par devises"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Consolidé"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
msgid "Evolution"
msgstr "Evolution"
#: 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 "Par comptes"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Evolution par devises"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Evolution par comptes"
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2026-01-10 03:09+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Hungarian <https://translations.herculino.com/projects/"
@@ -31,8 +31,8 @@ msgstr "Csoport neve"
#: 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 "Frissítés"
#: 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 "Hozzáadás"
@@ -68,7 +68,7 @@ msgstr "Új egyenleg"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Kategória"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Címkék"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -172,7 +172,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -350,7 +350,7 @@ 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
msgid "Save"
msgstr "Mentés"
@@ -552,27 +552,27 @@ msgstr "Átváltási ráták"
msgid "From and To currencies cannot be the same."
msgstr "A forrás és a cél pénznemnek különböznie kell."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Be"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Minden X órában"
#: 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 "Szolgáltatás neve"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Szolgáltatás típusa"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -584,77 +584,77 @@ msgstr "Szolgáltatás típusa"
msgid "Active"
msgstr "Aktív"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "API kulcs"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "API kulcs a szolgáltatáshoz (ha szükséges)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Intervallum típusa"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Intervallum"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Utolsó sikeres elérés"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Cél pénznemek"
#: 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 "Cél számlák"
#: 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."
@@ -754,7 +754,7 @@ msgstr ""
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Megjegyzések"
@@ -842,7 +842,7 @@ msgstr "Kategóriák"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1112,14 +1112,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1137,7 +1137,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1149,26 +1149,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1489,7 +1489,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1501,7 +1501,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1670,7 +1670,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1679,7 +1679,7 @@ msgstr ""
msgid "Quick Transaction"
msgstr "Gyors tranzakció"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1931,7 +1931,7 @@ msgstr ""
msgid "Default Account"
msgstr "Cél számlák"
#: 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 "
@@ -1939,81 +1939,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 "File name"
msgid "Token name"
msgstr "Fájlnév"
#: 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 ""
@@ -2352,8 +2352,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 ""
@@ -3426,24 +3426,24 @@ msgstr "Rendezés"
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 ""
+71 -71
View File
@@ -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-15 17:43+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 ""
@@ -66,7 +66,7 @@ msgstr ""
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -83,7 +83,7 @@ msgstr ""
#: 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/models.py:1099 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,7 +96,7 @@ 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:272 apps/transactions/models.py:1061
#: 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,7 +166,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -343,7 +343,7 @@ 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
msgid "Save"
msgstr ""
@@ -545,27 +545,27 @@ 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/currencies/models.py:119 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
#: templates/entities/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."
@@ -747,7 +747,7 @@ msgstr ""
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr ""
@@ -835,7 +835,7 @@ msgstr ""
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1105,14 +1105,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1130,7 +1130,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1142,26 +1142,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1482,7 +1482,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: 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:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1655,7 +1655,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: 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:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -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 ""
@@ -2315,8 +2315,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 ""
@@ -3386,24 +3386,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 ""
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2025-12-28 22:24+0000\n"
"Last-Translator: icovada <federico.tabbo@networktocode.com>\n"
"Language-Team: Italian <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr "Nome del gruppo"
#: 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 "Aggiorna"
#: 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 "Aggiungi"
@@ -68,7 +68,7 @@ msgstr "Nuovo saldo"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Categoria"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Tag"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -171,7 +171,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -355,7 +355,7 @@ msgstr ""
"Modificabile solo dal proprietario.<br/>Pubblico: visibile da tutti gli "
"utenti. Modificabile solo dal proprietario."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Salva"
@@ -557,27 +557,27 @@ msgstr "Cambio valute"
msgid "From and To currencies cannot be the same."
msgstr "Le valute di origine e destinazione non possono essere le stesse."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Attivo"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Ogni X ore"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "Non attivo"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Nome servizio"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Tipo di servizio"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -589,31 +589,31 @@ msgstr "Tipo di servizio"
msgid "Active"
msgstr "Attivo"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "Chiave API"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "Chiave API per il servizio (se richiesta)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Tipo di intervallo"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Intervallo"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Ultimo scaricamento riuscito"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Valute target"
#: 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."
@@ -621,11 +621,11 @@ msgstr ""
"Seleziona le valute per cui scaricare i tassi di cambio. I tassi verranno "
"scaricati per ogni valuta rispetto alla valuta di cambio impostata."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Conti target"
#: 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."
@@ -634,33 +634,33 @@ msgstr ""
"scaricati per la valuta di ogni conto rispetto alla valuta di cambio "
"impostata."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Single exchange rate"
msgstr "Cambio unico"
#: apps/currencies/models.py:165
#: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Crea un solo cambio valuta e aggiornalo nel tempo, evitando duplicati nel "
"database."
#: apps/currencies/models.py:170
#: apps/currencies/models.py:171
msgid "Exchange Rate Service"
msgstr "Servizio cambio valuta"
#: apps/currencies/models.py:171
#: apps/currencies/models.py:172
msgid "Exchange Rate Services"
msgstr "Servizi tassi di cambio"
#: apps/currencies/models.py:223
#: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer."
msgstr "Lintervallo “Ogni X ore” richiede un numero intero positivo."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Lintervallo “Ogni X ore” deve essere compreso tra 1 e 24."
#: 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')."
@@ -668,7 +668,7 @@ msgstr ""
"Formato ore non valido. Usa ore separate da virgole (023) e/o intervalli "
"(es. '1-5,8,10-12')."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -770,7 +770,7 @@ msgstr "Valuta di pagamento"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Note"
@@ -858,7 +858,7 @@ msgstr "Categorie"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1131,14 +1131,14 @@ msgstr "Operatore"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Tipo"
#: 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/models.py:1076 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
@@ -1156,7 +1156,7 @@ msgstr "Data di riferimento"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1168,26 +1168,26 @@ msgstr "Importo"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Descrizione"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Note interne"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "ID Interno"
#: 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:1077
msgid "Mute"
msgstr "Silenzia"
@@ -1522,7 +1522,7 @@ msgstr ""
msgid "Entity"
msgstr "Beneficiari"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1534,7 +1534,7 @@ msgstr "Beneficiari"
msgid "Income"
msgstr "Entrate"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1703,7 +1703,7 @@ msgstr "Data dell'ultima generazione"
msgid "Last Generated Reference Date"
msgstr "Data dell'ultimo riferimento generato"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1712,7 +1712,7 @@ msgstr "Data dell'ultimo riferimento generato"
msgid "Quick Transaction"
msgstr "Transazione rapida"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1964,7 +1964,7 @@ msgstr "Formato numerico"
msgid "Default Account"
msgstr "Conti target"
#: 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 "
@@ -1976,19 +1976,19 @@ msgstr ""
"Considera la possibilità di contribuire alla traduzione di WYGIWYH nella tua "
"lingua su %(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Nuova Password"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Lascia vuoto per mantenere la password attuale."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Conferma nuova password"
#: 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."
@@ -1996,7 +1996,7 @@ msgstr ""
"Indica se questo utente deve essere considerato attivo. Deseleziona questa "
"opzione invece di eliminare gli account."
#: 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."
@@ -2004,59 +2004,59 @@ msgstr ""
"Indica che questo utente ha tutte le autorizzazioni senza assegnarle "
"esplicitamente."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr "Questo indirizzo email è già utilizzato da un altro account."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "I due campi password non corrispondono."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Conferma la nuova password."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Inserisci prima la nuova password."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr "Non è possibile disattivare il proprio account tramite questo modulo."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "Impossibile rimuovere lo stato dall'ultimo superutente."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr ""
"Non è possibile rimuovere il proprio stato di superutente tramite questo "
"modulo."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Esiste già un utente con questo indirizzo email."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
#, fuzzy
#| msgid "Tag name"
msgid "Token name"
msgstr "Nome tag"
#: 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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2407,8 +2407,8 @@ msgid "Current balance"
msgstr "Saldo corrente"
#: 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 "Differenza"
@@ -3509,26 +3509,26 @@ msgstr "Ordina per"
msgid "By currency"
msgstr "Per valuta"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Consolidate"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
#, fuzzy
#| msgid "Evolution by account"
msgid "Evolution"
msgstr "Evoluzione per conto"
#: 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 "Per conto"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Evoluzione per valuta"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Evoluzione per conto"
+71 -71
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
"POT-Creation-Date: 2026-08-15 17:43+0000\n"
"PO-Revision-Date: 2026-07-05 15:57+0000\n"
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr "Groepsnaam"
#: 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 "Bijwerken"
#: 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 "Toevoegen"
@@ -68,7 +68,7 @@ msgstr "Nieuw saldo"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Categorie"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Labels"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -172,7 +172,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -355,7 +355,7 @@ msgstr ""
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
"Alleen bewerkbaar door de eigenaar."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Opslaan"
@@ -557,27 +557,27 @@ msgstr "Wisselkoersen"
msgid "From and To currencies cannot be the same."
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Op"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Elke X Uren"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "Niet op"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Dienstnaam"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Soort Dienst"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -589,31 +589,31 @@ msgstr "Soort Dienst"
msgid "Active"
msgstr "Actief"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "API Sleutel"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "API sleutel voor de dienst (indien verplicht)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Soort Interval"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Interval"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Laatste Succesvolle Ophaling"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Doel Munteenheden"
#: 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."
@@ -621,11 +621,11 @@ msgstr ""
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Naar rekeningen"
#: 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."
@@ -634,33 +634,33 @@ msgstr ""
"opgehaald voor de munteenheid van elke rekening ten opzichte van de "
"ingestelde wisselkoers."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Single exchange rate"
msgstr "Enkele Wisselkoers"
#: apps/currencies/models.py:165
#: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle "
"database."
#: apps/currencies/models.py:170
#: apps/currencies/models.py:171
msgid "Exchange Rate Service"
msgstr "Wisselkoersdienst"
#: apps/currencies/models.py:171
#: apps/currencies/models.py:172
msgid "Exchange Rate Services"
msgstr "Wisselkoersdiensten"
#: apps/currencies/models.py:223
#: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer."
msgstr "Voor het intervaltype Elke X uur is een positief geheel getal nodig."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Het interval Elke X uur moet tussen 1 en 24 liggen."
#: 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')."
@@ -668,7 +668,7 @@ msgstr ""
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
"reeksen (bijv. 1-5,8,10-12)."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -771,7 +771,7 @@ msgstr "Betaal Munteenheid"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Opmerkingen"
@@ -859,7 +859,7 @@ msgstr "Categorieën"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1131,14 +1131,14 @@ msgstr "Operator"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Soort"
#: 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/models.py:1076 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
@@ -1156,7 +1156,7 @@ msgstr "Referentiedatum"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1168,26 +1168,26 @@ msgstr "Bedrag"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Beschrijving"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Interne opmerking"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "Interne ID"
#: 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:1077
msgid "Mute"
msgstr "Dempen"
@@ -1518,7 +1518,7 @@ msgstr ""
msgid "Entity"
msgstr "Bedrijf"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1530,7 +1530,7 @@ msgstr "Bedrijf"
msgid "Income"
msgstr "Ontvangsten Transactie"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1691,7 +1691,7 @@ msgstr "Laatste Gegenereerde Datum"
msgid "Last Generated Reference Date"
msgstr "Laatste Gegenereerde Referentiedatum"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1700,7 +1700,7 @@ msgstr "Laatste Gegenereerde Referentiedatum"
msgid "Quick Transaction"
msgstr "Snelle verrichting"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1946,7 +1946,7 @@ msgstr "Schrijfwijze Nummers"
msgid "Default Account"
msgstr "Standaard Rekening"
#: 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 "
@@ -1957,19 +1957,19 @@ msgstr ""
"weergegeven\n"
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Nieuw Wachtwoord"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Laat leeg om het huidige wachtwoord te behouden."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Bevestig Nieuw Wachtwoord"
#: 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."
@@ -1977,7 +1977,7 @@ msgstr ""
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
"dit in plaats van accounts te verwijderen."
#: 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."
@@ -1985,56 +1985,56 @@ msgstr ""
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
"kennen."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr "Dit e-mailadres wordt al gebruikt door een ander account."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "De twee wachtwoordvelden komen niet overeen."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Bevestig je nieuwe wachtwoord."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Geef eerst het nieuwe wachtwoord op."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr "Je kunt je eigen account niet deactiveren met dit formulier."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Er bestaat al een gebruiker met dit e-mailadres."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
msgid "Token name"
msgstr "Token naam"
#: apps/users/forms.py:441
#: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr ""
"Gebruik een beschrijvende naam, zoals n8n, Home Assistant of back-uptaak."
#: apps/users/forms.py:447
#: apps/users/forms.py:446
msgid "Expires in days"
msgstr "Verloopt over X dagen"
#: apps/users/forms.py:448
#: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token."
msgstr "Laat dit veld leeg voor een token zonder vervaldatum."
#: apps/users/forms.py:463
#: apps/users/forms.py:462
msgid "Create token"
msgstr "Token aanmaken"
@@ -2360,8 +2360,8 @@ msgid "Current balance"
msgstr "Huidige saldo"
#: 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 "Verschil"
@@ -3442,24 +3442,24 @@ msgstr "Sorteer op"
msgid "By currency"
msgstr "Op munteenheid"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Samengevoegd"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
msgid "Evolution"
msgstr "Evolutie"
#: 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 "Op rekening"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Evolutie per munteenheid"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Evolutie per rekening"
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2026-06-08 07:57+0000\n"
"Last-Translator: Pawel Augustyn <pawelaugustyn15@gmail.com>\n"
"Language-Team: Polish <https://translations.herculino.com/projects/wygiwyh/"
@@ -32,8 +32,8 @@ msgstr "Nazwa grupy"
#: 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"
@@ -48,7 +48,7 @@ msgstr "Aktualizuj"
#: 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 "Dodaj"
@@ -69,7 +69,7 @@ msgstr "Nowe saldo"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -86,7 +86,7 @@ msgstr "Kategoria"
#: 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/models.py:1099 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
@@ -99,7 +99,7 @@ msgstr "Tagi"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -173,7 +173,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -359,7 +359,7 @@ msgstr ""
"udostępnione. Tylko właściciel może dokonywać zmian.<br />Publiczny: "
"Widoczne dla wszystkich. Tylko właściciel może dokonywać zmian."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Zapisz"
@@ -567,27 +567,27 @@ msgstr "Kursy wymiany"
msgid "From and To currencies cannot be the same."
msgstr "Waluty Z oraz Do nie mogą być identyczne."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Włączone"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "Co X godzin"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "Wyłączone"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Nazwa serwisu"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Typ serwisu"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -599,31 +599,31 @@ msgstr "Typ serwisu"
msgid "Active"
msgstr "Aktywny"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "Klucz API"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "Klucz API dla serwisu (jeśli potrzebny)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Cykliczność"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Powtarzać co"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Ostatnia pomyślna synchronizacja"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Docelowe waluty"
#: 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."
@@ -631,11 +631,11 @@ msgstr ""
"Wybierz waluty dla których pobrać kursy wymiany. Będą one pobrane dla każdej "
"z walut na podstawie jej docelowej waluty wymiany."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Konta docelowe"
#: 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."
@@ -643,31 +643,31 @@ msgstr ""
"Wybierz konta dla których pobrać kursy wymiany. Będą one pobrane dla każdej "
"z walut na podstawie jej docelowej waluty wymiany."
#: 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 "Cykliczność \"co X godzin\" wymaga dodatniej liczby."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Cykliczność \"co X godzin\" musi być z przedziału 1-24."
#: 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')."
@@ -675,7 +675,7 @@ msgstr ""
"Niepoprawny format godziny. Użyj zakresów (0-23) i/lub oddziel godziny "
"przecinkami (np. \"1-5,8,10-12\")."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -775,7 +775,7 @@ msgstr "Waluta dla płatności"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Notatki"
@@ -863,7 +863,7 @@ msgstr "Kategorie"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1135,14 +1135,14 @@ msgstr "Operator"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Typ"
#: 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/models.py:1076 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
@@ -1160,7 +1160,7 @@ msgstr "Data referencyjna"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1172,26 +1172,26 @@ msgstr "Kwota"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Opis"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Notatka"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "Wewnętrzne ID"
#: 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:1077
msgid "Mute"
msgstr "Wycisz"
@@ -1522,7 +1522,7 @@ msgstr ""
msgid "Entity"
msgstr "Encja"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1534,7 +1534,7 @@ msgstr "Encja"
msgid "Income"
msgstr "Przychody"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1699,7 +1699,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1708,7 +1708,7 @@ msgstr ""
msgid "Quick Transaction"
msgstr "Szablon transakcji"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1960,7 +1960,7 @@ msgstr "Format liczb"
msgid "Default Account"
msgstr "Konto główne/domyślne"
#: 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 "
@@ -1972,19 +1972,19 @@ msgstr ""
"Rozważ wsparcie tłumaczenia WYGIWYH dla Twojego języka na "
"%(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Nowe hasło"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Pozostaw puste by zachować obecne hasło."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Potwierdź nowe hasło"
#: 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."
@@ -1992,7 +1992,7 @@ msgstr ""
"Określa czy ten użytkownik powinien być aktywny. Odznacz tę opcję zamiast "
"kasować konta."
#: 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."
@@ -2000,57 +2000,57 @@ msgstr ""
"Określa czy ten użytkownik posiada wszystkie uprawnienia bez jawnego ich "
"przypisania."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr "Ten adres e-mail jest już zajęty przez innego użytkownika."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "Hasła różnią się."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Potwierdź nowe hasło."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Wpisz najpierw nowe hasło."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr "Nie możesz dezaktywować własnego konta przy użyciu tego formularza."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "Nie można usunąć statusu ostatniemu superuserowi."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr "Nie możesz usunąć uprawnień superusera samemu sobie."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Użytkownik z tym adresem e-mail już istnieje."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
#, fuzzy
#| msgid "Tag name"
msgid "Token name"
msgstr "Nazwa taga"
#: 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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2391,8 +2391,8 @@ msgid "Current balance"
msgstr "Obecne saldo"
#: 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 "Różnica"
@@ -3467,24 +3467,24 @@ msgstr ""
msgid "By currency"
msgstr "Według walut"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Skonsolidowane"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
msgid "Evolution"
msgstr "Ewolucja"
#: 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 "Wg konta"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Ewolucja wg walut"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Ewolucja wg kont"
+71 -71
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n"
"POT-Creation-Date: 2026-08-15 17:43+0000\n"
"PO-Revision-Date: 2026-07-05 23:34+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/"
@@ -31,8 +31,8 @@ msgstr "Nome do grupo"
#: 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 "Atualizar"
#: 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 "Adicionar"
@@ -68,7 +68,7 @@ msgstr "Novo saldo"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "Categoria"
#: 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/models.py:1099 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,7 +98,7 @@ msgstr "Tags"
#: 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -171,7 +171,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -353,7 +353,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Salvar"
@@ -555,27 +555,27 @@ msgstr "Taxas de Câmbio"
msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "Em"
#: apps/currencies/models.py:111
#: apps/currencies/models.py:112
msgid "Every X hours"
msgstr "A cada X horas"
#: apps/currencies/models.py:112
#: apps/currencies/models.py:113
msgid "Not on"
msgstr "Não em"
#: apps/currencies/models.py:114
#: apps/currencies/models.py:115
msgid "Service Name"
msgstr "Nome do Serviço"
#: apps/currencies/models.py:116
#: apps/currencies/models.py:117
msgid "Service Type"
msgstr "Tipo de Serviço"
#: apps/currencies/models.py:118 apps/transactions/filters.py:27
#: apps/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -587,31 +587,31 @@ msgstr "Tipo de Serviço"
msgid "Active"
msgstr "Ativo"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "Chave de API"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:129
#: apps/currencies/models.py:130
msgid "Interval Type"
msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:133
#: apps/currencies/models.py:134
msgid "Interval"
msgstr "Intervalo"
#: apps/currencies/models.py:136
#: apps/currencies/models.py:137
msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:143
#: apps/currencies/models.py:144
msgid "Target Currencies"
msgstr "Moedas-alvo"
#: 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."
@@ -619,11 +619,11 @@ msgstr ""
"Selecione as moedas para as quais deseja obter as taxas de câmbio. As taxas "
"serão obtidas para cada moeda em relação à moeda de câmbio definida."
#: apps/currencies/models.py:153
#: apps/currencies/models.py:154
msgid "Target Accounts"
msgstr "Contas-alvo"
#: 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."
@@ -632,34 +632,34 @@ msgstr ""
"serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
msgid "Single exchange rate"
msgstr "Taxa de câmbio única"
#: apps/currencies/models.py:165
#: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr ""
"Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco "
"de dados."
#: apps/currencies/models.py:170
#: apps/currencies/models.py:171
msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:171
#: apps/currencies/models.py:172
msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio"
#: apps/currencies/models.py:223
#: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer."
msgstr ""
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Intervalo do tipo 'A cada X horas' requerer um número entre 1 e 24."
#: 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')."
@@ -667,7 +667,7 @@ msgstr ""
"Formato inválido de hora. Use uma lista de horas separada por vírgulas "
"(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -769,7 +769,7 @@ msgstr "Moeda de pagamento"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Notas"
@@ -857,7 +857,7 @@ msgstr "Categorias"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1129,14 +1129,14 @@ msgstr "Operador"
#: 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:829 apps/transactions/models.py:1074
msgid "Type"
msgstr "Tipo"
#: 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/models.py:1076 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
@@ -1154,7 +1154,7 @@ msgstr "Data de Referência"
#: 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1166,26 +1166,26 @@ msgstr "Quantia"
#: 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:837 apps/transactions/models.py:1087
msgid "Description"
msgstr "Descrição"
#: 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/transactions/models.py:1109
msgid "Internal Note"
msgstr "Nota Interna"
#: 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/transactions/models.py:1111
msgid "Internal ID"
msgstr "ID Interna"
#: 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:1077
msgid "Mute"
msgstr "Silenciada"
@@ -1515,7 +1515,7 @@ msgstr ""
msgid "Entity"
msgstr "Entidade"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1527,7 +1527,7 @@ msgstr "Entidade"
msgid "Income"
msgstr "Renda"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1688,7 +1688,7 @@ msgstr "Última data gerada"
msgid "Last Generated Reference Date"
msgstr "Última data de referência gerada"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1697,7 +1697,7 @@ msgstr "Última data de referência gerada"
msgid "Quick Transaction"
msgstr "Transação Rápida"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1943,7 +1943,7 @@ msgstr "Formato de Número"
msgid "Default Account"
msgstr "Conta Padrão"
#: 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 "
@@ -1954,19 +1954,19 @@ msgstr ""
"são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s"
#: apps/users/forms.py:187
#: apps/users/forms.py:186
msgid "New Password"
msgstr "Nova senha"
#: apps/users/forms.py:190
#: apps/users/forms.py:189
msgid "Leave blank to keep the current password."
msgstr "Deixe em branco para usar a senha atual."
#: apps/users/forms.py:193
#: apps/users/forms.py:192
msgid "Confirm New Password"
msgstr "Confirmar nova senha"
#: 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."
@@ -1974,7 +1974,7 @@ msgstr ""
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
"vez de excluir usuários."
#: 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."
@@ -1982,57 +1982,57 @@ msgstr ""
"Designa que esse usuário tem todas as permissões sem atribuí-las "
"explicitamente."
#: apps/users/forms.py:275
#: apps/users/forms.py:274
msgid "This email address is already in use by another account."
msgstr "Esse endereço de e-mail já está sendo usado por outra conta."
#: apps/users/forms.py:283
#: apps/users/forms.py:282
msgid "The two password fields didn't match."
msgstr "Os dois campos de senha não coincidem."
#: apps/users/forms.py:285
#: apps/users/forms.py:284
msgid "Please confirm your new password."
msgstr "Confirme sua nova senha."
#: apps/users/forms.py:287
#: apps/users/forms.py:286
msgid "Please enter the new password first."
msgstr "Digite a nova senha primeiro."
#: apps/users/forms.py:307
#: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form."
msgstr "Não é possível desativar sua própria conta usando esse formulário."
#: apps/users/forms.py:320
#: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser."
msgstr "Não é possível remover o status do último superusuário."
#: apps/users/forms.py:326
#: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form."
msgstr ""
"Não é possível remover seu próprio status de superusuário usando esse "
"formulário."
#: apps/users/forms.py:419
#: apps/users/forms.py:418
msgid "A user with this email address already exists."
msgstr "Já existe um usuário com esse endereço de e-mail."
#: apps/users/forms.py:439
#: apps/users/forms.py:438
msgid "Token name"
msgstr "Nome do Token"
#: apps/users/forms.py:441
#: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "Use um nome descritivo, como n8n, Home Assistant ou tarefa de backup."
#: apps/users/forms.py:447
#: apps/users/forms.py:446
msgid "Expires in days"
msgstr "Expira em dias"
#: apps/users/forms.py:448
#: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token."
msgstr "Deixe em branco para um token sem prazo de validade."
#: apps/users/forms.py:463
#: apps/users/forms.py:462
msgid "Create token"
msgstr "Criar token"
@@ -2357,8 +2357,8 @@ msgid "Current balance"
msgstr "Saldo atual"
#: 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 "Diferença"
@@ -3439,24 +3439,24 @@ msgstr "Ordernar por"
msgid "By currency"
msgstr "Por moeda"
#: templates/net_worth/net_worth.html:84
#: templates/net_worth/net_worth.html:84 templates/net_worth/net_worth.html:85
msgid "Consolidated"
msgstr "Consolidado"
#: templates/net_worth/net_worth.html:134
#: templates/net_worth/net_worth.html:135
msgid "Evolution"
msgstr "Evolução"
#: 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 "Por conta"
#: templates/net_worth/net_worth.html:270
#: templates/net_worth/net_worth.html:271
msgid "Evolution by currency"
msgstr "Evolução por moeda"
#: templates/net_worth/net_worth.html:334
#: templates/net_worth/net_worth.html:345
msgid "Evolution by account"
msgstr "Evolução por conta"
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2026-05-01 07:24+0000\n"
"Last-Translator: masttera <mail.masttera@gmail.com>\n"
"Language-Team: Russian <https://translations.herculino.com/projects/wygiwyh/"
@@ -32,8 +32,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"
@@ -48,7 +48,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 "Добавить"
@@ -69,7 +69,7 @@ msgstr "Новый баланс"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -86,7 +86,7 @@ msgstr "Категория"
#: 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/models.py:1099 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
@@ -99,7 +99,7 @@ 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -173,7 +173,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -357,7 +357,7 @@ msgstr ""
"быть изменено только владельцем<br/>Публичный: Отображается для всех "
"пользователей. Может быть изменено только владельцем."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Сохранить"
@@ -565,27 +565,27 @@ 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 "Каждые X часов"
#: 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/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -597,31 +597,31 @@ msgstr "Тип услуги"
msgid "Active"
msgstr "Активный"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "API ключ"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "API ключ сервиса (если необходим)"
#: 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."
@@ -629,11 +629,11 @@ 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."
@@ -642,34 +642,34 @@ 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 ""
"Для интервалов типа «Каждые X часов» требуется положительное целое число."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Интервал «каждые X часов» должен составлять от 1 до 24."
#: 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')."
@@ -677,7 +677,7 @@ msgstr ""
"Неверный формат времени. Используйте часы, разделенные запятыми (0-23), и/"
"или диапазоны (например, '1-5,8,10-12')."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -779,7 +779,7 @@ msgstr "Валюта платежа"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Заметки"
@@ -867,7 +867,7 @@ msgstr "Категории"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1139,14 +1139,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1164,7 +1164,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1176,26 +1176,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1523,7 +1523,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1535,7 +1535,7 @@ msgstr ""
msgid "Income"
msgstr "Доход"
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1704,7 +1704,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1713,7 +1713,7 @@ msgstr ""
msgid "Quick Transaction"
msgstr "Быстрая сделка"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1963,7 +1963,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 "
@@ -1974,81 +1974,81 @@ msgstr ""
"Пожалуйста, рассмотрите возможность помочь перевести WYGIWYH на ваш язык по "
"ссылке %(translation_link)s"
#: 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 "Tag name"
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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2391,8 +2391,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 "Разница"
@@ -3463,24 +3463,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 ""
+71 -71
View File
@@ -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-15 17:43+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 ""
@@ -68,7 +68,7 @@ msgstr ""
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr ""
#: 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/models.py:1099 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,7 +98,7 @@ 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -168,7 +168,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -345,7 +345,7 @@ 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
msgid "Save"
msgstr ""
@@ -547,27 +547,27 @@ 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/currencies/models.py:119 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
#: templates/entities/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."
@@ -749,7 +749,7 @@ msgstr ""
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr ""
@@ -837,7 +837,7 @@ msgstr ""
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1107,14 +1107,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1132,7 +1132,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1144,26 +1144,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1484,7 +1484,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: 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:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1657,7 +1657,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: 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:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -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 ""
@@ -2319,8 +2319,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 ""
@@ -3391,24 +3391,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 ""
+71 -71
View File
@@ -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-15 17:43+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"
@@ -69,7 +69,7 @@ msgstr "Salio Mpya"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -86,7 +86,7 @@ msgstr ""
#: 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/models.py:1099 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
@@ -99,7 +99,7 @@ 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -172,7 +172,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -349,7 +349,7 @@ 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
msgid "Save"
msgstr ""
@@ -551,27 +551,27 @@ 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/currencies/models.py:119 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
#: templates/entities/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."
@@ -753,7 +753,7 @@ msgstr ""
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr ""
@@ -841,7 +841,7 @@ msgstr ""
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1111,14 +1111,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1136,7 +1136,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1148,26 +1148,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1488,7 +1488,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: 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:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1661,7 +1661,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: 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:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -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 ""
@@ -2327,8 +2327,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 ""
@@ -3399,24 +3399,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 ""
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2025-11-01 01:17+0000\n"
"Last-Translator: mlystopad <mlystopadt@gmail.com>\n"
"Language-Team: Ukrainian <https://translations.herculino.com/projects/"
@@ -32,8 +32,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"
@@ -48,7 +48,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 "Додати"
@@ -69,7 +69,7 @@ msgstr "Новий баланс"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -86,7 +86,7 @@ msgstr "Категорія"
#: 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/models.py:1099 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
@@ -99,7 +99,7 @@ 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -173,7 +173,7 @@ msgstr ""
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -357,7 +357,7 @@ msgstr ""
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
"користувачів. Редагувати може лише власник."
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "Зберегти"
@@ -565,27 +565,27 @@ msgstr "Обмінні курси"
msgid "From and To currencies cannot be the same."
msgstr "Валюти «Від» і «До» не можуть бути однаковими."
#: apps/currencies/models.py:110
#: apps/currencies/models.py:111
msgid "On"
msgstr "On"
#: 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 "Not on"
#: 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/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -597,31 +597,31 @@ msgstr "Тип сервісу"
msgid "Active"
msgstr "Активний"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "Ключ API"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "API-ключ для сервісу (якщо потрібно)"
#: 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."
@@ -629,11 +629,11 @@ 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."
@@ -641,35 +641,35 @@ msgstr ""
"Оберіть рахунки для завантаження курсів обміну. Курси будуть завантажені для "
"валюти кожного рахунку відносно встановленої валюти обміну."
#: apps/currencies/models.py:162
#: apps/currencies/models.py:163
#, fuzzy
#| msgid "Exchange Rate"
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 "Інтервал типу «Кожні X годин» потребує додатнього цілого числа."
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Інтервал типу «Кожні X годин» повинен бути між 1 та 24."
#: 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')."
@@ -677,7 +677,7 @@ msgstr ""
"Неправильний формат годин. Використовуйте години, розділені комами (0–23) та/"
"або діапазони (наприклад, '1-5,8,10-12')."
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -779,7 +779,7 @@ msgstr "Валюта платежу"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "Примітки"
@@ -867,7 +867,7 @@ msgstr "Категорії"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1139,14 +1139,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1164,7 +1164,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1176,26 +1176,26 @@ msgstr ""
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
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:1077
msgid "Mute"
msgstr ""
@@ -1518,7 +1518,7 @@ msgstr ""
msgid "Entity"
msgstr ""
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: templates/calendar_view/fragments/list.html:42
#: templates/calendar_view/fragments/list.html:44
#: templates/calendar_view/fragments/list.html:52
@@ -1530,7 +1530,7 @@ msgstr ""
msgid "Income"
msgstr ""
#: apps/transactions/models.py:298 apps/transactions/models.py:1051
#: apps/transactions/models.py:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1699,7 +1699,7 @@ msgstr ""
msgid "Last Generated Reference Date"
msgstr ""
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1708,7 +1708,7 @@ msgstr ""
msgid "Quick Transaction"
msgstr ""
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1962,7 +1962,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 "
@@ -1970,81 +1970,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 "Назва групи"
#: 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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2386,8 +2386,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 ""
@@ -3467,24 +3467,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 ""
+71 -71
View File
@@ -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-15 17:43+0000\n"
"PO-Revision-Date: 2025-10-08 16:17+0000\n"
"Last-Translator: doody <doodykimo@gmail.com>\n"
"Language-Team: Chinese (Traditional Han script) <https://translations."
@@ -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 "更新"
#: 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 "新增"
@@ -68,7 +68,7 @@ msgstr "新的餘額"
#: 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/models.py:1093
#: templates/insights/fragments/category_overview/index.html:86
#: templates/insights/fragments/category_overview/index.html:542
#: templates/insights/fragments/month_by_month.html:84
@@ -85,7 +85,7 @@ msgstr "分類"
#: 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/models.py:1099 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,7 +98,7 @@ 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:272 apps/transactions/models.py:1061
#: apps/users/models.py:572 templates/account_groups/fragments/list.html:22
#: templates/accounts/fragments/list.html:22
#: templates/categories/fragments/table.html:17
@@ -168,7 +168,7 @@ msgstr "封存的帳戶不會在淨資產中被計算或顯示"
#: 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/models.py:1067
#: templates/installment_plans/fragments/table.html:17
#: templates/quick_transactions/fragments/list.html:14
#: templates/recurring_transactions/fragments/table.html:19
@@ -349,7 +349,7 @@ msgstr ""
"私人:只會顯示給擁有者或著已分享的使用者。只有擁有者可以編輯這個選項。<br/>公"
"開:所有使用者都可以看到。只有擁有者可以編輯這個選項。"
#: apps/common/forms.py:76 apps/users/forms.py:173
#: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save"
msgstr "儲存"
@@ -545,27 +545,27 @@ 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/currencies/models.py:119 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
#: templates/entities/fragments/list.html:16
@@ -577,71 +577,71 @@ msgstr "服務類型"
msgid "Active"
msgstr "啟用"
#: apps/currencies/models.py:123
#: apps/currencies/models.py:124
msgid "API Key"
msgstr "API金鑰"
#: apps/currencies/models.py:124
#: apps/currencies/models.py:125
msgid "API key for the service (if required)"
msgstr "服務所需的API金鑰(如果需要)"
#: 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 "「每X小時」需要提供正整數。"
#: apps/currencies/models.py:232
#: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24."
msgstr "「每X小時」需要介於1到24之間。"
#: 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')."
@@ -649,7 +649,7 @@ msgstr ""
"錯誤的小時格式,請使用逗號設定多個小時(0~23)或著設定範圍(例"
"如:'1-5,10-12')。"
#: apps/currencies/models.py:257
#: apps/currencies/models.py:258
msgid ""
"Invalid format. Please check the requirements for your selected interval "
"type."
@@ -749,7 +749,7 @@ msgstr "交易貨幣"
#: 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:851 apps/transactions/models.py:1089
msgid "Notes"
msgstr "備註"
@@ -837,7 +837,7 @@ msgstr "類別"
#: 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/models.py:848 apps/transactions/models.py:1104
#: 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
@@ -1107,14 +1107,14 @@ 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:829 apps/transactions/models.py:1074
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/models.py:1076 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
@@ -1132,7 +1132,7 @@ 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:1082
#: templates/insights/fragments/sankey.html:102
#: templates/installment_plans/fragments/table.html:18
#: templates/quick_transactions/fragments/list.html:15
@@ -1144,26 +1144,26 @@ msgstr "金額"
#: 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:837 apps/transactions/models.py:1087
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/transactions/models.py:1109
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/transactions/models.py:1111
msgid "Internal ID"
msgstr "內部ID"
#: 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:1077
msgid "Mute"
msgstr "靜音"
@@ -1488,7 +1488,7 @@ msgstr "新增交易的時候無法選擇停用的實體"
msgid "Entity"
msgstr "實體"
#: apps/transactions/models.py:297 apps/transactions/models.py:1050
#: apps/transactions/models.py:297 apps/transactions/models.py:1054
#: 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:298 apps/transactions/models.py:1055
#: templates/calendar_view/fragments/list.html:46
#: templates/calendar_view/fragments/list.html:48
#: templates/calendar_view/fragments/list.html:56
@@ -1669,7 +1669,7 @@ msgstr "最後產生的日期"
msgid "Last Generated Reference Date"
msgstr "最後產生的起算日"
#: apps/transactions/models.py:1117
#: apps/transactions/models.py:1121
#: apps/transactions/views/quick_transactions.py:178
#: apps/transactions/views/quick_transactions.py:187
#: apps/transactions/views/quick_transactions.py:189
@@ -1678,7 +1678,7 @@ msgstr "最後產生的起算日"
msgid "Quick Transaction"
msgstr "快速交易"
#: apps/transactions/models.py:1118 templates/includes/sidebar.html:98
#: apps/transactions/models.py:1122 templates/includes/sidebar.html:98
#: templates/quick_transactions/pages/index.html:5
#: templates/quick_transactions/pages/index.html:15
msgid "Quick Transactions"
@@ -1924,7 +1924,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 "
@@ -1934,81 +1934,81 @@ msgstr ""
"這會改變語言(如果支援的話)以及數字和日期的顯示方式\n"
"若您有興趣也可以到%(translation_link)s幫助WYGIWYH進行翻譯"
#: 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 "這個email已經被另一個帳號使用。"
#: 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 "Tag name"
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
#, fuzzy
#| msgid "Create transaction"
msgid "Create token"
@@ -2357,8 +2357,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 "差異"
@@ -3452,24 +3452,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 "按照帳戶的走勢圖"
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>
+7 -5
View File
@@ -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>
+16 -5
View File
@@ -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>
+4 -3
View File
@@ -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"]
+13
View File
@@ -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
+47 -11
View File
@@ -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"
},
+4 -2
View File
@@ -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",
@@ -47,4 +49,4 @@
"resolutions": {
"rollup": "npm:@rollup/wasm-node"
}
}
}
+2 -1
View File
@@ -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;
-5
View File
@@ -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
+4
View File
@@ -0,0 +1,4 @@
import { play } from "cuelume";
window.playSound = play;
+1
View File
@@ -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
View File
@@ -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]
Generated
+533 -57
View File
@@ -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" },
]