Skip to content

Commit e94101a

Browse files
committed
added fetch-sheet cl utility, package directory compressed
1 parent 9f79923 commit e94101a

File tree

15 files changed

+144
-97
lines changed

15 files changed

+144
-97
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,6 @@ build/
1212
.env
1313
env.sh
1414
.vscode/
15+
Pipfile
16+
Pipfile.lock
17+
.venv/

bin/fetch-sheet

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env python
2+
3+
import os
4+
import logging
5+
6+
import fire
7+
8+
from google_objects import SheetsClient
9+
10+
log = logging.getLogger(__name__)
11+
12+
13+
class SheetFetcher(object):
14+
15+
"""Command line tool for fetching tabular data
16+
and redirecting it to STDOUT."""
17+
18+
def __init__(self, spreadsheet=None, key=None):
19+
"""Authenticate the Google API Client and loads the Specified Spreadsheet"""
20+
if not spreadsheet:
21+
raise ValueError("Spreadsheet argument required.")
22+
23+
if not key:
24+
key = os.getenv('GOOGLE_SHEETS_API_KEY')
25+
26+
if key:
27+
self.client = SheetsClient.from_api_key(key)
28+
else:
29+
self.client = SheetsClient.from_service_account()
30+
self.spreadsheet = self.client.get_spreadsheet(spreadsheet)
31+
32+
def sheet(self, sheet='Sheet1'):
33+
sheet = self.spreadsheet.get_sheet_by_name(sheet)
34+
dataframe = sheet.frame()
35+
36+
print(dataframe.to_json(orient='records'))
37+
38+
39+
if __name__ == "__main__":
40+
fire.Fire(SheetFetcher)

google_objects/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,6 @@ def serialize(self):
7979
return self.data
8080

8181

82-
from .drive.core import DriveClient
83-
from .sheets.core import SheetsClient
84-
from .slides.core import SlidesClient
82+
from .drive import DriveClient
83+
from .sheets import SheetsClient
84+
from .slides import SlidesClient

google_objects/drive/core.py renamed to google_objects/drive.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import uuid
1111
import logging
1212

13-
from .. import GoogleClient, GoogleObject
13+
from google_objects import GoogleClient, GoogleObject
1414

1515
log = logging.getLogger(__name__)
1616

google_objects/drive/__init__.py

Whitespace-only changes.

google_objects/sheets/core.py renamed to google_objects/sheets.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
import pandas
1414

15-
from .. import GoogleClient, GoogleObject
15+
from google_objects import GoogleClient, GoogleObject
1616

1717
log = logging.getLogger(__name__)
1818

@@ -466,3 +466,26 @@ def __getitem__(self, key):
466466

467467
def __setitem__(self, key, item):
468468
self.values[key] = item
469+
470+
471+
def FORMAT_ROW(sheet_id, start, end, rgba):
472+
return {
473+
"repeatCell": {
474+
"range": {
475+
"sheetId": sheet_id,
476+
"startRowIndex": start,
477+
"endRowIndex": end
478+
},
479+
"cell": {
480+
"userEnteredFormat": {
481+
"backgroundColor": {
482+
"red": rgba[0],
483+
"green": rgba[1],
484+
"blue": rgba[2],
485+
'alpha': rgba[3]
486+
}
487+
}
488+
},
489+
"fields": "userEnteredFormat(backgroundColor)"
490+
}
491+
}

google_objects/sheets/__init__.py

Whitespace-only changes.

google_objects/sheets/updates.py

Lines changed: 0 additions & 21 deletions
This file was deleted.

google_objects/slides/core.py renamed to google_objects/slides.py

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import logging
1111
import functools
1212

13-
from google_objects.slides import updates
1413
from google_objects import GoogleClient, GoogleObject
1514

1615
log = logging.getLogger(__name__)
@@ -156,7 +155,7 @@ def replace_text(self, find, replace, case_sensitive=False):
156155
"""Add update request for presentation-wide
157156
replacement with arg:find to arg:replace
158157
"""
159-
ud = updates.REPLACE_ALL_TEXT(str(find), str(replace), case_sensitive)
158+
ud = REPLACE_ALL_TEXT(str(find), str(replace), case_sensitive)
160159
self.add_update(ud)
161160

162161
def get_element_by_id(self, element_id):
@@ -318,7 +317,7 @@ def delete(self):
318317
"""Adds deleteObject request to
319318
presentation updates list.
320319
"""
321-
ud = updates.DELETE_OBJECT(self.data.id)
320+
ud = DELETE_OBJECT(self.data.id)
322321
self.presentation.add_update(ud)
323322

324323

@@ -453,14 +452,14 @@ def __init__(self, text_content, page_element, **kwargs):
453452

454453
# set update partials
455454
self.delete_text = functools.partial(
456-
updates.DELETE_TEXT,
455+
DELETE_TEXT,
457456
row=getattr(self.page_element, 'startIndex', None),
458457
col=getattr(self.page_element, 'endIndex', None),
459458
start=self.startIndex,
460459
end=self.end_index
461460
)
462461
self.insert_text = functools.partial(
463-
updates.INSERT_TEXT,
462+
INSERT_TEXT,
464463
obj_id=self.id,
465464
start=self.start_index
466465
)
@@ -491,7 +490,7 @@ def text(self):
491490
@text.setter
492491
def text(self, value):
493492
if not self.data.text:
494-
ud = updates.DELETE_TEXT(
493+
ud = DELETE_TEXT(
495494
self.page_element.id,
496495
row=getattr(self.page_element, 'startIndex', None),
497496
col=getattr(self.page_element, 'endIndex', None),
@@ -500,7 +499,7 @@ def text(self, value):
500499
)
501500
self.page_element.update(ud)
502501

503-
update_request = updates.INSERT_TEXT(
502+
update_request = INSERT_TEXT(
504503
value, self.id, start=self.start_index
505504
)
506505
self.page_element.update(update_request)
@@ -510,10 +509,63 @@ def text(self, value):
510509
@text.deleter
511510
def text(self):
512511
obj_id = self.page_element.id
513-
update_request = updates.DELETE_TEXT(
512+
update_request = DELETE_TEXT(
514513
obj_id, start=self.start_index, end=self.end_index
515514
)
516515
self.page_element.update(update_request)
517516

518517
def __str__(self):
519518
return self.text
519+
520+
521+
def DELETE_OBJECT(obj_id):
522+
return {
523+
'deleteObject': {
524+
'objectId': obj_id
525+
}
526+
}
527+
528+
529+
def REPLACE_ALL_TEXT(find, replace, case_sensitive=False):
530+
return {
531+
'replaceAllText': {
532+
'replaceText': replace,
533+
'containsText': {
534+
'text': find,
535+
'matchCase': case_sensitive
536+
}
537+
}
538+
}
539+
540+
541+
def INSERT_TEXT(text, obj_id=None, row=None, column=None, start=0):
542+
return {
543+
'insertText': {
544+
'objectId': obj_id,
545+
'text': text,
546+
'cellLocation': {
547+
'rowIndex': row,
548+
'columnIndex': column
549+
},
550+
'insertionIndex': start
551+
552+
}
553+
}
554+
555+
556+
def DELETE_TEXT(obj_id, row=None,
557+
col=None, start=None, end=None, kind='FIXED_RANGE'):
558+
return {
559+
'deleteText': {
560+
'objectId': obj_id,
561+
'cellLocation': {
562+
'rowIndex': row,
563+
'columnIndex': col
564+
},
565+
'text_range': {
566+
'startIndex': start,
567+
'endIndex': end
568+
569+
},
570+
}
571+
}

google_objects/slides/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)