PK!-ankix/__init__.pyfrom .main import Ankix PK!T|ankix/config.pyfrom datetime import timedelta config = { 'database': 'default.ankix', 'markdown': True, 'srs': { 0: timedelta(minutes=10), 1: timedelta(hours=4), 2: timedelta(hours=8), 3: timedelta(days=1), 4: timedelta(days=3), 5: timedelta(weeks=1), 6: timedelta(weeks=2), 7: timedelta(weeks=4), 8: timedelta(weeks=16) } } PK!ѨR"R" ankix/db.pyimport peewee as pv from playhouse import sqlite_ext from playhouse.shortcuts import model_to_dict from datetime import datetime, timedelta import random import sys import datauri import re from .config import config from .jupyter import HTML from .util import MediaType database = sqlite_ext.SqliteDatabase(config['database']) class BaseModel(pv.Model): viewer_config = dict() @classmethod def get_viewer(cls, records): from htmlviewer import PagedViewer return PagedViewer([r.to_viewer() for r in records], **cls.viewer_config) class Meta: database = database class Tag(BaseModel): name = pv.TextField(unique=True, collation='NOCASE') # notes def __repr__(self): return f'' def to_viewer(self): d = model_to_dict(self) d['notes'] = [repr(n) for n in self.notes] return d class Media(BaseModel): name = pv.TextField(unique=True) type_ = pv.TextField(default=MediaType.font) data = pv.BlobField() # models (for css) # notes def __repr__(self): return f'' @property def src(self): return datauri.build(bytes(self.data)) @property def html(self): if self.type_ == MediaType.font: return f'' elif self.type_ == MediaType.audio: return f'