-
Notifications
You must be signed in to change notification settings - Fork 0
/
sheet.py
61 lines (53 loc) · 2.5 KB
/
sheet.py
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
from typing import List
import httplib2
import googleapiclient.discovery
from oauth2client.service_account import ServiceAccountCredentials
from config import SHEET_ID, SOURCE_RANGES, DEBUG
class Sheet:
CREDENTIALS_FILE = 'creds.json'
def __init__(self):
credentials = ServiceAccountCredentials.from_json_keyfile_name(
self.CREDENTIALS_FILE,
'https://www.googleapis.com/auth/spreadsheets')
httpAuth = credentials.authorize(httplib2.Http())
self.service = googleapiclient.discovery.build('sheets', 'v4', http=httpAuth)
def get_values(self, out_range: str, dimension:str='COLUMNS') -> List[List[str]]:
""" Возвращает данные из таблицы
:param out_range: диапазон данных
:param dimension: брать по столбцам или строкам
:return: данные из таблицы
"""
urls = self.service.spreadsheets().values().get(
spreadsheetId=SHEET_ID,
range=out_range,
majorDimension=dimension
).execute()
return urls['values']
def get_names_with_genres(self) -> List[List[str]]:
""" Возвращает из таблицы названия тайтлов и их жанр. """
values = self.service.spreadsheets().values().batchGet(
spreadsheetId=SHEET_ID,
ranges=[SOURCE_RANGES['names'], SOURCE_RANGES['genres']],
majorDimension='COLUMNS'
).execute()
return list(zip(values['valueRanges'][0]['values'][0],values['valueRanges'][1]['values'][0]))
def write_values(self, data: list, input_range: str, dimension: str='COLUMNS') -> None:
""" Пишет в таблицу данные
:param data: данные
:param input_range: диапазон, в который будет произведена вставка
:param dimension: каким образом вставлять данные (столбцы / строки) ['COLUMNS', 'ROWS']
"""
if DEBUG:
print(*data, sep='\n')
else:
self.service.spreadsheets().values().batchUpdate(
spreadsheetId=SHEET_ID,
body={
"valueInputOption": "USER_ENTERED",
"data": [
{"range": input_range,
"majorDimension": dimension,
"values": data},
]
}
).execute()