google_sheet_handler.py aktualisiert
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user