import logging import datetime SESSION = None def __gen_session_name__(): now = datetime.datetime.utcnow() return "treeNLU-session-{}.org".format( now.strftime("%y_%m_%d %H:%M:%S_%f")) def create_global_session(fname): global SESSION SESSION = OrgModeSession(fname) def global_session(): if SESSION is None: session_name = __gen_session_name__() logging.warn("Session not created, saved on {}".format(session_name)) create_global_session(session_name) assert(SESSION is not None) return SESSION def get_header(): now = datetime.datetime.utcnow() return ("# Ran on {}\n".format( now.strftime("%y/%m/%d %H:%M:%S.%f"))) class LevelContext: def __init__(self, increaser, decreaser): self.increaser = increaser self.decreaser = decreaser def __enter__(self): self.increaser() def __exit__(self, _type, _value, _traceback): self.decreaser() class OrgModeSession: def __init__(self, fname): self.f = open(fname, 'wt') self.level = 0 self.dirty = False self.f.write(get_header()) def annotate(self, annotation): if self.dirty: self.f.write("{indentation} {data}\n".format( indentation='*' * (self.level + 1), data="---")) self.dirty = False self.f.write("{indentation} {data}\n".format( indentation=' ' * (self.level + 2 + 1), data=annotation)) def log(self, string): self.f.write("{indentation} {data}\n".format( indentation='*' * (self.level + 1), data=string)) self.dirty = False return LevelContext(self.inc_level, self.dec_level) def inc_level(self): self.level += 1 def dec_level(self): self.level -= 1 self.dirty = True def close(self): self.f.close()