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
« prev ^ index » next coverage.py v7.14.1, created at 2026-06-07 21:13 +0300
1"""MariaDB storage declarations for table models."""
3from __future__ import annotations
5from collections.abc import Callable
6from types import EllipsisType
7from typing import Any
9from snekql.storage import AttrConfig, CurrentTimestamp, build_attr
12class Integer:
13 """MariaDB integer column declaration for table model fields.
15 >>> class User[S = Pending](Model[S, "User[Fetched]"]):
16 ... id: User.GenCol[int] = Integer(primary_key=True, default=MISSING)
17 """
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 )
43class Real:
44 """MariaDB real-number column declaration for float-like model values."""
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 )
68class Text:
69 """MariaDB text column declaration for string model values."""
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 )
93class Blob:
94 """MariaDB blob column declaration for bytes model values."""
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 )
118class Json:
119 """MariaDB JSON column declaration for JSON-compatible model values."""
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 )
141class Boolean:
142 """MariaDB boolean column declaration for bool model values."""
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 )
164class DateTime:
165 """MariaDB datetime column declaration for timezone-aware datetimes."""
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 )
189__all__ = [
190 "Blob",
191 "Boolean",
192 "CurrentTimestamp",
193 "DateTime",
194 "Integer",
195 "Json",
196 "Real",
197 "Text",
198]