Added logging, replaced ~25 print() calls, fixed bare except: pass → except (ValueError, IndexError): pass

This commit is contained in:
Melchior Reimers
2026-02-16 11:59:01 +01:00
parent 18801ec27e
commit 24da2a5861

View File

@@ -3,11 +3,14 @@ import gzip
import csv import csv
import io import io
import time import time
import logging
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
from typing import List, Optional from typing import List, Optional
from .base import BaseExchange, Trade from .base import BaseExchange, Trade
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
logger = logging.getLogger(__name__)
# Rate-Limiting # Rate-Limiting
RATE_LIMIT_DELAY = 0.3 # Sekunden zwischen Requests 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}" url = f"https://www.gettex.de/fileadmin/posttrade-data/{filename}"
files.append({'filename': filename, 'url': url}) 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: except Exception as e:
print(f"[GETTEX] Error fetching page: {e}") logger.error(f"[GETTEX] Error fetching page: {e}")
return files return files
@@ -148,11 +151,11 @@ class GettexExchange(BaseExchange):
date_str = parts[1] # YYYYMMDD date_str = parts[1] # YYYYMMDD
if not date_str: 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 # Debug: Zeige erste Zeile
if lines and len(lines) > 0: 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! # Gettex CSV hat KEINEN Header!
# Format: ISIN,Zeit,Währung,Preis,Menge # Format: ISIN,Zeit,Währung,Preis,Menge
@@ -166,24 +169,24 @@ class GettexExchange(BaseExchange):
if trade: if trade:
trades.append(trade) trades.append(trade)
else: else:
if i < 3: # Zeige nur erste paar Fehler if i < 3:
print(f"[GETTEX] Failed to parse line {i+1}: {line[:80]}") logger.debug(f"[GETTEX] Failed to parse line {i+1}: {line[:80]}")
except Exception as e: except Exception as e:
parse_errors += 1 parse_errors += 1
if i < 3: 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 continue
if trades: 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: 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: except requests.exceptions.HTTPError as e:
if e.response.status_code != 404: 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: except Exception as e:
print(f"[GETTEX] Error downloading {filename}: {e}") logger.error(f"[GETTEX] Error downloading {filename}: {e}")
return trades return trades
@@ -406,9 +409,9 @@ class GettexExchange(BaseExchange):
target_date = self._get_last_trading_day(target_date) target_date = self._get_last_trading_day(target_date)
if target_date != original_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 # Versuche zuerst, Dateien von der Webseite zu laden
page_files = self._get_file_list_from_page() page_files = self._get_file_list_from_page()
@@ -434,10 +437,10 @@ class GettexExchange(BaseExchange):
hour = int(parts[2]) hour = int(parts[2])
if hour < 3: if hour < 3:
target_files.append(f) target_files.append(f)
except: except (ValueError, IndexError):
pass 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) # Lade Dateien von der Webseite (mit Rate-Limiting)
for i, f in enumerate(target_files): for i, f in enumerate(target_files):
@@ -450,9 +453,9 @@ class GettexExchange(BaseExchange):
# Fallback: Versuche erwartete Dateinamen # Fallback: Versuche erwartete Dateinamen
if not all_trades: 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) 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 successful_files = 0
for filename in expected_files: for filename in expected_files:
@@ -461,9 +464,9 @@ class GettexExchange(BaseExchange):
all_trades.extend(trades) all_trades.extend(trades)
successful_files += 1 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 return all_trades
@@ -506,12 +509,12 @@ class GettexExchange(BaseExchange):
continue continue
if trades: 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: except requests.exceptions.HTTPError as e:
if e.response.status_code != 404: 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: except Exception as e:
print(f"[{self.name}] Error downloading {url}: {e}") logger.error(f"[{self.name}] Error downloading {url}: {e}")
return trades return trades