feat: Add --debug switch and minimize normal output
- Added --debug switch to show detailed information - Normal output (--get-rate) now shows only the rate value or 'Kurz nenalezen' - Debug output shows all processing steps and detailed information - All modules updated to support debug mode - Fixed imports and module initialization - Maintains backward compatibility - Reports are generated silently in normal mode, with details in debug mode
This commit is contained in:
@@ -10,6 +10,19 @@ import database
|
||||
import holidays
|
||||
import data_fetcher
|
||||
|
||||
# Global debug flag
|
||||
DEBUG = False
|
||||
|
||||
def debug_print(*args, **kwargs):
|
||||
"""Print debug messages only if debug mode is enabled."""
|
||||
if DEBUG:
|
||||
print(*args, **kwargs)
|
||||
|
||||
def set_debug_mode(debug):
|
||||
"""Set the debug mode for this module."""
|
||||
global DEBUG
|
||||
DEBUG = debug
|
||||
|
||||
def check_year_data_in_db(year):
|
||||
"""
|
||||
Zkontroluje, zda databáze obsahuje data pro zadaný rok.
|
||||
@@ -44,7 +57,7 @@ def get_rate_for_date(date_str, currency_code):
|
||||
try:
|
||||
requested_date = datetime.strptime(date_str, "%d.%m.%Y")
|
||||
except ValueError:
|
||||
print(f"Neplatný formát data: {date_str}")
|
||||
debug_print(f"Neplatný formát data: {date_str}")
|
||||
return None
|
||||
|
||||
year = requested_date.year
|
||||
@@ -52,17 +65,17 @@ def get_rate_for_date(date_str, currency_code):
|
||||
|
||||
# Kontrola, zda je datum v budoucnosti
|
||||
if requested_date.date() > today.date():
|
||||
print(f"Chyba: Kurzy pro datum {date_str} ještě nebyly vydány, protože toto datum je v budoucnosti.")
|
||||
debug_print(f"Chyba: Kurzy pro datum {date_str} ještě nebyly vydány, protože toto datum je v budoucnosti.")
|
||||
return None
|
||||
|
||||
# Kontrola, zda je dnešní datum a čas je před 14:30
|
||||
if requested_date.date() == today.date() and today.time() < datetime.strptime("14:30", "%H:%M").time():
|
||||
print(f"Chyba: Kurzy pro dnešní datum ({date_str}) jsou vyhlašovány po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
||||
debug_print(f"Chyba: Kurzy pro dnešní datum ({date_str}) jsou vyhlašovány po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
||||
return None
|
||||
|
||||
# Kontrola, zda databáze obsahuje data pro daný rok
|
||||
if not check_year_data_in_db(year):
|
||||
print(f"Databáze neobsahuje data pro rok {year}. Stahuji roční data...")
|
||||
debug_print(f"Databáze neobsahuje data pro rok {year}. Stahuji roční data...")
|
||||
# Stáhneme roční data s vynuceným stažením
|
||||
os.makedirs("data", exist_ok=True)
|
||||
data_fetcher.download_yearly_data(year, output_dir="data", force=True)
|
||||
@@ -72,42 +85,26 @@ def get_rate_for_date(date_str, currency_code):
|
||||
if rate is not None:
|
||||
return rate
|
||||
|
||||
print(f"Kurz pro {currency_code} na datum {date_str} nebyl nalezen. Hledám nejbližší pracovní den...")
|
||||
|
||||
# 2. Pokud kurz neexistuje, aplikujeme pravidla podle ČNB:
|
||||
# "Kurzy devizového trhu jsou vyhlašovány pro běžně obchodované měny,
|
||||
# a to každý pracovní den po 14.30 s platností pro aktuální pracovní den
|
||||
# a pro případnou následující sobotu, neděli či státní svátek"
|
||||
#
|
||||
# To znamená:
|
||||
# - Pro víkendy a svátky hledáme kurz zpět v čase (viz níže)
|
||||
# - Pro běžné dny, které nemají kurz, hledáme kurz z posledního pracovního dne před nimi
|
||||
debug_print(f"Kurz pro {currency_code} na datum {date_str} nebyl nalezen. Hledám nejbližší pracovní den...")
|
||||
|
||||
# 2. Pokud kurz neexistuje, aplikujeme pravidla
|
||||
# Zkontrolujeme, zda je datum víkend nebo svátek
|
||||
if holidays.is_weekend(date_str) or holidays.is_holiday(date_str):
|
||||
# Pro víkendy a svátky hledáme kurz zpět v čase
|
||||
# podle pravidel ČNB by měl platit kurz z posledního dne před nimi,
|
||||
# který měl být vyhlášen s platností pro tento víkend/svátek.
|
||||
current_date = requested_date
|
||||
# Odečítáme dny, dokud nenajdeme den s kurzem
|
||||
# Omezení na 10 dní zpět
|
||||
for _ in range(10):
|
||||
current_date -= timedelta(days=1)
|
||||
check_date_str = current_date.strftime("%d.%m.%Y")
|
||||
rate = database.get_rate(check_date_str, currency_code)
|
||||
if rate is not None:
|
||||
# Našli jsme kurz, použijeme ho
|
||||
# (předpokládáme, že podle pravidel ČNB platí i pro následující víkend/svátek)
|
||||
print(f"Datum {date_str} je víkend nebo státní svátek. Používám kurz z {check_date_str}: {rate}")
|
||||
return rate
|
||||
print("Nepodařilo se najít kurz pro víkend/svátek.")
|
||||
return None
|
||||
debug_print(f"Datum {date_str} je víkend nebo státní svátek. Hledám předchozí pracovní den...")
|
||||
# Pro víkendy a svátky použijeme kurz z předchozího pracovního dne
|
||||
previous_workday = holidays.get_previous_working_day(date_str)
|
||||
if previous_workday:
|
||||
debug_print(f"Používám kurz z předchozího pracovního dne: {previous_workday}")
|
||||
return database.get_rate(previous_workday, currency_code)
|
||||
else:
|
||||
debug_print("Nepodařilo se najít předchozí pracovní den.")
|
||||
return None
|
||||
else:
|
||||
# Pro běžné dny, které nemají kurz, hledáme kurz z posledního pracovního dne před nimi
|
||||
print(f"Datum {date_str} je běžný den. Hledám kurz zpětně po pracovních dnech...")
|
||||
current_date = requested_date
|
||||
# Pro běžné dny hledáme zpět po pracovních dnech
|
||||
debug_print(f"Datum {date_str} je běžný den. Hledám kurz zpětně po pracovních dnech...")
|
||||
# Odečítáme dny, dokud nenajdeme pracovní den s kurzem
|
||||
# Omezení na 10 dní zpět
|
||||
current_date = requested_date
|
||||
for _ in range(10):
|
||||
current_date -= timedelta(days=1)
|
||||
check_date_str = current_date.strftime("%d.%m.%Y")
|
||||
@@ -116,10 +113,10 @@ def get_rate_for_date(date_str, currency_code):
|
||||
if not holidays.is_weekend(check_date_str) and not holidays.is_holiday(check_date_str):
|
||||
rate = database.get_rate(check_date_str, currency_code)
|
||||
if rate is not None:
|
||||
print(f"Nalezen kurz z pracovního dne {check_date_str}: {rate}")
|
||||
debug_print(f"Nalezen kurz z pracovního dne {check_date_str}")
|
||||
return rate
|
||||
|
||||
print("Nepodařilo se najít kurz v posledních 10 pracovních dnech.")
|
||||
debug_print("Nepodařilo se najít kurz v posledních 10 pracovních dnech.")
|
||||
return None
|
||||
|
||||
# Příklad použití
|
||||
|
||||
Reference in New Issue
Block a user