Coverage for /home/runner/work/viur-core/viur-core/viur/src/viur/core/bones/__init__.py: 92%

46 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-13 11:04 +0000

1from .base import ( 

2 BaseBone, 

3 CloneBehavior, 

4 CloneStrategy, 

5 Compute, 

6 ComputeInterval, 

7 ComputeMethod, 

8 MultipleConstraints, 

9 ReadFromClientError, 

10 ReadFromClientErrorSeverity, 

11 ReadFromClientException, 

12 UniqueLockMethod, 

13 UniqueValue, 

14) 

15from .boolean import BooleanBone 

16from .captcha import CaptchaBone 

17from .color import ColorBone 

18from .credential import CredentialBone 

19from .date import DateBone 

20from .email import EmailBone 

21from .file import FileBone 

22from .image import ImageBone 

23from .json import JsonBone 

24from .key import KeyBone 

25from .numeric import NumericBone 

26from .password import PasswordBone 

27from .phone import PhoneBone 

28from .randomslice import RandomSliceBone 

29from .raw import RawBone 

30from .record import RecordBone 

31from .relational import RelationalBone, RelationalConsistency, RelationalUpdateLevel 

32from .selectcountry import SelectCountryBone 

33from .select import ( 

34 SelectBone, 

35 translation_key_prefix_skeleton_bonename, 

36 translation_key_prefix_bonename, 

37) 

38from .sortindex import SortIndexBone 

39from .spam import SpamBone 

40from .spatial import SpatialBone 

41from .string import StringBone 

42from .text import TextBone 

43from .treeleaf import TreeLeafBone 

44from .treenode import TreeNodeBone 

45from .uid import UidBone 

46from .uri import UriBone 

47from .user import UserBone 

48 

49# Expose only specific names 

50__all = [ 

51 "BaseBone", 

52 "BooleanBone", 

53 "CaptchaBone", 

54 "CloneBehavior", 

55 "CloneStrategy", 

56 "ColorBone", 

57 "Compute", 

58 "ComputeInterval", 

59 "ComputeMethod", 

60 "CredentialBone", 

61 "DateBone", 

62 "EmailBone", 

63 "FileBone", 

64 "ImageBone", 

65 "JsonBone", 

66 "KeyBone", 

67 "MultipleConstraints", 

68 "NumericBone", 

69 "PasswordBone", 

70 "PhoneBone", 

71 "RandomSliceBone", 

72 "RawBone", 

73 "ReadFromClientError", 

74 "ReadFromClientErrorSeverity", 

75 "RecordBone", 

76 "RelationalBone", 

77 "RelationalConsistency", 

78 "RelationalUpdateLevel", 

79 "SelectBone", 

80 "SelectCountryBone", 

81 "SortIndexBone", 

82 "SpamBone", 

83 "SpatialBone", 

84 "StringBone", 

85 "TextBone", 

86 "TreeLeafBone", 

87 "TreeNodeBone", 

88 "UidBone", 

89 "UniqueLockMethod", 

90 "UniqueValue", 

91 "UriBone", 

92 "UserBone", 

93 "translation_key_prefix_bonename", 

94 "translation_key_prefix_skeleton_bonename", 

95] 

96 

97for __cls_name, __cls in locals().copy().items(): 

98 if __cls_name.startswith("__"): 

99 continue 

100 

101 if __cls_name.endswith("Bone"): 

102 __old_cls_name = __cls_name[0].lower() + __cls_name[1:] 

103 

104 __all += [__old_cls_name] 

105 

106 # Dynamically create a class providing a deprecation logging message for every lower-case bone name 

107 def __generate_deprecation_constructor(cls, cls_name, old_cls_name): 

108 def __init__(self, *args, **kwargs): 

109 import logging, warnings 

110 logging.warning(f"Use of class '{old_cls_name}' is deprecated, use '{cls_name}' instead.") 

111 warnings.warn(f"Use of class '{old_cls_name}' is deprecated, use '{cls_name}' instead.", stacklevel=2) 

112 cls.__init__(self, *args, **kwargs) 

113 

114 return __init__ 

115 

116 locals()[__old_cls_name] = type(__old_cls_name, (__cls,), { 

117 "__init__": __generate_deprecation_constructor(__cls, __cls_name, __old_cls_name) 

118 }) 

119 

120 # print(__old_cls_name, "installed as ", locals()[__old_cls_name], issubclass(locals()[__old_cls_name], __cls)) 

121 

122__all__ = __all