sera-2 1.11.1__py3-none-any.whl → 1.11.3__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.
sera/libs/base_service.py CHANGED
@@ -103,7 +103,7 @@ class BaseService(Generic[ID, R]):
103
103
 
104
104
  cq = select(func.count()).select_from(q.subquery())
105
105
  rq = q.limit(limit).offset(offset)
106
- records = self._process_result(session.execute(q)).scalars().all()
106
+ records = self._process_result(session.execute(rq)).scalars().all()
107
107
  total = session.execute(cq).scalar_one()
108
108
  return QueryResult(records, total)
109
109
 
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ from operator import is_
3
4
  from typing import Callable, Sequence
4
5
 
5
6
  from codegen.models import AST, DeferredVar, PredefinedFn, Program, expr, stmt
@@ -234,8 +235,11 @@ def make_python_data_model(
234
235
 
235
236
  if isinstance(prop, DataProperty):
236
237
  pytype = prop.get_data_model_datatype().get_python_type()
237
- if pytype.dep is not None:
238
- program.import_(pytype.dep, True)
238
+ if prop.is_optional:
239
+ pytype = pytype.as_optional_type()
240
+
241
+ for dep in pytype.deps:
242
+ program.import_(dep, True)
239
243
 
240
244
  pytype_type = pytype.type
241
245
  if len(prop.data.constraints) > 0:
@@ -288,14 +292,19 @@ def make_python_data_model(
288
292
  else:
289
293
  pytype = PyTypeWithDep(
290
294
  f"Upsert{prop.target.name}",
291
- f"{target_pkg.module(prop.target.get_pymodule_name()).path}.Upsert{prop.target.name}",
295
+ [
296
+ f"{target_pkg.module(prop.target.get_pymodule_name()).path}.Upsert{prop.target.name}"
297
+ ],
292
298
  )
293
299
 
294
- if pytype.dep is not None:
295
- program.import_(pytype.dep, True)
296
-
297
300
  if prop.cardinality.is_star_to_many():
298
301
  pytype = pytype.as_list_type()
302
+ elif prop.is_optional:
303
+ pytype = pytype.as_optional_type()
304
+
305
+ for dep in pytype.deps:
306
+ program.import_(dep, True)
307
+
299
308
  cls_ast(stmt.DefClassVarStatement(prop.name, pytype.type))
300
309
 
301
310
  # has_to_db = True
@@ -426,8 +435,12 @@ def make_python_data_model(
426
435
 
427
436
  if isinstance(prop, DataProperty):
428
437
  pytype = prop.get_data_model_datatype().get_python_type()
429
- if pytype.dep is not None:
430
- program.import_(pytype.dep, True)
438
+ if prop.is_optional:
439
+ pytype = pytype.as_optional_type()
440
+
441
+ for dep in pytype.deps:
442
+ program.import_(dep, True)
443
+
431
444
  cls_ast(stmt.DefClassVarStatement(prop.name, pytype.type))
432
445
  elif isinstance(prop, ObjectProperty):
433
446
  if prop.target.db is not None:
@@ -439,14 +452,19 @@ def make_python_data_model(
439
452
  else:
440
453
  pytype = PyTypeWithDep(
441
454
  prop.target.name,
442
- f"{target_pkg.module(prop.target.get_pymodule_name()).path}.{prop.target.name}",
455
+ [
456
+ f"{target_pkg.module(prop.target.get_pymodule_name()).path}.{prop.target.name}"
457
+ ],
443
458
  )
444
459
 
445
- if pytype.dep is not None:
446
- program.import_(pytype.dep, True)
447
-
448
460
  if prop.cardinality.is_star_to_many():
449
461
  pytype = pytype.as_list_type()
462
+ elif prop.is_optional:
463
+ pytype = pytype.as_optional_type()
464
+
465
+ for dep in pytype.deps:
466
+ program.import_(dep, True)
467
+
450
468
  cls_ast(stmt.DefClassVarStatement(prop.name, pytype.type))
451
469
 
452
470
  cls_ast(
@@ -679,7 +697,12 @@ def make_python_relational_model(
679
697
  program.import_(dep, True)
680
698
 
681
699
  propname = prop.name
682
- proptype = f"Mapped[{sqltype.mapped_pytype}]"
700
+
701
+ if prop.is_optional:
702
+ program.import_("typing.Optional", True)
703
+ proptype = f"Mapped[Optional[{sqltype.mapped_pytype}]]"
704
+ else:
705
+ proptype = f"Mapped[{sqltype.mapped_pytype}]"
683
706
 
684
707
  propvalargs: list[expr.Expr] = [expr.ExprIdent(sqltype.type)]
685
708
  if prop.db.is_primary_key:
@@ -816,7 +839,7 @@ def make_python_relational_object_property(
816
839
  expr.ExprFuncCall(
817
840
  expr.ExprIdent("mapped_column"),
818
841
  [
819
- expr.ExprIdent(f"{prop.name}_{p.name}"),
842
+ expr.ExprConstant(f"{prop.name}_{p.name}"),
820
843
  expr.ExprIdent(
821
844
  assert_isinstance(p, DataProperty)
822
845
  .datatype.get_sqlalchemy_type()
@@ -824,7 +847,7 @@ def make_python_relational_object_property(
824
847
  ),
825
848
  PredefinedFn.keyword_assignment(
826
849
  "nullable",
827
- expr.ExprConstant(prop.is_optional),
850
+ expr.ExprConstant(prop.is_optional or p.is_optional),
828
851
  ),
829
852
  ],
830
853
  )
@@ -68,12 +68,16 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
68
68
 
69
69
  if isinstance(prop, DataProperty):
70
70
  tstype = prop.get_data_model_datatype().get_typescript_type()
71
- if tstype.dep is not None:
72
- program.import_(tstype.dep, True)
71
+ for dep in tstype.deps:
72
+ program.import_(dep, True)
73
73
 
74
74
  if idprop is not None and prop.name == idprop.name:
75
75
  # use id type alias
76
76
  tstype = TsTypeWithDep(f"{cls.name}Id")
77
+
78
+ if prop.is_optional:
79
+ # convert type to optional
80
+ tstype = tstype.as_optional_type()
77
81
 
78
82
  deser_args.append(
79
83
  (
@@ -89,10 +93,15 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
89
93
  # this class is stored in the database, we store the id instead
90
94
  tstype = TsTypeWithDep(
91
95
  f"{prop.target.name}Id",
92
- f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}Id",
96
+ [
97
+ f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}Id"
98
+ ],
93
99
  )
94
100
  if prop.cardinality.is_star_to_many():
95
101
  tstype = tstype.as_list_type()
102
+ elif prop.is_optional:
103
+ # convert type to optional only if it isn't a list
104
+ tstype = tstype.as_optional_type()
96
105
  deser_args.append(
97
106
  (
98
107
  expr.ExprIdent(propname),
@@ -105,7 +114,9 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
105
114
  # we are going to store the whole object
106
115
  tstype = TsTypeWithDep(
107
116
  prop.target.name,
108
- f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}",
117
+ [
118
+ f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}"
119
+ ],
109
120
  )
110
121
  if prop.cardinality.is_star_to_many():
111
122
  tstype = tstype.as_list_type()
@@ -130,6 +141,9 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
130
141
  )
131
142
  )
132
143
  else:
144
+ if prop.is_optional:
145
+ # convert type to optional only if it isn't a list
146
+ tstype = tstype.as_optional_type()
133
147
  deser_args.append(
134
148
  (
135
149
  expr.ExprIdent(propname),
@@ -148,9 +162,9 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
148
162
  )
149
163
  )
150
164
 
151
- if tstype.dep is not None:
165
+ for dep in tstype.deps:
152
166
  program.import_(
153
- tstype.dep,
167
+ dep,
154
168
  True,
155
169
  )
156
170
 
@@ -319,14 +333,18 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
319
333
  # use id type alias
320
334
  tstype = TsTypeWithDep(
321
335
  f"{cls.name}Id",
322
- dep=f"@.models.{pkg.dir.name}.{cls.name}.{cls.name}Id",
336
+ deps=[f"@.models.{pkg.dir.name}.{cls.name}.{cls.name}Id"],
323
337
  )
324
338
  else:
325
339
  # for none id properties, we need to include a type for "invalid" value
326
340
  tstype = _inject_type_for_invalid_value(tstype)
327
341
 
328
- if tstype.dep is not None:
329
- program.import_(tstype.dep, True)
342
+ if prop.is_optional:
343
+ # convert type to optional
344
+ tstype = tstype.as_optional_type()
345
+
346
+ for dep in tstype.deps:
347
+ program.import_(dep, True)
330
348
 
331
349
  # however, if this is a primary key and auto-increment, we set a different default value
332
350
  # to be -1 to avoid start from 0
@@ -426,12 +444,18 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
426
444
  # this class is stored in the database, we store the id instead
427
445
  tstype = TsTypeWithDep(
428
446
  f"{prop.target.name}Id",
429
- f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}Id",
447
+ [
448
+ f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}Id"
449
+ ],
430
450
  )
431
451
  if prop.cardinality.is_star_to_many():
432
452
  tstype = tstype.as_list_type()
433
453
  create_propvalue = expr.ExprConstant([])
434
454
  else:
455
+ if prop.is_optional:
456
+ # convert type to optional - for list type, we don't need to do this
457
+ # as we will use empty list as no value
458
+ tstype = tstype.as_optional_type()
435
459
  # if target class has an auto-increment primary key, we set a different default value
436
460
  # to be -1 to avoid start from 0
437
461
  target_idprop = prop.target.get_id_property()
@@ -461,7 +485,9 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
461
485
  # we are going to store the whole object
462
486
  tstype = TsTypeWithDep(
463
487
  f"Draft{prop.target.name}",
464
- f"@.models.{prop.target.get_tsmodule_name()}.Draft{prop.target.name}.Draft{prop.target.name}",
488
+ [
489
+ f"@.models.{prop.target.get_tsmodule_name()}.Draft{prop.target.name}.Draft{prop.target.name}"
490
+ ],
465
491
  )
466
492
  if prop.cardinality.is_star_to_many():
467
493
  tstype = tstype.as_list_type()
@@ -488,6 +514,10 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
488
514
  )
489
515
  )
490
516
  else:
517
+ if prop.is_optional:
518
+ # convert type to optional - for list type, we don't need to do this
519
+ # as we will use empty list as no value
520
+ tstype = tstype.as_optional_type()
491
521
  create_propvalue = expr.ExprMethodCall(
492
522
  expr.ExprIdent(tstype.type),
493
523
  "create",
@@ -515,9 +545,9 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
515
545
  )
516
546
  )
517
547
 
518
- if tstype.dep is not None:
548
+ for dep in tstype.deps:
519
549
  program.import_(
520
- tstype.dep,
550
+ dep,
521
551
  True,
522
552
  )
523
553
 
@@ -698,12 +728,16 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
698
728
  comment="Check if the draft is valid (only check the required fields as the non-required fields if it's invalid will be set to undefined)",
699
729
  )(
700
730
  stmt.ReturnStatement(
701
- stmt.TypescriptStatement(
731
+ expr.ExprRawTypescript(
702
732
  " && ".join(
703
733
  f"{draft_validators}.{prop2tsname[prop.name]}(this.{prop2tsname[prop.name]}).isValid"
704
734
  for prop in cls.properties.values()
705
735
  if not prop.is_optional
706
736
  )
737
+ if any(
738
+ not prop.is_optional for prop in cls.properties.values()
739
+ )
740
+ else "true"
707
741
  )
708
742
  )
709
743
  ),
@@ -859,8 +893,8 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
859
893
  # if prop.name == idprop.name:
860
894
  # # use id type alias
861
895
  # tstype = TsTypeWithDep(f"{cls.name}Id")
862
- if tstype.dep is not None:
863
- program.import_(tstype.dep, True)
896
+ for dep in tstype.deps:
897
+ program.import_(dep, True)
864
898
  tsprop = [
865
899
  (expr.ExprIdent("datatype"), expr.ExprConstant(tstype.type)),
866
900
  (
@@ -885,7 +919,9 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
885
919
  # we are going to store the whole object
886
920
  tstype = TsTypeWithDep(
887
921
  prop.target.name,
888
- f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}",
922
+ [
923
+ f"@.models.{prop.target.get_tsmodule_name()}.{prop.target.name}.{prop.target.name}"
924
+ ],
889
925
  )
890
926
 
891
927
  # we don't store the type itself, but just the name of the type
@@ -901,7 +937,12 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
901
937
  expr.ExprIdent("targetClass"),
902
938
  expr.ExprConstant(prop.target.name),
903
939
  ),
904
- (expr.ExprIdent("datatype"), expr.ExprConstant(tstype.type)),
940
+ (
941
+ expr.ExprIdent("datatype"),
942
+ expr.ExprConstant(
943
+ tstype.type if prop.target.db is not None else "embedded"
944
+ ),
945
+ ),
905
946
  (
906
947
  expr.ExprIdent("cardinality"),
907
948
  expr.ExprConstant(prop.cardinality.value),
@@ -957,24 +998,36 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
957
998
  )
958
999
  )
959
1000
 
960
- for type in ["Schema", "ObjectProperty", "DataProperty"]:
1001
+ for type in ["ObjectProperty", "DataProperty"]:
961
1002
  program.import_(f"sera-db.{type}", True)
1003
+ if cls.db is not None:
1004
+ program.import_(f"sera-db.Schema", True)
1005
+ else:
1006
+ program.import_(f"sera-db.EmbeddedSchema", True)
962
1007
 
963
1008
  program.import_(f"@.models.{pkg.dir.name}.{cls.name}.{cls.name}", True)
964
- program.import_(f"@.models.{pkg.dir.name}.{cls.name}.{cls.name}Id", True)
965
1009
  program.import_(
966
1010
  f"@.models.{pkg.dir.name}.Draft{cls.name}.Draft{cls.name}", True
967
1011
  )
968
1012
  program.import_(
969
1013
  f"@.models.{pkg.dir.name}.Draft{cls.name}.draft{cls.name}Validators", True
970
1014
  )
1015
+ if cls.db is not None:
1016
+ program.import_(f"@.models.{pkg.dir.name}.{cls.name}.{cls.name}Id", True)
1017
+
971
1018
  program.root(
972
1019
  stmt.LineBreak(),
973
1020
  stmt.TypescriptStatement(
974
1021
  f"export type {cls.name}SchemaType = "
975
1022
  + PredefinedFn.dict(
976
- [
977
- (expr.ExprIdent("id"), expr.ExprIdent(f"{cls.name}Id")),
1023
+ (
1024
+ [
1025
+ (expr.ExprIdent("id"), expr.ExprIdent(f"{cls.name}Id")),
1026
+ ]
1027
+ if cls.db is not None
1028
+ else []
1029
+ )
1030
+ + [
978
1031
  (
979
1032
  expr.ExprIdent("publicProperties"),
980
1033
  expr.ExprIdent(
@@ -1038,7 +1091,11 @@ def make_typescript_data_model(schema: Schema, target_pkg: Package):
1038
1091
  ),
1039
1092
  stmt.LineBreak(),
1040
1093
  stmt.TypescriptStatement(
1041
- f"export const {cls.name}Schema: Schema<{cls.name}SchemaType['id'], {cls.name}SchemaType['cls'], {cls.name}SchemaType['draftCls'], {cls.name}SchemaType['publicProperties'], {cls.name}SchemaType['allProperties'], {cls.name}SchemaType> = "
1094
+ (
1095
+ f"export const {cls.name}Schema: Schema<{cls.name}SchemaType['id'], {cls.name}SchemaType['cls'], {cls.name}SchemaType['draftCls'], {cls.name}SchemaType['publicProperties'], {cls.name}SchemaType['allProperties'], {cls.name}SchemaType> = "
1096
+ if cls.db is not None
1097
+ else f"export const {cls.name}Schema: EmbeddedSchema<{cls.name}SchemaType['cls'], {cls.name}SchemaType['draftCls'], {cls.name}SchemaType['publicProperties'], {cls.name}SchemaType['allProperties']> = "
1098
+ )
1042
1099
  + PredefinedFn.dict(
1043
1100
  [
1044
1101
  (
@@ -1211,7 +1268,7 @@ def _inject_type_for_invalid_value(tstype: TsTypeWithDep) -> TsTypeWithDep:
1211
1268
  else:
1212
1269
  # Need to add parentheses
1213
1270
  inner_type = f"({inner_type} | string)"
1214
- return TsTypeWithDep(inner_type + "[]", tstype.dep)
1271
+ return TsTypeWithDep(inner_type + "[]", tstype.deps)
1215
1272
 
1216
1273
  m = re.match(r"^\(?[a-zA-Z \|]+\)?$", tstype.type)
1217
1274
  if m is not None:
@@ -1222,7 +1279,7 @@ def _inject_type_for_invalid_value(tstype: TsTypeWithDep) -> TsTypeWithDep:
1222
1279
  else:
1223
1280
  # Needs parentheses for clarity
1224
1281
  new_type = f"({tstype.type} | string)"
1225
- return TsTypeWithDep(new_type, tstype.dep)
1282
+ return TsTypeWithDep(new_type, tstype.deps)
1226
1283
  return tstype
1227
1284
 
1228
1285
  raise NotImplementedError(tstype.type)
sera/models/_datatype.py CHANGED
@@ -24,7 +24,7 @@ SQLAlchemyDataType = Literal[
24
24
  @dataclass
25
25
  class PyTypeWithDep:
26
26
  type: str
27
- dep: str | None = None
27
+ deps: list[str] = field(default_factory=list)
28
28
 
29
29
  def get_python_type(self) -> type:
30
30
  """Get the Python type from the type string for typing annotation in Python."""
@@ -50,13 +50,25 @@ class PyTypeWithDep:
50
50
 
51
51
  def as_list_type(self) -> PyTypeWithDep:
52
52
  """Convert the type to a list type."""
53
- return PyTypeWithDep(type=f"list[{self.type}]", dep=self.dep)
53
+ return PyTypeWithDep(type=f"list[{self.type}]", deps=self.deps)
54
+
55
+ def as_optional_type(self) -> PyTypeWithDep:
56
+ """Convert the type to an optional type."""
57
+ if "typing.Optional" not in self.deps:
58
+ deps = self.deps + ["typing.Optional"]
59
+ else:
60
+ deps = self.deps
61
+ if "Optional[" in self.type:
62
+ raise NotImplementedError(
63
+ f"Have not handle nested optional yet: {self.type}"
64
+ )
65
+ return PyTypeWithDep(type=f"Optional[{self.type}]", deps=deps)
54
66
 
55
67
 
56
68
  @dataclass
57
69
  class TsTypeWithDep:
58
70
  type: str
59
- dep: str | None = None
71
+ deps: list[str] = field(default_factory=list)
60
72
 
61
73
  def get_default(self) -> expr.ExprConstant:
62
74
  if self.type.endswith("[]"):
@@ -83,7 +95,14 @@ class TsTypeWithDep:
83
95
  list_type = f"({self.type})[]"
84
96
  else:
85
97
  list_type = f"{self.type}[]"
86
- return TsTypeWithDep(type=list_type, dep=self.dep)
98
+ return TsTypeWithDep(type=list_type, deps=self.deps)
99
+
100
+ def as_optional_type(self) -> TsTypeWithDep:
101
+ if "undefined" in self.type:
102
+ raise NotImplementedError(
103
+ f"Have not handle nested optional yet: {self.type}"
104
+ )
105
+ return TsTypeWithDep(type=f"{self.type} | undefined", deps=self.deps)
87
106
 
88
107
 
89
108
  @dataclass
@@ -137,16 +156,6 @@ predefined_datatypes = {
137
156
  tstype=TsTypeWithDep(type="string"),
138
157
  is_list=False,
139
158
  ),
140
- "optional[string]": DataType(
141
- pytype=PyTypeWithDep(type="Optional[str]", dep="typing.Optional"),
142
- sqltype=SQLTypeWithDep(
143
- type="String",
144
- mapped_pytype="Optional[str]",
145
- deps=["sqlalchemy.String", "typing.Optional"],
146
- ),
147
- tstype=TsTypeWithDep(type="string | undefined"),
148
- is_list=False,
149
- ),
150
159
  "integer": DataType(
151
160
  pytype=PyTypeWithDep(type="int"),
152
161
  sqltype=SQLTypeWithDep(
@@ -156,7 +165,7 @@ predefined_datatypes = {
156
165
  is_list=False,
157
166
  ),
158
167
  "datetime": DataType(
159
- pytype=PyTypeWithDep(type="datetime", dep="datetime.datetime"),
168
+ pytype=PyTypeWithDep(type="datetime", deps=["datetime.datetime"]),
160
169
  sqltype=SQLTypeWithDep(
161
170
  type="DateTime",
162
171
  mapped_pytype="datetime",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sera-2
3
- Version: 1.11.1
3
+ Version: 1.11.3
4
4
  Summary:
5
5
  Author: Binh Vu
6
6
  Author-email: bvu687@gmail.com
@@ -3,7 +3,7 @@ sera/constants.py,sha256=mzAaMyIx8TJK0-RYYJ5I24C4s0Uvj26OLMJmBo0pxHI,123
3
3
  sera/libs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  sera/libs/api_helper.py,sha256=47y1kcwk3Xd2ZEMnUj_0OwCuUmgwOs5kYrE95BDVUn4,5411
5
5
  sera/libs/base_orm.py,sha256=dyh0OT2sbHku5qPJXvRzYAHRTSXvvbQaS-Qwg65Bw04,2918
6
- sera/libs/base_service.py,sha256=tKvYyCNIBLUbcZUp0EbrU9T2vHSRu_oISbkPECjZEfo,4613
6
+ sera/libs/base_service.py,sha256=8uKMaIicLc8LbN5vyaK9dGWoCLf_wuaaOw9ooSiqSWM,4614
7
7
  sera/libs/dag/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  sera/libs/dag/_dag.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  sera/libs/middlewares/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -13,9 +13,9 @@ sera/make/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  sera/make/__main__.py,sha256=G5O7s6135-708honwqMFn2yPTs06WbGQTHpupID0eZ4,1417
14
14
  sera/make/make_app.py,sha256=n9NtW73O3s_5Q31VHIRmnd-jEIcpDO7ksAsOdovde2s,5999
15
15
  sera/make/make_python_api.py,sha256=kq5DClmEeeNgg-a3Bb_8GN9jxvjnhjmW3RfBHNzynO8,25407
16
- sera/make/make_python_model.py,sha256=UWI-HbpFjt8n5yLAv2oGQK68LgrF-m0BUI334qtB9Mk,41228
16
+ sera/make/make_python_model.py,sha256=AlNJyyovb99TWocS2jtfTxy0C5YaFizx-Bhwdw1mUNw,41923
17
17
  sera/make/make_python_services.py,sha256=RsinYZdfkrTlTn9CT50VgqGs9w6IZawsJx-KEmqfnEY,2062
18
- sera/make/make_typescript_model.py,sha256=fMjz4YxdGHijb2pHI4xj7rKJf1PxyJxVLYW0ivsu70c,50128
18
+ sera/make/make_typescript_model.py,sha256=Mv6vXhvwQYzbKCMudzymxN_FH1utqaGGJB2dgyB5sIM,52601
19
19
  sera/misc/__init__.py,sha256=Dh4uDq0D4N53h3zhvmwfa5a0TPVRSUvLzb0hkFuPirk,411
20
20
  sera/misc/_formatter.py,sha256=aCGYL08l8f3aLODHxSocxBBwkRYEo3K1QzCDEn3suj0,1685
21
21
  sera/misc/_utils.py,sha256=V5g4oLGHOhUCR75Kkcn1w01pAvGvaepK-T8Z3pIgHjI,1450
@@ -23,7 +23,7 @@ sera/models/__init__.py,sha256=vJC5Kzo_N7wd16ocNPy1VvAZDGNiWeiAhWJ4ihATKvA,780
23
23
  sera/models/_class.py,sha256=Wf0e8x6-szG9TzoFkAlqj7_dG0SCICMBw_333n3paxk,2514
24
24
  sera/models/_collection.py,sha256=ZnQEriKC4X88Zz48Kn1AVZKH-1_l8OgWa-zf2kcQOOE,1414
25
25
  sera/models/_constraints.py,sha256=L6QwKL3hRJ5DvvIB4JNgLoyvTKbE9FrpYRzezM4CweE,1484
26
- sera/models/_datatype.py,sha256=eF71q-X7LA91sNYG29aXQiDVMjjr8-e6ez7P9NRwq_E,6376
26
+ sera/models/_datatype.py,sha256=RDn0lDl_b0O_PwRqobcD1O903owEAEoMzRf4dyRcgBk,6819
27
27
  sera/models/_default.py,sha256=ABggW6qdPR4ZDqIPJdJ0GCGQ-7kfsfZmQ_DchgZEa-I,137
28
28
  sera/models/_enum.py,sha256=sy0q7E646F-APsqrVQ52r1fAQ_DCAeaNq5YM5QN3zIk,2070
29
29
  sera/models/_module.py,sha256=8QRSCubZmdDP9rL58rGAS6X5VCrkc1ZHvuMu1I1KrWk,5043
@@ -32,6 +32,6 @@ sera/models/_parse.py,sha256=uw6fvvh1ucGqE2jFTCCr-e6_qMfZfSVpaPolNxmrHww,9897
32
32
  sera/models/_property.py,sha256=SJSm5fZJimd2rQuL4UH_aZuNyp9v7x64xMbEVbtYx8Q,5633
33
33
  sera/models/_schema.py,sha256=r-Gqg9Lb_wR3UrbNvfXXgt_qs5bts0t2Ve7aquuF_OI,1155
34
34
  sera/typing.py,sha256=Q4QMfbtfrCjC9tFfsZPhsAnbNX4lm4NHQ9lmjNXYdV0,772
35
- sera_2-1.11.1.dist-info/METADATA,sha256=vymmUgXvGuXjkCDXFhPc0Y8ZsM-Kwb7cBBLLy4I10ss,857
36
- sera_2-1.11.1.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
37
- sera_2-1.11.1.dist-info/RECORD,,
35
+ sera_2-1.11.3.dist-info/METADATA,sha256=Rw99XGPK9fkwo5e278P34cjeiLdiEq41e-jl7N269hI,857
36
+ sera_2-1.11.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
37
+ sera_2-1.11.3.dist-info/RECORD,,