hexkit 8.0.0__tar.gz → 8.1.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.
- {hexkit-8.0.0 → hexkit-8.1.0}/LICENSE +1 -1
- {hexkit-8.0.0/src/hexkit.egg-info → hexkit-8.1.0}/PKG-INFO +6 -6
- {hexkit-8.0.0 → hexkit-8.1.0}/pyproject.toml +7 -7
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/__main__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/base.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/config.py +14 -2
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/correlation.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/custom_types.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/log.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/opentelemetry.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/dao.py +12 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/daopub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/daosub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/eventpub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/eventsub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/kvstore.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/protocols/objstorage.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/config.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/provider/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/provider/daosub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/provider/eventpub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/provider/eventsub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/provider/utils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/testcontainer.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/akafka/testutils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/config.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/migrations/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/migrations/_manager.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/migrations/_utils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/migrations/helpers.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/provider/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/provider/client.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/provider/dao.py +26 -7
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/provider/kvstore.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/provider/utils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongodb/testutils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongokafka/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongokafka/config.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongokafka/provider/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongokafka/provider/daopub.py +39 -13
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongokafka/provider/persistent_pub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/mongokafka/testutils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/redis/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/redis/config.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/redis/provider/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/redis/provider/client.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/redis/provider/kvstore.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/redis/testutils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/provider.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/test_files/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/testutils/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/testutils/_fixtures.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/testutils/_typical_workflow.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/testutils/_utils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/testing/__init__.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/testing/dao.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/testing/eventpub.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/testing/s3.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/utils.py +1 -1
- {hexkit-8.0.0 → hexkit-8.1.0/src/hexkit.egg-info}/PKG-INFO +6 -6
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit.egg-info/requires.txt +5 -5
- {hexkit-8.0.0 → hexkit-8.1.0}/MANIFEST.in +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/README.md +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/setup.cfg +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/test_files/test_file1.yaml +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/test_files/test_file2.yaml +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/test_files/test_file3.yaml +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/providers/s3/test_files/test_file4.yaml +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit/py.typed +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit.egg-info/SOURCES.txt +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit.egg-info/dependency_links.txt +0 -0
- {hexkit-8.0.0 → hexkit-8.1.0}/src/hexkit.egg-info/top_level.txt +0 -0
|
@@ -186,7 +186,7 @@
|
|
|
186
186
|
same "printed page" as the copyright notice for easier
|
|
187
187
|
identification within third-party archives.
|
|
188
188
|
|
|
189
|
-
Copyright 2021 -
|
|
189
|
+
Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
190
190
|
for the German Human Genome-Phenome Archive (GHGA)
|
|
191
191
|
|
|
192
192
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hexkit
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.1.0
|
|
4
4
|
Summary: A Toolkit for Building Microservices using the Hexagonal Architecture
|
|
5
5
|
Author-email: "German Human Genome Phenome Archive (GHGA)" <contact@ghga.de>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -29,7 +29,7 @@ Provides-Extra: s3
|
|
|
29
29
|
Requires-Dist: boto3<2,>=1.42; extra == "s3"
|
|
30
30
|
Requires-Dist: botocore<2,>=1.42; extra == "s3"
|
|
31
31
|
Provides-Extra: mongodb
|
|
32
|
-
Requires-Dist: pymongo<5,>=4.
|
|
32
|
+
Requires-Dist: pymongo<5,>=4.16; extra == "mongodb"
|
|
33
33
|
Provides-Extra: redis
|
|
34
34
|
Requires-Dist: redis<8,>=7.1; extra == "redis"
|
|
35
35
|
Provides-Extra: opentelemetry-base
|
|
@@ -64,16 +64,16 @@ Requires-Dist: hexkit[opentelemetry-fastapi]; extra == "opentelemetry"
|
|
|
64
64
|
Requires-Dist: hexkit[opentelemetry-s3]; extra == "opentelemetry"
|
|
65
65
|
Provides-Extra: test-akafka
|
|
66
66
|
Requires-Dist: hexkit[akafka]; extra == "test-akafka"
|
|
67
|
-
Requires-Dist: testcontainers[kafka]<5,>=4.
|
|
67
|
+
Requires-Dist: testcontainers[kafka]<5,>=4.14; extra == "test-akafka"
|
|
68
68
|
Provides-Extra: test-s3
|
|
69
69
|
Requires-Dist: hexkit[s3]; extra == "test-s3"
|
|
70
|
-
Requires-Dist: testcontainers<5,>=4.
|
|
70
|
+
Requires-Dist: testcontainers<5,>=4.14; extra == "test-s3"
|
|
71
71
|
Provides-Extra: test-mongodb
|
|
72
72
|
Requires-Dist: hexkit[mongodb]; extra == "test-mongodb"
|
|
73
|
-
Requires-Dist: testcontainers[mongo]<5,>=4.
|
|
73
|
+
Requires-Dist: testcontainers[mongo]<5,>=4.14; extra == "test-mongodb"
|
|
74
74
|
Provides-Extra: test-redis
|
|
75
75
|
Requires-Dist: hexkit[redis]; extra == "test-redis"
|
|
76
|
-
Requires-Dist: testcontainers[redis]<5,>=4.
|
|
76
|
+
Requires-Dist: testcontainers[redis]<5,>=4.14; extra == "test-redis"
|
|
77
77
|
Provides-Extra: test
|
|
78
78
|
Requires-Dist: hexkit[test-akafka,test-mongodb,test-s3]; extra == "test"
|
|
79
79
|
Provides-Extra: all
|
|
@@ -23,7 +23,7 @@ classifiers = [
|
|
|
23
23
|
"Intended Audience :: Developers",
|
|
24
24
|
]
|
|
25
25
|
name = "hexkit"
|
|
26
|
-
version = "8.
|
|
26
|
+
version = "8.1.0"
|
|
27
27
|
description = "A Toolkit for Building Microservices using the Hexagonal Architecture"
|
|
28
28
|
dependencies = [
|
|
29
29
|
"opentelemetry-api >=1.39, <2",
|
|
@@ -45,7 +45,7 @@ s3 = [
|
|
|
45
45
|
"botocore >=1.42, <2",
|
|
46
46
|
]
|
|
47
47
|
mongodb = [
|
|
48
|
-
"pymongo >=4.
|
|
48
|
+
"pymongo >=4.16, <5",
|
|
49
49
|
]
|
|
50
50
|
redis = [
|
|
51
51
|
"redis >=7.1, <8",
|
|
@@ -89,19 +89,19 @@ opentelemetry = [
|
|
|
89
89
|
]
|
|
90
90
|
test-akafka = [
|
|
91
91
|
"hexkit[akafka]",
|
|
92
|
-
"testcontainers[kafka] >=4.
|
|
92
|
+
"testcontainers[kafka] >=4.14, <5",
|
|
93
93
|
]
|
|
94
94
|
test-s3 = [
|
|
95
95
|
"hexkit[s3]",
|
|
96
|
-
"testcontainers >=4.
|
|
96
|
+
"testcontainers >=4.14, <5",
|
|
97
97
|
]
|
|
98
98
|
test-mongodb = [
|
|
99
99
|
"hexkit[mongodb]",
|
|
100
|
-
"testcontainers[mongo] >=4.
|
|
100
|
+
"testcontainers[mongo] >=4.14, <5",
|
|
101
101
|
]
|
|
102
102
|
test-redis = [
|
|
103
103
|
"hexkit[redis]",
|
|
104
|
-
"testcontainers[redis] >=4.
|
|
104
|
+
"testcontainers[redis] >=4.14, <5",
|
|
105
105
|
]
|
|
106
106
|
test = [
|
|
107
107
|
"hexkit[test-akafka,test-s3,test-mongodb]",
|
|
@@ -251,6 +251,6 @@ legacy_tox_ini = """
|
|
|
251
251
|
deps =
|
|
252
252
|
--no-deps -r ./lock/requirements-dev.txt
|
|
253
253
|
commands =
|
|
254
|
-
py310: pip install --no-deps backports.asyncio.runner==1.2.0 exceptiongroup==1.3.
|
|
254
|
+
py310: pip install --no-deps backports.asyncio.runner==1.2.0 exceptiongroup==1.3.1 tomli==2.2.1
|
|
255
255
|
pytest {posargs}
|
|
256
256
|
"""
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -29,6 +29,8 @@ from pydantic_settings import (
|
|
|
29
29
|
|
|
30
30
|
# Default config prefix:
|
|
31
31
|
DEFAULT_CONFIG_PREFIX: Final = "ghga_services"
|
|
32
|
+
# Default dotenv path:
|
|
33
|
+
DEFAULT_DOTENV_PATH: Final[Path] = Path("/secrets")
|
|
32
34
|
|
|
33
35
|
|
|
34
36
|
class ConfigYamlDoesNotExist(RuntimeError):
|
|
@@ -82,6 +84,7 @@ def get_default_config_yaml(prefix: str) -> Path | None:
|
|
|
82
84
|
|
|
83
85
|
def config_from_yaml(
|
|
84
86
|
prefix: str = DEFAULT_CONFIG_PREFIX,
|
|
87
|
+
dotenv_prefix: Path = DEFAULT_DOTENV_PATH,
|
|
85
88
|
) -> Callable:
|
|
86
89
|
"""A factory that returns decorator functions which extends a
|
|
87
90
|
pydantic BaseSettings class to read in parameters from a config yaml.
|
|
@@ -102,6 +105,10 @@ def config_from_yaml(
|
|
|
102
105
|
"{prefix}_{actual_variable_name}". Moreover, this prefix is used
|
|
103
106
|
to derive the default location for the config yaml file
|
|
104
107
|
("~/.{prefix}.yaml"). Defaults to "ghga_services".
|
|
108
|
+
dotenv_prefix: (Path, optional):
|
|
109
|
+
When defining parameters via dotenv files, this prefix is used to set the path
|
|
110
|
+
for the dotenv files. The final path used is constructed as
|
|
111
|
+
"{dotenv_prefix}/.env". Defaults to "/secrets".
|
|
105
112
|
"""
|
|
106
113
|
|
|
107
114
|
def decorator(settings) -> Callable:
|
|
@@ -141,7 +148,11 @@ def config_from_yaml(
|
|
|
141
148
|
class ModSettings(settings):
|
|
142
149
|
"""Modifies the original Settings class provided by the user"""
|
|
143
150
|
|
|
144
|
-
model_config = SettingsConfigDict(
|
|
151
|
+
model_config = SettingsConfigDict(
|
|
152
|
+
frozen=True,
|
|
153
|
+
env_prefix=f"{prefix}_",
|
|
154
|
+
env_file=(".env", dotenv_prefix / ".env"),
|
|
155
|
+
)
|
|
145
156
|
|
|
146
157
|
@classmethod
|
|
147
158
|
def settings_customise_sources(
|
|
@@ -156,6 +167,7 @@ def config_from_yaml(
|
|
|
156
167
|
return (
|
|
157
168
|
init_settings,
|
|
158
169
|
env_settings,
|
|
170
|
+
dotenv_settings,
|
|
159
171
|
file_secret_settings,
|
|
160
172
|
YamlConfigSettingsSource(settings_cls, config_yaml),
|
|
161
173
|
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -178,6 +178,9 @@ class Dao(typing.Protocol[Dto]):
|
|
|
178
178
|
Raises:
|
|
179
179
|
ResourceNotFoundError:
|
|
180
180
|
when resource with the id specified in the dto was not found
|
|
181
|
+
UniqueConstraintViolationError:
|
|
182
|
+
when updating the dto would violate a unique index constraint over some
|
|
183
|
+
field other than the ID field.
|
|
181
184
|
"""
|
|
182
185
|
...
|
|
183
186
|
|
|
@@ -250,6 +253,9 @@ class Dao(typing.Protocol[Dto]):
|
|
|
250
253
|
Raises:
|
|
251
254
|
ResourceAlreadyExistsError:
|
|
252
255
|
when a resource with the ID specified in the dto does already exist.
|
|
256
|
+
UniqueConstraintViolationError:
|
|
257
|
+
when inserting the dto would violate a unique index constraint over some
|
|
258
|
+
field other than the ID field.
|
|
253
259
|
"""
|
|
254
260
|
...
|
|
255
261
|
|
|
@@ -260,6 +266,11 @@ class Dao(typing.Protocol[Dto]):
|
|
|
260
266
|
dto:
|
|
261
267
|
Resource content as a pydantic-based data transfer object including the
|
|
262
268
|
resource ID.
|
|
269
|
+
|
|
270
|
+
Raises:
|
|
271
|
+
UniqueConstraintViolationError:
|
|
272
|
+
when upserting the dto would violate a unique index constraint over some
|
|
273
|
+
field other than the ID field.
|
|
263
274
|
"""
|
|
264
275
|
...
|
|
265
276
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -243,12 +243,19 @@ class MongoDbDao(Generic[Dto]):
|
|
|
243
243
|
Raises:
|
|
244
244
|
ResourceNotFoundError:
|
|
245
245
|
when resource with the id specified in the dto was not found
|
|
246
|
+
UniqueConstraintViolationError:
|
|
247
|
+
when updating the dto would violate a unique index constraint over some
|
|
248
|
+
field other than the ID field.
|
|
246
249
|
"""
|
|
247
250
|
document = self._dto_to_document(dto)
|
|
248
251
|
with translate_pymongo_errors():
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
+
try:
|
|
253
|
+
result = await self._collection.replace_one(
|
|
254
|
+
{"_id": document["_id"]}, document
|
|
255
|
+
)
|
|
256
|
+
except DuplicateKeyError as error:
|
|
257
|
+
key_value = error.details.get("keyValue", {}) # type: ignore
|
|
258
|
+
raise UniqueConstraintViolationError(unique_fields=key_value) from error
|
|
252
259
|
|
|
253
260
|
if result.matched_count == 0:
|
|
254
261
|
raise ResourceNotFoundError(id_=document["_id"])
|
|
@@ -353,6 +360,9 @@ class MongoDbDao(Generic[Dto]):
|
|
|
353
360
|
Raises:
|
|
354
361
|
ResourceAlreadyExistsError:
|
|
355
362
|
when a resource with the ID specified in the dto does already exist.
|
|
363
|
+
UniqueConstraintViolationError:
|
|
364
|
+
when inserting the dto would violate a unique index constraint over some
|
|
365
|
+
field other than the ID field.
|
|
356
366
|
"""
|
|
357
367
|
document = self._dto_to_document(dto)
|
|
358
368
|
with translate_pymongo_errors():
|
|
@@ -373,12 +383,21 @@ class MongoDbDao(Generic[Dto]):
|
|
|
373
383
|
dto:
|
|
374
384
|
Resource content as a pydantic-based data transfer object including the
|
|
375
385
|
resource ID.
|
|
386
|
+
|
|
387
|
+
Raises:
|
|
388
|
+
UniqueConstraintViolationError:
|
|
389
|
+
when upserting the dto would violate a unique index constraint over some
|
|
390
|
+
field other than the ID field.
|
|
376
391
|
"""
|
|
377
392
|
document = self._dto_to_document(dto)
|
|
378
393
|
with translate_pymongo_errors():
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
394
|
+
try:
|
|
395
|
+
await self._collection.replace_one(
|
|
396
|
+
{"_id": document["_id"]}, document, upsert=True
|
|
397
|
+
)
|
|
398
|
+
except DuplicateKeyError as error:
|
|
399
|
+
key_value = error.details.get("keyValue", {}) # type: ignore
|
|
400
|
+
raise UniqueConstraintViolationError(unique_fields=key_value) from error
|
|
382
401
|
|
|
383
402
|
|
|
384
403
|
class MongoDbDaoFactory(DaoFactoryProtocol[MongoDbIndex]):
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -28,10 +28,16 @@ from uuid import uuid4
|
|
|
28
28
|
from aiokafka import AIOKafkaProducer
|
|
29
29
|
from pymongo import AsyncMongoClient
|
|
30
30
|
from pymongo.asynchronous.collection import AsyncCollection
|
|
31
|
+
from pymongo.errors import DuplicateKeyError
|
|
31
32
|
|
|
32
33
|
from hexkit.correlation import get_correlation_id, set_correlation_id
|
|
33
34
|
from hexkit.custom_types import ID, JsonObject
|
|
34
|
-
from hexkit.protocols.dao import
|
|
35
|
+
from hexkit.protocols.dao import (
|
|
36
|
+
Dao,
|
|
37
|
+
Dto,
|
|
38
|
+
ResourceNotFoundError,
|
|
39
|
+
UniqueConstraintViolationError,
|
|
40
|
+
)
|
|
35
41
|
from hexkit.protocols.daopub import DaoPublisher, DaoPublisherFactoryProtocol
|
|
36
42
|
from hexkit.protocols.eventpub import EventPublisherProtocol
|
|
37
43
|
from hexkit.providers.akafka import KafkaEventPublisher
|
|
@@ -263,21 +269,29 @@ class MongoKafkaDaoPublisher(Generic[Dto]):
|
|
|
263
269
|
Raises:
|
|
264
270
|
ResourceNotFoundError:
|
|
265
271
|
when resource with the id specified in the dto was not found
|
|
272
|
+
UniqueConstraintViolationError:
|
|
273
|
+
when updating the dto would violate a unique index constraint over some
|
|
274
|
+
field other than the ID field.
|
|
266
275
|
"""
|
|
267
276
|
correlation_id = get_correlation_id()
|
|
268
277
|
document = self._dao._dto_to_document(dto)
|
|
269
278
|
document.setdefault("__metadata__", {})["correlation_id"] = correlation_id
|
|
270
279
|
with translate_pymongo_errors():
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
280
|
+
try:
|
|
281
|
+
result = await self._collection.replace_one(
|
|
282
|
+
{
|
|
283
|
+
"_id": document["_id"],
|
|
284
|
+
"$or": [
|
|
285
|
+
{"__metadata__": {"$exists": False}},
|
|
286
|
+
{"__metadata__.deleted": False},
|
|
287
|
+
],
|
|
288
|
+
},
|
|
289
|
+
document,
|
|
290
|
+
)
|
|
291
|
+
except DuplicateKeyError as error:
|
|
292
|
+
key_value = error.details.get("keyValue", {}) # type: ignore
|
|
293
|
+
raise UniqueConstraintViolationError(unique_fields=key_value) from error
|
|
294
|
+
|
|
281
295
|
if result.matched_count == 0:
|
|
282
296
|
raise ResourceNotFoundError(id_=document["_id"])
|
|
283
297
|
|
|
@@ -389,6 +403,9 @@ class MongoKafkaDaoPublisher(Generic[Dto]):
|
|
|
389
403
|
Raises:
|
|
390
404
|
ResourceAlreadyExistsError:
|
|
391
405
|
when a resource with the ID specified in the dto does already exist.
|
|
406
|
+
UniqueConstraintViolationError:
|
|
407
|
+
when inserting the dto would violate a unique index constraint over some
|
|
408
|
+
field other than the ID field.
|
|
392
409
|
"""
|
|
393
410
|
await self._dao.insert(dto=dto)
|
|
394
411
|
|
|
@@ -402,8 +419,17 @@ class MongoKafkaDaoPublisher(Generic[Dto]):
|
|
|
402
419
|
dto:
|
|
403
420
|
Resource content as a pydantic-based data transfer object including the
|
|
404
421
|
resource ID.
|
|
422
|
+
|
|
423
|
+
Raises:
|
|
424
|
+
UniqueConstraintViolationError:
|
|
425
|
+
when upserting the dto would violate a unique index constraint over some
|
|
426
|
+
field other than the ID field.
|
|
405
427
|
"""
|
|
406
|
-
|
|
428
|
+
try:
|
|
429
|
+
await self._dao.upsert(dto=dto)
|
|
430
|
+
except DuplicateKeyError as error:
|
|
431
|
+
key_value = error.details.get("keyValue", {}) # type: ignore
|
|
432
|
+
raise UniqueConstraintViolationError(unique_fields=key_value) from error
|
|
407
433
|
if self._autopublish:
|
|
408
434
|
await self._publish_change(dto)
|
|
409
435
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright 2021 -
|
|
1
|
+
# Copyright 2021 - 2026 Universität Tübingen, DKFZ, EMBL, and Universität zu Köln
|
|
2
2
|
# for the German Human Genome-Phenome Archive (GHGA)
|
|
3
3
|
#
|
|
4
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hexkit
|
|
3
|
-
Version: 8.
|
|
3
|
+
Version: 8.1.0
|
|
4
4
|
Summary: A Toolkit for Building Microservices using the Hexagonal Architecture
|
|
5
5
|
Author-email: "German Human Genome Phenome Archive (GHGA)" <contact@ghga.de>
|
|
6
6
|
License: Apache 2.0
|
|
@@ -29,7 +29,7 @@ Provides-Extra: s3
|
|
|
29
29
|
Requires-Dist: boto3<2,>=1.42; extra == "s3"
|
|
30
30
|
Requires-Dist: botocore<2,>=1.42; extra == "s3"
|
|
31
31
|
Provides-Extra: mongodb
|
|
32
|
-
Requires-Dist: pymongo<5,>=4.
|
|
32
|
+
Requires-Dist: pymongo<5,>=4.16; extra == "mongodb"
|
|
33
33
|
Provides-Extra: redis
|
|
34
34
|
Requires-Dist: redis<8,>=7.1; extra == "redis"
|
|
35
35
|
Provides-Extra: opentelemetry-base
|
|
@@ -64,16 +64,16 @@ Requires-Dist: hexkit[opentelemetry-fastapi]; extra == "opentelemetry"
|
|
|
64
64
|
Requires-Dist: hexkit[opentelemetry-s3]; extra == "opentelemetry"
|
|
65
65
|
Provides-Extra: test-akafka
|
|
66
66
|
Requires-Dist: hexkit[akafka]; extra == "test-akafka"
|
|
67
|
-
Requires-Dist: testcontainers[kafka]<5,>=4.
|
|
67
|
+
Requires-Dist: testcontainers[kafka]<5,>=4.14; extra == "test-akafka"
|
|
68
68
|
Provides-Extra: test-s3
|
|
69
69
|
Requires-Dist: hexkit[s3]; extra == "test-s3"
|
|
70
|
-
Requires-Dist: testcontainers<5,>=4.
|
|
70
|
+
Requires-Dist: testcontainers<5,>=4.14; extra == "test-s3"
|
|
71
71
|
Provides-Extra: test-mongodb
|
|
72
72
|
Requires-Dist: hexkit[mongodb]; extra == "test-mongodb"
|
|
73
|
-
Requires-Dist: testcontainers[mongo]<5,>=4.
|
|
73
|
+
Requires-Dist: testcontainers[mongo]<5,>=4.14; extra == "test-mongodb"
|
|
74
74
|
Provides-Extra: test-redis
|
|
75
75
|
Requires-Dist: hexkit[redis]; extra == "test-redis"
|
|
76
|
-
Requires-Dist: testcontainers[redis]<5,>=4.
|
|
76
|
+
Requires-Dist: testcontainers[redis]<5,>=4.14; extra == "test-redis"
|
|
77
77
|
Provides-Extra: test
|
|
78
78
|
Requires-Dist: hexkit[test-akafka,test-mongodb,test-s3]; extra == "test"
|
|
79
79
|
Provides-Extra: all
|
|
@@ -12,7 +12,7 @@ hexkit[test]
|
|
|
12
12
|
hexkit[opentelemetry]
|
|
13
13
|
|
|
14
14
|
[mongodb]
|
|
15
|
-
pymongo<5,>=4.
|
|
15
|
+
pymongo<5,>=4.16
|
|
16
16
|
|
|
17
17
|
[opentelemetry]
|
|
18
18
|
hexkit[opentelemetry-akafka]
|
|
@@ -63,16 +63,16 @@ hexkit[test-akafka,test-mongodb,test-s3]
|
|
|
63
63
|
|
|
64
64
|
[test-akafka]
|
|
65
65
|
hexkit[akafka]
|
|
66
|
-
testcontainers[kafka]<5,>=4.
|
|
66
|
+
testcontainers[kafka]<5,>=4.14
|
|
67
67
|
|
|
68
68
|
[test-mongodb]
|
|
69
69
|
hexkit[mongodb]
|
|
70
|
-
testcontainers[mongo]<5,>=4.
|
|
70
|
+
testcontainers[mongo]<5,>=4.14
|
|
71
71
|
|
|
72
72
|
[test-redis]
|
|
73
73
|
hexkit[redis]
|
|
74
|
-
testcontainers[redis]<5,>=4.
|
|
74
|
+
testcontainers[redis]<5,>=4.14
|
|
75
75
|
|
|
76
76
|
[test-s3]
|
|
77
77
|
hexkit[s3]
|
|
78
|
-
testcontainers<5,>=4.
|
|
78
|
+
testcontainers<5,>=4.14
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|