Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
init not tested, just give structure
  • Loading branch information
brucewzj99 committed Jan 27, 2024
commit 2b49a609c222657321c2027b0790e89b63b01dbd
Empty file.
13 changes: 13 additions & 0 deletions bot/google_sheet_service/auth.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import os
import json
from google.oauth2 import service_account


def get_credentials():
SCOPES = ["https://www.googleapis.com/auth/spreadsheets"]
google_json = os.getenv("GOOGLE_JSON")
google_service = json.loads(google_json)
creds = service_account.Credentials.from_service_account_info(
google_service, scopes=SCOPES
)
return creds
123 changes: 123 additions & 0 deletions bot/google_sheet_service/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
# Sheet names
DD_SHEET = "Dropdown" # DD for Dropdown
TR_SHEET = "Tracker" # TR for Tracker

# Tracker columns
TR_QUICKADD_TP_PAY = "G" # Transport Payment Column
TR_QUICKADD_TP_TYPE = "H" # Transport Type Column
TR_QUICKADD_OT_PAY = "I" # Others Payment Column
TR_QUICKADD_OT_TYPE = "J" # Others Type Column

TR_QUICKADD_ROW_START = 3 # Quick Add Row
TR_QUICKADD_ROW_END = 13 # Quick Add End Row

TR_START_COL = "B" # Start Column
TR_END_COL = "E" # End Column
TR_ROW = 3

# Dropdown rows
DD_MAIN_CAT_ROW = 2
DD_SUBCAT_START = 3
DD_SUBCAT_END = 9

DD_MAIN_PAY_ROW = 12
DD_SUBPAY_START = 13
DD_SUBPAY_END = 19

DD_TRANSPORT_COL = "A"
DD_OTHERS_COL_START = "B"
DD_OTHERS_COL_END = "J"

DD_INCOME_COL = "L"

DD_PAYMENT_COL_START = "A"
DD_PAYMENT_COL_END = "J"

# Column indexes
START_COL_IDX = 0
END_COL_IDX = 11

# Months
OVERALL_RANGE = "!M13:O25"


# Helper functions
def create_range(sheet, start_col, start_row, end_col=None, end_row=None):
"""
Create a standard range string.
Sample output: "Dropdown!A2:A9"
"""
end_part = f":{end_col}{end_row}" if end_col and end_row else ""
return f"{sheet}!{start_col}{start_row}{end_part}"


def create_complex_range(sheet, start_col_ord, end_col_ord, row_start, row_end):
"""
Create a range string for complex cases.
Sample output: ["Dropdown!B2:B9", "Dropdown!C2:C9", ...]
"""
return [
f"{sheet}!{chr(i)}{row_start}:{chr(i)}{row_end}"
for i in range(start_col_ord, end_col_ord)
]


# Transport ranges
TRANSPORT_RANGE = create_range(
DD_SHEET, DD_TRANSPORT_COL, DD_SUBCAT_START, DD_TRANSPORT_COL, DD_SUBCAT_END
)

# Others ranges
OTHERS_MAIN_RANGE = create_range(
DD_SHEET, DD_OTHERS_COL_START, DD_MAIN_CAT_ROW, DD_OTHERS_COL_END, DD_MAIN_CAT_ROW
)
OTHERS_SUB_RANGE = create_complex_range(
DD_SHEET,
ord(DD_OTHERS_COL_START),
ord(DD_OTHERS_COL_END),
DD_MAIN_CAT_ROW,
DD_SUBCAT_END,
)

# Payment ranges
PAYMENT_MAIN_RANGE = create_range(
DD_SHEET, DD_PAYMENT_COL_START, DD_MAIN_PAY_ROW, DD_PAYMENT_COL_END, DD_MAIN_PAY_ROW
)
PAYMENT_SUB_RANGE = create_complex_range(
DD_SHEET,
ord(DD_PAYMENT_COL_START),
ord(DD_PAYMENT_COL_END),
DD_MAIN_PAY_ROW,
DD_SUBPAY_END,
)

# Income range
INCOME_RANGE = create_range(
DD_SHEET, DD_INCOME_COL, DD_MAIN_CAT_ROW, DD_INCOME_COL, DD_SUBCAT_END
)

# Tracker ranges
TRACKER_RANGE = create_range(TR_SHEET, TR_START_COL, TR_ROW, TR_END_COL, TR_ROW)

# Quick add ranges
QUICK_ADD_RANGE = create_range(
TR_SHEET,
TR_QUICKADD_TP_PAY,
TR_QUICKADD_ROW_START,
TR_QUICKADD_OT_TYPE,
TR_QUICKADD_ROW_START,
)
QUICK_OTHERS_RANGE = create_range(
TR_SHEET,
TR_QUICKADD_OT_PAY,
TR_QUICKADD_ROW_START,
TR_QUICKADD_OT_TYPE,
TR_QUICKADD_ROW_END,
)
QUICK_TRANSPORT_RANGE = create_range(
TR_SHEET,
TR_QUICKADD_TP_PAY,
TR_QUICKADD_ROW_START,
TR_QUICKADD_TP_TYPE,
TR_QUICKADD_ROW_END,
)
Empty file.
9 changes: 9 additions & 0 deletions bot/google_sheet_service/sheets_api.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# sheets_api.py
from googleapiclient.discovery import build
from .auth import get_credentials


class SheetManager:
def __init__(self):
self.creds = get_credentials()
self.sheets_api = build("sheets", "v4", credentials=self.creds)