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

1import typing as t 

2from .meta import MetaBaseSkel 

3 

4 

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] 

13 

14 

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()) 

20 

21 

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 

29 

30 

31class SkelList(list): 

32 """ 

33 This class is used to hold multiple skeletons together with other, commonly used information. 

34 

35 SkelLists are returned by Skel().all()...fetch()-constructs and provide additional information 

36 about the data base query, for fetching additional entries. 

37 

38 :ivar cursor: Holds the cursor within a query. 

39 :vartype cursor: str 

40 """ 

41 

42 __slots__ = ( 

43 "baseSkel", 

44 "customQueryInfo", 

45 "getCursor", 

46 "get_orders", 

47 "renderPreparation", 

48 ) 

49 

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 = {} 

60 

61 self.extend(items) 

62 

63 

64# FIXME: REMOVE WITH VIUR4 

65def remove_render_preparation_deep(skel: t.Any) -> t.Any: 

66 """Remove renderPreparation of nested skeletons 

67 

68 _refSkelCache can have renderPreparation too. 

69 """ 

70 from .instance import SkeletonInstance 

71 

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) 

82 

83 return skel