amsdal_utils 0.5.4__tar.gz → 0.5.6__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 (75) hide show
  1. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/PKG-INFO +1 -1
  2. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/change-logs.md +12 -0
  3. amsdal_utils-0.5.6/latest-changelogs.md +5 -0
  4. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/pyproject.toml +1 -1
  5. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/__about__.py +1 -1
  6. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/data_models/connection_config.py +19 -0
  7. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/data_models/resources_config.py +5 -0
  8. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/address.py +1 -1
  9. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/core.py +2 -2
  10. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/metadata.py +1 -1
  11. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/utils.py +3 -0
  12. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/schemas/schema.py +1 -1
  13. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/utils/singleton.py +1 -1
  14. amsdal_utils-0.5.6/uv.lock +606 -0
  15. amsdal_utils-0.5.4/latest-changelogs.md +0 -5
  16. amsdal_utils-0.5.4/uv.lock +0 -500
  17. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/.editorconfig +0 -0
  18. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/.gitignore +0 -0
  19. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/CONTRIBUTING.md +0 -0
  20. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/LICENSE.txt +0 -0
  21. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/README.md +0 -0
  22. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/license_check.py +0 -0
  23. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/release_notes/.gitkeep +0 -0
  24. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/scripts/release.sh +0 -0
  25. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/scripts/tag_check.sh +0 -0
  26. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/Third-Party Materials - AMSDAL Dependencies - License Notices.md +0 -0
  27. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/__init__.py +0 -0
  28. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/classes/__init__.py +0 -0
  29. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/classes/metadata_manager.py +0 -0
  30. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/classes/transaction_manager.py +0 -0
  31. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/classes/version_manager.py +0 -0
  32. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/__init__.py +0 -0
  33. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/data_models/__init__.py +0 -0
  34. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/data_models/amsdal_config.py +0 -0
  35. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/data_models/integration_config.py +0 -0
  36. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/data_models/repository_config.py +0 -0
  37. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/enums.py +0 -0
  38. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/config/manager.py +0 -0
  39. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/errors.py +0 -0
  40. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/lifecycle/__init__.py +0 -0
  41. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/lifecycle/consumer.py +0 -0
  42. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/lifecycle/enum.py +0 -0
  43. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/lifecycle/producer.py +0 -0
  44. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/__init__.py +0 -0
  45. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/base.py +0 -0
  46. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/__init__.py +0 -0
  47. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/enums.py +0 -0
  48. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/reference.py +0 -0
  49. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/table_schema.py +0 -0
  50. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/data_models/transaction.py +0 -0
  51. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/enums.py +0 -0
  52. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/mixins/__init__.py +0 -0
  53. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/mixins/cached_mixin.py +0 -0
  54. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/utils/__init__.py +0 -0
  55. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/utils/get_subclasses.py +0 -0
  56. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/models/utils/reference_builders.py +0 -0
  57. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/py.typed +0 -0
  58. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/__init__.py +0 -0
  59. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/data_models/__init__.py +0 -0
  60. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/data_models/filter.py +0 -0
  61. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/data_models/order_by.py +0 -0
  62. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/data_models/paginator.py +0 -0
  63. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/data_models/query_specifier.py +0 -0
  64. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/enums.py +0 -0
  65. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/mixin.py +0 -0
  66. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/pull_out_filter.py +0 -0
  67. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/query/split.py +0 -0
  68. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/schemas/__init__.py +0 -0
  69. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/schemas/interfaces.py +0 -0
  70. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/utils/__init__.py +0 -0
  71. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/utils/classes.py +0 -0
  72. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/utils/decorators.py +0 -0
  73. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/utils/identifier.py +0 -0
  74. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/src/amsdal_utils/utils/lazy_object.py +0 -0
  75. {amsdal_utils-0.5.4 → amsdal_utils-0.5.6}/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.5.4
3
+ Version: 0.5.6
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.6](https://pypi.org/project/amsdal_utils/0.5.6/) - 2024-11-05
2
+
3
+ ### Fixed
4
+
5
+ - Fixed for additionalProperties handling in schemas with references
6
+
7
+ ## [v0.5.5](https://pypi.org/project/amsdal_utils/0.5.5/) - 2024-10-20
8
+
9
+ ### Added
10
+
11
+ - External connection config
12
+
1
13
  ## [v0.5.4](https://pypi.org/project/amsdal_utils/0.5.4/) - 2024-07-11
2
14
 
3
15
  ### Added
@@ -0,0 +1,5 @@
1
+ ## [v0.5.6](https://pypi.org/project/amsdal_utils/0.5.6/) - 2024-11-05
2
+
3
+ ### Fixed
4
+
5
+ - Fixed for additionalProperties handling in schemas with references
@@ -42,7 +42,7 @@ dev = [
42
42
  "pydantic==2.6.4",
43
43
  "black>=24.3.0",
44
44
  "mypy>=1.15.0",
45
- "ruff>=0.9.7",
45
+ "ruff>=0.12.4",
46
46
  "towncrier==24.8.0",
47
47
  "types-PyYAML==6.0.12.20250516",
48
48
  ]
@@ -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.5.4'
4
+ __version__ = '0.5.6'
@@ -1,3 +1,4 @@
1
+ from enum import Enum
1
2
  from typing import Any
2
3
 
3
4
  from pydantic import BaseModel
@@ -7,6 +8,20 @@ from pydantic import field_validator
7
8
  DEFAULT_NAME = 'default'
8
9
 
9
10
 
11
+ class ConnectionType(str, Enum):
12
+ """
13
+ Enumeration of connection types.
14
+
15
+ - LAKEHOUSE: Lakehouse database connection with historical tracking
16
+ - STATE: State database connection without historical tracking
17
+ - EXTERNAL_SERVICE: Connection to an external service
18
+ """
19
+
20
+ LAKEHOUSE = 'lakehouse'
21
+ STATE = 'state'
22
+ EXTERNAL_SERVICE = 'external_service'
23
+
24
+
10
25
  class ConnectionConfig(BaseModel):
11
26
  """
12
27
  Configuration model for a connection.
@@ -15,11 +30,15 @@ class ConnectionConfig(BaseModel):
15
30
  name (str): The name of the connection.
16
31
  backend (str): The backend implementation for the connection.
17
32
  credentials (dict[str, Any]): The credentials required for the connection.
33
+ connection_type (ConnectionType): The type of connection (lakehouse, state, external_service).
34
+ is_managed (bool): Whether the connection participates in AMSDAL lifecycle management.
18
35
  """
19
36
 
20
37
  name: str = DEFAULT_NAME
21
38
  backend: str = 'amsdal_data.connections.implementations.iceberg_history.IcebergHistoricalConnection'
22
39
  credentials: dict[str, Any] = Field(default_factory=dict)
40
+ connection_type: ConnectionType = ConnectionType.LAKEHOUSE
41
+ is_managed: bool = True
23
42
 
24
43
  @field_validator('credentials', mode='before')
25
44
  @classmethod
@@ -1,4 +1,5 @@
1
1
  from pydantic import BaseModel
2
+ from pydantic import Field
2
3
 
3
4
  from amsdal_utils.config.data_models.repository_config import RepositoryConfig
4
5
 
@@ -11,9 +12,13 @@ class ResourcesConfig(BaseModel):
11
12
  lakehouse (str): The lakehouse configuration.
12
13
  lock (str): The lock configuration.
13
14
  repository (RepositoryConfig): The repository configuration.
15
+ worker (str): The worker configuration.
16
+ external_services (dict[str, str]): Mapping of service names to connection names for external services.
17
+ Example: {"email": "smtp_connection", "storage": "s3_connection"}
14
18
  """
15
19
 
16
20
  lakehouse: str
17
21
  lock: str | None = None
18
22
  repository: RepositoryConfig | None = None
19
23
  worker: str | None = None
24
+ external_services: dict[str, str] = Field(default_factory=dict)
@@ -26,7 +26,7 @@ class JSONExtendedEncoder(json.JSONEncoder):
26
26
  """Custom JSON encoder to handle additional types."""
27
27
 
28
28
  def default(self, obj: Any) -> Any:
29
- if isinstance(obj, (Decimal, datetime, date, time, bytes)): # noqa: UP038
29
+ if isinstance(obj, (Decimal, datetime, date, time, bytes)):
30
30
  return {
31
31
  '__type__': type(obj).__name__,
32
32
  'value': base64.b64encode(obj).decode('utf-8') if isinstance(obj, bytes) else str(obj),
@@ -91,7 +91,7 @@ def process_one_of(data: dict[str, Any]) -> dict[str, Any]:
91
91
 
92
92
 
93
93
  def process_any_of(data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]:
94
- from amsdal_utils.schemas.schema import PropertyData
94
+ from amsdal_utils.schemas.schema import PropertyData # noqa: PLC0415
95
95
 
96
96
  _any_of = data.pop('anyOf')
97
97
  if _any_of in [[{'$ref': '#/$defs/Reference'}], [{'$ref': '#/$defs/Reference'}, {'type': 'null'}]]:
@@ -129,7 +129,7 @@ def process_any_of(data: dict[str, Any], info: ValidationInfo) -> dict[str, Any]
129
129
  definition.update(data)
130
130
  data = definition
131
131
 
132
- elif 'additionalProperties' in _any_of_element:
132
+ elif 'additionalProperties' in _any_of_element and isinstance(_any_of_element['additionalProperties'], dict):
133
133
  _add_props = _any_of_element.pop('additionalProperties')
134
134
 
135
135
  if 'anyOf' in _add_props:
@@ -42,7 +42,7 @@ class Metadata(BaseModel):
42
42
 
43
43
  @property
44
44
  def address(self) -> Address:
45
- from amsdal_utils.config.manager import AmsdalConfigManager
45
+ from amsdal_utils.config.manager import AmsdalConfigManager # noqa: PLC0415
46
46
 
47
47
  _class_name = self.class_schema_reference.ref.object_id
48
48
 
@@ -77,3 +77,6 @@ class Q:
77
77
  and self.connector == __value.connector
78
78
  and self.negated == __value.negated
79
79
  )
80
+
81
+ def __hash__(self) -> int:
82
+ return hash((self.connector, self.negated, tuple(self.children)))
@@ -51,7 +51,7 @@ class PropertyData(TypeData, extra='allow'):
51
51
  data.pop('$ref')
52
52
  data.update(_def)
53
53
 
54
- if 'additionalProperties' in data:
54
+ if 'additionalProperties' in data and isinstance(data['additionalProperties'], dict):
55
55
  _add_props = data.pop('additionalProperties')
56
56
 
57
57
  if 'anyOf' in _add_props:
@@ -7,7 +7,7 @@ T = TypeVar('T')
7
7
 
8
8
 
9
9
  class Singleton(type, Generic[T]):
10
- __instances: ClassVar[dict[type[T], T]] = {} # type: ignore[misc]
10
+ __instances: ClassVar[dict[type[T], T]] = {}
11
11
 
12
12
  def __call__(
13
13
  cls: type[T],