|
class Log: |
|
def __init__(self, path): |
|
dirname = os.path.dirname(path) |
|
os.makedirs(dirname, exist_ok=True) |
|
f = open(path, "a+") |
|
|
|
|
|
size = os.path.getsize(path) |
|
if size > 0: |
|
f.seek(size - 1) |
|
end = f.read(1) |
|
if end != "\n": |
|
f.write("\n") |
|
self.f = f |
|
self.path = path |
|
|
|
def log(self, event): |
|
event["_event_id"] = str(uuid.uuid4()) |
|
json.dump(event, self.f) |
|
self.f.write("\n") |
|
|
|
def state(self): |
|
state = {"complete": set(), "last": None} |
|
for line in open(self.path): |
|
event = json.loads(line) |
|
if event["type"] == "submit" and event["success"]: |
|
state["complete"].add(event["id"]) |
|
state["last"] = event |
|
return state |
|
|