Spaces:
Sleeping
Sleeping
import math | |
import json | |
import regex | |
import inspect | |
from ast import literal_eval | |
from transformers import Tool | |
from google.oauth2.credentials import Credentials | |
from googleapiclient.discovery import build | |
class DataExtractorTool(Tool): | |
def __init__(self): | |
super().__init__() | |
def fetch_data(self, source_link: str) -> str: | |
""" | |
Abstract method to fetch raw data from the source. | |
""" | |
raise NotImplementedError("Subclasses must implement this method.") | |
def __call__(self, source_link: str) -> dict: | |
raw_data = self.fetch_data(source_link) | |
return raw_data | |
class GoogleSheetExtractorTool(DataExtractorTool): | |
name = "google_sheet_extractor_tool" | |
description = """ | |
Tool to extract data from Google Sheets. | |
Input is source_link which is a str of a url or google sheets id | |
e.x. source_link='https://docs.google.com/spreadsheets/d/SHEETS_ID/'. | |
Output is a string. | |
""" | |
inputs = ["text"] | |
outputs = ["text"] | |
def fetch_data(self, source_link: str) -> str: | |
# Set up the credentials | |
scope = ["https://www.googleapis.com/auth/spreadsheets.readonly"] | |
creds = Credentials.from_authorized_user_file('token.json', scope) | |
service = build('sheets', 'v4', credentials=creds) | |
# Open the spreadsheet and get all values | |
source_link = source_link.rstrip("/") | |
spreadsheet_id = source_link.split('/')[-1] | |
range_name = 'Sheet1!A1:Z1000' | |
sheet = service.spreadsheets() | |
result = sheet.values().get(spreadsheetId=spreadsheet_id, | |
range=range_name).execute() | |
data = result.get('values', []) | |
# Convert the data to a string representation | |
raw_data = '\n'.join([','.join(row) for row in data]) | |
print(raw_data) | |
return raw_data | |