amsdal_utils 0.4.5__tar.gz → 0.5.1__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.5 → amsdal_utils-0.5.1}/PKG-INFO +1 -1
  2. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/change-logs.md +12 -0
  3. amsdal_utils-0.5.1/latest-changelogs.md +5 -0
  4. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/__about__.py +1 -1
  5. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/core.py +34 -2
  6. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/schemas/schema.py +17 -7
  7. amsdal_utils-0.4.5/latest-changelogs.md +0 -5
  8. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/.editorconfig +0 -0
  9. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/.gitignore +0 -0
  10. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/CONTRIBUTING.md +0 -0
  11. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/LICENSE.txt +0 -0
  12. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/README.md +0 -0
  13. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/license_check.py +0 -0
  14. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/pyproject.toml +0 -0
  15. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/release_notes/.gitkeep +0 -0
  16. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/scripts/release.sh +0 -0
  17. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/scripts/tag_check.sh +0 -0
  18. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/Third-Party Materials - AMSDAL Dependencies - License Notices.md +0 -0
  19. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/__init__.py +0 -0
  20. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/classes/__init__.py +0 -0
  21. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/classes/metadata_manager.py +0 -0
  22. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/classes/transaction_manager.py +0 -0
  23. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/classes/version_manager.py +0 -0
  24. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/__init__.py +0 -0
  25. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/data_models/__init__.py +0 -0
  26. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/data_models/amsdal_config.py +0 -0
  27. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/data_models/connection_config.py +0 -0
  28. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/data_models/integration_config.py +0 -0
  29. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/data_models/repository_config.py +0 -0
  30. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/data_models/resources_config.py +0 -0
  31. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/enums.py +0 -0
  32. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/config/manager.py +0 -0
  33. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/errors.py +0 -0
  34. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/lifecycle/__init__.py +0 -0
  35. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/lifecycle/consumer.py +0 -0
  36. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/lifecycle/enum.py +0 -0
  37. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/lifecycle/producer.py +0 -0
  38. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/__init__.py +0 -0
  39. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/base.py +0 -0
  40. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/__init__.py +0 -0
  41. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/address.py +0 -0
  42. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/enums.py +0 -0
  43. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/metadata.py +0 -0
  44. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/reference.py +0 -0
  45. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/table_schema.py +0 -0
  46. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/data_models/transaction.py +0 -0
  47. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/enums.py +0 -0
  48. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/mixins/__init__.py +0 -0
  49. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/mixins/cached_mixin.py +0 -0
  50. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/utils/__init__.py +0 -0
  51. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/utils/get_subclasses.py +0 -0
  52. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/models/utils/reference_builders.py +0 -0
  53. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/py.typed +0 -0
  54. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/__init__.py +0 -0
  55. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/data_models/__init__.py +0 -0
  56. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/data_models/filter.py +0 -0
  57. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/data_models/order_by.py +0 -0
  58. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/data_models/paginator.py +0 -0
  59. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/data_models/query_specifier.py +0 -0
  60. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/enums.py +0 -0
  61. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/mixin.py +0 -0
  62. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/pull_out_filter.py +0 -0
  63. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/split.py +0 -0
  64. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/query/utils.py +0 -0
  65. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/schemas/__init__.py +0 -0
  66. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/schemas/interfaces.py +0 -0
  67. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/utils/__init__.py +0 -0
  68. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/utils/classes.py +0 -0
  69. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/utils/decorators.py +0 -0
  70. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/utils/identifier.py +0 -0
  71. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/utils/lazy_object.py +0 -0
  72. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/src/amsdal_utils/utils/singleton.py +0 -0
  73. {amsdal_utils-0.4.5 → amsdal_utils-0.5.1}/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.5
3
+ Version: 0.5.1
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.1](https://pypi.org/project/amsdal_utils/0.5.1/) - 2024-05-30
2
+
3
+ ### Fixed
4
+
5
+ - Fix for nested lists in dict types
6
+
7
+ ## [v0.5.0](https://pypi.org/project/amsdal_utils/0.5.0/) - 2024-05-19
8
+
9
+ ### Added
10
+
11
+ - Storage metadata. Support multi-types via `|` separator
12
+
1
13
  ## [v0.4.5](https://pypi.org/project/amsdal_utils/0.4.5/) - 2024-05-16
2
14
 
3
15
  ### Added
@@ -0,0 +1,5 @@
1
+ ## [v0.5.1](https://pypi.org/project/amsdal_utils/0.5.1/) - 2024-05-30
2
+
3
+ ### Fixed
4
+
5
+ - Fix for nested lists in dict types
@@ -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.5'
4
+ __version__ = '0.5.1'
@@ -72,6 +72,24 @@ 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]:
76
94
  _any_of = data.pop('anyOf')
77
95
  if _any_of in [[{'$ref': '#/$defs/Reference'}], [{'$ref': '#/$defs/Reference'}, {'type': 'null'}]]:
@@ -85,8 +103,13 @@ def process_any_of(data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]
85
103
  ]
86
104
 
87
105
  if len(any_of) != 1:
88
- err_type = 'invalid_data'
89
- 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)
90
113
 
91
114
  _any_of_element = any_of[0]
92
115
 
@@ -186,6 +209,15 @@ class TypeData(BaseModel, extra='allow'):
186
209
  if 'anyOf' in data:
187
210
  data = process_any_of(data, info)
188
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
+
189
221
  if 'type' not in data:
190
222
  data['type'] = 'object'
191
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,11 +37,10 @@ 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
- @model_validator(mode='before')
44
42
  @classmethod
45
- def format_openapi_parameters(cls, data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]:
43
+ def _format_openapi_parameters(cls, data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]:
46
44
  if '$ref' in data:
47
45
  if not info.context:
48
46
  msg = 'Context is required to resolve $ref'
@@ -59,11 +57,9 @@ class PropertyData(TypeData, extra='allow'):
59
57
  if 'anyOf' in _add_props:
60
58
  _add_props = process_any_of(_add_props, info)
61
59
 
62
- _type = _add_props.get('type', 'object')
63
-
64
60
  items = DictSchema(
65
61
  key=TypeData(type='string'),
66
- value=TypeData(type=CLASS_OPENAPI_PARAMETERS_MAPPER.get(_type, _type)),
62
+ value=TypeData(**cls._format_openapi_parameters(_add_props, info)),
67
63
  )
68
64
 
69
65
  if 'items' not in data:
@@ -74,6 +70,11 @@ class PropertyData(TypeData, extra='allow'):
74
70
 
75
71
  return {CLASS_OPENAPI_PARAMETERS_MAPPER.get(k, k): v for k, v in data.items()}
76
72
 
73
+ @model_validator(mode='before')
74
+ @classmethod
75
+ def format_openapi_parameters(cls, data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]:
76
+ return cls._format_openapi_parameters(data, info)
77
+
77
78
  @model_validator(mode='after')
78
79
  def validate_options(self) -> 'PropertyData':
79
80
  if isinstance(getattr(self, 'enum', None), list) and not self.options:
@@ -101,6 +102,14 @@ class PropertyData(TypeData, extra='allow'):
101
102
  return self
102
103
 
103
104
 
105
+ class StorageMetadata(BaseModel, extra='allow'):
106
+ table_name: str | None = Field(None, title='Table name')
107
+ db_fields: dict[str, list[str]] | None = Field(None, title='Database property to fields mapping')
108
+ primary_key: list[str] | None = Field(None, title='Primary key fields')
109
+ indexed: list[list[str]] | None = Field(None, title='Indexed')
110
+ unique: list[list[str]] | None = Field(None, title='Unique Fields')
111
+
112
+
104
113
  class ObjectSchema(BaseModel, extra='allow'):
105
114
  r"""
106
115
  Schema for an object.
@@ -127,6 +136,7 @@ class ObjectSchema(BaseModel, extra='allow'):
127
136
  options: list[OptionItemData] | None = None
128
137
  meta_class: str = MetaClasses.CLASS_OBJECT.value
129
138
  custom_code: str | None = None
139
+ storage_metadata: StorageMetadata | None = None
130
140
 
131
141
  @model_validator(mode='before')
132
142
  @classmethod
@@ -1,5 +0,0 @@
1
- ## [v0.4.5](https://pypi.org/project/amsdal_utils/0.4.5/) - 2024-05-16
2
-
3
- ### Added
4
-
5
- - Added support for optional References in models
File without changes
File without changes
File without changes
File without changes