amsdal_utils 0.4.4__tar.gz → 0.5.0__tar.gz

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.
Files changed (73) hide show
  1. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/PKG-INFO +1 -1
  2. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/change-logs.md +12 -0
  3. amsdal_utils-0.5.0/latest-changelogs.md +5 -0
  4. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/__about__.py +1 -1
  5. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/core.py +40 -3
  6. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/schemas/schema.py +10 -2
  7. amsdal_utils-0.4.4/latest-changelogs.md +0 -5
  8. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/.editorconfig +0 -0
  9. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/.gitignore +0 -0
  10. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/CONTRIBUTING.md +0 -0
  11. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/LICENSE.txt +0 -0
  12. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/README.md +0 -0
  13. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/license_check.py +0 -0
  14. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/pyproject.toml +0 -0
  15. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/release_notes/.gitkeep +0 -0
  16. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/scripts/release.sh +0 -0
  17. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/scripts/tag_check.sh +0 -0
  18. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/Third-Party Materials - AMSDAL Dependencies - License Notices.md +0 -0
  19. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/__init__.py +0 -0
  20. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/classes/__init__.py +0 -0
  21. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/classes/metadata_manager.py +0 -0
  22. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/classes/transaction_manager.py +0 -0
  23. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/classes/version_manager.py +0 -0
  24. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/__init__.py +0 -0
  25. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/data_models/__init__.py +0 -0
  26. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/data_models/amsdal_config.py +0 -0
  27. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/data_models/connection_config.py +0 -0
  28. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/data_models/integration_config.py +0 -0
  29. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/data_models/repository_config.py +0 -0
  30. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/data_models/resources_config.py +0 -0
  31. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/enums.py +0 -0
  32. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/config/manager.py +0 -0
  33. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/errors.py +0 -0
  34. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/lifecycle/__init__.py +0 -0
  35. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/lifecycle/consumer.py +0 -0
  36. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/lifecycle/enum.py +0 -0
  37. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/lifecycle/producer.py +0 -0
  38. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/__init__.py +0 -0
  39. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/base.py +0 -0
  40. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/__init__.py +0 -0
  41. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/address.py +0 -0
  42. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/enums.py +0 -0
  43. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/metadata.py +0 -0
  44. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/reference.py +0 -0
  45. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/table_schema.py +0 -0
  46. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/data_models/transaction.py +0 -0
  47. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/enums.py +0 -0
  48. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/mixins/__init__.py +0 -0
  49. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/mixins/cached_mixin.py +0 -0
  50. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/utils/__init__.py +0 -0
  51. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/utils/get_subclasses.py +0 -0
  52. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/models/utils/reference_builders.py +0 -0
  53. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/py.typed +0 -0
  54. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/__init__.py +0 -0
  55. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/data_models/__init__.py +0 -0
  56. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/data_models/filter.py +0 -0
  57. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/data_models/order_by.py +0 -0
  58. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/data_models/paginator.py +0 -0
  59. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/data_models/query_specifier.py +0 -0
  60. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/enums.py +0 -0
  61. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/mixin.py +0 -0
  62. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/pull_out_filter.py +0 -0
  63. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/split.py +0 -0
  64. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/query/utils.py +0 -0
  65. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/schemas/__init__.py +0 -0
  66. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/schemas/interfaces.py +0 -0
  67. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/__init__.py +0 -0
  68. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/classes.py +0 -0
  69. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/decorators.py +0 -0
  70. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/identifier.py +0 -0
  71. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/lazy_object.py +0 -0
  72. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/singleton.py +0 -0
  73. {amsdal_utils-0.4.4 → amsdal_utils-0.5.0}/src/amsdal_utils/utils/text.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: amsdal_utils
3
- Version: 0.4.4
3
+ Version: 0.5.0
4
4
  Summary: Utils for AMSDAL data framework
5
5
  Project-URL: Documentation, https://pypi.org/project/amsdal_utils/#readme
6
6
  Project-URL: Issues, https://pypi.org/project/amsdal_utils/#issues
@@ -1,3 +1,15 @@
1
+ ## [v0.5.0](https://pypi.org/project/amsdal_utils/0.5.0/) - 2024-05-19
2
+
3
+ ### Added
4
+
5
+ - Storage metadata. Support multi-types via `|` separator
6
+
7
+ ## [v0.4.5](https://pypi.org/project/amsdal_utils/0.4.5/) - 2024-05-16
8
+
9
+ ### Added
10
+
11
+ - Added support for optional References in models
12
+
1
13
  ## [v0.4.4](https://pypi.org/project/amsdal_utils/0.4.4/) - 2024-05-06
2
14
 
3
15
  ### Changed
@@ -0,0 +1,5 @@
1
+ ## [v0.5.0](https://pypi.org/project/amsdal_utils/0.5.0/) - 2024-05-19
2
+
3
+ ### Added
4
+
5
+ - Storage metadata. Support multi-types via `|` separator
@@ -1,4 +1,4 @@
1
1
  # SPDX-FileCopyrightText: 2023-present
2
2
  #
3
3
  # SPDX-License-Identifier: AMSDAL End User License Agreement
4
- __version__ = '0.4.4'
4
+ __version__ = '0.5.0'
@@ -72,16 +72,44 @@ class LegacyDictSchema(BaseModel):
72
72
  value_type: str
73
73
 
74
74
 
75
+ def process_one_of(data: dict[str, Any]) -> dict[str, Any]:
76
+ one_of = [
77
+ ao
78
+ for ao in data.pop('oneOf')
79
+ if ao not in [{'type': 'null'}, {'$ref': '#/$defs/Reference'}, {'$ref': '#/$defs/LegacyModel'}]
80
+ ]
81
+
82
+ for _one_of_item in one_of:
83
+ if not _one_of_item or '$ref' not in _one_of_item:
84
+ msg = f'Multiple oneOf should contain $ref. Currently: {one_of}'
85
+ raise ValueError(msg)
86
+
87
+ _types = [_one_of_item['$ref'].rsplit('/', 1)[-1] for _one_of_item in one_of]
88
+ data['type'] = '|'.join(_types)
89
+
90
+ return data
91
+
92
+
75
93
  def process_any_of(data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]:
94
+ _any_of = data.pop('anyOf')
95
+ if _any_of in [[{'$ref': '#/$defs/Reference'}], [{'$ref': '#/$defs/Reference'}, {'type': 'null'}]]:
96
+ data['type'] = 'object'
97
+ return data
98
+
76
99
  any_of = [
77
100
  ao
78
- for ao in data.pop('anyOf')
101
+ for ao in _any_of
79
102
  if ao not in [{'type': 'null'}, {'$ref': '#/$defs/Reference'}, {'$ref': '#/$defs/LegacyModel'}]
80
103
  ]
81
104
 
82
105
  if len(any_of) != 1:
83
- err_type = 'invalid_data'
84
- raise PydanticCustomError(err_type, 'Data must have exactly one non-null type in "anyOf"')
106
+ for _any_of_item in any_of:
107
+ if not _any_of_item or '$ref' not in _any_of_item:
108
+ msg = f'Multiple anyOf should contain $ref. Currently: {any_of}'
109
+ raise ValueError(msg)
110
+ _types = [_any_of_item['$ref'].rsplit('/', 1)[-1] for _any_of_item in any_of]
111
+
112
+ data['type'] = '|'.join(_types)
85
113
 
86
114
  _any_of_element = any_of[0]
87
115
 
@@ -181,6 +209,15 @@ class TypeData(BaseModel, extra='allow'):
181
209
  if 'anyOf' in data:
182
210
  data = process_any_of(data, info)
183
211
 
212
+ if 'oneOf' in data:
213
+ data = process_one_of(data)
214
+
215
+ if 'discriminator' in data and isinstance(data['discriminator'], dict):
216
+ try:
217
+ data['discriminator'] = data['discriminator']['propertyName']
218
+ except:
219
+ raise
220
+
184
221
  if 'type' not in data:
185
222
  data['type'] = 'object'
186
223
 
@@ -30,7 +30,6 @@ class PropertyData(TypeData, extra='allow'):
30
30
  field_name (str | None): The name of the field.
31
31
  field_id (str | None): The ID of the field.
32
32
  is_deleted (bool): Indicates if the property is deleted.
33
- db_field (list[str] | None): The database fields.
34
33
  """
35
34
 
36
35
  title: str | None = None
@@ -38,7 +37,7 @@ class PropertyData(TypeData, extra='allow'):
38
37
  field_name: str | None = None
39
38
  field_id: str | None = None
40
39
  is_deleted: bool = False
41
- db_field: list[str] | None = None
40
+ discriminator: str | None = None
42
41
 
43
42
  @model_validator(mode='before')
44
43
  @classmethod
@@ -101,6 +100,14 @@ class PropertyData(TypeData, extra='allow'):
101
100
  return self
102
101
 
103
102
 
103
+ class StorageMetadata(BaseModel, extra='allow'):
104
+ table_name: str | None = Field(None, title='Table name')
105
+ db_fields: dict[str, list[str]] | None = Field(None, title='Database property to fields mapping')
106
+ primary_key: list[str] | None = Field(None, title='Primary key fields')
107
+ indexed: list[list[str]] | None = Field(None, title='Indexed')
108
+ unique: list[list[str]] | None = Field(None, title='Unique Fields')
109
+
110
+
104
111
  class ObjectSchema(BaseModel, extra='allow'):
105
112
  r"""
106
113
  Schema for an object.
@@ -127,6 +134,7 @@ class ObjectSchema(BaseModel, extra='allow'):
127
134
  options: list[OptionItemData] | None = None
128
135
  meta_class: str = MetaClasses.CLASS_OBJECT.value
129
136
  custom_code: str | None = None
137
+ storage_metadata: StorageMetadata | None = None
130
138
 
131
139
  @model_validator(mode='before')
132
140
  @classmethod
@@ -1,5 +0,0 @@
1
- ## [v0.4.4](https://pypi.org/project/amsdal_utils/0.4.4/) - 2024-05-06
2
-
3
- ### Changed
4
-
5
- - Handle required fields if nullable
File without changes
File without changes
File without changes
File without changes