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.
|
Initialisiert den Handler, stellt die Verbindung her und laedt die Daten.
|
||||||
"""
|
"""
|
||||||
self.logger = logging.getLogger(__name__ + ".GoogleSheetHandler")
|
self.logger = logging.getLogger(__name__ + ".GoogleSheetHandler")
|
||||||
|
# WICHTIG: Attribute hier initialisieren
|
||||||
|
self.client = None
|
||||||
self.sheet = None
|
self.sheet = None
|
||||||
self._all_data = [] # KORREKTUR: Variable umbenannt
|
self._all_data = []
|
||||||
self._header_rows = 5 # Annahme: Die ersten 5 Zeilen sind Header
|
self._header_rows = 5
|
||||||
|
|
||||||
self.logger.info("Initialisiere GoogleSheetHandler...")
|
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:
|
try:
|
||||||
self._connect()
|
self._connect()
|
||||||
if self.sheet:
|
if self.sheet:
|
||||||
@@ -54,6 +66,7 @@ class GoogleSheetHandler:
|
|||||||
def _connect(self):
|
def _connect(self):
|
||||||
"""Stellt Verbindung zum Google Sheet her."""
|
"""Stellt Verbindung zum Google Sheet her."""
|
||||||
self.sheet = None
|
self.sheet = None
|
||||||
|
self.client = None # Zurücksetzen bei jedem Versuch
|
||||||
self.logger.info("Versuche Verbindung mit Google Sheets herstellen...")
|
self.logger.info("Versuche Verbindung mit Google Sheets herstellen...")
|
||||||
try:
|
try:
|
||||||
if not os.path.exists(CREDENTIALS_FILE):
|
if not os.path.exists(CREDENTIALS_FILE):
|
||||||
@@ -61,10 +74,15 @@ class GoogleSheetHandler:
|
|||||||
|
|
||||||
scope = ["https://www.googleapis.com/auth/spreadsheets"]
|
scope = ["https://www.googleapis.com/auth/spreadsheets"]
|
||||||
creds = ServiceAccountCredentials.from_json_keyfile_name(CREDENTIALS_FILE, scope)
|
creds = ServiceAccountCredentials.from_json_keyfile_name(CREDENTIALS_FILE, scope)
|
||||||
gc = gspread.authorize(creds)
|
# WICHTIG: Den Client in self.client speichern
|
||||||
sh = gc.open_by_url(Config.SHEET_URL)
|
self.client = gspread.authorize(creds)
|
||||||
self.sheet = sh.sheet1
|
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.")
|
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:
|
except Exception as e:
|
||||||
self.logger.error(f"FEHLER bei der Google Sheets Verbindung: {type(e).__name__} - {e}")
|
self.logger.error(f"FEHLER bei der Google Sheets Verbindung: {type(e).__name__} - {e}")
|
||||||
self.logger.debug(traceback.format_exc())
|
self.logger.debug(traceback.format_exc())
|
||||||
@@ -222,14 +240,13 @@ class GoogleSheetHandler:
|
|||||||
Die Daten sollten eine Liste von Listen sein (inklusive Header).
|
Die Daten sollten eine Liste von Listen sein (inklusive Header).
|
||||||
"""
|
"""
|
||||||
try:
|
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.client:
|
||||||
if not self._connect():
|
self.logger.error("Kein Google-Client vorhanden. Breche Schreibvorgang ab.")
|
||||||
self.logger.error("Verbindung zu Google Sheets konnte nicht hergestellt werden. Breche Schreibvorgang ab.")
|
return False
|
||||||
return False
|
|
||||||
|
|
||||||
self.logger.info(f"Greife auf Tabellenblatt '{sheet_name}' zu, um es zu leeren und neu zu beschreiben...")
|
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...")
|
self.logger.debug("Leere das gesamte Tabellenblatt...")
|
||||||
worksheet.clear()
|
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}'...")
|
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}'
|
range_to_update = f'A1:{end_col_letter}{num_rows}'
|
||||||
|
|
||||||
worksheet.update(range_name=range_to_update, values=data)
|
worksheet.update(range_name=range_to_update, values=data)
|
||||||
|
|||||||
Reference in New Issue
Block a user