2025-10-24 23:10:22 +08:00

86 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Copyright (c) 2025, JINGROW
# License: MIT. See LICENSE
from __future__ import annotations
from typing import Any, Iterable
import jingrow
from jingrow.model.base_page import BasePage, get_controller
def get_pg(*args, **kwargs):
"""本地版 get_pg兼容云端签名。
支持:
- get_pg("PageType", name)
- get_pg({"pagetype": "PageType", ...})
- get_pg(pagetype="PageType", field=...)
"""
if args:
if isinstance(args[0], BasePage):
return args[0]
elif isinstance(args[0], str):
pagetype = args[0]
elif isinstance(args[0], dict):
kwargs = args[0]
else:
raise ValueError("First non keyword argument must be a string or dict")
if len(args) < 2 and kwargs:
if "pagetype" in kwargs:
pagetype = kwargs["pagetype"]
else:
raise ValueError('"pagetype" is a required key')
controller = get_controller(pagetype)
if controller:
return controller(*args, **kwargs)
raise ImportError(pagetype)
class Page(BasePage):
"""最小可用 Page复用 jingrow 本地数据库 APIsave_pg等
仅保留 pagetype 生命周期接口insert/save/delete/run_method。
"""
def insert(self, **kwargs) -> "Page":
self.set("__islocal", True)
self.run_method("before_insert")
jingrow.save_pg(self)
self.run_method("after_insert")
return self
def save(self, **kwargs) -> "Page":
self.run_method("before_save")
jingrow.save_pg(self)
self.run_method("on_update")
return self
def delete(self, **kwargs):
self.run_method("on_trash")
return jingrow.delete_pg(self.pagetype, self.name)
def run_method(self, method: str, *args, **kwargs):
fn = getattr(self, method, None)
if callable(fn):
return fn(*args, **kwargs)
return None
# 兼容云端常用辅助
def as_dict(self) -> dict[str, Any]:
d = {k: v for k, v in self.__dict__.items() if not k.startswith("_")}
d["pagetype"] = self.pagetype
return d
def get_all_children(self) -> list["Page"]:
children = []
for df in self.meta.get_table_fields():
value = getattr(self, df.fieldname, None)
if value:
children.extend(value)
return children