import os import json import gspread from google.oauth2 import service_account from datetime import datetime class SheetsLogger: def __init__(self): self.gc = None self.sheet = None self.initialize_client() def initialize_client(self): """Initialize Google Sheets client""" try: # Get credentials from environment variable creds_json = os.getenv('GOOGLE_SHEETS_CREDS') if not creds_json: raise ValueError("Google Sheets credentials not found in environment") # Parse credentials JSON creds_dict = json.loads(creds_json) # Create credentials object credentials = service_account.Credentials.from_service_account_info( creds_dict, scopes=['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive'] ) # Initialize gspread client self.gc = gspread.authorize(credentials) # Open spreadsheet by ID (get this from your sheet's URL) SHEET_ID = os.getenv('GOOGLE_SHEET_ID') self.sheet = self.gc.open_by_key(SHEET_ID).sheet1 except Exception as e: print(f"Error initializing Google Sheets client: {str(e)}") self.gc = None self.sheet = None def initialize_sheet(self): """Initialize sheet with headers if needed""" headers = [ "Timestamp", "Name", "Employee ID", "Email", "Department", "Request Details", "Frequency", "Urgency", "User Summary", "Technical Analysis", "Status", # For tracking request status "Notes" # For additional comments ] try: # Check if headers exist existing_headers = self.sheet.row_values(1) if not existing_headers: self.sheet.insert_row(headers, 1) except Exception as e: print(f"Error initializing headers: {str(e)}") def log_request(self, data): """Log a request to Google Sheets""" if not self.sheet: return False try: row = [ data.get('timestamp', ''), data.get('name', ''), data.get('employee_id', ''), data.get('email', ''), data.get('department', ''), data.get('request_details', ''), data.get('frequency', ''), data.get('urgency', ''), data.get('user_summary', ''), data.get('system_analysis', ''), 'New', # Initial status '' # Empty notes ] self.sheet.append_row(row) return True except Exception as e: print(f"Error logging to sheet: {str(e)}") def get_all_requests(self): """Get all requests from the sheet""" if not self.sheet: return None try: # Get all records records = self.sheet.get_all_records() return records except Exception as e: print(f"Error getting records: {str(e)}") return None