X-Git-Url: https://wannabe.guru.org/gitweb/?a=blobdiff_plain;f=file_writer.py;h=ffb15e6b2ec4ed44da9308896b0388d006f2dc10;hb=6cd5b068127501d2b48e8ac67b7432bffc5fce53;hp=0d95f71d505e4736aef184935e0b3e0f22bce185;hpb=75b27cc68871343681f01e3f5b04cae84b1b7b2a;p=kiosk.git diff --git a/file_writer.py b/file_writer.py index 0d95f71..ffb15e6 100644 --- a/file_writer.py +++ b/file_writer.py @@ -1,42 +1,57 @@ -import constants +#!/usr/bin/env python3 + import os +from uuid import uuid4 + +import kiosk_constants -def remove_tricky_unicode(x): - try: - x = x.decode('utf-8') - x = x.replace("\u2018", "'").replace("\u2019", "'") - x = x.replace("\u201c", '"').replace("\u201d", '"') - x = x.replace("\u2e3a", "-").replace("\u2014", "-") - except: - pass - return x class file_writer: - def __init__(self, filename): - self.full_filename = os.path.join(constants.pages_dir, - filename) - self.f = open(self.full_filename, 'wb') - self.xforms = [ remove_tricky_unicode ] + """Helper context to write a pages file.""" + + def __init__(self, filename: str, *, transformations=[]): + temp = "temp-" + str(uuid4()) + self.temp_filename = os.path.join(kiosk_constants.pages_dir, temp) + self.full_filename = os.path.join(kiosk_constants.pages_dir, filename) + self.xforms = [file_writer.remove_tricky_unicode] + self.xforms.extend(transformations) + self.f = None - def add_xform(self, xform): - self.xforms.append(xform) + @staticmethod + def remove_tricky_unicode(x: str) -> str: + try: + x = x.replace("\u2018", "'").replace("\u2019", "'") + x = x.replace("\u201c", '"').replace("\u201d", '"') + x = x.replace("\u2e3a", "-").replace("\u2014", "-") + except: + pass + return x def write(self, data): for xform in self.xforms: data = xform(data) - self.f.write(data.encode('utf-8')) + self.f.write(data.encode("utf-8")) + + def __enter__(self): + self.f = open(self.temp_filename, "wb") + return self + + def __exit__(self, exc_type, exc_value, exc_traceback): + self.close() + cmd = f'/bin/mv -f {self.temp_filename} "{self.full_filename}"' + os.system(cmd) + print(cmd) def done(self): - self.f.close() + self.close() def close(self): - self.done() + self.f.close() + # Test #def toupper(x): -# return x.upper() -# -#fw = file_writer("test") -#fw.add_xform(toupper) -#fw.write(u"This is a \u201ctest\u201d. \n") -#fw.done() +# return x.upper() + +#with file_writer("test", transformations=[toupper]) as fw: +# fw.write(u"Another test!!")