from grung.types import Collection, Field, Record, Pointer class User(Record): @classmethod def fields(cls): return [*super().fields(), Field("name"), Field("email", unique=True)] class Group(Record): @classmethod def fields(cls): return [*super().fields(), Field("name", unique=True), Collection("users", User)] class Page(Record): @classmethod def fields(cls): return [ *super().fields(), Field("stub", unique=True), Field("title"), Field("body"), Pointer("parent", value_type=Page), Collection("pages", Page), ] def before_insert(self): if not self.stub and not self.title: raise Exception("Must provide either a stub or a title!") if not self.stub: self.stub = self.title.title().replace(" ", "") if not self.title: self.title = self.stub.title()