reydb 1.2.5__py3-none-any.whl → 1.2.7__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- reydb/rconfig.py +6 -6
- reydb/rerror.py +6 -6
- reydb/rorm.py +76 -48
- {reydb-1.2.5.dist-info → reydb-1.2.7.dist-info}/METADATA +1 -1
- {reydb-1.2.5.dist-info → reydb-1.2.7.dist-info}/RECORD +7 -7
- {reydb-1.2.5.dist-info → reydb-1.2.7.dist-info}/WHEEL +0 -0
- {reydb-1.2.5.dist-info → reydb-1.2.7.dist-info}/licenses/LICENSE +0 -0
reydb/rconfig.py
CHANGED
@@ -44,12 +44,12 @@ class DatabaseTableConfig(rorm.Model, table=True):
|
|
44
44
|
"""
|
45
45
|
|
46
46
|
__comment__ = 'Config data table.'
|
47
|
-
create_time: rorm.Datetime = rorm.Field(field_default='
|
48
|
-
update_time: rorm.Datetime = rorm.Field(field_default='
|
49
|
-
key: str = rorm.Field(
|
50
|
-
value: str = rorm.Field(
|
51
|
-
type: str = rorm.Field(
|
52
|
-
note: str = rorm.Field(
|
47
|
+
create_time: rorm.Datetime = rorm.Field(field_default=':create_time', not_null=True, index_n=True, comment='Config create time.')
|
48
|
+
update_time: rorm.Datetime = rorm.Field(field_default=':update_time', index_n=True, comment='Config update time.')
|
49
|
+
key: str = rorm.Field(rorm.types.VARCHAR(50), key=True, comment='Config key.')
|
50
|
+
value: str = rorm.Field(rorm.types.TEXT, not_null=True, comment='Config value.')
|
51
|
+
type: str = rorm.Field(rorm.types.VARCHAR(50), not_null=True, comment='Config value type.')
|
52
|
+
note: str = rorm.Field(rorm.types.VARCHAR(500), comment='Config note.')
|
53
53
|
|
54
54
|
|
55
55
|
class DatabaseConfigSuper(DatabaseBase, Generic[DatabaseT]):
|
reydb/rerror.py
CHANGED
@@ -38,12 +38,12 @@ class DatabaseTableError(rorm.Model, table=True):
|
|
38
38
|
"""
|
39
39
|
|
40
40
|
__comment__ = 'Error log table.'
|
41
|
-
create_time: rorm.Datetime = rorm.Field(field_default='
|
42
|
-
id: int = rorm.Field(
|
43
|
-
type: str = rorm.Field(
|
44
|
-
data: str = rorm.Field(
|
45
|
-
stack: str = rorm.Field(
|
46
|
-
note: str = rorm.Field(
|
41
|
+
create_time: rorm.Datetime = rorm.Field(field_default=':create_time', not_null=True, index_n=True, comment='Record create time.')
|
42
|
+
id: int = rorm.Field(rorm.types_mysql.INTEGER(unsigned=True), key_auto=True, comment='ID.')
|
43
|
+
type: str = rorm.Field(rorm.types.VARCHAR(50), not_null=True, index_n=True, comment='Error type.')
|
44
|
+
data: str = rorm.Field(rorm.types.JSON, comment='Error data.')
|
45
|
+
stack: str = rorm.Field(rorm.types.JSON, comment='Error code traceback stack.')
|
46
|
+
note: str = rorm.Field(rorm.types.VARCHAR(500), comment='Error note.')
|
47
47
|
|
48
48
|
|
49
49
|
class DatabaseErrorSuper(DatabaseBase, Generic[DatabaseT]):
|
reydb/rorm.py
CHANGED
@@ -21,12 +21,13 @@ from sqlalchemy import types
|
|
21
21
|
from sqlalchemy.dialects.mysql import types as types_mysql
|
22
22
|
from sqlalchemy.sql.sqltypes import TypeEngine
|
23
23
|
from sqlalchemy.sql.dml import Insert, Update, Delete
|
24
|
+
from sqlalchemy.sql import func as sqlalchemy_func
|
24
25
|
from sqlmodel import SQLModel, Session, Table
|
25
26
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
26
27
|
from sqlmodel.main import SQLModelMetaclass, FieldInfo, default_registry
|
27
28
|
from sqlmodel.sql._expression_select_cls import SelectOfScalar as Select
|
28
29
|
from datetime import datetime, date, time, timedelta
|
29
|
-
from reykit.rbase import CallableT,
|
30
|
+
from reykit.rbase import CallableT, throw, is_instance
|
30
31
|
|
31
32
|
from . import rdb
|
32
33
|
from .rbase import (
|
@@ -122,14 +123,18 @@ class DatabaseORMModelMeta(DatabaseORMBase, SQLModelMetaclass):
|
|
122
123
|
table_args['comment'] = attrs.pop('__comment__')
|
123
124
|
|
124
125
|
## Field.
|
125
|
-
for
|
126
|
-
|
127
|
-
if
|
128
|
-
field = attrs[
|
126
|
+
for attr_name in attrs['__annotations__']:
|
127
|
+
attr_name: str
|
128
|
+
if attr_name in attrs:
|
129
|
+
field = attrs[attr_name]
|
130
|
+
if type(field) != DatabaseORMModelField:
|
131
|
+
field = attrs[attr_name] = DatabaseORMModelField(field)
|
132
|
+
else:
|
133
|
+
field = attrs[attr_name] = DatabaseORMModelField()
|
129
134
|
sa_column_kwargs: dict = field.sa_column_kwargs
|
130
|
-
sa_column_kwargs.setdefault('name',
|
135
|
+
sa_column_kwargs.setdefault('name', attr_name)
|
131
136
|
|
132
|
-
##
|
137
|
+
## Replace.
|
133
138
|
table = default_registry.metadata.tables.get(table_name)
|
134
139
|
if table is not None:
|
135
140
|
default_registry.metadata.remove(table)
|
@@ -155,7 +160,10 @@ class DatabaseORMModelMeta(DatabaseORMBase, SQLModelMetaclass):
|
|
155
160
|
super().__init__(name, bases, attrs, **kwargs)
|
156
161
|
|
157
162
|
# Set parameter.
|
158
|
-
if
|
163
|
+
if (
|
164
|
+
'__annotations__' in attrs
|
165
|
+
and hasattr(cls, '__table__')
|
166
|
+
):
|
159
167
|
table: Table = cls.__table__
|
160
168
|
for index in table.indexes:
|
161
169
|
index_name_prefix = ['u_', 'n_'][index.unique]
|
@@ -180,12 +188,12 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
180
188
|
@overload
|
181
189
|
def __init__(
|
182
190
|
self,
|
183
|
-
arg_default: Any | Callable[[], Any] | Null = Null,
|
184
|
-
*,
|
185
|
-
arg_name: str | None = None,
|
186
|
-
field_default: str | Literal['CURRENT_TIMESTAMP'] | Literal['ON UPDATE CURRENT_TIMESTAMP'] | None = None,
|
187
|
-
filed_name: str | None = None,
|
188
191
|
field_type: TypeEngine | None = None,
|
192
|
+
*,
|
193
|
+
field_default: str | Literal[':time'] | Literal[':create_time'] | Literal[':update_time'] = None,
|
194
|
+
arg_default: Any | Callable[[], Any] | None = None,
|
195
|
+
arg_update: Any | Callable[[], Any] = None,
|
196
|
+
name: str | None = None,
|
189
197
|
key: bool = False,
|
190
198
|
key_auto: bool = False,
|
191
199
|
not_null: bool = False,
|
@@ -208,7 +216,7 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
208
216
|
|
209
217
|
def __init__(
|
210
218
|
self,
|
211
|
-
|
219
|
+
field_type: TypeEngine | None = None,
|
212
220
|
**kwargs: Any
|
213
221
|
) -> None:
|
214
222
|
"""
|
@@ -216,19 +224,22 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
216
224
|
|
217
225
|
Parameters
|
218
226
|
----------
|
219
|
-
arg_default : Call argument default value.
|
220
|
-
arg_name : Call argument name.
|
221
|
-
- `None`: Same as attribute name.
|
222
|
-
field_default : Database field defualt value.
|
223
|
-
- `Literal['current_timestamp']`: Set SQL syntax 'current_timestamp', case insensitive.
|
224
|
-
- `Literal['on update current_timestamp']`: Set SQL syntax 'on update current_timestamp', case insensitive.
|
225
|
-
field_name : Database field name.
|
226
|
-
- `None`: Same as attribute name.
|
227
227
|
field_type : Database field type.
|
228
228
|
- `None`: Based type annotation automatic judgment.
|
229
|
+
field_default : Database field defualt value.
|
230
|
+
- `Literal[':time']`: Set SQL syntax 'DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'.
|
231
|
+
- `Literal[':create_time']`: Set SQL syntax 'DEFAULT CURRENT_TIMESTAMP'.
|
232
|
+
- `Literal[':update_time']`: Set SQL syntax 'ON UPDATE CURRENT_TIMESTAMP'.
|
233
|
+
arg_default : Call argument default value.
|
234
|
+
- `Callable[[], Any]`: Call function and use return value.
|
235
|
+
arg_update : In `Session` management, When commit update record, then default value is this value.
|
236
|
+
- `Callable[[], Any]`: Call function and use return value.
|
237
|
+
name : Call argument name and database field name.
|
238
|
+
- `None`: Same as attribute name.
|
229
239
|
key : Whether the field is primary key.
|
230
|
-
key_auto : Whether the field is automatic increment
|
240
|
+
key_auto : Whether the field is primary key and automatic increment.
|
231
241
|
not_null : Whether the field is not null constraint.
|
242
|
+
- `Litreal[False]`: When argument `arg_default` is `Null`, then set argument `arg_default` is `None`.
|
232
243
|
index_n : Whether the field add normal index.
|
233
244
|
index_u : Whether the field add unique index.
|
234
245
|
comment : Field commment.
|
@@ -257,7 +268,6 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
257
268
|
|
258
269
|
## Convert argument name.
|
259
270
|
mapping_keys = {
|
260
|
-
'arg_name': 'alias',
|
261
271
|
'key': 'primary_key',
|
262
272
|
'index_n': 'index',
|
263
273
|
'index_u': 'unique',
|
@@ -272,7 +282,6 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
272
282
|
'num_places': 'max_digits',
|
273
283
|
'num_places_dec': 'decimal_places'
|
274
284
|
}
|
275
|
-
|
276
285
|
for key_old, key_new in mapping_keys.items():
|
277
286
|
if type(key_new) != tuple:
|
278
287
|
key_new = (key_new,)
|
@@ -281,30 +290,13 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
281
290
|
for key in key_new:
|
282
291
|
kwargs[key] = value
|
283
292
|
|
284
|
-
## Argument default.
|
285
|
-
if (
|
286
|
-
arg_default != Null
|
287
|
-
and callable(arg_default)
|
288
|
-
):
|
289
|
-
kwargs['default_factory'] = arg_default
|
290
|
-
else:
|
291
|
-
kwargs['default'] = arg_default
|
292
|
-
|
293
|
-
## Field default.
|
294
|
-
if 'field_default' in kwargs:
|
295
|
-
field_default: str = kwargs.pop('field_default')
|
296
|
-
field_default_upper = field_default.upper()
|
297
|
-
if field_default_upper in ('CURRENT_TIMESTAMP', 'ON UPDATE CURRENT_TIMESTAMP'):
|
298
|
-
field_default = sqlalchemy_text(field_default_upper)
|
299
|
-
kwargs['sa_column_kwargs']['server_default'] = field_default
|
300
|
-
|
301
|
-
## Field name.
|
302
|
-
if 'field_name' in kwargs:
|
303
|
-
kwargs['sa_column_kwargs']['name'] = kwargs.pop('field_name')
|
304
|
-
|
305
293
|
## Field type.
|
306
|
-
if
|
307
|
-
kwargs['sa_type'] =
|
294
|
+
if field_type is not None:
|
295
|
+
kwargs['sa_type'] = field_type
|
296
|
+
|
297
|
+
## Name.
|
298
|
+
if 'name' in kwargs:
|
299
|
+
kwargs['alias'] = kwargs['sa_column_kwargs']['name'] = kwargs.pop('field_name')
|
308
300
|
|
309
301
|
## Key auto.
|
310
302
|
if kwargs.get('key_auto'):
|
@@ -313,12 +305,45 @@ class DatabaseORMModelField(DatabaseORMBase, FieldInfo):
|
|
313
305
|
else:
|
314
306
|
kwargs['sa_column_kwargs']['autoincrement'] = False
|
315
307
|
|
308
|
+
## Key.
|
309
|
+
if kwargs.get('primary_key'):
|
310
|
+
kwargs['nullable'] = False
|
311
|
+
|
316
312
|
## Non null.
|
317
313
|
if 'not_null' in kwargs:
|
318
314
|
kwargs['nullable'] = not kwargs.pop('not_null')
|
319
315
|
else:
|
320
316
|
kwargs['nullable'] = True
|
321
317
|
|
318
|
+
## Field default.
|
319
|
+
if 'field_default' in kwargs:
|
320
|
+
field_default: str = kwargs.pop('field_default')
|
321
|
+
if field_default == ':time':
|
322
|
+
field_default = sqlalchemy_text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')
|
323
|
+
if field_default == ':create_time':
|
324
|
+
field_default = sqlalchemy_text('CURRENT_TIMESTAMP')
|
325
|
+
elif field_default == ':update_time':
|
326
|
+
if kwargs['nullable']:
|
327
|
+
field_default = sqlalchemy_text('NULL ON UPDATE CURRENT_TIMESTAMP')
|
328
|
+
else:
|
329
|
+
field_default = sqlalchemy_text('NOT NULL ON UPDATE CURRENT_TIMESTAMP')
|
330
|
+
kwargs['sa_column_kwargs']['server_default'] = field_default
|
331
|
+
|
332
|
+
## Argument default.
|
333
|
+
arg_default = kwargs.pop('arg_default', None)
|
334
|
+
if arg_default is not None:
|
335
|
+
if callable(arg_default):
|
336
|
+
kwargs['default_factory'] = arg_default
|
337
|
+
else:
|
338
|
+
kwargs['default'] = arg_default
|
339
|
+
elif kwargs['nullable']:
|
340
|
+
kwargs['default'] = None
|
341
|
+
|
342
|
+
## Argument update.
|
343
|
+
if 'arg_update' in kwargs:
|
344
|
+
arg_update = kwargs.pop('arg_update')
|
345
|
+
kwargs['sa_column_kwargs']['onupdate'] = arg_update
|
346
|
+
|
322
347
|
## Comment.
|
323
348
|
if 'comment' in kwargs:
|
324
349
|
kwargs['sa_column_kwargs']['comment'] = kwargs.pop('comment')
|
@@ -1646,6 +1671,9 @@ types = types
|
|
1646
1671
|
## Database ORM model MySQL filed types.
|
1647
1672
|
types_mysql = types_mysql
|
1648
1673
|
|
1674
|
+
## Database ORM model functions.
|
1675
|
+
funcs = sqlalchemy_func
|
1676
|
+
|
1649
1677
|
## Create decorator of validate database ORM model.
|
1650
1678
|
wrap_validate_model = pydantic_model_validator
|
1651
1679
|
|
@@ -2,14 +2,14 @@ reydb/__init__.py,sha256=4mnlkfJfkBfxBpCotVUJ86f4AnT8plqlFbGiH3vZ4PM,550
|
|
2
2
|
reydb/rall.py,sha256=IxSPGh77xz7ndDC7J8kZ_66Gq_xTAztGtnELUku1Ouw,364
|
3
3
|
reydb/rbase.py,sha256=vx37yV6LlWP89nWAfYyOf0Xm3N_e9eB8z5Mxe-aTEo4,8248
|
4
4
|
reydb/rbuild.py,sha256=imakdlqQXzQlbAukti3_REVU_h7IRRE3fwUk91LaIIM,80430
|
5
|
-
reydb/rconfig.py,sha256=
|
5
|
+
reydb/rconfig.py,sha256=B_lwfmMg4V4C_SmuLZi8dqGhb3El3ahxouj1snhS_Ek,19143
|
6
6
|
reydb/rconn.py,sha256=guRaR8N6RuzZzujwaeq7HhKWTizF9SrUBqEAFjfjpoo,6909
|
7
7
|
reydb/rdb.py,sha256=syyqZbEu92NbCj9O6_T6iAv7E46CyfQOC4T8qtPfHNs,14364
|
8
|
-
reydb/rerror.py,sha256=
|
8
|
+
reydb/rerror.py,sha256=Hqb2CA6sG7yEPDt3UHzqrgdt63BqoWbCzji3mKBIlp0,14864
|
9
9
|
reydb/rexec.py,sha256=djHx311c6mr1IjzNLqnGe-4yr3qNmYGUy4pHQA3WElQ,53042
|
10
10
|
reydb/rinfo.py,sha256=LjrqTA7JJbWJsjXwV-zKpbE1htv-whg6239hoQj4yIU,18151
|
11
|
-
reydb/rorm.py,sha256=
|
12
|
-
reydb-1.2.
|
13
|
-
reydb-1.2.
|
14
|
-
reydb-1.2.
|
15
|
-
reydb-1.2.
|
11
|
+
reydb/rorm.py,sha256=hwQlD1Dn4cxn1Kp5H-M85XfNMl4blohDOGrnDjLMr6A,43734
|
12
|
+
reydb-1.2.7.dist-info/METADATA,sha256=T6s0-oO-8_d59qE4tw-LKEYQsLmWMCaHlMDUEFrYhsg,1621
|
13
|
+
reydb-1.2.7.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
14
|
+
reydb-1.2.7.dist-info/licenses/LICENSE,sha256=UYLPqp7BvPiH8yEZduJqmmyEl6hlM3lKrFIefiD4rvk,1059
|
15
|
+
reydb-1.2.7.dist-info/RECORD,,
|
File without changes
|
File without changes
|