lang-model/naive-nlu/tree_nlu/session/org_mode.py

80 lines
1.9 KiB
Python
Raw Normal View History

2017-09-29 23:32:04 +00:00
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
2017-10-01 18:52:58 +00:00
def get_header():
now = datetime.datetime.utcnow()
return ("# Ran on {}\n".format(
now.strftime("%y/%m/%d %H:%M:%S.%f")))
2017-10-01 15:10:50 +00:00
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()
2017-09-29 23:32:04 +00:00
class OrgModeSession:
def __init__(self, fname):
self.f = open(fname, 'wt')
2017-10-01 15:10:50 +00:00
self.level = 0
2017-10-01 18:46:48 +00:00
self.dirty = False
2017-09-29 23:32:04 +00:00
2017-10-01 18:52:58 +00:00
self.f.write(get_header())
2017-09-29 23:32:04 +00:00
def annotate(self, annotation):
2017-10-01 18:46:48 +00:00
if self.dirty:
self.f.write("{indentation} {data}\n".format(
2017-10-01 18:55:55 +00:00
indentation='*' * (self.level + 1),
2017-10-01 18:46:48 +00:00
data="---"))
self.dirty = False
2017-09-29 23:32:04 +00:00
self.f.write("{indentation} {data}\n".format(
2017-10-01 15:10:50 +00:00
indentation=' ' * (self.level + 2 + 1),
2017-09-29 23:32:04 +00:00
data=annotation))
2017-10-01 15:10:50 +00:00
def log(self, string):
2017-09-29 23:32:04 +00:00
self.f.write("{indentation} {data}\n".format(
2017-10-01 15:10:50 +00:00
indentation='*' * (self.level + 1),
2017-09-29 23:32:04 +00:00
data=string))
2017-10-01 18:46:48 +00:00
self.dirty = False
2017-10-01 15:10:50 +00:00
return LevelContext(self.inc_level, self.dec_level)
def inc_level(self):
self.level += 1
def dec_level(self):
self.level -= 1
2017-10-01 18:46:48 +00:00
self.dirty = True
2017-09-29 23:32:04 +00:00
def close(self):
self.f.close()