for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
import os
import yorm
from yorm.types import String, List, SortedList
from ..domain import Template
class UpperString(String):
@classmethod
def to_data(cls, obj):
value = super().to_data(obj)
value = value.upper()
return value
@yorm.attr(name=String)
@yorm.attr(link=String)
@yorm.attr(default=List.of_type(UpperString))
@yorm.attr(aliases=SortedList.of_type(String))
@yorm.sync("{self.root}/{self.key}/config.yml")
class TemplateModel:
"""Persistence model for templates."""
def __init__(self, key, root):
self.key = key
self.root = root
self.name = ""
self.default = []
self.link = ""
self.aliases = []
@property
def domain(self):
return Template(
key=self.key,
name=self.name,
lines=self.default,
aliases=self.aliases,
link=self.link,
root=self.root,
)
class TemplateStore:
def __init__(self, root):
self._items = {}
for key in os.listdir(self.root):
if key[0] not in ('.', '_'):
model = TemplateModel(key, self.root)
yorm.save(model)
self._items[key] = model
def read(self, key):
try:
model = self._items[key]
except KeyError:
return None
else:
return model.domain
def filter(self, **_):
templates = []
for model in self._items.values():
templates.append(model.domain)
return templates