Spaces:
Sleeping
Sleeping
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 |