2025-09-28 14:14:16 -07:00
|
|
|
from grung.types import Collection, Field, Record, Pointer
|
2025-09-24 01:28:23 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class User(Record):
|
2025-09-28 14:14:16 -07:00
|
|
|
@classmethod
|
|
|
|
|
def fields(cls):
|
|
|
|
|
return [*super().fields(), Field("name"), Field("email", unique=True)]
|
2025-09-24 22:03:30 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Group(Record):
|
2025-09-28 14:14:16 -07:00
|
|
|
@classmethod
|
|
|
|
|
def fields(cls):
|
|
|
|
|
return [*super().fields(), Field("name", unique=True), Collection("users", User)]
|
2025-09-25 22:31:37 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class Page(Record):
|
2025-09-28 14:14:16 -07:00
|
|
|
@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()
|