Compare commits

...
Author SHA1 Message Date
copilot-swe-agent[bot]andGitHub f7bf96eef5 fix: avoid exposing validation details in oauth client registration errors 2026-07-18 18:57:15 +00:00
copilot-swe-agent[bot]andGitHub f690063c5e Initial plan 2026-07-18 18:54:41 +00:00
eitchteeandgithub-actions[bot] 14011c2f60 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-07-18 18:43:53 +00:00
Herculino TrottaandGitHub 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 TrottaandGitHub 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
eitchteeandgithub-actions[bot] 0ec1c5c063 chore(locale): update translation files
[skip ci] Automatically generated by Django makemessages workflow
2026-07-18 00:29:20 +00:00
Herculino TrottaandGitHub 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
Herculino TrottaandGitHub e77e96879b Merge pull request #565 from eitchtee/dev
fix(air-datepicker): unwrap locale modules so it doesn't default to russian
2026-07-10 17:55:36 -03:00
Herculino TrottaandGitHub 2fbb0221c2 Merge pull request #564 from eitchtee/dependabot/uv/mistune-3.3.0
build(deps): bump mistune from 3.2.1 to 3.3.0
2026-07-10 17:50:52 -03:00
Herculino TrottaandGitHub d7722ff12c Merge pull request #562 from eitchtee/weblate
Translations update from Weblate
2026-07-10 17:50:15 -03:00
dependabot[bot]andGitHub ad357fac45 build(deps): bump mistune from 3.2.1 to 3.3.0
Bumps [mistune](https://github.com/lepture/mistune) from 3.2.1 to 3.3.0.
- [Release notes](https://github.com/lepture/mistune/releases)
- [Changelog](https://github.com/lepture/mistune/blob/main/docs/changes.rst)
- [Commits](https://github.com/lepture/mistune/compare/v3.2.1...v3.3.0)

---
updated-dependencies:
- dependency-name: mistune
  dependency-version: 3.3.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-10 20:10:10 +00:00
Juan David AfanadorandWeblate 8d8e87c9b8 locale(Spanish): update translation
Currently translated at 94.7% (736 of 777 strings)

Translation: WYGIWYH/App
Translate-URL: https://translations.herculino.com/projects/wygiwyh/app/es/
2026-07-10 04:57:19 +00:00
34 changed files with 1448 additions and 765 deletions
+6 -5
View File
@@ -1,5 +1,6 @@
import hmac import hmac
import json import json
import logging
import time import time
from secrets import token_urlsafe from secrets import token_urlsafe
@@ -12,6 +13,7 @@ from oauth2_provider.models import get_application_model
Application = get_application_model() Application = get_application_model()
logger = logging.getLogger(__name__)
SUPPORTED_TOKEN_ENDPOINT_AUTH_METHODS = { SUPPORTED_TOKEN_ENDPOINT_AUTH_METHODS = {
"none": Application.CLIENT_PUBLIC, "none": Application.CLIENT_PUBLIC,
@@ -145,7 +147,8 @@ def dynamic_client_registration(request):
default=["code"], default=["code"],
) )
except ValueError as exc: except ValueError as exc:
return _json_error("invalid_client_metadata", str(exc)) logger.warning("Invalid dynamic client registration payload: %s", exc)
return _json_error("invalid_client_metadata", "Client metadata is invalid.")
unsupported_grant_types = sorted(set(grant_types) - SUPPORTED_GRANT_TYPES) unsupported_grant_types = sorted(set(grant_types) - SUPPORTED_GRANT_TYPES)
if unsupported_grant_types: if unsupported_grant_types:
@@ -223,12 +226,10 @@ def dynamic_client_registration(request):
try: try:
application.full_clean() application.full_clean()
except ValidationError as exc: except ValidationError as exc:
errors = [] logger.warning("Dynamic client registration validation failed: %s", exc)
for field, messages in exc.message_dict.items():
errors.extend(f"{field}: {message}" for message in messages)
return _json_error( return _json_error(
"invalid_client_metadata", "invalid_client_metadata",
"; ".join(errors), "Client metadata is invalid.",
) )
application.save() application.save()
@@ -17,6 +17,7 @@ PROVIDER_MAPPING = {
"frankfurter": providers.FrankfurterProvider, "frankfurter": providers.FrankfurterProvider,
"twelvedata": providers.TwelveDataProvider, "twelvedata": providers.TwelveDataProvider,
"twelvedatamarkets": providers.TwelveDataMarketsProvider, "twelvedatamarkets": providers.TwelveDataMarketsProvider,
"yfinance": providers.YFinanceMarketsProvider,
} }
@@ -503,3 +503,82 @@ class TwelveDataMarketsProvider(ExchangeRateProvider):
) )
return results 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" FRANKFURTER = "frankfurter", "Frankfurter"
TWELVEDATA = "twelvedata", "TwelveData" TWELVEDATA = "twelvedata", "TwelveData"
TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets" TWELVEDATA_MARKETS = "twelvedatamarkets", "TwelveData Markets"
YFINANCE = "yfinance", "Yahoo Finance"
class IntervalType(models.TextChoices): class IntervalType(models.TextChoices):
ON = "on", _("On") 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")
-1
View File
@@ -140,7 +140,6 @@ class UserSettingsForm(forms.ModelForm):
"date_format", "date_format",
"datetime_format", "datetime_format",
"number_format", "number_format",
"volume",
"default_account", "default_account",
] ]
widgets = { widgets = {
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-04-09 11:24+0000\n" "PO-Revision-Date: 2026-04-09 11:24+0000\n"
"Last-Translator: LordTimothyHKIT <tim.hofstetter@hkit.ch>\n" "Last-Translator: LordTimothyHKIT <tim.hofstetter@hkit.ch>\n"
"Language-Team: German <https://translations.herculino.com/projects/wygiwyh/" "Language-Team: German <https://translations.herculino.com/projects/wygiwyh/"
@@ -31,8 +31,8 @@ msgstr "Gruppe Name"
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536 #: apps/transactions/forms.py:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Aktualisierung"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Hinzufügen" msgstr "Hinzufügen"
@@ -356,7 +356,7 @@ msgstr ""
"Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: " "Privat: Nur für den Besitzer und geteilte Nutzer sichtbar.<br/>Öffentlich: "
"Sichtbar für alle Nutzer. Nur bearbeitbar durch Besitzer." "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" msgid "Save"
msgstr "Speichern" msgstr "Speichern"
@@ -558,27 +558,27 @@ msgstr "Umrechnungskurse"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Start- und Zielwährung dürfen nicht identisch sein." msgstr "Start- und Zielwährung dürfen nicht identisch sein."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "An" msgstr "An"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Alle X Stunden" msgstr "Alle X Stunden"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Nicht an" msgstr "Nicht an"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Dienstname" msgstr "Dienstname"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Diensttyp" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -590,31 +590,31 @@ msgstr "Diensttyp"
msgid "Active" msgid "Active"
msgstr "Aktiv" msgstr "Aktiv"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "API-Schlüssel" msgstr "API-Schlüssel"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API-Schlüssel für den Dienst (falls benötigt)" msgstr "API-Schlüssel für den Dienst (falls benötigt)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Intervalltyp" msgstr "Intervalltyp"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Intervall" msgstr "Intervall"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Letzter erfolgreicher Abruf" msgstr "Letzter erfolgreicher Abruf"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Zielwährungen" msgstr "Zielwährungen"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 auswählen, dessen Umrechnungskurs abgerufen werden sollen. Für jede "
"Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen." "Währung wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Zielkonten" msgstr "Zielkonten"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
@@ -634,31 +634,31 @@ msgstr ""
"Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes " "Konten auswählen, für die Umrechungskurse abgerufen werden solen. Für jedes "
"Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen." "Konto wird der Kurs der entsprechenden Umrechnungs-Währung abgerufen."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "Umrechnungskurs bearbeiten" 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." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Umrechnungskurs-Dienst" msgstr "Umrechnungskurs-Dienst"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Umrechnungskurs-Dienste" msgstr "Umrechnungskurs-Dienste"
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "\"Jede X Stunden\"-Intervalltyp benötigt eine positive Ganzzahl." 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." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen." msgstr "\"Jede X Stunden\"-Intervall muss zwischen 1 und 24 liegen."
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -666,7 +666,7 @@ msgstr ""
"Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder " "Ungültiges Stundenformat. Nutze kommagetrennte Stunden (0-23) und/oder "
"Zeiträume (z.B. \"1-5,8,10-12\")." "Zeiträume (z.B. \"1-5,8,10-12\")."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1970,7 +1970,7 @@ msgstr "Zahlenformat"
msgid "Default Account" msgid "Default Account"
msgstr "Standart Konto" msgstr "Standart Konto"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1981,25 +1981,25 @@ msgstr ""
"angezeigt werden.\n" "angezeigt werden.\n"
"Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s" "Hilf mit WYGIWYH in deine Sprache zu übersetzten: %(translation_link)s"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "Neues Passwort" msgstr "Neues Passwort"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Leer lassen um Passwort zu belassen." msgstr "Leer lassen um Passwort zu belassen."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Bestätige das neue Passwort" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "Abwählen um den Nutzer zu deaktivieren. Besser als gleich zu löschen." 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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -2007,57 +2007,57 @@ msgstr ""
"Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit " "Anwählen damit der Nutzer alle Berechtigungen hat, ohne diese explizit "
"hinzuzufügen." "hinzuzufügen."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Diese E-Mail-Adresse wird bereits von jemand anders benutzt." 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." msgid "The two password fields didn't match."
msgstr "Die eingegebenen Passwörter stimmen nicht überein." msgstr "Die eingegebenen Passwörter stimmen nicht überein."
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Bitte bestätige dein neues Passwort." msgstr "Bitte bestätige dein neues Passwort."
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Bitte gebe erst dein neues Passwort ein." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Du kannst deinen Nutzer nicht hier deaktivieren." 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." msgid "Cannot remove status from the last superuser."
msgstr "Sie können die Adminberechtigungen nicht vom letzten Admin entfernen." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "Du kannst deinen eigenen Superuser-Status nicht hier entfernen." 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." msgid "A user with this email address already exists."
msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits." msgstr "Ein Benutzer mit dieser E-Mail-Adresse existiert bereits."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "Tagname" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -46,7 +46,7 @@ msgstr ""
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "" msgstr ""
@@ -344,7 +344,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@@ -546,27 +546,27 @@ msgstr ""
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "" msgstr ""
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "" msgstr ""
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -578,77 +578,77 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "" msgstr ""
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "" msgstr ""
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "" msgstr ""
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "" msgstr ""
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "" msgstr ""
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1911,7 +1911,7 @@ msgstr ""
msgid "Default Account" msgid "Default Account"
msgstr "" msgstr ""
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/forms.py:439 #: apps/users/forms.py:438
msgid "Token name" msgid "Token name"
msgstr "" msgstr ""
#: apps/users/forms.py:441 #: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "" msgstr ""
+62 -76
View File
@@ -7,8 +7,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-02-24 01:24+0000\n" "PO-Revision-Date: 2026-07-10 04:57+0000\n"
"Last-Translator: Juan David Afanador <juanafanador07@gmail.com>\n" "Last-Translator: Juan David Afanador <juanafanador07@gmail.com>\n"
"Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/" "Language-Team: Spanish <https://translations.herculino.com/projects/wygiwyh/"
"app/es/>\n" "app/es/>\n"
@@ -17,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n" "Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.16\n" "X-Generator: Weblate 2026.7\n"
#: apps/accounts/forms.py:24 #: apps/accounts/forms.py:24
msgid "Group name" msgid "Group name"
@@ -31,8 +31,8 @@ msgstr "Nombre del Grupo"
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536 #: apps/transactions/forms.py:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Actualizar"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Agregar" msgstr "Agregar"
@@ -353,7 +353,7 @@ msgstr ""
"compartido. Solo el propietario puede editarlo.<br/>Público: Visible para " "compartido. Solo el propietario puede editarlo.<br/>Público: Visible para "
"todos los usuarios. Solo el propietario puede editarlo." "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" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@@ -555,27 +555,27 @@ msgstr "Tasas de cambio"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Las monedas de origen y destino no pueden ser la misma." msgstr "Las monedas de origen y destino no pueden ser la misma."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "Encendido" msgstr "Encendido"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Cada X horas" msgstr "Cada X horas"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "No Encendido" msgstr "No Encendido"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Nombre del Servicio" msgstr "Nombre del Servicio"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Tipo de Servicio" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -587,31 +587,31 @@ msgstr "Tipo de Servicio"
msgid "Active" msgid "Active"
msgstr "Activo" msgstr "Activo"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "Clave API" msgstr "Clave API"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Clave API para el servicio (si es necesaria)" msgstr "Clave API para el servicio (si es necesaria)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Tipo de Intervalo" msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Intervalo" msgstr "Intervalo"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Última Sincronización Exitosa" msgstr "Última Sincronización Exitosa"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Monedas de Destino" msgstr "Monedas de Destino"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "tasas se consultarán para cada moneda en relación con su moneda de "
"referencia establecida." "referencia establecida."
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Cuentas de Destino" msgstr "Cuentas de Destino"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "tasas se consultarán para la moneda de cada cuenta en relación con su moneda "
"de referencia establecida." "de referencia establecida."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "Tasa de cambio única" 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." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Crea una única tasa de cambio y mantenla actualizada. Evita la acumulación " "Crea una única tasa de cambio y mantenla actualizada. Evita la acumulación "
"de datos en la base de datos." "de datos en la base de datos."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Servicio de Tasas de Cambio" msgstr "Servicio de Tasas de Cambio"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Servicios de Tasas de Cambio" 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." msgid "'Every X hours' interval type requires a positive integer."
msgstr "El tipo de intervalo 'Cada X horas' requiere un entero positivo." 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." 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." 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 "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'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 " "Formato de hora no válido. Usa horas separadas por coma (0-23) y/o rangos "
"(p. ej., \"1-5,8,10-12\")." "(p. ej., \"1-5,8,10-12\")."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1418,21 +1418,19 @@ msgstr "Guardar y añadir otro"
#: apps/transactions/forms.py:270 templates/cotton/transaction/item.html:158 #: apps/transactions/forms.py:270 templates/cotton/transaction/item.html:158
#: templates/transactions/fragments/attachments.html:4 #: templates/transactions/fragments/attachments.html:4
#, fuzzy
#| msgid "Installments"
msgid "Attachments" msgid "Attachments"
msgstr "Cuotas" msgstr "Archivos Adjuntos"
#: apps/transactions/forms.py:271 #: apps/transactions/forms.py:271
msgid "" msgid ""
"Files are private and only visible to users with access to this transaction." "Files are private and only visible to users with access to this transaction."
msgstr "" msgstr ""
"Los archivos adjuntos son privados y únicamente son visibles para los "
"usuarios con acceso a esta transacción."
#: apps/transactions/forms.py:282 #: apps/transactions/forms.py:282
#, fuzzy
#| msgid "Reload"
msgid "Upload" msgid "Upload"
msgstr "Refrescar" msgstr "Subir"
#: apps/transactions/forms.py:351 apps/transactions/forms.py:623 #: apps/transactions/forms.py:351 apps/transactions/forms.py:623
msgid "Muted transactions won't be displayed on monthly summaries" msgid "Muted transactions won't be displayed on monthly summaries"
@@ -1571,40 +1569,32 @@ msgid "No description"
msgstr "Sin descripción" msgstr "Sin descripción"
#: apps/transactions/models.py:549 #: apps/transactions/models.py:549
#, fuzzy
#| msgid "ZIP File"
msgid "File" msgid "File"
msgstr "Archivo ZIP" msgstr "Archivo"
#: apps/transactions/models.py:551 #: apps/transactions/models.py:551
msgid "Original Name" msgid "Original Name"
msgstr "" msgstr "Nombre Original"
#: apps/transactions/models.py:553 #: apps/transactions/models.py:553
#, fuzzy
#| msgid "Content"
msgid "Content Type" msgid "Content Type"
msgstr "Contenido" msgstr "Tipo de Contenido"
#: apps/transactions/models.py:555 #: apps/transactions/models.py:555
msgid "Size" msgid "Size"
msgstr "" msgstr "Tamaño"
#: apps/transactions/models.py:560 #: apps/transactions/models.py:560
msgid "Uploaded By" msgid "Uploaded By"
msgstr "" msgstr "Subido por"
#: apps/transactions/models.py:565 #: apps/transactions/models.py:565
#, fuzzy
#| msgid "Transactions on"
msgid "Transaction Attachment" msgid "Transaction Attachment"
msgstr "Transacciones en" msgstr "Archivos Adjunto"
#: apps/transactions/models.py:566 #: apps/transactions/models.py:566
#, fuzzy
#| msgid "Transaction Tags"
msgid "Transaction Attachments" msgid "Transaction Attachments"
msgstr "Etiquetas de Transacción" msgstr "Archivos Adjuntos"
#: apps/transactions/models.py:595 templates/includes/sidebar.html:57 #: apps/transactions/models.py:595 templates/includes/sidebar.html:57
msgid "Yearly" msgid "Yearly"
@@ -1856,16 +1846,12 @@ msgid "Tag deleted successfully"
msgstr "Etiqueta eliminada con éxito" msgstr "Etiqueta eliminada con éxito"
#: apps/transactions/views/transactions.py:59 #: apps/transactions/views/transactions.py:59
#, fuzzy
#| msgid "Account updated successfully"
msgid "Attachment uploaded successfully" msgid "Attachment uploaded successfully"
msgstr "Cuenta actualizada exitosamente" msgstr "Archivo subido con éxito"
#: apps/transactions/views/transactions.py:110 #: apps/transactions/views/transactions.py:110
#, fuzzy
#| msgid "Account deleted successfully"
msgid "Attachment deleted successfully" msgid "Attachment deleted successfully"
msgstr "Cuenta borrada exitosamente" msgstr "Archivo eliminado exitosamente"
#: apps/transactions/views/transactions.py:350 #: apps/transactions/views/transactions.py:350
msgid "Transaction updated successfully" msgid "Transaction updated successfully"
@@ -1959,7 +1945,7 @@ msgstr "Formato de Número"
msgid "Default Account" msgid "Default Account"
msgstr "Cuenta por Defecto" msgstr "Cuenta por Defecto"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1970,19 +1956,19 @@ msgstr ""
"y las fechas\n" "y las fechas\n"
"Ayude a traducir WYGIWYH a su idioma en %(translation_link)s" "Ayude a traducir WYGIWYH a su idioma en %(translation_link)s"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "Nueva Contraseña" msgstr "Nueva Contraseña"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Deje en blanco para mantener la contraseña actual." msgstr "Deje en blanco para mantener la contraseña actual."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Confirmar nueva contraseña" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1990,7 +1976,7 @@ msgstr ""
"Establece si este usuario debe ser tratado como activo. Desmarque esta " "Establece si este usuario debe ser tratado como activo. Desmarque esta "
"opción en lugar de borrar cuentas." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1998,58 +1984,58 @@ msgstr ""
"Establece que este usuario tiene todos los permisos sin asignárselos " "Establece que este usuario tiene todos los permisos sin asignárselos "
"expresamente." "expresamente."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Esta dirección de correo es usada por otra cuenta." 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." msgid "The two password fields didn't match."
msgstr "Los dos campos de contraseñas no coinciden." 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." msgid "Please confirm your new password."
msgstr "Por favor, confirme su nueva contraseña." 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." msgid "Please enter the new password first."
msgstr "Por favor, introduzca su nueva contraseña." 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." msgid "You cannot deactivate your own account using this form."
msgstr "No puede desactivar su propia cuenta usando este formulario." 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." msgid "Cannot remove status from the last superuser."
msgstr "No se puede eliminar el estado del último superusuario." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
"No puedes eliminar tu propio estado de superusuario usando este formulario." "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." msgid "A user with this email address already exists."
msgstr "Ya existe un usuario con este correo." msgstr "Ya existe un usuario con este correo."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "Nombre de etiqueta" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-06-27 21:57+0000\n" "PO-Revision-Date: 2026-06-27 21:57+0000\n"
"Last-Translator: sorcierwax <freakywax@gmail.com>\n" "Last-Translator: sorcierwax <freakywax@gmail.com>\n"
"Language-Team: French <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Mise à jour"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Ajouter" msgstr "Ajouter"
@@ -355,7 +355,7 @@ msgstr ""
"partagés. Seulement modifiable par le propriétaire.<br/> Publique : Visible " "partagés. Seulement modifiable par le propriétaire.<br/> Publique : Visible "
"par tous. Seulement modifiable par le propriétaire." "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" msgid "Save"
msgstr "Sauvegarder" msgstr "Sauvegarder"
@@ -557,27 +557,27 @@ msgstr "Taux de changes"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Les devises de départ et d'arrivée ne peuvent pas être identiques." 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" msgid "On"
msgstr "Le" msgstr "Le"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Toutes les X heures" msgstr "Toutes les X heures"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Pas le" msgstr "Pas le"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Nom du Service" msgstr "Nom du Service"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Type de Service" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -589,31 +589,31 @@ msgstr "Type de Service"
msgid "Active" msgid "Active"
msgstr "Actif" msgstr "Actif"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "Clé API" msgstr "Clé API"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Clé API pour le service (si nécessaire)" msgstr "Clé API pour le service (si nécessaire)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Type d'intervalle" msgstr "Type d'intervalle"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Intervalle" msgstr "Intervalle"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Dernière récupération avec succès" msgstr "Dernière récupération avec succès"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Devises cibles" msgstr "Devises cibles"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "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." "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" msgid "Target Accounts"
msgstr "Comptes cibles" msgstr "Comptes cibles"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "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." "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" msgid "Single exchange rate"
msgstr "Taux de change unique" 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." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Ne créer qu'un seul taux de change et le mettre à jour. Evite d'engorger la " "Ne créer qu'un seul taux de change et le mettre à jour. Evite d'engorger la "
"base de donnée." "base de donnée."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Service de taux de change" msgstr "Service de taux de change"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Services de taux de change" 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." msgid "'Every X hours' interval type requires a positive integer."
msgstr "'Toutes les X heures' l'intervalle requiert un entier positif." 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." 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." 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 "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'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 " "Format d'heure invalide. Utilisez les heures séparé par virgule (0-23) et/ou "
"une plage (ex : '1-5,8,10-12')." "une plage (ex : '1-5,8,10-12')."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1949,7 +1949,7 @@ msgstr "Format numérique"
msgid "Default Account" msgid "Default Account"
msgstr "Compte par défaut" msgstr "Compte par défaut"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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 " "Considérez d'aider à la traduction de WYGIWYH dans votre langue sur "
"%(translation_link)s" "%(translation_link)s"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "Nouveau mot de passe" msgstr "Nouveau mot de passe"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Laisser vide pour garder le mot de passe actuel." msgstr "Laisser vide pour garder le mot de passe actuel."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Confirmer le nouveau mot de passe" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1981,7 +1981,7 @@ msgstr ""
"Indique si cet utilisateur doit être traité comme actif. Désélectionnez ceci " "Indique si cet utilisateur doit être traité comme actif. Désélectionnez ceci "
"plutôt que supprimer des comptes." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1989,62 +1989,62 @@ msgstr ""
"Définir que cet utilisateur a toutes les permissions sans les assigner " "Définir que cet utilisateur a toutes les permissions sans les assigner "
"explicitement." "explicitement."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
"Cette adresse email est déjà utiliser dans un autre compte utilisateur." "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." msgid "The two password fields didn't match."
msgstr "Les deux mot de passe ne correspondent pas." 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." msgid "Please confirm your new password."
msgstr "Merci de confirmer votre mot de passe." 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." msgid "Please enter the new password first."
msgstr "Merci d'indiquer d'abord le nouveau mot de passe." 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." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
"Vous ne pouvez pas désactiver votre propre compte utilisateur avec ce " "Vous ne pouvez pas désactiver votre propre compte utilisateur avec ce "
"formulaire." "formulaire."
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "Impossible de supprimer le statut du dernier super utilisateur." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
"Vous ne pouvez pas supprimer votre propre statut de super utilisateur via ce " "Vous ne pouvez pas supprimer votre propre statut de super utilisateur via ce "
"formulaire." "formulaire."
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "Un utilisateur avec cette adresse email existe déjà." msgstr "Un utilisateur avec cette adresse email existe déjà."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "Libellé de l'étiquette" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-01-10 03:09+0000\n" "PO-Revision-Date: 2026-01-10 03:09+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n" "Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Hungarian <https://translations.herculino.com/projects/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Frissítés"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Hozzáadás" msgstr "Hozzáadás"
@@ -350,7 +350,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "Mentés" msgstr "Mentés"
@@ -552,27 +552,27 @@ msgstr "Átváltási ráták"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "A forrás és a cél pénznemnek különböznie kell." 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" msgid "On"
msgstr "Be" msgstr "Be"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Minden X órában" msgstr "Minden X órában"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Szolgáltatás neve" msgstr "Szolgáltatás neve"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Szolgáltatás típusa" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -584,77 +584,77 @@ msgstr "Szolgáltatás típusa"
msgid "Active" msgid "Active"
msgstr "Aktív" msgstr "Aktív"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "API kulcs" msgstr "API kulcs"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API kulcs a szolgáltatáshoz (ha szükséges)" msgstr "API kulcs a szolgáltatáshoz (ha szükséges)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Intervallum típusa" msgstr "Intervallum típusa"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Intervallum" msgstr "Intervallum"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Utolsó sikeres elérés" msgstr "Utolsó sikeres elérés"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Cél pénznemek" msgstr "Cél pénznemek"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Cél számlák" msgstr "Cél számlák"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1931,7 +1931,7 @@ msgstr ""
msgid "Default Account" msgid "Default Account"
msgstr "Cél számlák" msgstr "Cél számlák"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "File name" #| msgid "File name"
msgid "Token name" msgid "Token name"
msgstr "Fájlnév" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "" msgstr ""
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n" "Last-Translator: Automatically generated\n"
"Language-Team: none\n" "Language-Team: none\n"
@@ -29,8 +29,8 @@ msgstr ""
#: apps/transactions/forms.py:417 apps/transactions/forms.py:536 #: apps/transactions/forms.py:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -45,7 +45,7 @@ msgstr ""
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "" msgstr ""
@@ -343,7 +343,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@@ -545,27 +545,27 @@ msgstr ""
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "" msgstr ""
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "" msgstr ""
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -577,77 +577,77 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "" msgstr ""
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "" msgstr ""
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "" msgstr ""
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "" msgstr ""
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "" msgstr ""
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1910,7 +1910,7 @@ msgstr ""
msgid "Default Account" msgid "Default Account"
msgstr "" msgstr ""
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/forms.py:439 #: apps/users/forms.py:438
msgid "Token name" msgid "Token name"
msgstr "" msgstr ""
#: apps/users/forms.py:441 #: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "" msgstr ""
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2025-12-28 22:24+0000\n" "PO-Revision-Date: 2025-12-28 22:24+0000\n"
"Last-Translator: icovada <federico.tabbo@networktocode.com>\n" "Last-Translator: icovada <federico.tabbo@networktocode.com>\n"
"Language-Team: Italian <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Aggiorna"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Aggiungi" msgstr "Aggiungi"
@@ -355,7 +355,7 @@ msgstr ""
"Modificabile solo dal proprietario.<br/>Pubblico: visibile da tutti gli " "Modificabile solo dal proprietario.<br/>Pubblico: visibile da tutti gli "
"utenti. Modificabile solo dal proprietario." "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" msgid "Save"
msgstr "Salva" msgstr "Salva"
@@ -557,27 +557,27 @@ msgstr "Cambio valute"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Le valute di origine e destinazione non possono essere le stesse." msgstr "Le valute di origine e destinazione non possono essere le stesse."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "Attivo" msgstr "Attivo"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Ogni X ore" msgstr "Ogni X ore"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Non attivo" msgstr "Non attivo"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Nome servizio" msgstr "Nome servizio"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Tipo di servizio" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -589,31 +589,31 @@ msgstr "Tipo di servizio"
msgid "Active" msgid "Active"
msgstr "Attivo" msgstr "Attivo"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "Chiave API" msgstr "Chiave API"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Chiave API per il servizio (se richiesta)" msgstr "Chiave API per il servizio (se richiesta)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Tipo di intervallo" msgstr "Tipo di intervallo"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Intervallo" msgstr "Intervallo"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Ultimo scaricamento riuscito" msgstr "Ultimo scaricamento riuscito"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Valute target" msgstr "Valute target"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "Seleziona le valute per cui scaricare i tassi di cambio. I tassi verranno "
"scaricati per ogni valuta rispetto alla valuta di cambio impostata." "scaricati per ogni valuta rispetto alla valuta di cambio impostata."
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Conti target" msgstr "Conti target"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "scaricati per la valuta di ogni conto rispetto alla valuta di cambio "
"impostata." "impostata."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "Cambio unico" 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." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Crea un solo cambio valuta e aggiornalo nel tempo, evitando duplicati nel " "Crea un solo cambio valuta e aggiornalo nel tempo, evitando duplicati nel "
"database." "database."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Servizio cambio valuta" msgstr "Servizio cambio valuta"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Servizi tassi di cambio" 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." msgid "'Every X hours' interval type requires a positive integer."
msgstr "Lintervallo “Ogni X ore” richiede un numero intero positivo." 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." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Lintervallo “Ogni X ore” deve essere compreso tra 1 e 24." msgstr "Lintervallo “Ogni X ore” deve essere compreso tra 1 e 24."
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -668,7 +668,7 @@ msgstr ""
"Formato ore non valido. Usa ore separate da virgole (023) e/o intervalli " "Formato ore non valido. Usa ore separate da virgole (023) e/o intervalli "
"(es. '1-5,8,10-12')." "(es. '1-5,8,10-12')."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1964,7 +1964,7 @@ msgstr "Formato numerico"
msgid "Default Account" msgid "Default Account"
msgstr "Conti target" msgstr "Conti target"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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 " "Considera la possibilità di contribuire alla traduzione di WYGIWYH nella tua "
"lingua su %(translation_link)s" "lingua su %(translation_link)s"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "Nuova Password" msgstr "Nuova Password"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Lascia vuoto per mantenere la password attuale." msgstr "Lascia vuoto per mantenere la password attuale."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Conferma nuova 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1996,7 +1996,7 @@ msgstr ""
"Indica se questo utente deve essere considerato attivo. Deseleziona questa " "Indica se questo utente deve essere considerato attivo. Deseleziona questa "
"opzione invece di eliminare gli account." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -2004,59 +2004,59 @@ msgstr ""
"Indica che questo utente ha tutte le autorizzazioni senza assegnarle " "Indica che questo utente ha tutte le autorizzazioni senza assegnarle "
"esplicitamente." "esplicitamente."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Questo indirizzo email è già utilizzato da un altro 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." msgid "The two password fields didn't match."
msgstr "I due campi password non corrispondono." msgstr "I due campi password non corrispondono."
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Conferma la nuova password." msgstr "Conferma la nuova password."
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Inserisci prima la nuova password." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Non è possibile disattivare il proprio account tramite questo modulo." 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." msgid "Cannot remove status from the last superuser."
msgstr "Impossibile rimuovere lo stato dall'ultimo superutente." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
"Non è possibile rimuovere il proprio stato di superutente tramite questo " "Non è possibile rimuovere il proprio stato di superutente tramite questo "
"modulo." "modulo."
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "Esiste già un utente con questo indirizzo email." msgstr "Esiste già un utente con questo indirizzo email."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "Nome tag" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-07-05 15:57+0000\n" "PO-Revision-Date: 2026-07-05 15:57+0000\n"
"Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n" "Last-Translator: Dimitri Decrock <dj.flashpower@gmail.com>\n"
"Language-Team: Dutch <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Bijwerken"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Toevoegen" msgstr "Toevoegen"
@@ -355,7 +355,7 @@ msgstr ""
"bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. " "bewerkbaar door de eigenaar.<br/>Publiek: Weergegeven voor alle gebruikers. "
"Alleen bewerkbaar door de eigenaar." "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" msgid "Save"
msgstr "Opslaan" msgstr "Opslaan"
@@ -557,27 +557,27 @@ msgstr "Wisselkoersen"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn." msgstr "Van en Naar munteenheid kunnen niet dezelfde zijn."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "Op" msgstr "Op"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Elke X Uren" msgstr "Elke X Uren"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Niet op" msgstr "Niet op"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Dienstnaam" msgstr "Dienstnaam"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Soort Dienst" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -589,31 +589,31 @@ msgstr "Soort Dienst"
msgid "Active" msgid "Active"
msgstr "Actief" msgstr "Actief"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "API Sleutel" msgstr "API Sleutel"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API sleutel voor de dienst (indien verplicht)" msgstr "API sleutel voor de dienst (indien verplicht)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Soort Interval" msgstr "Soort Interval"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Interval" msgstr "Interval"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Laatste Succesvolle Ophaling" msgstr "Laatste Succesvolle Ophaling"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Doel Munteenheden" msgstr "Doel Munteenheden"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
@@ -621,11 +621,11 @@ msgstr ""
"Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden " "Selecteer munteenheden om wisselkoersen voor op te halen. De koersen worden "
"voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers." "voor elke munteenheid opgehaald ten opzichte van de ingestelde wisselkoers."
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Naar rekeningen" msgstr "Naar rekeningen"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
@@ -634,33 +634,33 @@ msgstr ""
"opgehaald voor de munteenheid van elke rekening ten opzichte van de " "opgehaald voor de munteenheid van elke rekening ten opzichte van de "
"ingestelde wisselkoers." "ingestelde wisselkoers."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "Enkele Wisselkoers" 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." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle " "Maak één wisselkoers aan en houd deze bijgewerkt. Voorkomt een overvolle "
"database." "database."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Wisselkoersdienst" msgstr "Wisselkoersdienst"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Wisselkoersdiensten" msgstr "Wisselkoersdiensten"
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "Voor het intervaltype Elke X uur is een positief geheel getal nodig." 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." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Het interval Elke X uur moet tussen 1 en 24 liggen." msgstr "Het interval Elke X uur moet tussen 1 en 24 liggen."
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -668,7 +668,7 @@ msgstr ""
"Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of " "Ongeldige urennotatie. Gebruik door komma's gescheiden uren (0-23) en/of "
"reeksen (bijv. 1-5,8,10-12)." "reeksen (bijv. 1-5,8,10-12)."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1946,7 +1946,7 @@ msgstr "Schrijfwijze Nummers"
msgid "Default Account" msgid "Default Account"
msgstr "Standaard Rekening" msgstr "Standaard Rekening"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1957,19 +1957,19 @@ msgstr ""
"weergegeven\n" "weergegeven\n"
"Overweeg om WYGIWYH te helpen vertalen naar jouw taal op %(translation_link)s" "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" msgid "New Password"
msgstr "Nieuw Wachtwoord" msgstr "Nieuw Wachtwoord"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Laat leeg om het huidige wachtwoord te behouden." msgstr "Laat leeg om het huidige wachtwoord te behouden."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Bevestig Nieuw Wachtwoord" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1977,7 +1977,7 @@ msgstr ""
"Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer " "Geeft aan of deze gebruiker als actief moet worden behandeld. Deselecteer "
"dit in plaats van accounts te verwijderen." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1985,56 +1985,56 @@ msgstr ""
"Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te " "Geeft aan dat deze gebruiker alle rechten heeft zonder ze expliciet toe te "
"kennen." "kennen."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Dit e-mailadres wordt al gebruikt door een ander 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." msgid "The two password fields didn't match."
msgstr "De twee wachtwoordvelden komen niet overeen." msgstr "De twee wachtwoordvelden komen niet overeen."
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Bevestig je nieuwe wachtwoord." msgstr "Bevestig je nieuwe wachtwoord."
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Geef eerst het nieuwe wachtwoord op." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Je kunt je eigen account niet deactiveren met dit formulier." 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." msgid "Cannot remove status from the last superuser."
msgstr "Kan de status van de laatste Hoofdadmin niet verwijderen." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "Je kunt je eigen hoofdadminrechten niet verwijderen met dit formulier." 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." msgid "A user with this email address already exists."
msgstr "Er bestaat al een gebruiker met dit e-mailadres." msgstr "Er bestaat al een gebruiker met dit e-mailadres."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
msgid "Token name" msgid "Token name"
msgstr "Token naam" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
"Gebruik een beschrijvende naam, zoals n8n, Home Assistant of back-uptaak." "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" msgid "Expires in days"
msgstr "Verloopt over X dagen" msgstr "Verloopt over X dagen"
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "Laat dit veld leeg voor een token zonder vervaldatum." msgstr "Laat dit veld leeg voor een token zonder vervaldatum."
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "Token aanmaken" msgstr "Token aanmaken"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-06-08 07:57+0000\n" "PO-Revision-Date: 2026-06-08 07:57+0000\n"
"Last-Translator: Pawel Augustyn <pawelaugustyn15@gmail.com>\n" "Last-Translator: Pawel Augustyn <pawelaugustyn15@gmail.com>\n"
"Language-Team: Polish <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -48,7 +48,7 @@ msgstr "Aktualizuj"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Dodaj" msgstr "Dodaj"
@@ -359,7 +359,7 @@ msgstr ""
"udostępnione. Tylko właściciel może dokonywać zmian.<br />Publiczny: " "udostępnione. Tylko właściciel może dokonywać zmian.<br />Publiczny: "
"Widoczne dla wszystkich. Tylko właściciel może dokonywać zmian." "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" msgid "Save"
msgstr "Zapisz" msgstr "Zapisz"
@@ -567,27 +567,27 @@ msgstr "Kursy wymiany"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Waluty Z oraz Do nie mogą być identyczne." msgstr "Waluty Z oraz Do nie mogą być identyczne."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "Włączone" msgstr "Włączone"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Co X godzin" msgstr "Co X godzin"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Wyłączone" msgstr "Wyłączone"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Nazwa serwisu" msgstr "Nazwa serwisu"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Typ serwisu" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -599,31 +599,31 @@ msgstr "Typ serwisu"
msgid "Active" msgid "Active"
msgstr "Aktywny" msgstr "Aktywny"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "Klucz API" msgstr "Klucz API"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Klucz API dla serwisu (jeśli potrzebny)" msgstr "Klucz API dla serwisu (jeśli potrzebny)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Cykliczność" msgstr "Cykliczność"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Powtarzać co" msgstr "Powtarzać co"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Ostatnia pomyślna synchronizacja" msgstr "Ostatnia pomyślna synchronizacja"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Docelowe waluty" msgstr "Docelowe waluty"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "Wybierz waluty dla których pobrać kursy wymiany. Będą one pobrane dla każdej "
"z walut na podstawie jej docelowej waluty wymiany." "z walut na podstawie jej docelowej waluty wymiany."
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "Konta docelowe" msgstr "Konta docelowe"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "Wybierz konta dla których pobrać kursy wymiany. Będą one pobrane dla każdej "
"z walut na podstawie jej docelowej waluty wymiany." "z walut na podstawie jej docelowej waluty wymiany."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "Cykliczność \"co X godzin\" wymaga dodatniej liczby." 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." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Cykliczność \"co X godzin\" musi być z przedziału 1-24." msgstr "Cykliczność \"co X godzin\" musi być z przedziału 1-24."
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -675,7 +675,7 @@ msgstr ""
"Niepoprawny format godziny. Użyj zakresów (0-23) i/lub oddziel godziny " "Niepoprawny format godziny. Użyj zakresów (0-23) i/lub oddziel godziny "
"przecinkami (np. \"1-5,8,10-12\")." "przecinkami (np. \"1-5,8,10-12\")."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1960,7 +1960,7 @@ msgstr "Format liczb"
msgid "Default Account" msgid "Default Account"
msgstr "Konto główne/domyślne" msgstr "Konto główne/domyślne"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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 " "Rozważ wsparcie tłumaczenia WYGIWYH dla Twojego języka na "
"%(translation_link)s" "%(translation_link)s"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "Nowe hasło" msgstr "Nowe hasło"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Pozostaw puste by zachować obecne hasło." msgstr "Pozostaw puste by zachować obecne hasło."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Potwierdź nowe hasło" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1992,7 +1992,7 @@ msgstr ""
"Określa czy ten użytkownik powinien być aktywny. Odznacz tę opcję zamiast " "Określa czy ten użytkownik powinien być aktywny. Odznacz tę opcję zamiast "
"kasować konta." "kasować konta."
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -2000,57 +2000,57 @@ msgstr ""
"Określa czy ten użytkownik posiada wszystkie uprawnienia bez jawnego ich " "Określa czy ten użytkownik posiada wszystkie uprawnienia bez jawnego ich "
"przypisania." "przypisania."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Ten adres e-mail jest już zajęty przez innego użytkownika." 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." msgid "The two password fields didn't match."
msgstr "Hasła różnią się." msgstr "Hasła różnią się."
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Potwierdź nowe hasło." msgstr "Potwierdź nowe hasło."
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Wpisz najpierw nowe hasło." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Nie możesz dezaktywować własnego konta przy użyciu tego formularza." 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." msgid "Cannot remove status from the last superuser."
msgstr "Nie można usunąć statusu ostatniemu superuserowi." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "Nie możesz usunąć uprawnień superusera samemu sobie." 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." msgid "A user with this email address already exists."
msgstr "Użytkownik z tym adresem e-mail już istnieje." msgstr "Użytkownik z tym adresem e-mail już istnieje."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "Nazwa taga" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: \n" "Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-07-05 23:34+0000\n" "PO-Revision-Date: 2026-07-05 23:34+0000\n"
"Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n" "Last-Translator: Herculino Trotta <netotrotta@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://translations.herculino.com/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Atualizar"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Adicionar" msgstr "Adicionar"
@@ -353,7 +353,7 @@ msgstr ""
"Somente editável pelo proprietário.<br/>Público: Exibido para todos os " "Somente editável pelo proprietário.<br/>Público: Exibido para todos os "
"usuários. Somente editável pelo proprietário." "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" msgid "Save"
msgstr "Salvar" msgstr "Salvar"
@@ -555,27 +555,27 @@ msgstr "Taxas de Câmbio"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "As moedas De e Para não podem ser as mesmas." msgstr "As moedas De e Para não podem ser as mesmas."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "Em" msgstr "Em"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "A cada X horas" msgstr "A cada X horas"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Não em" msgstr "Não em"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Nome do Serviço" msgstr "Nome do Serviço"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Tipo de Serviço" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -587,31 +587,31 @@ msgstr "Tipo de Serviço"
msgid "Active" msgid "Active"
msgstr "Ativo" msgstr "Ativo"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "Chave de API" msgstr "Chave de API"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "Chave de API para o serviço (se necessário)" msgstr "Chave de API para o serviço (se necessário)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Tipo de Intervalo" msgstr "Tipo de Intervalo"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Intervalo" msgstr "Intervalo"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Última execução bem-sucedida" msgstr "Última execução bem-sucedida"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Moedas-alvo" msgstr "Moedas-alvo"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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 " "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." "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" msgid "Target Accounts"
msgstr "Contas-alvo" msgstr "Contas-alvo"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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 " "serão obtidas para a moeda de cada conta em relação à moeda de câmbio "
"definida." "definida."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "Taxa de câmbio única" 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." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco " "Cria uma taxa de câmbio e mantenha-a atualizada. Evita a poluição do banco "
"de dados." "de dados."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Serviço de Taxa de Câmbio" msgstr "Serviço de Taxa de Câmbio"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Serviços de Taxa de Câmbio" 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." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
"Intervalo do tipo 'A cada X horas' requerer um número inteiro positivo." "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." 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." 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 "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -667,7 +667,7 @@ msgstr ""
"Formato inválido de hora. Use uma lista de horas separada por vírgulas " "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')." "(0-23) e/ou uma faixa (ex.: '1-5,8,10-12')."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1943,7 +1943,7 @@ msgstr "Formato de Número"
msgid "Default Account" msgid "Default Account"
msgstr "Conta Padrão" msgstr "Conta Padrão"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1954,19 +1954,19 @@ msgstr ""
"são exibidos\n" "são exibidos\n"
"Considere ajudar a traduzir WYGIWYH para seu idioma em %(translation_link)s" "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" msgid "New Password"
msgstr "Nova senha" msgstr "Nova senha"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Deixe em branco para usar a senha atual." msgstr "Deixe em branco para usar a senha atual."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Confirmar nova senha" 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 "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
@@ -1974,7 +1974,7 @@ msgstr ""
"Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em " "Designa se esse usuário deve ser tratado como ativo. Desmarque essa opção em "
"vez de excluir usuários." "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 "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
@@ -1982,57 +1982,57 @@ msgstr ""
"Designa que esse usuário tem todas as permissões sem atribuí-las " "Designa que esse usuário tem todas as permissões sem atribuí-las "
"explicitamente." "explicitamente."
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." 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." 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." msgid "The two password fields didn't match."
msgstr "Os dois campos de senha não coincidem." 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." msgid "Please confirm your new password."
msgstr "Confirme sua nova senha." msgstr "Confirme sua nova senha."
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Digite a nova senha primeiro." 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." msgid "You cannot deactivate your own account using this form."
msgstr "Não é possível desativar sua própria conta usando esse formulário." 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." msgid "Cannot remove status from the last superuser."
msgstr "Não é possível remover o status do último superusuário." 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." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
"Não é possível remover seu próprio status de superusuário usando esse " "Não é possível remover seu próprio status de superusuário usando esse "
"formulário." "formulário."
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "Já existe um usuário com esse endereço de e-mail." 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" msgid "Token name"
msgstr "Nome do Token" 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." 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." 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" msgid "Expires in days"
msgstr "Expira em dias" msgstr "Expira em dias"
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "Deixe em branco para um token sem prazo de validade." msgstr "Deixe em branco para um token sem prazo de validade."
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "Criar token" msgstr "Criar token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-05-01 07:24+0000\n" "PO-Revision-Date: 2026-05-01 07:24+0000\n"
"Last-Translator: masttera <mail.masttera@gmail.com>\n" "Last-Translator: masttera <mail.masttera@gmail.com>\n"
"Language-Team: Russian <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -48,7 +48,7 @@ msgstr "Обновить"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Добавить" msgstr "Добавить"
@@ -357,7 +357,7 @@ msgstr ""
"быть изменено только владельцем<br/>Публичный: Отображается для всех " "быть изменено только владельцем<br/>Публичный: Отображается для всех "
"пользователей. Может быть изменено только владельцем." "пользователей. Может быть изменено только владельцем."
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "Сохранить" msgstr "Сохранить"
@@ -565,27 +565,27 @@ msgstr "Обменные курсы"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Валюты «откуда» и «куда» не могут совпадать." msgstr "Валюты «откуда» и «куда» не могут совпадать."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "На" msgstr "На"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Каждые X часов" msgstr "Каждые X часов"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Не в" msgstr "Не в"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Название услуги" msgstr "Название услуги"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Тип услуги" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -597,31 +597,31 @@ msgstr "Тип услуги"
msgid "Active" msgid "Active"
msgstr "Активный" msgstr "Активный"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "API ключ" msgstr "API ключ"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API ключ сервиса (если необходим)" msgstr "API ключ сервиса (если необходим)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Тип интервала" msgstr "Тип интервала"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Интервал" msgstr "Интервал"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Последнее успешное получение данных" msgstr "Последнее успешное получение данных"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Целевые валюты" msgstr "Целевые валюты"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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" msgid "Target Accounts"
msgstr "Целевой счет" msgstr "Целевой счет"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "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" msgid "Single exchange rate"
msgstr "Единый обменный курс" msgstr "Единый обменный курс"
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Создайте один обменный курс и постоянно обновляйте его. Это позволит " "Создайте один обменный курс и постоянно обновляйте его. Это позволит "
"избежать захламления базы данных." "избежать захламления базы данных."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Сервис обмена курсов" msgstr "Сервис обмена курсов"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Сервисы обмена курсов" msgstr "Сервисы обмена курсов"
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
"Для интервалов типа «Каждые X часов» требуется положительное целое число." "Для интервалов типа «Каждые X часов» требуется положительное целое число."
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Интервал «каждые X часов» должен составлять от 1 до 24." msgstr "Интервал «каждые X часов» должен составлять от 1 до 24."
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -677,7 +677,7 @@ msgstr ""
"Неверный формат времени. Используйте часы, разделенные запятыми (0-23), и/" "Неверный формат времени. Используйте часы, разделенные запятыми (0-23), и/"
"или диапазоны (например, '1-5,8,10-12')." "или диапазоны (например, '1-5,8,10-12')."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1963,7 +1963,7 @@ msgstr "Формат чисел"
msgid "Default Account" msgid "Default Account"
msgstr "Учетная запись по умолчанию" msgstr "Учетная запись по умолчанию"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1974,81 +1974,81 @@ msgstr ""
"Пожалуйста, рассмотрите возможность помочь перевести WYGIWYH на ваш язык по " "Пожалуйста, рассмотрите возможность помочь перевести WYGIWYH на ваш язык по "
"ссылке %(translation_link)s" "ссылке %(translation_link)s"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "Новый пароль" msgstr "Новый пароль"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "Оставьте поле пустым, чтобы сохранить текущий пароль." msgstr "Оставьте поле пустым, чтобы сохранить текущий пароль."
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "Подтвердите новый пароль" msgstr "Подтвердите новый пароль"
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "Этот адрес электронной почты уже используется другим аккаунтом." msgstr "Этот адрес электронной почты уже используется другим аккаунтом."
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "Поля ввода пароля не совпадали." msgstr "Поля ввода пароля не совпадали."
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "Пожалуйста, подтвердите свой новый пароль." msgstr "Пожалуйста, подтвердите свой новый пароль."
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "Пожалуйста, сначала введите новый пароль." msgstr "Пожалуйста, сначала введите новый пароль."
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "Пользователь с таким адресом электронной почты уже существует." msgstr "Пользователь с таким адресом электронной почты уже существует."
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "Название тега" msgstr "Название тега"
#: apps/users/forms.py:441 #: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2025-04-14 06:16+0000\n" "PO-Revision-Date: 2025-04-14 06:16+0000\n"
"Last-Translator: Emil <emil.bjorkroth@gmail.com>\n" "Last-Translator: Emil <emil.bjorkroth@gmail.com>\n"
"Language-Team: Swedish <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "Uppdatera"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "" msgstr ""
@@ -345,7 +345,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@@ -547,27 +547,27 @@ msgstr ""
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "" msgstr ""
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "" msgstr ""
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -579,77 +579,77 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "" msgstr ""
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "" msgstr ""
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "" msgstr ""
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "" msgstr ""
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "" msgstr ""
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1912,7 +1912,7 @@ msgstr ""
msgid "Default Account" msgid "Default Account"
msgstr "" msgstr ""
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/forms.py:439 #: apps/users/forms.py:438
msgid "Token name" msgid "Token name"
msgstr "" msgstr ""
#: apps/users/forms.py:441 #: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "" msgstr ""
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2026-01-18 19:24+0000\n" "PO-Revision-Date: 2026-01-18 19:24+0000\n"
"Last-Translator: Ebrahim Tayabali <ebrahimhakimuddin@gmail.com>\n" "Last-Translator: Ebrahim Tayabali <ebrahimhakimuddin@gmail.com>\n"
"Language-Team: Swahili <https://translations.herculino.com/projects/wygiwyh/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr ""
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
#, fuzzy #, fuzzy
msgid "Add" msgid "Add"
@@ -349,7 +349,7 @@ msgid ""
"owner.<br/>Public: Shown for all users. Only editable by the owner." "owner.<br/>Public: Shown for all users. Only editable by the owner."
msgstr "" msgstr ""
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "" msgstr ""
@@ -551,27 +551,27 @@ msgstr ""
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "" msgstr ""
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "" msgstr ""
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "" msgstr ""
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "" msgstr ""
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "" msgstr ""
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -583,77 +583,77 @@ msgstr ""
msgid "Active" msgid "Active"
msgstr "" msgstr ""
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "" msgstr ""
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "" msgstr ""
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "" msgstr ""
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "" msgstr ""
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "" msgstr ""
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "" msgstr ""
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "" msgstr ""
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "" msgstr ""
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "" msgstr ""
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "" msgstr ""
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "" msgstr ""
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "" msgstr ""
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "" msgstr ""
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
msgstr "" msgstr ""
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1918,7 +1918,7 @@ msgstr ""
msgid "Default Account" msgid "Default Account"
msgstr "Akaunti ya Mali" msgstr "Akaunti ya Mali"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Group name" #| msgid "Group name"
msgid "Token name" msgid "Token name"
msgstr "Jina La Kundi" 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." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
msgid "Create token" msgid "Create token"
msgstr "" msgstr ""
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2025-11-01 01:17+0000\n" "PO-Revision-Date: 2025-11-01 01:17+0000\n"
"Last-Translator: mlystopad <mlystopadt@gmail.com>\n" "Last-Translator: mlystopad <mlystopadt@gmail.com>\n"
"Language-Team: Ukrainian <https://translations.herculino.com/projects/" "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -48,7 +48,7 @@ msgstr "Оновлення"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "Додати" msgstr "Додати"
@@ -357,7 +357,7 @@ msgstr ""
"доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх " "доступом. Редагувати може лише власник.<br/> Public: Відображається для всіх "
"користувачів. Редагувати може лише власник." "користувачів. Редагувати може лише власник."
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "Зберегти" msgstr "Зберегти"
@@ -565,27 +565,27 @@ msgstr "Обмінні курси"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "Валюти «Від» і «До» не можуть бути однаковими." msgstr "Валюти «Від» і «До» не можуть бути однаковими."
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "On" msgstr "On"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "Кожні Х годин" msgstr "Кожні Х годин"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "Not on" msgstr "Not on"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "Назва сервісу" msgstr "Назва сервісу"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "Тип сервісу" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -597,31 +597,31 @@ msgstr "Тип сервісу"
msgid "Active" msgid "Active"
msgstr "Активний" msgstr "Активний"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "Ключ API" msgstr "Ключ API"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "API-ключ для сервісу (якщо потрібно)" msgstr "API-ключ для сервісу (якщо потрібно)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "Тип інтервалу" msgstr "Тип інтервалу"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "Інтервал" msgstr "Інтервал"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "Остання успішна вибірка" msgstr "Остання успішна вибірка"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "Цільові валюти" msgstr "Цільові валюти"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "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" msgid "Target Accounts"
msgstr "Цільові Рахунки" msgstr "Цільові Рахунки"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
@@ -641,35 +641,35 @@ msgstr ""
"Оберіть рахунки для завантаження курсів обміну. Курси будуть завантажені для " "Оберіть рахунки для завантаження курсів обміну. Курси будуть завантажені для "
"валюти кожного рахунку відносно встановленої валюти обміну." "валюти кожного рахунку відносно встановленої валюти обміну."
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
#, fuzzy #, fuzzy
#| msgid "Exchange Rate" #| msgid "Exchange Rate"
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "Обмінний курс" msgstr "Обмінний курс"
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "" msgstr ""
"Створіть один курс обміну та оновлюйте його постійно. Це запобігає " "Створіть один курс обміну та оновлюйте його постійно. Це запобігає "
"засміченню бази даних." "засміченню бази даних."
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "Сервіс Курсів Обміну" msgstr "Сервіс Курсів Обміну"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "Сервіси Курсів Обміну" msgstr "Сервіси Курсів Обміну"
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "Інтервал типу «Кожні X годин» потребує додатнього цілого числа." msgstr "Інтервал типу «Кожні X годин» потребує додатнього цілого числа."
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "Інтервал типу «Кожні X годин» повинен бути між 1 та 24." msgstr "Інтервал типу «Кожні X годин» повинен бути між 1 та 24."
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -677,7 +677,7 @@ msgstr ""
"Неправильний формат годин. Використовуйте години, розділені комами (0–23) та/" "Неправильний формат годин. Використовуйте години, розділені комами (0–23) та/"
"або діапазони (наприклад, '1-5,8,10-12')." "або діапазони (наприклад, '1-5,8,10-12')."
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1962,7 +1962,7 @@ msgstr ""
msgid "Default Account" msgid "Default Account"
msgstr "Цільові Рахунки" msgstr "Цільові Рахунки"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "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" "Consider helping translate WYGIWYH to your language at %(translation_link)s"
msgstr "" msgstr ""
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "" msgstr ""
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "" msgstr ""
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "" msgstr ""
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "" msgstr ""
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "" msgstr ""
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "" msgstr ""
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "" msgstr ""
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "" msgstr ""
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "" msgstr ""
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "" msgstr ""
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "" msgstr ""
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Group name" #| msgid "Group name"
msgid "Token name" msgid "Token name"
msgstr "Назва групи" msgstr "Назва групи"
#: apps/users/forms.py:441 #: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
+47 -47
View File
@@ -7,7 +7,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2026-07-04 15:39+0000\n" "POT-Creation-Date: 2026-07-18 18:43+0000\n"
"PO-Revision-Date: 2025-10-08 16:17+0000\n" "PO-Revision-Date: 2025-10-08 16:17+0000\n"
"Last-Translator: doody <doodykimo@gmail.com>\n" "Last-Translator: doody <doodykimo@gmail.com>\n"
"Language-Team: Chinese (Traditional Han script) <https://translations." "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:417 apps/transactions/forms.py:536
#: apps/transactions/forms.py:880 apps/transactions/forms.py:919 #: apps/transactions/forms.py:880 apps/transactions/forms.py:919
#: apps/transactions/forms.py:947 apps/transactions/forms.py:978 #: apps/transactions/forms.py:947 apps/transactions/forms.py:978
#: apps/transactions/forms.py:1128 apps/users/forms.py:246 #: apps/transactions/forms.py:1128 apps/users/forms.py:245
#: apps/users/forms.py:404 #: apps/users/forms.py:403
#: templates/rules/fragments/transaction_rule/dry_run/updated.html:5 #: templates/rules/fragments/transaction_rule/dry_run/updated.html:5
#: templates/rules/fragments/transaction_rule/view.html:128 #: templates/rules/fragments/transaction_rule/view.html:128
msgid "Update" msgid "Update"
@@ -47,7 +47,7 @@ msgstr "更新"
#: apps/transactions/forms.py:424 apps/transactions/forms.py:886 #: apps/transactions/forms.py:424 apps/transactions/forms.py:886
#: apps/transactions/forms.py:925 apps/transactions/forms.py:953 #: apps/transactions/forms.py:925 apps/transactions/forms.py:953
#: apps/transactions/forms.py:984 apps/transactions/forms.py:1134 #: 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 #: templates/mini_tools/unit_price_calculator.html:168
msgid "Add" msgid "Add"
msgstr "新增" msgstr "新增"
@@ -349,7 +349,7 @@ msgstr ""
"私人:只會顯示給擁有者或著已分享的使用者。只有擁有者可以編輯這個選項。<br/>公" "私人:只會顯示給擁有者或著已分享的使用者。只有擁有者可以編輯這個選項。<br/>公"
"開:所有使用者都可以看到。只有擁有者可以編輯這個選項。" "開:所有使用者都可以看到。只有擁有者可以編輯這個選項。"
#: apps/common/forms.py:76 apps/users/forms.py:173 #: apps/common/forms.py:76 apps/users/forms.py:172
msgid "Save" msgid "Save"
msgstr "儲存" msgstr "儲存"
@@ -545,27 +545,27 @@ msgstr "換算匯率"
msgid "From and To currencies cannot be the same." msgid "From and To currencies cannot be the same."
msgstr "來源跟目標貨幣不能相同。" msgstr "來源跟目標貨幣不能相同。"
#: apps/currencies/models.py:110 #: apps/currencies/models.py:111
msgid "On" msgid "On"
msgstr "在" msgstr "在"
#: apps/currencies/models.py:111 #: apps/currencies/models.py:112
msgid "Every X hours" msgid "Every X hours"
msgstr "每多少小時" msgstr "每多少小時"
#: apps/currencies/models.py:112 #: apps/currencies/models.py:113
msgid "Not on" msgid "Not on"
msgstr "不在特定" msgstr "不在特定"
#: apps/currencies/models.py:114 #: apps/currencies/models.py:115
msgid "Service Name" msgid "Service Name"
msgstr "服務名稱" msgstr "服務名稱"
#: apps/currencies/models.py:116 #: apps/currencies/models.py:117
msgid "Service Type" msgid "Service Type"
msgstr "服務類型" 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:227 apps/transactions/models.py:251
#: apps/transactions/models.py:275 templates/categories/fragments/list.html:16 #: apps/transactions/models.py:275 templates/categories/fragments/list.html:16
#: templates/entities/fragments/list.html:16 #: templates/entities/fragments/list.html:16
@@ -577,71 +577,71 @@ msgstr "服務類型"
msgid "Active" msgid "Active"
msgstr "啟用" msgstr "啟用"
#: apps/currencies/models.py:123 #: apps/currencies/models.py:124
msgid "API Key" msgid "API Key"
msgstr "API金鑰" msgstr "API金鑰"
#: apps/currencies/models.py:124 #: apps/currencies/models.py:125
msgid "API key for the service (if required)" msgid "API key for the service (if required)"
msgstr "服務所需的API金鑰(如果需要)" msgstr "服務所需的API金鑰(如果需要)"
#: apps/currencies/models.py:129 #: apps/currencies/models.py:130
msgid "Interval Type" msgid "Interval Type"
msgstr "間隔型態" msgstr "間隔型態"
#: apps/currencies/models.py:133 #: apps/currencies/models.py:134
msgid "Interval" msgid "Interval"
msgstr "間隔" msgstr "間隔"
#: apps/currencies/models.py:136 #: apps/currencies/models.py:137
msgid "Last Successful Fetch" msgid "Last Successful Fetch"
msgstr "最後更新時間" msgstr "最後更新時間"
#: apps/currencies/models.py:143 #: apps/currencies/models.py:144
msgid "Target Currencies" msgid "Target Currencies"
msgstr "目標貨幣" msgstr "目標貨幣"
#: apps/currencies/models.py:145 #: apps/currencies/models.py:146
msgid "" msgid ""
"Select currencies to fetch exchange rates for. Rates will be fetched for " "Select currencies to fetch exchange rates for. Rates will be fetched for "
"each currency against their set exchange currency." "each currency against their set exchange currency."
msgstr "選擇要自動擷取匯率的貨幣,貨幣會根據設定的目標貨幣自動取得匯率資訊。" msgstr "選擇要自動擷取匯率的貨幣,貨幣會根據設定的目標貨幣自動取得匯率資訊。"
#: apps/currencies/models.py:153 #: apps/currencies/models.py:154
msgid "Target Accounts" msgid "Target Accounts"
msgstr "目標帳戶" msgstr "目標帳戶"
#: apps/currencies/models.py:155 #: apps/currencies/models.py:156
msgid "" msgid ""
"Select accounts to fetch exchange rates for. Rates will be fetched for each " "Select accounts to fetch exchange rates for. Rates will be fetched for each "
"account's currency against their set exchange currency." "account's currency against their set exchange currency."
msgstr "選擇自動擷取匯率的帳戶,帳戶會根據設定的匯兌貨幣取得匯率資訊。" msgstr "選擇自動擷取匯率的帳戶,帳戶會根據設定的匯兌貨幣取得匯率資訊。"
#: apps/currencies/models.py:162 #: apps/currencies/models.py:163
msgid "Single exchange rate" msgid "Single exchange rate"
msgstr "保留單一匯率資訊" msgstr "保留單一匯率資訊"
#: apps/currencies/models.py:165 #: apps/currencies/models.py:166
msgid "Create one exchange rate and keep updating it. Avoids database clutter." msgid "Create one exchange rate and keep updating it. Avoids database clutter."
msgstr "只建立一筆匯率資訊並且持續更新,防止資料庫無限擴張。" msgstr "只建立一筆匯率資訊並且持續更新,防止資料庫無限擴張。"
#: apps/currencies/models.py:170 #: apps/currencies/models.py:171
msgid "Exchange Rate Service" msgid "Exchange Rate Service"
msgstr "匯率資訊服務" msgstr "匯率資訊服務"
#: apps/currencies/models.py:171 #: apps/currencies/models.py:172
msgid "Exchange Rate Services" msgid "Exchange Rate Services"
msgstr "匯率資訊服務" msgstr "匯率資訊服務"
#: apps/currencies/models.py:223 #: apps/currencies/models.py:224
msgid "'Every X hours' interval type requires a positive integer." msgid "'Every X hours' interval type requires a positive integer."
msgstr "「每X小時」需要提供正整數。" msgstr "「每X小時」需要提供正整數。"
#: apps/currencies/models.py:232 #: apps/currencies/models.py:233
msgid "'Every X hours' interval must be between 1 and 24." msgid "'Every X hours' interval must be between 1 and 24."
msgstr "「每X小時」需要介於1到24之間。" msgstr "「每X小時」需要介於1到24之間。"
#: apps/currencies/models.py:246 #: apps/currencies/models.py:247
msgid "" msgid ""
"Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., " "Invalid hour format. Use comma-separated hours (0-23) and/or ranges (e.g., "
"'1-5,8,10-12')." "'1-5,8,10-12')."
@@ -649,7 +649,7 @@ msgstr ""
"錯誤的小時格式,請使用逗號設定多個小時(0~23)或著設定範圍(例" "錯誤的小時格式,請使用逗號設定多個小時(0~23)或著設定範圍(例"
"如:'1-5,10-12')。" "如:'1-5,10-12')。"
#: apps/currencies/models.py:257 #: apps/currencies/models.py:258
msgid "" msgid ""
"Invalid format. Please check the requirements for your selected interval " "Invalid format. Please check the requirements for your selected interval "
"type." "type."
@@ -1924,7 +1924,7 @@ msgstr "數字格式"
msgid "Default Account" msgid "Default Account"
msgstr "目標帳戶" msgstr "目標帳戶"
#: apps/users/forms.py:178 #: apps/users/forms.py:177
#, python-format #, python-format
msgid "" msgid ""
"This changes the language (if available) and how numbers and dates are " "This changes the language (if available) and how numbers and dates are "
@@ -1934,81 +1934,81 @@ msgstr ""
"這會改變語言(如果支援的話)以及數字和日期的顯示方式\n" "這會改變語言(如果支援的話)以及數字和日期的顯示方式\n"
"若您有興趣也可以到%(translation_link)s幫助WYGIWYH進行翻譯" "若您有興趣也可以到%(translation_link)s幫助WYGIWYH進行翻譯"
#: apps/users/forms.py:187 #: apps/users/forms.py:186
msgid "New Password" msgid "New Password"
msgstr "新密碼" msgstr "新密碼"
#: apps/users/forms.py:190 #: apps/users/forms.py:189
msgid "Leave blank to keep the current password." msgid "Leave blank to keep the current password."
msgstr "若不想改變密碼請留白。" msgstr "若不想改變密碼請留白。"
#: apps/users/forms.py:193 #: apps/users/forms.py:192
msgid "Confirm New Password" msgid "Confirm New Password"
msgstr "確認新密碼" msgstr "確認新密碼"
#: apps/users/forms.py:205 apps/users/forms.py:362 #: apps/users/forms.py:204 apps/users/forms.py:361
msgid "" msgid ""
"Designates whether this user should be treated as active. Unselect this " "Designates whether this user should be treated as active. Unselect this "
"instead of deleting accounts." "instead of deleting accounts."
msgstr "指定這個使用者是否為啟用狀態,如果沒有選擇的話帳號將無法使用。" msgstr "指定這個使用者是否為啟用狀態,如果沒有選擇的話帳號將無法使用。"
#: apps/users/forms.py:208 apps/users/forms.py:365 #: apps/users/forms.py:207 apps/users/forms.py:364
msgid "" msgid ""
"Designates that this user has all permissions without explicitly assigning " "Designates that this user has all permissions without explicitly assigning "
"them." "them."
msgstr "指定這個使用者是否擁有全部的權限。" msgstr "指定這個使用者是否擁有全部的權限。"
#: apps/users/forms.py:275 #: apps/users/forms.py:274
msgid "This email address is already in use by another account." msgid "This email address is already in use by another account."
msgstr "這個email已經被另一個帳號使用。" msgstr "這個email已經被另一個帳號使用。"
#: apps/users/forms.py:283 #: apps/users/forms.py:282
msgid "The two password fields didn't match." msgid "The two password fields didn't match."
msgstr "兩個密碼欄位的內容不符。" msgstr "兩個密碼欄位的內容不符。"
#: apps/users/forms.py:285 #: apps/users/forms.py:284
msgid "Please confirm your new password." msgid "Please confirm your new password."
msgstr "請確認你的新密碼。" msgstr "請確認你的新密碼。"
#: apps/users/forms.py:287 #: apps/users/forms.py:286
msgid "Please enter the new password first." msgid "Please enter the new password first."
msgstr "請先輸入新的密碼。" msgstr "請先輸入新的密碼。"
#: apps/users/forms.py:307 #: apps/users/forms.py:306
msgid "You cannot deactivate your own account using this form." msgid "You cannot deactivate your own account using this form."
msgstr "無法透過這個頁面停止自己的帳號。" msgstr "無法透過這個頁面停止自己的帳號。"
#: apps/users/forms.py:320 #: apps/users/forms.py:319
msgid "Cannot remove status from the last superuser." msgid "Cannot remove status from the last superuser."
msgstr "最後一位超級使用者無法移除這個權限。" msgstr "最後一位超級使用者無法移除這個權限。"
#: apps/users/forms.py:326 #: apps/users/forms.py:325
msgid "You cannot remove your own superuser status using this form." msgid "You cannot remove your own superuser status using this form."
msgstr "無法使用這個頁面移除自己的超級使用者權限。" msgstr "無法使用這個頁面移除自己的超級使用者權限。"
#: apps/users/forms.py:419 #: apps/users/forms.py:418
msgid "A user with this email address already exists." msgid "A user with this email address already exists."
msgstr "這個電子郵件的使用者已經存在。" msgstr "這個電子郵件的使用者已經存在。"
#: apps/users/forms.py:439 #: apps/users/forms.py:438
#, fuzzy #, fuzzy
#| msgid "Tag name" #| msgid "Tag name"
msgid "Token name" msgid "Token name"
msgstr "標籤名稱" msgstr "標籤名稱"
#: apps/users/forms.py:441 #: apps/users/forms.py:440
msgid "Use a descriptive name such as n8n, Home Assistant, or backup job." msgid "Use a descriptive name such as n8n, Home Assistant, or backup job."
msgstr "" msgstr ""
#: apps/users/forms.py:447 #: apps/users/forms.py:446
msgid "Expires in days" msgid "Expires in days"
msgstr "" msgstr ""
#: apps/users/forms.py:448 #: apps/users/forms.py:447
msgid "Leave empty for a non-expiring token." msgid "Leave empty for a non-expiring token."
msgstr "" msgstr ""
#: apps/users/forms.py:463 #: apps/users/forms.py:462
#, fuzzy #, fuzzy
#| msgid "Create transaction" #| msgid "Create transaction"
msgid "Create token" msgid "Create token"
Binary file not shown.
Binary file not shown.
@@ -1,20 +1,12 @@
<script type="text/hyperscript"> <script type="text/hyperscript">
on paid if body do not include #settings-mute-sound on paid if body do not include #settings-mute-sound
js js
volume = JSON.parse(document.getElementById('volume').textContent) / 10 playSound("sparkle")
paidSound.pause()
paidSound.currentTime = 0
paidSound.volume = volume
paidSound.play()
end end
end end
on unpaid if body do not include #settings-mute-sound on unpaid if body do not include #settings-mute-sound
js js
volume = JSON.parse(document.getElementById('volume').textContent) / 10 playSound("bloom")
unpaidSound.pause()
unpaidSound.currentTime = 0
unpaidSound.volume = volume
unpaidSound.play()
end end
end end
</script> </script>
+3 -3
View File
@@ -3,9 +3,9 @@ FROM node:lts-alpine
WORKDIR /usr/src/frontend WORKDIR /usr/src/frontend
COPY ./frontend/package.json ./frontend/package-lock.json ./ COPY ./frontend/package.json ./frontend/package-lock.json ./
COPY ./docker/dev/vite/entrypoint.sh /usr/local/bin/vite-entrypoint
RUN npm ci --verbose && npm cache clean --force RUN chmod +x /usr/local/bin/vite-entrypoint
ENV PATH ./node_modules/.bin/:$PATH 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
+7
View File
@@ -23,6 +23,7 @@
"bootstrap": "^5.3.8", "bootstrap": "^5.3.8",
"chart.js": "^4.5.1", "chart.js": "^4.5.1",
"chartjs-chart-sankey": "^0.14.3", "chartjs-chart-sankey": "^0.14.3",
"cuelume": "^0.1.2",
"daisyui": "5.5.20", "daisyui": "5.5.20",
"htmx.org": "^2.0.10", "htmx.org": "^2.0.10",
"hyperscript.org": "^0.9.91", "hyperscript.org": "^0.9.91",
@@ -1287,6 +1288,12 @@
"url": "https://github.com/sponsors/rawify" "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": { "node_modules/daisyui": {
"version": "5.5.20", "version": "5.5.20",
"resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.5.20.tgz", "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.5.20.tgz",
+2 -1
View File
@@ -30,6 +30,7 @@
"bootstrap": "^5.3.8", "bootstrap": "^5.3.8",
"chart.js": "^4.5.1", "chart.js": "^4.5.1",
"chartjs-chart-sankey": "^0.14.3", "chartjs-chart-sankey": "^0.14.3",
"cuelume": "^0.1.2",
"daisyui": "5.5.20", "daisyui": "5.5.20",
"htmx.org": "^2.0.10", "htmx.org": "^2.0.10",
"hyperscript.org": "^0.9.91", "hyperscript.org": "^0.9.91",
@@ -47,4 +48,4 @@
"resolutions": { "resolutions": {
"rollup": "npm:@rollup/wasm-node" "rollup": "npm:@rollup/wasm-node"
} }
} }
-5
View File
@@ -14,11 +14,6 @@ Alpine.plugin(mask);
Alpine.plugin(collapse); Alpine.plugin(collapse);
Alpine.start(); 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. * Parse a localized number to a float.
* @param {string} stringNumber - the localized number * @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/bootstrap.js';
import './js/datepicker.js'; import './js/datepicker.js';
import './js/htmx.js'; import './js/htmx.js';
import './js/sounds.js';
import './js/select.js'; import './js/select.js';
import './js/charts.js'; import './js/charts.js';
import './js/autosize.js'; import './js/autosize.js';
+2 -1
View File
@@ -22,7 +22,7 @@ dependencies = [
"djangorestframework~=3.17.1", "djangorestframework~=3.17.1",
"drf-spectacular~=0.29.0", "drf-spectacular~=0.29.0",
"gunicorn==26.0.0", "gunicorn==26.0.0",
"mistune~=3.2.1", "mistune~=3.3.0",
"openpyxl~=3.1.5", "openpyxl~=3.1.5",
"procrastinate[django]~=3.8.1", "procrastinate[django]~=3.8.1",
"psycopg[binary,pool]==3.3.4", "psycopg[binary,pool]==3.3.4",
@@ -35,6 +35,7 @@ dependencies = [
"watchfiles==1.2.0", "watchfiles==1.2.0",
"whitenoise[brotli]==6.12.0", "whitenoise[brotli]==6.12.0",
"xlrd~=2.0.1", "xlrd~=2.0.1",
"yfinance~=1.5.1",
] ]
[tool.setuptools] [tool.setuptools]
Generated
+484 -5
View File
@@ -1,6 +1,17 @@
version = 1 version = 1
revision = 3 revision = 3
requires-python = ">=3.11" 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]] [[package]]
name = "annotated-types" 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" }, { 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]] [[package]]
name = "brotli" name = "brotli"
version = "1.2.0" version = "1.2.0"
@@ -342,6 +366,39 @@ wheels = [
{ 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/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" },
] ]
[[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]] [[package]]
name = "diff-match-patch" name = "diff-match-patch"
version = "20241021" version = "20241021"
@@ -633,12 +690,185 @@ wheels = [
] ]
[[package]] [[package]]
name = "mistune" name = "markdown-it-py"
version = "3.2.1" version = "4.2.0"
source = { registry = "https://pypi.org/simple" } source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003, upload-time = "2026-05-03T14:33:22.312Z" } 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 = [ wheels = [
{ url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749, upload-time = "2026-05-03T14:33:20.551Z" }, { 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"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/84/9c/1939635275ec7258e2b43b00dafabc36d89ad11aa7838d375dc1b0e561cb/mistune-3.3.0.tar.gz", hash = "sha256:3074ec4c61b384abe725128e4dcbb483f5a09cc4632012505cdee655d3a113b9", size = 110936, upload-time = "2026-06-21T13:11:39.458Z" }
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]] [[package]]
@@ -671,6 +901,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" }, { 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]] [[package]]
name = "procrastinate" name = "procrastinate"
version = "3.8.1" version = "3.8.1"
@@ -694,6 +1003,21 @@ django = [
{ name = "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]] [[package]]
name = "psycopg" name = "psycopg"
version = "3.3.4" version = "3.3.4"
@@ -904,6 +1228,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" }, { 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]] [[package]]
name = "pyjwt" name = "pyjwt"
version = "2.13.0" version = "2.13.0"
@@ -1023,6 +1356,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" }, { 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]] [[package]]
name = "rpds-py" name = "rpds-py"
version = "2026.5.1" version = "2026.5.1"
@@ -1178,6 +1524,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" }, { 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]] [[package]]
name = "sqlparse" name = "sqlparse"
version = "0.5.5" version = "0.5.5"
@@ -1348,6 +1703,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" }, { 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]] [[package]]
name = "whitenoise" name = "whitenoise"
version = "6.12.0" version = "6.12.0"
@@ -1396,6 +1850,7 @@ dependencies = [
{ name = "watchfiles" }, { name = "watchfiles" },
{ name = "whitenoise", extra = ["brotli"] }, { name = "whitenoise", extra = ["brotli"] },
{ name = "xlrd" }, { name = "xlrd" },
{ name = "yfinance" },
] ]
[package.metadata] [package.metadata]
@@ -1417,7 +1872,7 @@ requires-dist = [
{ name = "djangorestframework", specifier = "~=3.17.1" }, { name = "djangorestframework", specifier = "~=3.17.1" },
{ name = "drf-spectacular", specifier = "~=0.29.0" }, { name = "drf-spectacular", specifier = "~=0.29.0" },
{ name = "gunicorn", specifier = "==26.0.0" }, { name = "gunicorn", specifier = "==26.0.0" },
{ name = "mistune", specifier = "~=3.2.1" }, { name = "mistune", specifier = "~=3.3.0" },
{ name = "openpyxl", specifier = "~=3.1.5" }, { name = "openpyxl", specifier = "~=3.1.5" },
{ name = "procrastinate", extras = ["django"], specifier = "~=3.8.1" }, { name = "procrastinate", extras = ["django"], specifier = "~=3.8.1" },
{ name = "psycopg", extras = ["binary", "pool"], specifier = "==3.3.4" }, { name = "psycopg", extras = ["binary", "pool"], specifier = "==3.3.4" },
@@ -1430,6 +1885,7 @@ requires-dist = [
{ name = "watchfiles", specifier = "==1.2.0" }, { name = "watchfiles", specifier = "==1.2.0" },
{ name = "whitenoise", extras = ["brotli"], specifier = "==6.12.0" }, { name = "whitenoise", extras = ["brotli"], specifier = "==6.12.0" },
{ name = "xlrd", specifier = "~=2.0.1" }, { name = "xlrd", specifier = "~=2.0.1" },
{ name = "yfinance", specifier = "~=1.5.1" },
] ]
[[package]] [[package]]
@@ -1440,3 +1896,26 @@ sdist = { url = "https://files.pythonhosted.org/packages/07/5a/377161c2d3538d199
wheels = [ 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" }, { 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" },
]