Format codebase w/ black.
[kiosk.git] / gdocs_renderer.py
1 import file_writer
2 import renderer
3 import re
4 import sets
5 import gdata_oauth
6 import secrets
7
8
9 class gdocs_renderer(renderer.debuggable_abstaining_renderer):
10     """A renderer to fetches and munge docs from drive.google.com"""
11
12     query = 'title="Grocery (go/grocery)" OR title="Costco List (go/costco)"'
13
14     def __init__(self, name_to_timeout_dict, oauth):
15         super(gdocs_renderer, self).__init__(name_to_timeout_dict, False)
16         self.oauth = oauth
17         self.client = self.oauth.docs_service()
18
19     def debug_prefix(self):
20         return "gdocs"
21
22     def periodic_render(self, key):
23         result = []
24         page_token = None
25         while True:
26             try:
27                 param = {}
28                 if page_token:
29                     param["pageToken"] = page_token
30                 param["q"] = self.query
31                 print("QUERY: %s" % param["q"])
32
33                 files = self.client.files().list(**param).execute()
34                 result.extend(files["items"])
35                 page_token = files.get("nextPageToken")
36                 if not page_token:
37                     break
38             except:
39                 print("********* TRYING TO REFRESH GDOCS CLIENT *********")
40                 self.oauth.refresh_token()
41                 self.client = self.oauth.docs_service()
42                 return False
43
44         def boost_font_size(matchobj):
45             x = int(matchobj.group(1))
46             x *= 2.33
47             x = int(x)
48             return "font-size:%dpt" % (x)
49
50         for f in result:
51             print(f["title"])
52             print(f["id"])
53             self.debug_print("%s (%s)\n" % (f["title"], f["id"]))
54             title = f["title"]
55             url = f["exportLinks"]["text/html"]
56             print(f)
57             print("Fetching %s..." % url)
58             resp, contents = self.client._http.request(url)
59             print(resp.status)
60             print(contents)
61             if resp.status == 200:
62                 print("Got contents.")
63                 contents = re.sub('<body class="..">', "", contents)
64                 contents = contents.replace("</body>", "")
65                 contents = re.sub("font-size:([0-9]+)pt", boost_font_size, contents)
66                 f = file_writer.file_writer("%s_2_3600.html" % title)
67                 now = datetime.datetime.now()
68                 f.write(
69                     """
70 <H1>%s</H1>
71 <!-- Last updated at %s -->
72 <HR>
73 <DIV STYLE="-webkit-column-count: 2; -moz-column-count: 2; column-count: 2;">
74 %s
75 </DIV>"""
76                     % (title, now, contents)
77                 )
78                 f.close()
79             else:
80                 self.debug_print("error: %s" % resp)
81                 return False
82         return True
83
84
85 # oauth = gdata_oauth.OAuth(secrets.google_client_id,
86 #                          secrets.google_client_secret)
87 # x = gdocs_renderer({"Testing", 12345},
88 #                   oauth)
89 # x.periodic_render("Test")