80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
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()
|