Source code for noctua.utils.data_access_object

#!/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