WIP
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
from dataclasses import dataclass, field
|
||||
from functools import cached_property
|
||||
|
||||
from grung.types import BackReference, Collection, Pointer, Record
|
||||
|
||||
from ttfrog import schema
|
||||
|
||||
READ_ONLY_FIELD_TYPES = [Collection, Pointer, BackReference]
|
||||
|
||||
|
||||
@dataclass
|
||||
class Form:
|
||||
"""
|
||||
The base Form controller for the web UI.
|
||||
"""
|
||||
record: Record
|
||||
data: field(default_factory=dict)
|
||||
|
||||
@cached_property
|
||||
def read_only(self) -> set:
|
||||
return [
|
||||
name for (name, attr) in self.record._metadata.fields.items() if type(attr) in READ_ONLY_FIELD_TYPES
|
||||
] + ["uid"]
|
||||
|
||||
def prepare(self):
|
||||
for key, value in self.data.items():
|
||||
|
||||
# filter out fields that cannot be set by the user
|
||||
if key in self.read_only:
|
||||
continue
|
||||
|
||||
self.record[key] = value
|
||||
return self.record
|
||||
|
||||
|
||||
@dataclass
|
||||
class Page(Form):
|
||||
"""
|
||||
A form for creating and updating Page records.
|
||||
"""
|
||||
record: schema.Page
|
||||
|
||||
@cached_property
|
||||
def read_only(self) -> set:
|
||||
return set(list(super().read_only) + ["stub"])
|
||||
|
||||
|
||||
@dataclass
|
||||
class NPC(Page):
|
||||
"""
|
||||
A form for creating and updating Page records.
|
||||
"""
|
||||
record: schema.NPC
|
||||
|
||||
|
||||
@dataclass
|
||||
class User(Page):
|
||||
"""
|
||||
A form for creating and updating Page records.
|
||||
"""
|
||||
record: schema.NPC
|
||||
|
||||
|
||||
@dataclass
|
||||
class Group(Page):
|
||||
"""
|
||||
A form for creating and updating Page records.
|
||||
"""
|
||||
record: schema.NPC
|
||||
Reference in New Issue
Block a user