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

48 statements  

« prev     ^ index     » next       coverage.py v7.16.1, created at 2026-09-25 15:02 +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 .code import CodeBone, JinjaBone, LogicsBone, PythonBone 

17from .captcha import CaptchaBone 

18from .color import ColorBone 

19from .credential import CredentialBone 

20from .date import DateBone 

21from .email import EmailBone 

22from .file import FileBone 

23from .image import ImageBone 

24from .json import JsonBone 

25from .key import KeyBone 

26from .numeric import NumericBone 

27from .password import PasswordBone 

28from .phone import PhoneBone 

29from .randomslice import RandomSliceBone 

30from .raw import RawBone 

31from .record import RecordBone 

32from .address import AddressBone, AddressRelSkel 

33from .relational import RelationalBone, RelationalConsistency, RelationalUpdateLevel 

34from .selectcountry import SelectCountryBone 

35from .select import ( 

36 SelectBone, 

37 translation_key_prefix_skeleton_bonename, 

38 translation_key_prefix_bonename, 

39) 

40from .sortindex import SortIndexBone 

41from .spam import SpamBone 

42from .spatial import SpatialBone 

43from .string import StringBone 

44from .text import TextBone 

45from .treeleaf import TreeLeafBone 

46from .treenode import TreeNodeBone 

47from .uid import UidBone 

48from .uri import UriBone 

49from .user import UserBone 

50 

51# Expose only specific names 

52__all = [ 

53 "AddressBone", 

54 "AddressRelSkel", 

55 "BaseBone", 

56 "BooleanBone", 

57 "CaptchaBone", 

58 "CodeBone", 

59 "JinjaBone", 

60 "LogicsBone", 

61 "PythonBone", 

62 "CloneBehavior", 

63 "CloneStrategy", 

64 "ColorBone", 

65 "Compute", 

66 "ComputeInterval", 

67 "ComputeMethod", 

68 "CredentialBone", 

69 "DateBone", 

70 "EmailBone", 

71 "FileBone", 

72 "ImageBone", 

73 "JsonBone", 

74 "KeyBone", 

75 "MultipleConstraints", 

76 "NumericBone", 

77 "PasswordBone", 

78 "PhoneBone", 

79 "RandomSliceBone", 

80 "RawBone", 

81 "ReadFromClientError", 

82 "ReadFromClientErrorSeverity", 

83 "RecordBone", 

84 "RelationalBone", 

85 "RelationalConsistency", 

86 "RelationalUpdateLevel", 

87 "SelectBone", 

88 "SelectCountryBone", 

89 "SortIndexBone", 

90 "SpamBone", 

91 "SpatialBone", 

92 "StringBone", 

93 "TextBone", 

94 "TreeLeafBone", 

95 "TreeNodeBone", 

96 "UidBone", 

97 "UniqueLockMethod", 

98 "UniqueValue", 

99 "UriBone", 

100 "UserBone", 

101 "translation_key_prefix_bonename", 

102 "translation_key_prefix_skeleton_bonename", 

103] 

104 

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

106 if __cls_name.startswith("__"): 

107 continue 

108 

109 if __cls_name.endswith("Bone"): 

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

111 

112 __all += [__old_cls_name] 

113 

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

115 def __generate_deprecation_constructor(cls, cls_name, old_cls_name): 

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

117 import logging, warnings 

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

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

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

121 

122 return __init__ 

123 

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

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

126 }) 

127 

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

129 

130__all__ = __all