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:
108
src/cli.py
Normal file → Executable file
108
src/cli.py
Normal file → Executable file
@@ -1,3 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
import os
|
||||
@@ -10,33 +12,48 @@ import data_fetcher
|
||||
import database
|
||||
import rate_finder
|
||||
import rate_reporter
|
||||
import holidays
|
||||
|
||||
# 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 check_and_update_yearly_data():
|
||||
"""
|
||||
Zkontroluje konzistenci ročních dat pro aktuální rok a případně je aktualizuje.
|
||||
"""
|
||||
current_year = datetime.now().year
|
||||
print(f"Kontroluji konzistenci ročních dat pro rok {current_year}...")
|
||||
debug_print(f"Kontroluji konzistenci ročních dat pro rok {current_year}...")
|
||||
|
||||
# Nastavíme debug mód pro všechny moduly
|
||||
database.set_debug_mode(DEBUG)
|
||||
data_fetcher.set_debug_mode(DEBUG)
|
||||
holidays.set_debug_mode(DEBUG)
|
||||
rate_finder.set_debug_mode(DEBUG)
|
||||
rate_reporter.set_debug_mode(DEBUG)
|
||||
|
||||
# Zkontrolujeme konzistenci dat
|
||||
is_consistent = data_fetcher.check_yearly_data_consistency(current_year, output_dir="data")
|
||||
|
||||
if not is_consistent:
|
||||
print(f"Roční data pro rok {current_year} nejsou konzistentní. Stahuji aktualizovaná data...")
|
||||
debug_print(f"Roční data pro rok {current_year} nejsou konzistentní. Stahuji aktualizovaná data...")
|
||||
# Ujistěme se, že adresář data existuje
|
||||
os.makedirs("data", exist_ok=True)
|
||||
# Stáhneme roční data znovu
|
||||
data_fetcher.download_yearly_data(current_year, output_dir="data", force=True)
|
||||
else:
|
||||
print(f"Roční data pro rok {current_year} jsou aktuální.")
|
||||
debug_print(f"Roční data pro rok {current_year} jsou aktuální.")
|
||||
|
||||
def main():
|
||||
global DEBUG
|
||||
|
||||
# Inicializace databáze
|
||||
database.init_db()
|
||||
|
||||
# Kontrola a případná aktualizace ročních dat pro aktuální rok
|
||||
check_and_update_yearly_data()
|
||||
|
||||
parser = argparse.ArgumentParser(description="Stahování a správa kurzů měn z ČNB.")
|
||||
parser.add_argument(
|
||||
"--year",
|
||||
@@ -89,25 +106,50 @@ def main():
|
||||
metavar=('START_DATE', 'END_DATE'),
|
||||
help="Období, pro které se má vygenerovat report kurzů. Formát: DD.MM.YYYY DD.MM.YYYY"
|
||||
)
|
||||
parser.add_argument(
|
||||
"--debug",
|
||||
action="store_true",
|
||||
help="Zobrazí podrobné ladicí informace."
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
|
||||
# Nastavíme debug mód
|
||||
DEBUG = args.debug
|
||||
|
||||
# Nastavíme debug mód pro všechny moduly
|
||||
database.set_debug_mode(DEBUG)
|
||||
data_fetcher.set_debug_mode(DEBUG)
|
||||
holidays.set_debug_mode(DEBUG)
|
||||
rate_finder.set_debug_mode(DEBUG)
|
||||
rate_reporter.set_debug_mode(DEBUG)
|
||||
|
||||
# Kontrola a případná aktualizace ročních dat pro aktuální rok (pouze v debug módu)
|
||||
if DEBUG:
|
||||
check_and_update_yearly_data()
|
||||
else:
|
||||
# V normálním módu zkontrolujeme pouze při stahování dat
|
||||
if args.year or args.start_date or args.date or args.get_rate or args.report_year or args.report_period:
|
||||
current_year = datetime.now().year
|
||||
# Pro jednoduchost v normálním módu nebudeme kontrolovat konzistenci automaticky
|
||||
pass
|
||||
|
||||
# Zde bude logika pro zpracování argumentů
|
||||
if args.year:
|
||||
print(f"Stahuji roční data pro rok {args.year}...")
|
||||
debug_print(f"Stahuji roční data pro rok {args.year}...")
|
||||
# Ujistěme se, že adresář data existuje
|
||||
os.makedirs("data", exist_ok=True)
|
||||
# Volání funkce pro stažení ročních dat
|
||||
data_fetcher.download_yearly_data(args.year, output_dir="data")
|
||||
elif args.currency and args.start_date and args.end_date and not args.report_period:
|
||||
# Měsíční stahování dat
|
||||
print(f"Stahuji měsíční data pro měnu {args.currency} od {args.start_date} do {args.end_date}...")
|
||||
debug_print(f"Stahuji měsíční data pro měnu {args.currency} od {args.start_date} do {args.end_date}...")
|
||||
# Ujistěme se, že adresář data existuje
|
||||
os.makedirs("data", exist_ok=True)
|
||||
# Volání funkce pro stažení měsíčních dat
|
||||
data_fetcher.download_monthly_data(args.currency, args.start_date, args.end_date, output_dir="data")
|
||||
elif args.date:
|
||||
print(f"Stahuji denní data pro datum {args.date}...")
|
||||
debug_print(f"Stahuji denní data pro datum {args.date}...")
|
||||
# Ujistěme se, že adresář data existuje
|
||||
os.makedirs("data", exist_ok=True)
|
||||
# Volání funkce pro stažení denních dat
|
||||
@@ -115,10 +157,14 @@ def main():
|
||||
elif args.get_rate and args.currency:
|
||||
date_str = args.get_rate
|
||||
currency_code = args.currency
|
||||
print(f"Vyhledávám kurz pro {currency_code} na datum {date_str}...")
|
||||
debug_print(f"Vyhledávám kurz pro {currency_code} na datum {date_str}...")
|
||||
rate = rate_finder.get_rate_for_date(date_str, currency_code)
|
||||
if rate:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
||||
# Pro --get-rate v normálním režimu zobrazíme pouze kurz
|
||||
if not DEBUG:
|
||||
print(rate)
|
||||
else:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
||||
else:
|
||||
# Pokud nebyl kurz nalezen a je aktivní přepínač --auto-download, zkusíme stáhnout denní data
|
||||
if args.auto_download:
|
||||
@@ -130,7 +176,7 @@ def main():
|
||||
if requested_date.date() == today.date():
|
||||
# Zkontrolujeme, zda je čas po 14:30
|
||||
if today.time() >= datetime.strptime("14:30", "%H:%M").time():
|
||||
print("Automaticky stahuji denní data...")
|
||||
debug_print("Automaticky stahuji denní data...")
|
||||
# Ujistěme se, že adresář data existuje
|
||||
os.makedirs("data", exist_ok=True)
|
||||
# Stáhneme denní data pro dnešní datum
|
||||
@@ -139,30 +185,52 @@ def main():
|
||||
# Zkusíme znovu vyhledat kurz
|
||||
rate = rate_finder.get_rate_for_date(date_str, currency_code)
|
||||
if rate:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
||||
if not DEBUG:
|
||||
print(rate)
|
||||
else:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (nebo nejbližší pracovní den): {rate}")
|
||||
else:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen ani po stažení denních dat.")
|
||||
if not DEBUG:
|
||||
print("Kurz nenalezen")
|
||||
else:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen ani po stažení denních dat.")
|
||||
else:
|
||||
print(f"Chyba: Automatické stahování nelze provést, protože čas ještě není po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
||||
if not DEBUG:
|
||||
print("Kurz nenalezen")
|
||||
else:
|
||||
print(f"Chyba: Automatické stahování nelze provést, protože čas ještě není po 14:30. Aktuální čas je {today.strftime('%H:%M')}.")
|
||||
else:
|
||||
print("Automatické stahování denních dat je možné pouze pro dnešní datum.")
|
||||
if not DEBUG:
|
||||
print("Kurz nenalezen")
|
||||
else:
|
||||
print("Automatické stahování denních dat je možné pouze pro dnešní datum.")
|
||||
except ValueError:
|
||||
print(f"Neplatný formát data: {date_str}")
|
||||
if not DEBUG:
|
||||
print("Kurz nenalezen")
|
||||
else:
|
||||
print(f"Neplatný formát data: {date_str}")
|
||||
else:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen.")
|
||||
if not DEBUG:
|
||||
print("Kurz nenalezen")
|
||||
else:
|
||||
print(f"Kurz {currency_code} na datum {date_str} (ani v předchozích dnech) nebyl nalezen.")
|
||||
elif args.report_year and args.currency:
|
||||
if args.report_month:
|
||||
# Generování měsíčního reportu
|
||||
debug_print(f"Generuji měsíční report pro {args.currency} za {args.report_month}/{args.report_year}...")
|
||||
rate_reporter.generate_monthly_report(args.report_year, args.report_month, args.currency, output_dir="data")
|
||||
else:
|
||||
# Generování ročního reportu
|
||||
debug_print(f"Generuji roční report pro {args.currency} za rok {args.report_year}...")
|
||||
rate_reporter.generate_yearly_report(args.report_year, args.currency, output_dir="data")
|
||||
elif args.report_period and args.currency:
|
||||
# Generování reportu za období
|
||||
start_date, end_date = args.report_period
|
||||
debug_print(f"Generuji report pro {args.currency} za období {start_date} - {end_date}...")
|
||||
rate_reporter.generate_period_report(start_date, end_date, args.currency, output_dir="data")
|
||||
else:
|
||||
parser.print_help()
|
||||
if DEBUG:
|
||||
parser.print_help()
|
||||
sys.exit(1)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user