File size: 2,719 Bytes
b7a1682
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eda2f71
 
b7a1682
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eda2f71
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# AUTOGENERATED! DO NOT EDIT! File to edit: ../nbs/00_project.ipynb.

# %% auto 0
__all__ = ['SERVICE_ACCOUNT_FILE', 'SCOPES', 'SPREADSHEET_ID', 'Project']

# %% ../nbs/00_project.ipynb 3
from fastcore.utils import *

# %% ../nbs/00_project.ipynb 5
from googleapiclient.discovery import build
from google.oauth2 import service_account

# %% ../nbs/00_project.ipynb 6
class __Project():
    "Project (time) data handler"
    def __init__(self,
                 scopes: list, # google apis authentication scopes,
                 fn: str, # service account file name
                 sid: str): # spreadsheet id
        creds = service_account.Credentials.from_service_account_file(fn, scopes=scopes)
        service = build('sheets', 'v4', credentials=creds)
        self.sheet = service.spreadsheets()
        self.sid = sid
    def __str__(self): return f"{self.sid}"
    __repr__=__str__

# %% ../nbs/00_project.ipynb 7
SERVICE_ACCOUNT_FILE = '../keys.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SPREADSHEET_ID = '1DNoNf4glcuMxKoVzHVrFo-MktmsVji1wf4IHeraWH84'

class Project(__Project):
    def __init__(self,
                fn:str=SERVICE_ACCOUNT_FILE): # service account file name
        super(Project, self).__init__(SCOPES, fn, SPREADSHEET_ID)

# %% ../nbs/00_project.ipynb 10
@patch
def get(self:Project,
       sname:str=""): # a worksheet name can be specified. If not the 1st sheet is choosen.
    range = f"{sname}!" if sname else ""
    range += "A1:Z1000"
    result = self.sheet.values().get(spreadsheetId=self.sid,
                                range=range).execute()
    values = result.get('values', [])
    return values

# %% ../nbs/00_project.ipynb 13
@patch
def put(self:Project,
        data:list,
        sname:str=""): # a worksheet name can be specified. If not the 1st sheet is choosen.
    range = f"{sname}!" if sname else ""
    range += "A1"
    request = self.sheet.values().update(spreadsheetId=self.sid,
                                         range=range,
                                         valueInputOption="USER_ENTERED",
                                         body={"values":data})
    response = request.execute()

# %% ../nbs/00_project.ipynb 16
@patch
def append(self:Project,
        data:list,
        sname:str="") -> None: # a worksheet name can be specified. If not the 1st sheet is choosen.
    range = f"{sname}!" if sname else ""
    range += "A:E"
    request = self.sheet.values().append(spreadsheetId=self.sid,
                                         range=range,
                                         valueInputOption="USER_ENTERED",
                                         body={"values":data})
    response = request.execute()