Coverage for /home/runner/work/viur-core/viur-core/viur/src/viur/core/skeleton/utils.py: 19%
33 statements
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-13 11:04 +0000
« prev ^ index » next coverage.py v7.10.6, created at 2025-09-13 11:04 +0000
1import typing as t
2from .meta import MetaBaseSkel
5def skeletonByKind(kindName: str) -> t.Type["Skeleton"]:
6 """
7 Returns the Skeleton-Class for the given kindName. That skeleton must exist, otherwise an exception is raised.
8 :param kindName: The kindname to retreive the skeleton for
9 :return: The skeleton-class for that kind
10 """
11 assert kindName in MetaBaseSkel._skelCache, f"Unknown skeleton {kindName=}"
12 return MetaBaseSkel._skelCache[kindName]
15def listKnownSkeletons() -> list[str]:
16 """
17 :return: A list of all known kindnames (all kindnames for which a skeleton is defined)
18 """
19 return sorted(MetaBaseSkel._skelCache.keys())
22def iterAllSkelClasses() -> t.Iterable["Skeleton"]:
23 """
24 :return: An iterator that yields each Skeleton-Class once. (Only top-level skeletons are returned, so no
25 RefSkel classes will be included)
26 """
27 for cls in list(MetaBaseSkel._allSkelClasses): # We'll add new classes here during setSystemInitialized()
28 yield cls
31class SkelList(list):
32 """
33 This class is used to hold multiple skeletons together with other, commonly used information.
35 SkelLists are returned by Skel().all()...fetch()-constructs and provide additional information
36 about the data base query, for fetching additional entries.
38 :ivar cursor: Holds the cursor within a query.
39 :vartype cursor: str
40 """
42 __slots__ = (
43 "baseSkel",
44 "customQueryInfo",
45 "getCursor",
46 "get_orders",
47 "renderPreparation",
48 )
50 def __init__(self, skel, *items):
51 """
52 :param baseSkel: The baseclass for all entries in this list
53 """
54 super().__init__()
55 self.baseSkel = skel or {}
56 self.getCursor = lambda: None
57 self.get_orders = lambda: None
58 self.renderPreparation = None
59 self.customQueryInfo = {}
61 self.extend(items)
64# FIXME: REMOVE WITH VIUR4
65def remove_render_preparation_deep(skel: t.Any) -> t.Any:
66 """Remove renderPreparation of nested skeletons
68 _refSkelCache can have renderPreparation too.
69 """
70 from .instance import SkeletonInstance
72 if isinstance(skel, SkeletonInstance):
73 skel.renderPreparation = None
74 for _, value in skel.items(yieldBoneValues=True):
75 remove_render_preparation_deep(value)
76 elif isinstance(skel, dict):
77 for value in skel.values():
78 remove_render_preparation_deep(value)
79 elif isinstance(skel, (list, tuple, set)):
80 for value in skel:
81 remove_render_preparation_deep(value)
83 return skel