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