#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# System modules
import json
from pathlib import Path
[docs]
def guess(value):
try:
val = int(value)
return val
except BaseException:
try:
# float
val = float(value)
return val
except BaseException:
try:
# list or dict
val = json.loads(value)
return val
except BaseException:
# string
return value
[docs]
class ObservationBlockObject(object):
def __init__(self, path):
self.path = Path(path)
self.ext = ".json"
@property
def todos(self):
todos = []
filenames = self.path.glob(f"*" + self.ext)
for filename in filenames:
content = self.read(filename)
# Workaround for templates which are not lists
content = [content] if not isinstance(content, list) else content
card = {
"filename": str(filename),
"name": filename.stem,
"content": content
}
todos.append(card)
return todos
[docs]
def read(self, filename):
with open(filename) as f:
# print(filename)
content = json.load(f)
return content
[docs]
def show(self, name):
card = next((t for t in self.todos if t["name"] == name), None)
return card
# with open(card["filename"]) as f:
# content = json.load(f)
# return content
[docs]
def content(self, name):
return self.show(name)["content"]
[docs]
def create(self, name):
self.update(name)
return self.todos
[docs]
def update(self, name, data=[]):
filename = self.path / (name + self.ext)
with open(filename, "w") as f:
json.dump(data, f, indent=4)
return self.todos
[docs]
def delete(self, name):
filename = self.path / (name + self.ext)
filename.unlink()
return self.todos