diff --git a/src/exchanges/gettex.py b/src/exchanges/gettex.py index c33d349..56c7f94 100644 --- a/src/exchanges/gettex.py +++ b/src/exchanges/gettex.py @@ -3,11 +3,14 @@ import gzip import csv import io import time +import logging from datetime import datetime, timedelta, timezone from typing import List, Optional from .base import BaseExchange, Trade from bs4 import BeautifulSoup +logger = logging.getLogger(__name__) + # Rate-Limiting RATE_LIMIT_DELAY = 0.3 # Sekunden zwischen Requests @@ -79,10 +82,10 @@ class GettexExchange(BaseExchange): url = f"https://www.gettex.de/fileadmin/posttrade-data/{filename}" files.append({'filename': filename, 'url': url}) - print(f"[GETTEX] Found {len(files)} files on page") + logger.info(f"[GETTEX] Found {len(files)} files on page") except Exception as e: - print(f"[GETTEX] Error fetching page: {e}") + logger.error(f"[GETTEX] Error fetching page: {e}") return files @@ -148,11 +151,11 @@ class GettexExchange(BaseExchange): date_str = parts[1] # YYYYMMDD if not date_str: - print(f"[GETTEX] WARNING: Could not extract date from filename: {filename}") + logger.warning(f"[GETTEX] Could not extract date from filename: {filename}") # Debug: Zeige erste Zeile if lines and len(lines) > 0: - print(f"[GETTEX] First line sample: {lines[0][:100]}") + logger.debug(f"[GETTEX] First line sample: {lines[0][:100]}") # Gettex CSV hat KEINEN Header! # Format: ISIN,Zeit,Währung,Preis,Menge @@ -166,24 +169,24 @@ class GettexExchange(BaseExchange): if trade: trades.append(trade) else: - if i < 3: # Zeige nur erste paar Fehler - print(f"[GETTEX] Failed to parse line {i+1}: {line[:80]}") + if i < 3: + logger.debug(f"[GETTEX] Failed to parse line {i+1}: {line[:80]}") except Exception as e: parse_errors += 1 if i < 3: - print(f"[GETTEX] Exception parsing line {i+1}: {e}, line: {line[:80]}") + logger.debug(f"[GETTEX] Exception parsing line {i+1}: {e}, line: {line[:80]}") continue if trades: - print(f"[GETTEX] Parsed {len(trades)} trades from {filename} ({len(lines)} lines, {parse_errors} errors)") + logger.info(f"[GETTEX] Parsed {len(trades)} trades from {filename} ({len(lines)} lines, {parse_errors} errors)") elif len(lines) > 0: - print(f"[GETTEX] No trades parsed from {filename} ({len(lines)} lines, {parse_errors} errors)") + logger.warning(f"[GETTEX] No trades parsed from {filename} ({len(lines)} lines, {parse_errors} errors)") except requests.exceptions.HTTPError as e: if e.response.status_code != 404: - print(f"[GETTEX] HTTP error downloading {filename}: {e}") + logger.error(f"[GETTEX] HTTP error downloading {filename}: {e}") except Exception as e: - print(f"[GETTEX] Error downloading {filename}: {e}") + logger.error(f"[GETTEX] Error downloading {filename}: {e}") return trades @@ -406,9 +409,9 @@ class GettexExchange(BaseExchange): target_date = self._get_last_trading_day(target_date) if target_date != original_date: - print(f"[{self.name}] Skipping weekend: {original_date} -> {target_date}") + logger.info(f"[{self.name}] Skipping weekend: {original_date} -> {target_date}") - print(f"[{self.name}] Fetching trades for date: {target_date}") + logger.info(f"[{self.name}] Fetching trades for date: {target_date}") # Versuche zuerst, Dateien von der Webseite zu laden page_files = self._get_file_list_from_page() @@ -434,10 +437,10 @@ class GettexExchange(BaseExchange): hour = int(parts[2]) if hour < 3: target_files.append(f) - except: + except (ValueError, IndexError): pass - print(f"[{self.name}] Found {len(target_files)} files for target date from page") + logger.info(f"[{self.name}] Found {len(target_files)} files for target date from page") # Lade Dateien von der Webseite (mit Rate-Limiting) for i, f in enumerate(target_files): @@ -450,9 +453,9 @@ class GettexExchange(BaseExchange): # Fallback: Versuche erwartete Dateinamen if not all_trades: - print(f"[{self.name}] No files from page, trying generated filenames...") + logger.info(f"[{self.name}] No files from page, trying generated filenames...") expected_files = self._generate_expected_files(target_date) - print(f"[{self.name}] Trying {len(expected_files)} potential files") + logger.info(f"[{self.name}] Trying {len(expected_files)} potential files") successful_files = 0 for filename in expected_files: @@ -461,9 +464,9 @@ class GettexExchange(BaseExchange): all_trades.extend(trades) successful_files += 1 - print(f"[{self.name}] Successfully downloaded {successful_files} files") + logger.info(f"[{self.name}] Successfully downloaded {successful_files} files") - print(f"[{self.name}] Total trades fetched: {len(all_trades)}") + logger.info(f"[{self.name}] Total trades fetched: {len(all_trades)}") return all_trades @@ -506,12 +509,12 @@ class GettexExchange(BaseExchange): continue if trades: - print(f"[{self.name}] Parsed {len(trades)} trades from {filename}") + logger.info(f"[{self.name}] Parsed {len(trades)} trades from {filename}") except requests.exceptions.HTTPError as e: if e.response.status_code != 404: - print(f"[{self.name}] HTTP error downloading {url}: {e}") + logger.error(f"[{self.name}] HTTP error downloading {url}: {e}") except Exception as e: - print(f"[{self.name}] Error downloading {url}: {e}") + logger.error(f"[{self.name}] Error downloading {url}: {e}") return trades