Coverage for snekql/mariadb/storage.py: 100%

27 statements  

« prev     ^ index     » next       coverage.py v7.14.1, created at 2026-06-07 21:13 +0300

1"""MariaDB storage declarations for table models.""" 

2 

3from __future__ import annotations 

4 

5from collections.abc import Callable 

6from types import EllipsisType 

7from typing import Any 

8 

9from snekql.storage import AttrConfig, CurrentTimestamp, build_attr 

10 

11 

12class Integer: 

13 """MariaDB integer column declaration for table model fields. 

14 

15 >>> class User[S = Pending](Model[S, "User[Fetched]"]): 

16 ... id: User.GenCol[int] = Integer(primary_key=True, default=MISSING) 

17 """ 

18 

19 def __new__( # noqa: PLR0913 

20 cls, 

21 *, 

22 primary_key: bool = False, 

23 auto_increment: bool = False, 

24 nullable: bool | None = None, 

25 unique: bool = False, 

26 default: object = ..., 

27 default_factory: Callable[[], object] | EllipsisType = ..., 

28 ) -> Any: 

29 return build_attr( 

30 AttrConfig( 

31 auto_increment=auto_increment, 

32 default=default, 

33 default_factory=default_factory, 

34 nullable=nullable, 

35 primary_key=primary_key, 

36 unique=unique, 

37 sqlite_storage_class="INTEGER", 

38 storage_type_name="Integer", 

39 ), 

40 ) 

41 

42 

43class Real: 

44 """MariaDB real-number column declaration for float-like model values.""" 

45 

46 def __new__( 

47 cls, 

48 *, 

49 primary_key: bool = False, 

50 nullable: bool | None = None, 

51 unique: bool = False, 

52 default: object = ..., 

53 default_factory: Callable[[], object] | EllipsisType = ..., 

54 ) -> Any: 

55 return build_attr( 

56 AttrConfig( 

57 default=default, 

58 default_factory=default_factory, 

59 nullable=nullable, 

60 primary_key=primary_key, 

61 unique=unique, 

62 sqlite_storage_class="REAL", 

63 storage_type_name="Real", 

64 ), 

65 ) 

66 

67 

68class Text: 

69 """MariaDB text column declaration for string model values.""" 

70 

71 def __new__( 

72 cls, 

73 *, 

74 primary_key: bool = False, 

75 nullable: bool | None = None, 

76 unique: bool = False, 

77 default: object = ..., 

78 default_factory: Callable[[], object] | EllipsisType = ..., 

79 ) -> Any: 

80 return build_attr( 

81 AttrConfig( 

82 default=default, 

83 default_factory=default_factory, 

84 nullable=nullable, 

85 primary_key=primary_key, 

86 unique=unique, 

87 sqlite_storage_class="TEXT", 

88 storage_type_name="Text", 

89 ), 

90 ) 

91 

92 

93class Blob: 

94 """MariaDB blob column declaration for bytes model values.""" 

95 

96 def __new__( 

97 cls, 

98 *, 

99 primary_key: bool = False, 

100 nullable: bool | None = None, 

101 unique: bool = False, 

102 default: object = ..., 

103 default_factory: Callable[[], object] | EllipsisType = ..., 

104 ) -> Any: 

105 return build_attr( 

106 AttrConfig( 

107 default=default, 

108 default_factory=default_factory, 

109 nullable=nullable, 

110 primary_key=primary_key, 

111 unique=unique, 

112 sqlite_storage_class="BLOB", 

113 storage_type_name="Blob", 

114 ), 

115 ) 

116 

117 

118class Json: 

119 """MariaDB JSON column declaration for JSON-compatible model values.""" 

120 

121 def __new__( 

122 cls, 

123 *, 

124 nullable: bool | None = None, 

125 unique: bool = False, 

126 default: object = ..., 

127 default_factory: Callable[[], object] | EllipsisType = ..., 

128 ) -> Any: 

129 return build_attr( 

130 AttrConfig( 

131 default=default, 

132 default_factory=default_factory, 

133 nullable=nullable, 

134 unique=unique, 

135 sqlite_storage_class="TEXT", 

136 storage_type_name="Json", 

137 ), 

138 ) 

139 

140 

141class Boolean: 

142 """MariaDB boolean column declaration for bool model values.""" 

143 

144 def __new__( 

145 cls, 

146 *, 

147 nullable: bool | None = None, 

148 unique: bool = False, 

149 default: object = ..., 

150 default_factory: Callable[[], object] | EllipsisType = ..., 

151 ) -> Any: 

152 return build_attr( 

153 AttrConfig( 

154 default=default, 

155 default_factory=default_factory, 

156 nullable=nullable, 

157 unique=unique, 

158 sqlite_storage_class="INTEGER", 

159 storage_type_name="Boolean", 

160 ), 

161 ) 

162 

163 

164class DateTime: 

165 """MariaDB datetime column declaration for timezone-aware datetimes.""" 

166 

167 def __new__( 

168 cls, 

169 *, 

170 server_default: object | None = None, 

171 nullable: bool | None = None, 

172 unique: bool = False, 

173 default: object = ..., 

174 default_factory: Callable[[], object] | EllipsisType = ..., 

175 ) -> Any: 

176 return build_attr( 

177 AttrConfig( 

178 default=default, 

179 default_factory=default_factory, 

180 nullable=nullable, 

181 server_default=server_default, 

182 unique=unique, 

183 sqlite_storage_class="TEXT", 

184 storage_type_name="DateTime", 

185 ), 

186 ) 

187 

188 

189__all__ = [ 

190 "Blob", 

191 "Boolean", 

192 "CurrentTimestamp", 

193 "DateTime", 

194 "Integer", 

195 "Json", 

196 "Real", 

197 "Text", 

198]