diff --git a/google_sheet_handler.py b/google_sheet_handler.py index 3d25e637..35e2708d 100644 --- a/google_sheet_handler.py +++ b/google_sheet_handler.py @@ -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)