google_sheet_handler.py aktualisiert

This commit is contained in:
2025-07-22 05:29:00 +00:00
parent b7f885ef02
commit 7af501dcce

View File

@@ -31,11 +31,23 @@ class GoogleSheetHandler:
Initialisiert den Handler, stellt die Verbindung her und laedt die Daten.
"""
self.logger = logging.getLogger(__name__ + ".GoogleSheetHandler")
# WICHTIG: Attribute hier initialisieren
self.client = None
self.sheet = None
self._all_data = [] # KORREKTUR: Variable umbenannt
self._header_rows = 5 # Annahme: Die ersten 5 Zeilen sind Header
self._all_data = []
self._header_rows = 5
self.logger.info("Initialisiere GoogleSheetHandler...")
try:
self._connect()
if self.sheet:
self.load_data()
else:
raise ConnectionError("Google Sheet Handler Init failed: Verbindung konnte nicht hergestellt werden.")
except Exception as e:
self.logger.critical(f"FATAL: Fehler bei Initialisierung von GoogleSheetHandler: {e}")
raise ConnectionError(f"Google Sheet Handler Init failed: {e}")
try:
self._connect()
if self.sheet:
@@ -54,6 +66,7 @@ class GoogleSheetHandler:
def _connect(self):
"""Stellt Verbindung zum Google Sheet her."""
self.sheet = None
self.client = None # Zurücksetzen bei jedem Versuch
self.logger.info("Versuche Verbindung mit Google Sheets herstellen...")
try:
if not os.path.exists(CREDENTIALS_FILE):
@@ -61,10 +74,15 @@ class GoogleSheetHandler:
scope = ["https://www.googleapis.com/auth/spreadsheets"]
creds = ServiceAccountCredentials.from_json_keyfile_name(CREDENTIALS_FILE, scope)
gc = gspread.authorize(creds)
sh = gc.open_by_url(Config.SHEET_URL)
self.sheet = sh.sheet1
# WICHTIG: Den Client in self.client speichern
self.client = gspread.authorize(creds)
sh = self.client.open_by_url(Config.SHEET_URL)
self.sheet = sh.sheet1 # Das Hauptblatt für Leseoperationen
self.logger.info("Verbindung zu Google Sheets erfolgreich.")
except Exception as e:
self.logger.error(f"FEHLER bei der Google Sheets Verbindung: {e}")
self.logger.debug(traceback.format_exc())
raise e
except Exception as e:
self.logger.error(f"FEHLER bei der Google Sheets Verbindung: {type(e).__name__} - {e}")
self.logger.debug(traceback.format_exc())
@@ -222,14 +240,13 @@ class GoogleSheetHandler:
Die Daten sollten eine Liste von Listen sein (inklusive Header).
"""
try:
# NEU: Prüfen, ob eine Verbindung besteht, und ggf. herstellen
# Der Client wurde bereits in __init__ erstellt. Wir prüfen nur, ob er existiert.
if not self.client:
if not self._connect():
self.logger.error("Verbindung zu Google Sheets konnte nicht hergestellt werden. Breche Schreibvorgang ab.")
return False
self.logger.error("Kein Google-Client vorhanden. Breche Schreibvorgang ab.")
return False
self.logger.info(f"Greife auf Tabellenblatt '{sheet_name}' zu, um es zu leeren und neu zu beschreiben...")
worksheet = self.client.open_by_url(self.sheet_url).worksheet(sheet_name)
worksheet = self.client.open_by_url(Config.SHEET_URL).worksheet(sheet_name)
self.logger.debug("Leere das gesamte Tabellenblatt...")
worksheet.clear()
@@ -243,7 +260,7 @@ class GoogleSheetHandler:
self.logger.info(f"Schreibe {num_rows - 1} neue Datenzeilen (insgesamt {num_rows} Zeilen mit Header) in '{sheet_name}'...")
end_col_letter = self._get_col_letter(num_cols)
end_col_letter = self._get_col_letter(num_cols + 1) # Korrigiert auf +1 für 1-basiert
range_to_update = f'A1:{end_col_letter}{num_rows}'
worksheet.update(range_name=range_to_update, values=data)