Skip to content

Commit 56d2a40

Browse files
Merge pull request #38 from GitTimeraider/develop
Timezone fix
2 parents f6e836c + bd95d77 commit 56d2a40

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

app/currency.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@
1212
FLOATRATES_URL = "https://www.floatrates.com/daily/eur.json"
1313
ERAPI_URL = "https://open.er-api.com/v6/latest/EUR"
1414

15+
16+
def ensure_timezone_aware(dt, default_tz=timezone.utc):
17+
"""
18+
Ensure a datetime object is timezone-aware.
19+
If naive, assume it's in the default timezone (UTC by default).
20+
"""
21+
if dt.tzinfo is None:
22+
return dt.replace(tzinfo=default_tz)
23+
return dt
24+
25+
1526
class CurrencyConverter:
1627
"""Currency converter with multi-provider fallback and provider-specific caching."""
1728

@@ -60,7 +71,9 @@ def get_exchange_rates(self, base_currency: str = 'EUR', force_refresh: bool = F
6071
if not force_refresh and primary_provider:
6172
record = ExchangeRate.query.filter_by(date=date.today(), base_currency=base_currency, provider=primary_provider).first()
6273
if record:
63-
age_min = (datetime.now(timezone.utc) - record.created_at).total_seconds() / 60.0
74+
# Handle timezone compatibility - assume database datetime is UTC if naive
75+
record_time = ensure_timezone_aware(record.created_at)
76+
age_min = (datetime.now(timezone.utc) - record_time).total_seconds() / 60.0
6477
if age_min <= refresh_minutes:
6578
try:
6679
self.last_provider = primary_provider
@@ -79,7 +92,9 @@ def get_exchange_rates(self, base_currency: str = 'EUR', force_refresh: bool = F
7992
if not force_refresh:
8093
cached = ExchangeRate.query.filter_by(date=date.today(), base_currency=base_currency, provider=provider).first()
8194
if cached:
82-
age_min = (datetime.now(timezone.utc) - cached.created_at).total_seconds() / 60.0
95+
# Handle timezone compatibility - assume database datetime is UTC if naive
96+
cached_time = ensure_timezone_aware(cached.created_at)
97+
age_min = (datetime.now(timezone.utc) - cached_time).total_seconds() / 60.0
8398
if age_min <= refresh_minutes:
8499
try:
85100
self.last_provider = provider

0 commit comments

Comments
 (0)