Added logging, replaced ~25 print() calls, fixed bare except: pass → except (ValueError, IndexError): pass
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user