You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
66 lines
2.1 KiB
Python
66 lines
2.1 KiB
Python
import urllib
|
|
from google.oauth2.service_account import Credentials
|
|
from google_auth_oauthlib.flow import InstalledAppFlow
|
|
from googleapiclient.discovery import build
|
|
from googleapiclient.errors import HttpError
|
|
|
|
|
|
SCOPES = ["https://www.googleapis.com/auth/spreadsheets.readonly"]
|
|
|
|
|
|
def get_spreatsheed_service(credentials):
|
|
return build("sheets", "v4", credentials=credentials, cache_discovery=False)
|
|
|
|
|
|
def get_google_creds():
|
|
creds = None
|
|
creds = Credentials.from_service_account_file("credentials.json", scopes=SCOPES)
|
|
return creds
|
|
|
|
|
|
def process_spreadsheet_data(rows):
|
|
processed_data = []
|
|
for row in rows:
|
|
processed_row = convert_spreadsheet_data(row)
|
|
processed_data.append(processed_row)
|
|
return processed_data
|
|
|
|
|
|
def convert_spreadsheet_data(data):
|
|
result = {}
|
|
|
|
# Convert day to integer
|
|
result['day'] = int(data['day'])
|
|
|
|
# Convert time to a datetime object
|
|
from datetime import datetime
|
|
# Assuming Indonesian format with month names
|
|
# Replace Indonesian month names with English if needed
|
|
month_mapping = {
|
|
'Januari': 'January', 'Februari': 'February', 'Maret': 'March',
|
|
'April': 'April', 'Mei': 'May', 'Juni': 'June',
|
|
'Juli': 'July', 'Agustus': 'August', 'September': 'September',
|
|
'Oktober': 'October', 'November': 'November', 'Desember': 'December'
|
|
}
|
|
|
|
time_str = data['time']
|
|
for indo, eng in month_mapping.items():
|
|
time_str = time_str.replace(indo, eng)
|
|
|
|
# Format: "Sabtu, Juli 13, 2024" -> "Saturday, July 13, 2024"
|
|
# Removing the day of week to simplify parsing
|
|
time_str = time_str.split(', ', 1)[1] # Remove "Sabtu, "
|
|
result['time'] = datetime.strptime(time_str, '%B %d, %Y')
|
|
|
|
# Convert percentage strings to floats
|
|
# Handling format like "0,12%" -> 0.12
|
|
for key in ['plan', 'actual', 'gap']:
|
|
# Replace comma with dot (European to US decimal notation)
|
|
value = data[key].replace(',', '.')
|
|
# Remove percentage sign
|
|
value = value.rstrip('%')
|
|
# Convert to float
|
|
result[key] = float(value) / 100 # Divide by 100 to get the actual decimal value
|
|
|
|
return result
|