Make gkeep use a stored token.
[kiosk.git] / file_writer.py
1 #!/usr/bin/env python3
2
3 import os
4 from uuid import uuid4
5
6 import kiosk_constants
7
8
9 class file_writer:
10     """Helper context to write a pages file."""
11
12     def __init__(self, filename: str, *, transformations=[]):
13         temp = "temp-" + str(uuid4())
14         self.temp_filename = os.path.join(kiosk_constants.pages_dir, temp)
15         self.full_filename = os.path.join(kiosk_constants.pages_dir, filename)
16         self.xforms = [file_writer.remove_tricky_unicode]
17         self.xforms.extend(transformations)
18         self.f = None
19
20     @staticmethod
21     def remove_tricky_unicode(x: str) -> str:
22         try:
23             x = x.replace("\u2018", "'").replace("\u2019", "'")
24             x = x.replace("\u201c", '"').replace("\u201d", '"')
25             x = x.replace("\u2e3a", "-").replace("\u2014", "-")
26         except:
27             pass
28         return x
29
30     def write(self, data):
31         for xform in self.xforms:
32             data = xform(data)
33         self.f.write(data.encode("utf-8"))
34
35     def __enter__(self):
36         self.f = open(self.temp_filename, "wb")
37         return self
38
39     def __exit__(self, exc_type, exc_value, exc_traceback):
40         self.close()
41         cmd = f'/bin/mv -f {self.temp_filename} "{self.full_filename}"'
42         os.system(cmd)
43         print(cmd)
44
45     def done(self):
46         self.close()
47
48     def close(self):
49         self.f.close()
50
51
52 # Test
53 #def toupper(x):
54 #   return x.upper()
55
56 #with file_writer("test", transformations=[toupper]) as fw:
57 #   fw.write(u"Another test!!")