def update_item_frontmatter(dataobj_id, new_frontmatter): """ Given an object id, this method overwrites the front matter of the post with `new_frontmatter`. --- date: Str id: Str path: Str tags: List[Str] title: Str type: note/bookmark --- """ from archivy.models import DataObj filename = get_by_id(dataobj_id) dataobj = frontmatter.load(filename) for key in list(new_frontmatter): dataobj[key] = new_frontmatter[key] md = frontmatter.dumps(dataobj) with open(filename, "w", encoding="utf-8") as f: f.write(md) converted_dataobj = DataObj.from_md(md) converted_dataobj.fullpath = str( filename.relative_to(current_app.config["USER_DIR"]) ) converted_dataobj.index() load_hooks().on_edit(converted_dataobj)
def update_item_md(dataobj_id, new_content): """ Given an object id, this method overwrites the inner content of the post with `new_content`. This means that it won't change the frontmatter (eg tags, id, title) but it can change the file content. For example: If we have a dataobj like this: ```md --- id: 1 title: Note --- # This is random ``` Calling `update_item(1, "# This is specific")` will turn it into: ```md --- id: 1 # unchanged title: Note --- # This is specific ``` """ from archivy.models import DataObj filename = get_by_id(dataobj_id) dataobj = frontmatter.load(filename) dataobj.content = new_content md = frontmatter.dumps(dataobj) with open(filename, "w", encoding="utf-8") as f: f.write(md) converted_dataobj = DataObj.from_md(md) converted_dataobj.fullpath = str( filename.relative_to(current_app.config["USER_DIR"]) ) converted_dataobj.index() load_hooks().on_edit(converted_dataobj)
def insert(self): """Creates a new file with the object's attributes""" if self.validate(): helpers.set_max_id(helpers.get_max_id() + 1) self.id = helpers.get_max_id() self.date = datetime.now() hooks = helpers.load_hooks() hooks.before_dataobj_create(self) data = { "type": self.type, "title": str(self.title), "date": self.date.strftime("%x").replace("/", "-"), "tags": self.tags, "id": self.id, "path": self.path } if self.type == "bookmark" or self.type == "pocket_bookmark": data["url"] = self.url # convert to markdown file dataobj = frontmatter.Post(self.content) dataobj.metadata = data self.fullpath = create( frontmatter.dumps(dataobj), f"{self.id}-{dataobj['title']}", path=self.path, ) hooks.on_dataobj_create(self) self.index() return self.id return False
def insert(self): """Inserts the model from the database""" if not self.password: return False hashed_password = generate_password_hash(self.password) db = helpers.get_db() if db.search((Query().type == "user") & (Query().username == self.username)): return False db_user = { "username": self.username, "hashed_password": hashed_password, "is_admin": self.is_admin, "type": "user", } helpers.load_hooks().on_user_create(self) return db.insert(db_user)