From 2e4055d6b7822d25d0b629ff50c6b0aa6f4db822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Fri, 28 Jan 2022 08:44:54 +0100 Subject: [PATCH 01/97] ISSUE #73 * Add `status` attribute to `Response`. --- .../minos/networks/requests/abc.py | 17 +++++++++++++--- .../test_networks/test_requests/test_abc.py | 20 ++++++++++++------- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/packages/core/minos-microservice-networks/minos/networks/requests/abc.py b/packages/core/minos-microservice-networks/minos/networks/requests/abc.py index 1c35bf7a9..d769a27d2 100644 --- a/packages/core/minos-microservice-networks/minos/networks/requests/abc.py +++ b/packages/core/minos-microservice-networks/minos/networks/requests/abc.py @@ -101,10 +101,13 @@ def __repr__(self) -> str: class Response: """Response definition.""" - __slots__ = "_data" + __slots__ = "_data", "_status" - def __init__(self, data: Any = sentinel): + def __init__(self, data: Any = sentinel, *, status: int = 200): + if not isinstance(status, int): + raise ValueError(f"The status argument must be integer. Obtained: {status}") self._data = data + self._status = status # noinspection PyUnusedLocal async def content(self, **kwargs) -> Any: @@ -123,8 +126,16 @@ def has_content(self) -> bool: """ return self._data is not sentinel + @property + def status(self) -> int: + """The status code of the response. + + :return: An ``int`` value. + """ + return self._status + def __eq__(self, other: Response) -> bool: - return type(self) == type(other) and self._data == other._data + return type(self) == type(other) and self._data == other._data and self._status == other._status def __repr__(self) -> str: return f"{type(self).__name__}({self._data!r})" diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py b/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py index d9802f6c8..e522c276c 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py +++ b/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py @@ -85,19 +85,25 @@ async def test_content(self): response = Response(self.data) self.assertEqual(self.data, await response.content()) - async def test_content_single(self): - response = Response(self.data[0]) - self.assertEqual(self.data[0], await response.content()) + def test_status_default(self): + response = Response(self.data) + self.assertEqual(200, response.status) + + def test_status(self): + response = Response(self.data, status=202) + self.assertEqual(202, response.status) - async def test_content_simple(self): - response = Response(1234) - self.assertEqual(1234, await response.content()) + def test_status_raises(self): + with self.assertRaises(ValueError): + # noinspection PyTypeChecker + Response(self.data, status="wrong") async def test_eq_true(self): - self.assertEqual(Response(self.data), Response(self.data)) + self.assertEqual(Response(self.data, status=202), Response(self.data, status=202)) async def test_eq_false(self): self.assertNotEqual(Response(self.data[0]), Response(self.data[1])) + self.assertNotEqual(Response(self.data[0], status=400), Response(self.data[0], status=202)) async def test_repr(self): response = Response(self.data) From 993e76d889648c911ab38767a5c4d668d02af06d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Fri, 28 Jan 2022 09:15:42 +0100 Subject: [PATCH 02/97] ISSUE #? * Add `pre-commit-install` rule. --- Makefile | 9 ++++++++- .../.pre-commit-config.yaml | 15 ++++++++------- .../core/minos-microservice-aggregate/Makefile | 3 +++ .../.pre-commit-config.yaml | 14 ++++++++------ packages/core/minos-microservice-common/Makefile | 3 +++ .../.pre-commit-config.yaml | 14 ++++++++------ packages/core/minos-microservice-cqrs/Makefile | 3 +++ .../.pre-commit-config.yaml | 14 ++++++++------ .../core/minos-microservice-networks/Makefile | 3 +++ .../.pre-commit-config.yaml | 14 ++++++++------ packages/core/minos-microservice-saga/Makefile | 3 +++ 11 files changed, 63 insertions(+), 32 deletions(-) diff --git a/Makefile b/Makefile index 8096991b5..3e3827eef 100644 --- a/Makefile +++ b/Makefile @@ -23,4 +23,11 @@ docs: $(MAKE) --directory=packages/core/minos-microservice-saga install docs cp -R packages/core/minos-microservice-saga/docs/_build/html $(DOCS_TARGET)/core/minos-microservice-saga - poetry run $(MAKE) --directory=docs html \ No newline at end of file + poetry run $(MAKE) --directory=docs html + +pre-commit-install: + $(MAKE) --directory=packages/core/minos-microservice-aggregate pre-commit-install + $(MAKE) --directory=packages/core/minos-microservice-common pre-commit-install + $(MAKE) --directory=packages/core/minos-microservice-cqrs pre-commit-install + $(MAKE) --directory=packages/core/minos-microservice-networks pre-commit-install + $(MAKE) --directory=packages/core/minos-microservice-saga pre-commit-install diff --git a/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml b/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml index 2b944a41d..800925a91 100644 --- a/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml @@ -1,39 +1,40 @@ -default_stages: [ push ] +files: ^packages/core/minos-microservice-aggregate/ + repos: - repo: local hooks: - id: install pass_filenames: false name: Install dependencies - entry: make install + entry: make --directory=packages/core/minos-microservice-aggregate install language: system - id: reformat pass_filenames: false name: Reformat package - entry: make reformat + entry: make --directory=packages/core/minos-microservice-aggregate reformat language: system - id: lint pass_filenames: false name: Lint package - entry: make lint + entry: make --directory=packages/core/minos-microservice-aggregate lint language: system - id: test pass_filenames: false name: Test package - entry: make test + entry: make --directory=packages/core/minos-microservice-aggregate test language: system - id: docs pass_filenames: false name: Generate documentation - entry: make docs + entry: make --directory=packages/core/minos-microservice-aggregate docs language: system - id: build pass_filenames: false - entry: make dist + entry: make --directory=packages/core/minos-microservice-aggregate dist name: Generate build language: system diff --git a/packages/core/minos-microservice-aggregate/Makefile b/packages/core/minos-microservice-aggregate/Makefile index 9b3b57da2..6caec38a9 100644 --- a/packages/core/minos-microservice-aggregate/Makefile +++ b/packages/core/minos-microservice-aggregate/Makefile @@ -32,3 +32,6 @@ install: update: poetry update + +pre-commit-install: + pre-commit install --hook-type pre-push diff --git a/packages/core/minos-microservice-common/.pre-commit-config.yaml b/packages/core/minos-microservice-common/.pre-commit-config.yaml index c8808ff4e..e8decbd4c 100644 --- a/packages/core/minos-microservice-common/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-common/.pre-commit-config.yaml @@ -1,38 +1,40 @@ +files: ^packages/core/minos-microservice-common/ + repos: - repo: local hooks: - id: install pass_filenames: false name: Install dependencies - entry: make install + entry: make --directory=packages/core/minos-microservice-common install language: system - id: reformat pass_filenames: false name: Reformat package - entry: make reformat + entry: make --directory=packages/core/minos-microservice-common reformat language: system - id: lint pass_filenames: false name: Lint package - entry: make lint + entry: make --directory=packages/core/minos-microservice-common lint language: system - id: test pass_filenames: false name: Test package - entry: make test + entry: make --directory=packages/core/minos-microservice-common test language: system - id: docs pass_filenames: false name: Generate documentation - entry: make docs + entry: make --directory=packages/core/minos-microservice-common docs language: system - id: build pass_filenames: false - entry: make dist + entry: make --directory=packages/core/minos-microservice-common dist name: Generate build language: system diff --git a/packages/core/minos-microservice-common/Makefile b/packages/core/minos-microservice-common/Makefile index 9b3b57da2..6caec38a9 100644 --- a/packages/core/minos-microservice-common/Makefile +++ b/packages/core/minos-microservice-common/Makefile @@ -32,3 +32,6 @@ install: update: poetry update + +pre-commit-install: + pre-commit install --hook-type pre-push diff --git a/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml b/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml index c8808ff4e..19abd620c 100644 --- a/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml @@ -1,38 +1,40 @@ +files: ^packages/core/minos-microservice-cqrs/ + repos: - repo: local hooks: - id: install pass_filenames: false name: Install dependencies - entry: make install + entry: make --directory=packages/core/minos-microservice-cqrs install language: system - id: reformat pass_filenames: false name: Reformat package - entry: make reformat + entry: make --directory=packages/core/minos-microservice-cqrs reformat language: system - id: lint pass_filenames: false name: Lint package - entry: make lint + entry: make --directory=packages/core/minos-microservice-cqrs lint language: system - id: test pass_filenames: false name: Test package - entry: make test + entry: make --directory=packages/core/minos-microservice-cqrs test language: system - id: docs pass_filenames: false name: Generate documentation - entry: make docs + entry: make --directory=packages/core/minos-microservice-cqrs docs language: system - id: build pass_filenames: false - entry: make dist + entry: make --directory=packages/core/minos-microservice-cqrs dist name: Generate build language: system diff --git a/packages/core/minos-microservice-cqrs/Makefile b/packages/core/minos-microservice-cqrs/Makefile index 9b3b57da2..6caec38a9 100644 --- a/packages/core/minos-microservice-cqrs/Makefile +++ b/packages/core/minos-microservice-cqrs/Makefile @@ -32,3 +32,6 @@ install: update: poetry update + +pre-commit-install: + pre-commit install --hook-type pre-push diff --git a/packages/core/minos-microservice-networks/.pre-commit-config.yaml b/packages/core/minos-microservice-networks/.pre-commit-config.yaml index c8808ff4e..df6c07d64 100644 --- a/packages/core/minos-microservice-networks/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-networks/.pre-commit-config.yaml @@ -1,38 +1,40 @@ +files: ^packages/core/minos-microservice-networks/ + repos: - repo: local hooks: - id: install pass_filenames: false name: Install dependencies - entry: make install + entry: make --directory=packages/core/minos-microservice-networks install language: system - id: reformat pass_filenames: false name: Reformat package - entry: make reformat + entry: make --directory=packages/core/minos-microservice-networks reformat language: system - id: lint pass_filenames: false name: Lint package - entry: make lint + entry: make --directory=packages/core/minos-microservice-networks lint language: system - id: test pass_filenames: false name: Test package - entry: make test + entry: make --directory=packages/core/minos-microservice-networks test language: system - id: docs pass_filenames: false name: Generate documentation - entry: make docs + entry: make --directory=packages/core/minos-microservice-networks docs language: system - id: build pass_filenames: false - entry: make dist + entry: make --directory=packages/core/minos-microservice-networks dist name: Generate build language: system diff --git a/packages/core/minos-microservice-networks/Makefile b/packages/core/minos-microservice-networks/Makefile index 9b3b57da2..6caec38a9 100644 --- a/packages/core/minos-microservice-networks/Makefile +++ b/packages/core/minos-microservice-networks/Makefile @@ -32,3 +32,6 @@ install: update: poetry update + +pre-commit-install: + pre-commit install --hook-type pre-push diff --git a/packages/core/minos-microservice-saga/.pre-commit-config.yaml b/packages/core/minos-microservice-saga/.pre-commit-config.yaml index c8808ff4e..497ed2eaf 100644 --- a/packages/core/minos-microservice-saga/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-saga/.pre-commit-config.yaml @@ -1,38 +1,40 @@ +files: ^packages/core/minos-microservice-saga/ + repos: - repo: local hooks: - id: install pass_filenames: false name: Install dependencies - entry: make install + entry: make --directory=packages/core/minos-microservice-saga install language: system - id: reformat pass_filenames: false name: Reformat package - entry: make reformat + entry: make --directory=packages/core/minos-microservice-saga reformat language: system - id: lint pass_filenames: false name: Lint package - entry: make lint + entry: make --directory=packages/core/minos-microservice-saga lint language: system - id: test pass_filenames: false name: Test package - entry: make test + entry: make --directory=packages/core/minos-microservice-saga test language: system - id: docs pass_filenames: false name: Generate documentation - entry: make docs + entry: make --directory=packages/core/minos-microservice-saga docs language: system - id: build pass_filenames: false - entry: make dist + entry: make --directory=packages/core/minos-microservice-saga dist name: Generate build language: system diff --git a/packages/core/minos-microservice-saga/Makefile b/packages/core/minos-microservice-saga/Makefile index 9b3b57da2..6caec38a9 100644 --- a/packages/core/minos-microservice-saga/Makefile +++ b/packages/core/minos-microservice-saga/Makefile @@ -32,3 +32,6 @@ install: update: poetry update + +pre-commit-install: + pre-commit install --hook-type pre-push From 706743bbdb275717fa405d96b18997896f6f3a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Fri, 28 Jan 2022 09:18:59 +0100 Subject: [PATCH 03/97] ISSUE #? * Improve pre-commit config. --- .../.pre-commit-config.yaml | 22 +++++++++---------- .../.pre-commit-config.yaml | 22 +++++++++---------- .../.pre-commit-config.yaml | 22 +++++++++---------- .../.pre-commit-config.yaml | 22 +++++++++---------- .../.pre-commit-config.yaml | 22 +++++++++---------- 5 files changed, 55 insertions(+), 55 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml b/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml index 800925a91..674c3a7aa 100644 --- a/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml @@ -3,37 +3,37 @@ files: ^packages/core/minos-microservice-aggregate/ repos: - repo: local hooks: - - id: install + - id: minos-microservice-aggregate-install pass_filenames: false - name: Install dependencies + name: Install minos-microservice-aggregate dependencies entry: make --directory=packages/core/minos-microservice-aggregate install language: system - - id: reformat + - id: minos-microservice-aggregate-reformat pass_filenames: false - name: Reformat package + name: Reformat minos-microservice-aggregate package entry: make --directory=packages/core/minos-microservice-aggregate reformat language: system - - id: lint + - id: minos-microservice-aggregate-lint pass_filenames: false - name: Lint package + name: Lint minos-microservice-aggregate package entry: make --directory=packages/core/minos-microservice-aggregate lint language: system - - id: test + - id: minos-microservice-aggregate-test pass_filenames: false - name: Test package + name: Test minos-microservice-aggregate package entry: make --directory=packages/core/minos-microservice-aggregate test language: system - - id: docs + - id: minos-microservice-aggregate-docs pass_filenames: false - name: Generate documentation + name: Generate minos-microservice-aggregate documentation entry: make --directory=packages/core/minos-microservice-aggregate docs language: system - - id: build + - id: minos-microservice-aggregate-build pass_filenames: false entry: make --directory=packages/core/minos-microservice-aggregate dist name: Generate build diff --git a/packages/core/minos-microservice-common/.pre-commit-config.yaml b/packages/core/minos-microservice-common/.pre-commit-config.yaml index e8decbd4c..c41227687 100644 --- a/packages/core/minos-microservice-common/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-common/.pre-commit-config.yaml @@ -3,37 +3,37 @@ files: ^packages/core/minos-microservice-common/ repos: - repo: local hooks: - - id: install + - id: minos-microservice-common-install pass_filenames: false - name: Install dependencies + name: Install minos-microservice-common dependencies entry: make --directory=packages/core/minos-microservice-common install language: system - - id: reformat + - id: minos-microservice-common-reformat pass_filenames: false - name: Reformat package + name: Reformat minos-microservice-common package entry: make --directory=packages/core/minos-microservice-common reformat language: system - - id: lint + - id: minos-microservice-common-lint pass_filenames: false - name: Lint package + name: Lint minos-microservice-common package entry: make --directory=packages/core/minos-microservice-common lint language: system - - id: test + - id: minos-microservice-common-test pass_filenames: false - name: Test package + name: Test minos-microservice-common package entry: make --directory=packages/core/minos-microservice-common test language: system - - id: docs + - id: minos-microservice-common-docs pass_filenames: false - name: Generate documentation + name: Generate minos-microservice-common documentation entry: make --directory=packages/core/minos-microservice-common docs language: system - - id: build + - id: minos-microservice-common-build pass_filenames: false entry: make --directory=packages/core/minos-microservice-common dist name: Generate build diff --git a/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml b/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml index 19abd620c..41b59b1da 100644 --- a/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml @@ -3,37 +3,37 @@ files: ^packages/core/minos-microservice-cqrs/ repos: - repo: local hooks: - - id: install + - id: minos-microservice-cqrs-install pass_filenames: false - name: Install dependencies + name: Install minos-microservice-cqrs dependencies entry: make --directory=packages/core/minos-microservice-cqrs install language: system - - id: reformat + - id: minos-microservice-cqrs-reformat pass_filenames: false - name: Reformat package + name: Reformat minos-microservice-cqrs package entry: make --directory=packages/core/minos-microservice-cqrs reformat language: system - - id: lint + - id: minos-microservice-cqrs-lint pass_filenames: false - name: Lint package + name: Lint minos-microservice-cqrs package entry: make --directory=packages/core/minos-microservice-cqrs lint language: system - - id: test + - id: minos-microservice-cqrs-test pass_filenames: false - name: Test package + name: Test minos-microservice-cqrs package entry: make --directory=packages/core/minos-microservice-cqrs test language: system - - id: docs + - id: minos-microservice-cqrs-docs pass_filenames: false - name: Generate documentation + name: Generate minos-microservice-cqrs documentation entry: make --directory=packages/core/minos-microservice-cqrs docs language: system - - id: build + - id: minos-microservice-cqrs-build pass_filenames: false entry: make --directory=packages/core/minos-microservice-cqrs dist name: Generate build diff --git a/packages/core/minos-microservice-networks/.pre-commit-config.yaml b/packages/core/minos-microservice-networks/.pre-commit-config.yaml index df6c07d64..f134b2134 100644 --- a/packages/core/minos-microservice-networks/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-networks/.pre-commit-config.yaml @@ -3,37 +3,37 @@ files: ^packages/core/minos-microservice-networks/ repos: - repo: local hooks: - - id: install + - id: minos-microservice-networks-install pass_filenames: false - name: Install dependencies + name: Install minos-microservice-networks dependencies entry: make --directory=packages/core/minos-microservice-networks install language: system - - id: reformat + - id: minos-microservice-networks-reformat pass_filenames: false - name: Reformat package + name: Reformat minos-microservice-networks package entry: make --directory=packages/core/minos-microservice-networks reformat language: system - - id: lint + - id: minos-microservice-networks-lint pass_filenames: false - name: Lint package + name: Lint minos-microservice-networks package entry: make --directory=packages/core/minos-microservice-networks lint language: system - - id: test + - id: minos-microservice-networks-test pass_filenames: false - name: Test package + name: Test minos-microservice-networks package entry: make --directory=packages/core/minos-microservice-networks test language: system - - id: docs + - id: minos-microservice-networks-docs pass_filenames: false - name: Generate documentation + name: Generate minos-microservice-networks documentation entry: make --directory=packages/core/minos-microservice-networks docs language: system - - id: build + - id: minos-microservice-networks-build pass_filenames: false entry: make --directory=packages/core/minos-microservice-networks dist name: Generate build diff --git a/packages/core/minos-microservice-saga/.pre-commit-config.yaml b/packages/core/minos-microservice-saga/.pre-commit-config.yaml index 497ed2eaf..e09b2feac 100644 --- a/packages/core/minos-microservice-saga/.pre-commit-config.yaml +++ b/packages/core/minos-microservice-saga/.pre-commit-config.yaml @@ -3,37 +3,37 @@ files: ^packages/core/minos-microservice-saga/ repos: - repo: local hooks: - - id: install + - id: minos-microservice-saga-install pass_filenames: false - name: Install dependencies + name: Install minos-microservice-saga dependencies entry: make --directory=packages/core/minos-microservice-saga install language: system - - id: reformat + - id: minos-microservice-saga-reformat pass_filenames: false - name: Reformat package + name: Reformat minos-microservice-saga package entry: make --directory=packages/core/minos-microservice-saga reformat language: system - - id: lint + - id: minos-microservice-saga-lint pass_filenames: false - name: Lint package + name: Lint minos-microservice-saga package entry: make --directory=packages/core/minos-microservice-saga lint language: system - - id: test + - id: minos-microservice-saga-test pass_filenames: false - name: Test package + name: Test minos-microservice-saga package entry: make --directory=packages/core/minos-microservice-saga test language: system - - id: docs + - id: minos-microservice-saga-docs pass_filenames: false - name: Generate documentation + name: Generate minos-microservice-saga documentation entry: make --directory=packages/core/minos-microservice-saga docs language: system - - id: build + - id: minos-microservice-saga-build pass_filenames: false entry: make --directory=packages/core/minos-microservice-saga dist name: Generate build From 493b884491a23c867cc1cd1ac97778a08d2bd3a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Fri, 28 Jan 2022 09:29:04 +0100 Subject: [PATCH 04/97] ISSUE #? * Use single `pre-commit` config file. --- .pre-commit-config.yaml | 38 ++++++++++++++++++ Makefile | 7 ---- .../.pre-commit-config.yaml | 40 ------------------- .../minos-microservice-aggregate/Makefile | 9 ++++- .../.pre-commit-config.yaml | 40 ------------------- .../core/minos-microservice-common/Makefile | 9 ++++- .../.pre-commit-config.yaml | 40 ------------------- .../core/minos-microservice-cqrs/Makefile | 9 ++++- .../.pre-commit-config.yaml | 40 ------------------- .../core/minos-microservice-networks/Makefile | 9 ++++- .../.pre-commit-config.yaml | 40 ------------------- .../core/minos-microservice-saga/Makefile | 9 ++++- 12 files changed, 73 insertions(+), 217 deletions(-) create mode 100644 .pre-commit-config.yaml delete mode 100644 packages/core/minos-microservice-aggregate/.pre-commit-config.yaml delete mode 100644 packages/core/minos-microservice-common/.pre-commit-config.yaml delete mode 100644 packages/core/minos-microservice-cqrs/.pre-commit-config.yaml delete mode 100644 packages/core/minos-microservice-networks/.pre-commit-config.yaml delete mode 100644 packages/core/minos-microservice-saga/.pre-commit-config.yaml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..db0b46298 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,38 @@ +repos: + - repo: local + hooks: + + - id: minos-microservice-aggregate-check + pass_filenames: false + entry: make --directory=packages/core/minos-microservice-aggregate check + name: Check minos-microservice-aggregate + files: ^packages/core/minos-microservice-aggregate/ + language: system + + - id: minos-microservice-common-check + pass_filenames: false + entry: make --directory=packages/core/minos-microservice-common check + name: Check minos-microservice-common + files: ^packages/core/minos-microservice-common/ + language: system + + - id: minos-microservice-cqrs-check + pass_filenames: false + entry: make --directory=packages/core/minos-microservice-cqrs check + name: Check minos-microservice-cqrs + files: ^packages/core/minos-microservice-cqrs/ + language: system + + - id: minos-microservice-networks-check + pass_filenames: false + entry: make --directory=packages/core/minos-microservice-networks check + name: Check minos-microservice-networks + files: ^packages/core/minos-microservice-networks/ + language: system + + - id: minos-microservice-saga-check + pass_filenames: false + entry: make --directory=packages/core/minos-microservice-saga check + name: Check minos-microservice-saga + files: ^packages/core/minos-microservice-saga/ + language: system diff --git a/Makefile b/Makefile index 3e3827eef..f6bdc6cc1 100644 --- a/Makefile +++ b/Makefile @@ -24,10 +24,3 @@ docs: cp -R packages/core/minos-microservice-saga/docs/_build/html $(DOCS_TARGET)/core/minos-microservice-saga poetry run $(MAKE) --directory=docs html - -pre-commit-install: - $(MAKE) --directory=packages/core/minos-microservice-aggregate pre-commit-install - $(MAKE) --directory=packages/core/minos-microservice-common pre-commit-install - $(MAKE) --directory=packages/core/minos-microservice-cqrs pre-commit-install - $(MAKE) --directory=packages/core/minos-microservice-networks pre-commit-install - $(MAKE) --directory=packages/core/minos-microservice-saga pre-commit-install diff --git a/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml b/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml deleted file mode 100644 index 674c3a7aa..000000000 --- a/packages/core/minos-microservice-aggregate/.pre-commit-config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -files: ^packages/core/minos-microservice-aggregate/ - -repos: - - repo: local - hooks: - - id: minos-microservice-aggregate-install - pass_filenames: false - name: Install minos-microservice-aggregate dependencies - entry: make --directory=packages/core/minos-microservice-aggregate install - language: system - - - id: minos-microservice-aggregate-reformat - pass_filenames: false - name: Reformat minos-microservice-aggregate package - entry: make --directory=packages/core/minos-microservice-aggregate reformat - language: system - - - id: minos-microservice-aggregate-lint - pass_filenames: false - name: Lint minos-microservice-aggregate package - entry: make --directory=packages/core/minos-microservice-aggregate lint - language: system - - - id: minos-microservice-aggregate-test - pass_filenames: false - name: Test minos-microservice-aggregate package - entry: make --directory=packages/core/minos-microservice-aggregate test - language: system - - - id: minos-microservice-aggregate-docs - pass_filenames: false - name: Generate minos-microservice-aggregate documentation - entry: make --directory=packages/core/minos-microservice-aggregate docs - language: system - - - id: minos-microservice-aggregate-build - pass_filenames: false - entry: make --directory=packages/core/minos-microservice-aggregate dist - name: Generate build - language: system diff --git a/packages/core/minos-microservice-aggregate/Makefile b/packages/core/minos-microservice-aggregate/Makefile index 6caec38a9..854bc90bc 100644 --- a/packages/core/minos-microservice-aggregate/Makefile +++ b/packages/core/minos-microservice-aggregate/Makefile @@ -33,5 +33,10 @@ install: update: poetry update -pre-commit-install: - pre-commit install --hook-type pre-push +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist diff --git a/packages/core/minos-microservice-common/.pre-commit-config.yaml b/packages/core/minos-microservice-common/.pre-commit-config.yaml deleted file mode 100644 index c41227687..000000000 --- a/packages/core/minos-microservice-common/.pre-commit-config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -files: ^packages/core/minos-microservice-common/ - -repos: - - repo: local - hooks: - - id: minos-microservice-common-install - pass_filenames: false - name: Install minos-microservice-common dependencies - entry: make --directory=packages/core/minos-microservice-common install - language: system - - - id: minos-microservice-common-reformat - pass_filenames: false - name: Reformat minos-microservice-common package - entry: make --directory=packages/core/minos-microservice-common reformat - language: system - - - id: minos-microservice-common-lint - pass_filenames: false - name: Lint minos-microservice-common package - entry: make --directory=packages/core/minos-microservice-common lint - language: system - - - id: minos-microservice-common-test - pass_filenames: false - name: Test minos-microservice-common package - entry: make --directory=packages/core/minos-microservice-common test - language: system - - - id: minos-microservice-common-docs - pass_filenames: false - name: Generate minos-microservice-common documentation - entry: make --directory=packages/core/minos-microservice-common docs - language: system - - - id: minos-microservice-common-build - pass_filenames: false - entry: make --directory=packages/core/minos-microservice-common dist - name: Generate build - language: system diff --git a/packages/core/minos-microservice-common/Makefile b/packages/core/minos-microservice-common/Makefile index 6caec38a9..854bc90bc 100644 --- a/packages/core/minos-microservice-common/Makefile +++ b/packages/core/minos-microservice-common/Makefile @@ -33,5 +33,10 @@ install: update: poetry update -pre-commit-install: - pre-commit install --hook-type pre-push +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist diff --git a/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml b/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml deleted file mode 100644 index 41b59b1da..000000000 --- a/packages/core/minos-microservice-cqrs/.pre-commit-config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -files: ^packages/core/minos-microservice-cqrs/ - -repos: - - repo: local - hooks: - - id: minos-microservice-cqrs-install - pass_filenames: false - name: Install minos-microservice-cqrs dependencies - entry: make --directory=packages/core/minos-microservice-cqrs install - language: system - - - id: minos-microservice-cqrs-reformat - pass_filenames: false - name: Reformat minos-microservice-cqrs package - entry: make --directory=packages/core/minos-microservice-cqrs reformat - language: system - - - id: minos-microservice-cqrs-lint - pass_filenames: false - name: Lint minos-microservice-cqrs package - entry: make --directory=packages/core/minos-microservice-cqrs lint - language: system - - - id: minos-microservice-cqrs-test - pass_filenames: false - name: Test minos-microservice-cqrs package - entry: make --directory=packages/core/minos-microservice-cqrs test - language: system - - - id: minos-microservice-cqrs-docs - pass_filenames: false - name: Generate minos-microservice-cqrs documentation - entry: make --directory=packages/core/minos-microservice-cqrs docs - language: system - - - id: minos-microservice-cqrs-build - pass_filenames: false - entry: make --directory=packages/core/minos-microservice-cqrs dist - name: Generate build - language: system diff --git a/packages/core/minos-microservice-cqrs/Makefile b/packages/core/minos-microservice-cqrs/Makefile index 6caec38a9..854bc90bc 100644 --- a/packages/core/minos-microservice-cqrs/Makefile +++ b/packages/core/minos-microservice-cqrs/Makefile @@ -33,5 +33,10 @@ install: update: poetry update -pre-commit-install: - pre-commit install --hook-type pre-push +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist diff --git a/packages/core/minos-microservice-networks/.pre-commit-config.yaml b/packages/core/minos-microservice-networks/.pre-commit-config.yaml deleted file mode 100644 index f134b2134..000000000 --- a/packages/core/minos-microservice-networks/.pre-commit-config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -files: ^packages/core/minos-microservice-networks/ - -repos: - - repo: local - hooks: - - id: minos-microservice-networks-install - pass_filenames: false - name: Install minos-microservice-networks dependencies - entry: make --directory=packages/core/minos-microservice-networks install - language: system - - - id: minos-microservice-networks-reformat - pass_filenames: false - name: Reformat minos-microservice-networks package - entry: make --directory=packages/core/minos-microservice-networks reformat - language: system - - - id: minos-microservice-networks-lint - pass_filenames: false - name: Lint minos-microservice-networks package - entry: make --directory=packages/core/minos-microservice-networks lint - language: system - - - id: minos-microservice-networks-test - pass_filenames: false - name: Test minos-microservice-networks package - entry: make --directory=packages/core/minos-microservice-networks test - language: system - - - id: minos-microservice-networks-docs - pass_filenames: false - name: Generate minos-microservice-networks documentation - entry: make --directory=packages/core/minos-microservice-networks docs - language: system - - - id: minos-microservice-networks-build - pass_filenames: false - entry: make --directory=packages/core/minos-microservice-networks dist - name: Generate build - language: system diff --git a/packages/core/minos-microservice-networks/Makefile b/packages/core/minos-microservice-networks/Makefile index 6caec38a9..854bc90bc 100644 --- a/packages/core/minos-microservice-networks/Makefile +++ b/packages/core/minos-microservice-networks/Makefile @@ -33,5 +33,10 @@ install: update: poetry update -pre-commit-install: - pre-commit install --hook-type pre-push +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist diff --git a/packages/core/minos-microservice-saga/.pre-commit-config.yaml b/packages/core/minos-microservice-saga/.pre-commit-config.yaml deleted file mode 100644 index e09b2feac..000000000 --- a/packages/core/minos-microservice-saga/.pre-commit-config.yaml +++ /dev/null @@ -1,40 +0,0 @@ -files: ^packages/core/minos-microservice-saga/ - -repos: - - repo: local - hooks: - - id: minos-microservice-saga-install - pass_filenames: false - name: Install minos-microservice-saga dependencies - entry: make --directory=packages/core/minos-microservice-saga install - language: system - - - id: minos-microservice-saga-reformat - pass_filenames: false - name: Reformat minos-microservice-saga package - entry: make --directory=packages/core/minos-microservice-saga reformat - language: system - - - id: minos-microservice-saga-lint - pass_filenames: false - name: Lint minos-microservice-saga package - entry: make --directory=packages/core/minos-microservice-saga lint - language: system - - - id: minos-microservice-saga-test - pass_filenames: false - name: Test minos-microservice-saga package - entry: make --directory=packages/core/minos-microservice-saga test - language: system - - - id: minos-microservice-saga-docs - pass_filenames: false - name: Generate minos-microservice-saga documentation - entry: make --directory=packages/core/minos-microservice-saga docs - language: system - - - id: minos-microservice-saga-build - pass_filenames: false - entry: make --directory=packages/core/minos-microservice-saga dist - name: Generate build - language: system diff --git a/packages/core/minos-microservice-saga/Makefile b/packages/core/minos-microservice-saga/Makefile index 6caec38a9..854bc90bc 100644 --- a/packages/core/minos-microservice-saga/Makefile +++ b/packages/core/minos-microservice-saga/Makefile @@ -33,5 +33,10 @@ install: update: poetry update -pre-commit-install: - pre-commit install --hook-type pre-push +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist From 3ed6ddddfabf5449dd4af05869f9f88eaefca150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Fri, 28 Jan 2022 10:15:51 +0100 Subject: [PATCH 05/97] ISSUE #73 * Add support for custom status value on responses. --- .../networks/brokers/dispatchers/impl.py | 25 +++++++------ .../minos/networks/requests/abc.py | 14 ++++++++ .../minos/networks/rest/handlers.py | 8 +++-- .../minos/networks/rest/requests.py | 4 +-- .../test_dispatchers/test_impl.py | 35 +++++++++++++++---- .../test_networks/test_requests/test_abc.py | 4 +++ .../test_networks/test_rest/test_handlers.py | 17 +++++++-- 7 files changed, 81 insertions(+), 26 deletions(-) diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/dispatchers/impl.py b/packages/core/minos-microservice-networks/minos/networks/brokers/dispatchers/impl.py index 91a8c68cf..9e6d3c59f 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/dispatchers/impl.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/dispatchers/impl.py @@ -14,7 +14,6 @@ isawaitable, ) from typing import ( - Any, Optional, Union, ) @@ -124,20 +123,16 @@ async def dispatch(self, message: BrokerMessage) -> None: action = self.get_action(message.topic) fn = self.get_callback(action) - data, status, headers = await fn(message) + payload = await fn(message) if message.should_reply: - reply = BrokerMessageV1( - topic=message.reply_topic, - payload=BrokerMessageV1Payload(content=data, status=status, headers=headers), - identifier=message.identifier, - ) + reply = BrokerMessageV1(topic=message.reply_topic, payload=payload, identifier=message.identifier) await self.publisher.send(reply) @staticmethod def get_callback( fn: Callable[[BrokerRequest], Union[Optional[BrokerResponse], Awaitable[Optional[BrokerResponse]]]] - ) -> Callable[[BrokerMessage], Awaitable[tuple[Any, int, dict[str, str]]]]: + ) -> Callable[[BrokerMessage], Awaitable[BrokerMessageV1Payload]]: """Get the handler function to be used by the Broker Handler. :param fn: The action function. @@ -145,7 +140,7 @@ def get_callback( """ @wraps(fn) - async def _wrapper(raw: BrokerMessage) -> tuple[Any, int, dict[str, str]]: + async def _wrapper(raw: BrokerMessage) -> BrokerMessageV1Payload: logger.info(f"Dispatching '{raw!s}'...") request = BrokerRequest(raw) @@ -157,18 +152,22 @@ async def _wrapper(raw: BrokerMessage) -> tuple[Any, int, dict[str, str]]: if isawaitable(response): response = await response if isinstance(response, Response): - response = await response.content() - return response, BrokerMessageV1Status.SUCCESS, REQUEST_HEADERS_CONTEXT_VAR.get() + content, status = await response.content(), response.status + else: + content, status = None, BrokerMessageV1Status.SUCCESS except ResponseException as exc: logger.warning(f"Raised an application exception: {exc!s}") - return repr(exc), BrokerMessageV1Status.ERROR, REQUEST_HEADERS_CONTEXT_VAR.get() + content, status = repr(exc), exc.status except Exception as exc: logger.exception(f"Raised a system exception: {exc!r}") - return repr(exc), BrokerMessageV1Status.SYSTEM_ERROR, REQUEST_HEADERS_CONTEXT_VAR.get() + content, status = repr(exc), BrokerMessageV1Status.SYSTEM_ERROR finally: + headers = REQUEST_HEADERS_CONTEXT_VAR.get() REQUEST_USER_CONTEXT_VAR.reset(user_token) REQUEST_HEADERS_CONTEXT_VAR.reset(headers_token) + return BrokerMessageV1Payload(content=content, status=status, headers=headers) + return _wrapper def get_action(self, topic: str) -> Callable[[Request], Union[Optional[Response], Awaitable[Optional[Response]]]]: diff --git a/packages/core/minos-microservice-networks/minos/networks/requests/abc.py b/packages/core/minos-microservice-networks/minos/networks/requests/abc.py index d769a27d2..316cd4e4c 100644 --- a/packages/core/minos-microservice-networks/minos/networks/requests/abc.py +++ b/packages/core/minos-microservice-networks/minos/networks/requests/abc.py @@ -116,6 +116,8 @@ async def content(self, **kwargs) -> Any: :param kwargs: Additional named arguments. :return: A list of items. """ + if not self.has_content: + return None return self._data @property @@ -146,3 +148,15 @@ def __hash__(self): class ResponseException(MinosException): """Response Exception class.""" + + def __init__(self, *args, status: int = 400): + super().__init__(*args) + self._status = status + + @property + def status(self) -> int: + """The status code of the response. + + :return: An ``int`` value. + """ + return self._status diff --git a/packages/core/minos-microservice-networks/minos/networks/rest/handlers.py b/packages/core/minos-microservice-networks/minos/networks/rest/handlers.py index 54357c9ce..dc1ca7297 100644 --- a/packages/core/minos-microservice-networks/minos/networks/rest/handlers.py +++ b/packages/core/minos-microservice-networks/minos/networks/rest/handlers.py @@ -139,11 +139,15 @@ async def _wrapper(request: web.Request) -> web.Response: if not isinstance(response, RestResponse): response = RestResponse.from_response(response) - return web.Response(body=await response.content(), content_type=response.content_type) + content = await response.content() + content_type = response.content_type + status = response.status + + return web.Response(body=content, content_type=content_type, status=status) except ResponseException as exc: logger.warning(f"Raised an application exception: {exc!s}") - raise web.HTTPBadRequest(text=str(exc)) + return web.Response(text=str(exc), status=exc.status) except Exception as exc: logger.exception(f"Raised a system exception: {exc!r}") raise web.HTTPInternalServerError() diff --git a/packages/core/minos-microservice-networks/minos/networks/rest/requests.py b/packages/core/minos-microservice-networks/minos/networks/rest/requests.py index a5b030fbb..fceeb98ea 100644 --- a/packages/core/minos-microservice-networks/minos/networks/rest/requests.py +++ b/packages/core/minos-microservice-networks/minos/networks/rest/requests.py @@ -250,8 +250,8 @@ def _parse_multi_dict(raw: Iterable[str, Any]) -> dict[str, Any]: class RestResponse(Response): """Rest Response class.""" - def __init__(self, *args, content_type: str = "application/json"): - super().__init__(*args) + def __init__(self, *args, content_type: str = "application/json", **kwargs): + super().__init__(*args, **kwargs) self.content_type = content_type @classmethod diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_dispatchers/test_impl.py b/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_dispatchers/test_impl.py index 5c157df05..01302d94b 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_dispatchers/test_impl.py +++ b/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_dispatchers/test_impl.py @@ -41,6 +41,10 @@ class _Cls: async def _fn(request: Request) -> Response: return BrokerResponse(await request.content()) + @staticmethod + async def _fn_status(request: Request) -> Response: + return BrokerResponse(status=await request.content()) + @staticmethod async def _fn_none(request: Request): await request.content() @@ -120,20 +124,39 @@ async def test_get_action_raises(self): async def test_get_callback(self): fn = self.dispatcher.get_callback(_Cls._fn) - self.assertEqual((FakeModel("foo"), BrokerMessageV1Status.SUCCESS, self.headers), await fn(self.message)) + expected = BrokerMessageV1Payload(FakeModel("foo"), self.headers, BrokerMessageV1Status.SUCCESS) + self.assertEqual(expected, await fn(self.message)) + + async def test_get_callback_status(self): + fn = self.dispatcher.get_callback(_Cls._fn_status) + + message = BrokerMessageV1( + topic="AddOrder", + identifier=self.identifier, + reply_topic="UpdateTicket", + payload=BrokerMessageV1Payload(content=203, headers=self.headers), + ) + + # noinspection PyArgumentEqualDefault + expected = BrokerMessageV1Payload(None, self.headers, BrokerMessageV1Status.UNKNOWN) + self.assertEqual(expected, await fn(message)) async def test_get_callback_none(self): fn = self.dispatcher.get_callback(_Cls._fn_none) - self.assertEqual((None, BrokerMessageV1Status.SUCCESS, self.headers), await fn(self.message)) + # noinspection PyArgumentEqualDefault + expected = BrokerMessageV1Payload(None, self.headers, BrokerMessageV1Status.SUCCESS) + self.assertEqual(expected, await fn(self.message)) async def test_get_callback_raises_response(self): fn = self.dispatcher.get_callback(_Cls._fn_raises_response) - expected = (repr(BrokerResponseException("foo")), BrokerMessageV1Status.ERROR, self.headers) + expected = BrokerMessageV1Payload( + repr(BrokerResponseException("foo")), self.headers, BrokerMessageV1Status.ERROR + ) self.assertEqual(expected, await fn(self.message)) async def test_get_callback_raises_exception(self): fn = self.dispatcher.get_callback(_Cls._fn_raises_exception) - expected = (repr(ValueError()), BrokerMessageV1Status.SYSTEM_ERROR, self.headers) + expected = BrokerMessageV1Payload(repr(ValueError()), self.headers, BrokerMessageV1Status.SYSTEM_ERROR) self.assertEqual(expected, await fn(self.message)) async def test_get_callback_with_user(self): @@ -156,9 +179,9 @@ async def _fn(request) -> None: mock = AsyncMock(side_effect=_fn) action = self.dispatcher.get_callback(mock) - _, _, observed = await action(self.message) + payload = await action(self.message) - self.assertEqual(self.headers | {"bar": "foo"}, observed) + self.assertEqual(self.headers | {"bar": "foo"}, payload.headers) async def test_dispatch_with_response(self): callback_mock = AsyncMock(return_value=Response("add_order")) diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py b/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py index e522c276c..5f04e0e08 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py +++ b/packages/core/minos-microservice-networks/tests/test_networks/test_requests/test_abc.py @@ -85,6 +85,10 @@ async def test_content(self): response = Response(self.data) self.assertEqual(self.data, await response.content()) + async def test_content_empty(self): + response = Response() + self.assertEqual(None, await response.content()) + def test_status_default(self): response = Response(self.data) self.assertEqual(200, response.status) diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_rest/test_handlers.py b/packages/core/minos-microservice-networks/tests/test_networks/test_rest/test_handlers.py index 8a71710da..e40f04d97 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_rest/test_handlers.py +++ b/packages/core/minos-microservice-networks/tests/test_networks/test_rest/test_handlers.py @@ -10,7 +10,6 @@ web, ) from aiohttp.web_exceptions import ( - HTTPBadRequest, HTTPInternalServerError, ) from orjson import ( @@ -42,6 +41,10 @@ class _Cls: async def _fn(request: Request) -> Response: return RestResponse(await request.content()) + @staticmethod + async def _fn_status(request: Request) -> Response: + return RestResponse(status=await request.content()) + @staticmethod async def _fn_none(request: Request): return @@ -80,6 +83,14 @@ async def test_get_callback(self): self.assertEqual(orjson.dumps({"foo": "bar"}), response.body) self.assertEqual("application/json", response.content_type) + async def test_get_callback_status(self): + handler = self.handler.get_callback(_Cls._fn_status) + response = await handler(json_mocked_request(203)) + self.assertIsInstance(response, web.Response) + self.assertEqual(None, response.body) + self.assertEqual("application/json", response.content_type) + self.assertEqual(203, response.status) + async def test_get_callback_none(self): handler = self.handler.get_callback(_Cls._fn_none) response = await handler(mocked_request()) @@ -89,8 +100,8 @@ async def test_get_callback_none(self): async def test_get_callback_raises_response(self): handler = self.handler.get_callback(_Cls._fn_raises_response) - with self.assertRaises(HTTPBadRequest): - await handler(json_mocked_request({"foo": "bar"})) + response = await handler(json_mocked_request({"foo": "bar"})) + self.assertEqual(400, response.status) async def test_get_callback_raises_exception(self): handler = self.handler.get_callback(_Cls._fn_raises_exception) From ebcddf11b882fa7e9698e0cc50bdfbeace12a253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Fri, 28 Jan 2022 10:28:31 +0100 Subject: [PATCH 06/97] ISSUE #28 * Start using the `HandlerWrapper` protocol. --- packages/core/minos-microservice-cqrs/minos/cqrs/services.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/core/minos-microservice-cqrs/minos/cqrs/services.py b/packages/core/minos-microservice-cqrs/minos/cqrs/services.py index 46c229838..267d85f85 100644 --- a/packages/core/minos-microservice-cqrs/minos/cqrs/services.py +++ b/packages/core/minos-microservice-cqrs/minos/cqrs/services.py @@ -26,6 +26,7 @@ ) from minos.networks import ( EnrouteDecorator, + HandlerWrapper, Request, WrappedRequest, ) @@ -59,9 +60,9 @@ def __getattr__(self, item: str) -> Any: def __get_enroute__(cls, config: MinosConfig) -> dict[str, set[EnrouteDecorator]]: result = dict() for name, fn in getmembers(cls, predicate=lambda x: ismethod(x) or isfunction(x)): - if not hasattr(fn, "__decorators__"): + if not isinstance(fn, HandlerWrapper): continue - result[name] = fn.__decorators__ + result[name] = fn.meta.decorators return result @staticmethod From d4ee1c6e163faa28f95ed34a8f2874186ff3677b Mon Sep 17 00:00:00 2001 From: Andrea Mucci <81492948+andrea-mucci@users.noreply.github.com> Date: Fri, 28 Jan 2022 16:29:32 +0100 Subject: [PATCH 07/97] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 735c7a8f5..7044f7112 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ [![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) [![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/minos-framework/community) - +[![](https://tokei.rs/b1/github/minos-framework/minos-python?category=lines)](https://github.com/minos-framework/minos-python). ## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. From 137d73124ad8af0e7ec5abb3f5e90f29e4ebb8ab Mon Sep 17 00:00:00 2001 From: Andrea Mucci <81492948+andrea-mucci@users.noreply.github.com> Date: Fri, 28 Jan 2022 16:30:56 +0100 Subject: [PATCH 08/97] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7044f7112..93efb941e 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ [![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) [![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/minos-framework/community) -[![](https://tokei.rs/b1/github/minos-framework/minos-python?category=lines)](https://github.com/minos-framework/minos-python). +[![](https://tokei.rs/b1/github/minos-framework/minos-python?category=code)](https://github.com/minos-framework/minos-python). ## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. From 6bc25379f96efc5641878061f38148060decbe1a Mon Sep 17 00:00:00 2001 From: Andrea Mucci <81492948+andrea-mucci@users.noreply.github.com> Date: Fri, 28 Jan 2022 16:41:08 +0100 Subject: [PATCH 09/97] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 93efb941e..e7f222281 100644 --- a/README.md +++ b/README.md @@ -3,18 +3,22 @@ Minos logo

+ + # minos-python: The framework which helps you create reactive microservices in Python + [![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-aggregate.svg?label=minos-microservice-aggregate)](https://pypi.org/project/minos-microservice-aggregate/) [![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-common.svg?label=minos-microservice-common)](https://pypi.org/project/minos-microservice-common/) [![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-cqrs.svg?label=minos-microservice-cqrs)](https://pypi.org/project/minos-microservice-cqrs/) [![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-networks.svg?label=minos-microservice-networks)](https://pypi.org/project/minos-microservice-networks/) -[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-saga.svg?label=minos-microservice-saga)](https://pypi.org/project/minos-microservice-saga/) +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-saga.svg?label=minos-microservice-saga)](https://pypi.org/project/minos-microservice-saga/) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) [![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) [![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) [![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/minos-framework/community) [![](https://tokei.rs/b1/github/minos-framework/minos-python?category=code)](https://github.com/minos-framework/minos-python). + ## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. From d3e7bc34a4c6b701fd91c413f99f7ee3ec8e6ded Mon Sep 17 00:00:00 2001 From: Andrea Mucci <81492948+andrea-mucci@users.noreply.github.com> Date: Fri, 28 Jan 2022 16:42:16 +0100 Subject: [PATCH 10/97] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e7f222281..e74f10550 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ [![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) [![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/minos-framework/community) -[![](https://tokei.rs/b1/github/minos-framework/minos-python?category=code)](https://github.com/minos-framework/minos-python). +[![](https://tokei.rs/b1/github/minos-framework/minos-python?category=code)](https://github.com/minos-framework/minos-python) ## Summary From 05d2559714e14e38522f50bdffcd75465366d34b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 08:57:59 +0100 Subject: [PATCH 11/97] ISSUE #123 * Update packages readme files. --- .../minos-microservice-aggregate/README.md | 90 +++++-------------- .../core/minos-microservice-common/README.md | 90 +++++-------------- .../core/minos-microservice-cqrs/README.md | 90 +++++-------------- .../minos-microservice-networks/README.md | 90 +++++-------------- .../core/minos-microservice-saga/README.md | 89 +++++------------- 5 files changed, 105 insertions(+), 344 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/README.md b/packages/core/minos-microservice-aggregate/README.md index 709e5499a..4549b7c97 100644 --- a/packages/core/minos-microservice-aggregate/README.md +++ b/packages/core/minos-microservice-aggregate/README.md @@ -1,7 +1,16 @@ -# Minos Microservice Aggregate +

+ Minos logo +

-[![codecov](https://codecov.io/gh/Clariteia/minos_microservice_aggregate/branch/main/graph/badge.svg)](https://codecov.io/gh/Clariteia/minos_microservice_aggregate) -![Tests](https://github.com/Clariteia/minos_microservice_aggregate/actions/workflows/python-tests.yml/badge.svg) +## minos-microservice-aggregate + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-aggregate.svg)](https://pypi.org/project/minos-microservice-aggregate/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an @@ -9,76 +18,19 @@ asynchronous environment. ## Documentation -The official documentation as well as the API you can find it under https://clariteia.github.io/minos_microservice_aggregate/. -Please, submit any issue regarding documentation as well! - -## Set up a development environment - -Minos uses `poetry` as its default package manager. Please refer to the -[Poetry installation guide](https://python-poetry.org/docs/#installation) for instructions on how to install it. - -Now you con install all the dependencies by running -```bash -make install -``` - -In order to make the pre-commits checks available to git, run -```bash -pre-commit install -``` - -Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. - -## Run the tests - -In order to run the tests, please make sure you have the [Docker Engine](https://docs.docker.com/engine/install/) -and [Docker Compose](https://docs.docker.com/compose/install/) installed. - -Move into `tests/` directory - -```bash -cd tests/ -``` -Run service dependencies: - -```bash -docker-compose up -d -``` - -Install library dependencies: - -```bash -make install -``` - -Run tests: - -```bash -make test -``` - -## How to contribute - -Minos being an open-source project, we are looking forward to having your contributions. No matter whether it is a pull -request with new features, or the creation of an issue related to a bug you have found. - -Please consider these guidelines before you submit any modification. +The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). -### Create an issue +## Source Code -1. If you happen to find a bug, please file a new issue filling the 'Bug report' template. -2. Set the appropriate labels, so we can categorise it easily. -3. Wait for any core developer's feedback on it. +The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). -### Submit a Pull Request +## Getting Help -1. Create an issue following the previous steps. -2. Fork the project. -3. Push your changes to a local branch. -4. Run the tests! -5. Submit a pull request from your fork's branch. +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). -## Credits +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. -This package was created with [Cookiecutter](https://github.com/audreyr/cookiecutter) and the [Minos Package](https://github.com/Clariteia/minos-pypackage) project template. +## License +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. diff --git a/packages/core/minos-microservice-common/README.md b/packages/core/minos-microservice-common/README.md index 1ae766b80..e68118534 100644 --- a/packages/core/minos-microservice-common/README.md +++ b/packages/core/minos-microservice-common/README.md @@ -1,7 +1,16 @@ -# Minos Microservice Common +

+ Minos logo +

-[![codecov](https://codecov.io/gh/Clariteia/minos_microservice_common/branch/main/graph/badge.svg)](https://codecov.io/gh/Clariteia/minos_microservice_common) -![Tests](https://github.com/Clariteia/minos_microservice_common/actions/workflows/python-tests.yml/badge.svg) +## minos-microservice-common + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-common.svg)](https://pypi.org/project/minos-microservice-common/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an @@ -9,76 +18,19 @@ asynchronous environment. ## Documentation -The official documentation as well as the API you can find it under https://clariteia.github.io/minos_microservice_common/. -Please, submit any issue regarding documentation as well! - -## Set up a development environment - -Minos uses `poetry` as its default package manager. Please refer to the -[Poetry installation guide](https://python-poetry.org/docs/#installation) for instructions on how to install it. - -Now you con install all the dependencies by running -```bash -make install -``` - -In order to make the pre-commits checks available to git, run -```bash -pre-commit install -``` - -Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. - -## Run the tests - -In order to run the tests, please make sure you have the [Docker Engine](https://docs.docker.com/engine/install/) -and [Docker Compose](https://docs.docker.com/compose/install/) installed. - -Move into `tests/` directory - -```bash -cd tests/ -``` -Run service dependencies: - -```bash -docker-compose up -d -``` - -Install library dependencies: - -```bash -make install -``` - -Run tests: - -```bash -make test -``` - -## How to contribute - -Minos being an open-source project, we are looking forward to having your contributions. No matter whether it is a pull -request with new features, or the creation of an issue related to a bug you have found. - -Please consider these guidelines before you submit any modification. +The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). -### Create an issue +## Source Code -1. If you happen to find a bug, please file a new issue filling the 'Bug report' template. -2. Set the appropriate labels, so we can categorise it easily. -3. Wait for any core developer's feedback on it. +The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). -### Submit a Pull Request +## Getting Help -1. Create an issue following the previous steps. -2. Fork the project. -3. Push your changes to a local branch. -4. Run the tests! -5. Submit a pull request from your fork's branch. +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). -## Credits +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. -This package was created with ![Cookiecutter](https://github.com/audreyr/cookiecutter) and the ![Minos Package](https://github.com/Clariteia/minos-pypackage) project template. +## License +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. diff --git a/packages/core/minos-microservice-cqrs/README.md b/packages/core/minos-microservice-cqrs/README.md index b1323fe95..fbc61448c 100644 --- a/packages/core/minos-microservice-cqrs/README.md +++ b/packages/core/minos-microservice-cqrs/README.md @@ -1,7 +1,16 @@ -# Minos Microservice CQRS +

+ Minos logo +

-[![codecov](https://codecov.io/gh/Clariteia/minos_microservice_cqrs/branch/main/graph/badge.svg)](https://codecov.io/gh/Clariteia/minos_microservice_cqrs) -![Tests](https://github.com/Clariteia/minos_microservice_cqrs/actions/workflows/python-tests.yml/badge.svg) +## minos-microservice-cqrs + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-cqrs.svg)](https://pypi.org/project/minos-microservice-cqrs/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an @@ -9,76 +18,19 @@ asynchronous environment. ## Documentation -The official documentation as well as the API you can find it under https://clariteia.github.io/minos_microservice_cqrs/. -Please, submit any issue regarding documentation as well! - -## Set up a development environment - -Minos uses `poetry` as its default package manager. Please refer to the -[Poetry installation guide](https://python-poetry.org/docs/#installation) for instructions on how to install it. - -Now you con install all the dependencies by running -```bash -make install -``` - -In order to make the pre-commits checks available to git, run -```bash -pre-commit install -``` - -Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. - -## Run the tests - -In order to run the tests, please make sure you have the [Docker Engine](https://docs.docker.com/engine/install/) -and [Docker Compose](https://docs.docker.com/compose/install/) installed. - -Move into `tests/` directory - -```bash -cd tests/ -``` -Run service dependencies: - -```bash -docker-compose up -d -``` - -Install library dependencies: - -```bash -make install -``` - -Run tests: - -```bash -make test -``` - -## How to contribute - -Minos being an open-source project, we are looking forward to having your contributions. No matter whether it is a pull -request with new features, or the creation of an issue related to a bug you have found. - -Please consider these guidelines before you submit any modification. +The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). -### Create an issue +## Source Code -1. If you happen to find a bug, please file a new issue filling the 'Bug report' template. -2. Set the appropriate labels, so we can categorise it easily. -3. Wait for any core developer's feedback on it. +The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). -### Submit a Pull Request +## Getting Help -1. Create an issue following the previous steps. -2. Fork the project. -3. Push your changes to a local branch. -4. Run the tests! -5. Submit a pull request from your fork's branch. +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). -## Credits +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. -This package was created with ![Cookiecutter](https://github.com/audreyr/cookiecutter) and the ![Minos Package](https://github.com/Clariteia/minos-pypackage) project template. +## License +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. diff --git a/packages/core/minos-microservice-networks/README.md b/packages/core/minos-microservice-networks/README.md index 6078b2d48..12f2b9380 100644 --- a/packages/core/minos-microservice-networks/README.md +++ b/packages/core/minos-microservice-networks/README.md @@ -1,7 +1,16 @@ -# Minos Microservice Network +

+ Minos logo +

-[![codecov](https://codecov.io/gh/Clariteia/minos_microservice_networks/branch/main/graph/badge.svg)](https://codecov.io/gh/Clariteia/minos_microservice_networks) -![Tests](https://github.com/Clariteia/minos_microservice_networks/actions/workflows/python-tests.yml/badge.svg) +## minos-microservice-networks + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-networks.svg)](https://pypi.org/project/minos-microservice-networks/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an @@ -9,76 +18,19 @@ asynchronous environment. ## Documentation -The official documentation as well as the API you can find it under https://clariteia.github.io/minos_microservice_networks/. -Please, submit any issue regarding documentation as well! - -## Set up a development environment - -Minos uses `poetry` as its default package manager. Please refer to the -[Poetry installation guide](https://python-poetry.org/docs/#installation) for instructions on how to install it. - -Now you con install all the dependencies by running -```bash -make install -``` - -In order to make the pre-commits checks available to git, run -```bash -pre-commit install -``` - -Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. - -## Run the tests - -In order to run the tests, please make sure you have the [Docker Engine](https://docs.docker.com/engine/install/) -and [Docker Compose](https://docs.docker.com/compose/install/) installed. - -Move into `tests/` directory - -```bash -cd tests/ -``` -Run service dependencies: - -```bash -docker-compose up -d -``` - -Install library dependencies: - -```bash -make install -``` - -Run tests: - -```bash -make test -``` - -## How to contribute - -Minos being an open-source project, we are looking forward to having your contributions. No matter whether it is a pull -request with new features, or the creation of an issue related to a bug you have found. - -Please consider these guidelines before you submit any modification. +The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). -### Create an issue +## Source Code -1. If you happen to find a bug, please file a new issue filling the 'Bug report' template. -2. Set the appropriate labels, so we can categorise it easily. -3. Wait for any core developer's feedback on it. +The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). -### Submit a Pull Request +## Getting Help -1. Create an issue following the previous steps. -2. Fork the project. -3. Push your changes to a local branch. -4. Run the tests! -5. Submit a pull request from your fork's branch. +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). -## Credits +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. -This package was created with ![Cookiecutter](https://github.com/audreyr/cookiecutter) and the ![Minos Package](https://github.com/Clariteia/minos-pypackage) project template. +## License +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. diff --git a/packages/core/minos-microservice-saga/README.md b/packages/core/minos-microservice-saga/README.md index d49677ab4..75dcb13f2 100644 --- a/packages/core/minos-microservice-saga/README.md +++ b/packages/core/minos-microservice-saga/README.md @@ -1,7 +1,16 @@ -# Minos Microservice Saga +

+ Minos logo +

-[![codecov](https://codecov.io/gh/Clariteia/minos_microservice_saga/branch/main/graph/badge.svg)](https://codecov.io/gh/Clariteia/minos_microservice_saga) -![Tests](https://github.com/Clariteia/minos_microservice_saga/actions/workflows/python-tests.yml/badge.svg) +## minos-microservice-saga + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-saga.svg)](https://pypi.org/project/minos-microservice-saga/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an @@ -9,75 +18,19 @@ asynchronous environment. ## Documentation -The official documentation as well as the API you can find it under https://clariteia.github.io/minos_microservice_saga/. -Please, submit any issue regarding documentation as well! - -## Set up a development environment - -Minos uses `poetry` as its default package manager. Please refer to the -[Poetry installation guide](https://python-poetry.org/docs/#installation) for instructions on how to install it. - -Now you con install all the dependencies by running -```bash -make install -``` - -In order to make the pre-commits checks available to git, run -```bash -pre-commit install -``` - -Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. - -## Run the tests - -In order to run the tests, please make sure you have the [Docker Engine](https://docs.docker.com/engine/install/) -and [Docker Compose](https://docs.docker.com/compose/install/) installed. - -Move into `tests/` directory - -```bash -cd tests/ -``` -Run service dependencies: - -```bash -docker-compose up -d -``` - -Install library dependencies: - -```bash -make install -``` - -Run tests: - -```bash -make test -``` - -## How to contribute - -Minos being an open-source project, we are looking forward to having your contributions. No matter whether it is a pull -request with new features, or the creation of an issue related to a bug you have found. +The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). -Please consider these guidelines before you submit any modification. +## Source Code -### Create an issue +The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). -1. If you happen to find a bug, please file a new issue filling the 'Bug report' template. -2. Set the appropriate labels, so we can categorise it easily. -3. Wait for any core developer's feedback on it. +## Getting Help -### Submit a Pull Request +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). -1. Create an issue following the previous steps. -2. Fork the project. -3. Push your changes to a local branch. -4. Run the tests! -5. Submit a pull request from your fork's branch. +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. -## Credits +## License -This package was created with ![Cookiecutter](https://github.com/audreyr/cookiecutter) and the ![Minos Package](https://github.com/Clariteia/minos-pypackage) project template. +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. From 052fe3d78ed0454414279fad246d8d9e6dd781ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 11:24:29 +0100 Subject: [PATCH 12/97] ISSUE #123 * Add `Installation` and `Usage` sections. --- README.md | 188 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 174 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index e74f10550..1de7e006a 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,188 @@ -

Minos logo

- - # minos-python: The framework which helps you create reactive microservices in Python -[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-aggregate.svg?label=minos-microservice-aggregate)](https://pypi.org/project/minos-microservice-aggregate/) -[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-common.svg?label=minos-microservice-common)](https://pypi.org/project/minos-microservice-common/) -[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-cqrs.svg?label=minos-microservice-cqrs)](https://pypi.org/project/minos-microservice-cqrs/) -[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-networks.svg?label=minos-microservice-networks)](https://pypi.org/project/minos-microservice-networks/) -[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-saga.svg?label=minos-microservice-saga)](https://pypi.org/project/minos-microservice-saga/) +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-microservice-common.svg)](https://pypi.org/project/minos-microservice-common/) [![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) [![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) [![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) [![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/minos-framework/community) -[![](https://tokei.rs/b1/github/minos-framework/minos-python?category=code)](https://github.com/minos-framework/minos-python) +[![Tokei](https://tokei.rs/b1/github/minos-framework/minos-python?category=code)](https://github.com/minos-framework/minos-python) ## Summary -Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. -Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an -asynchronous environment. +Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an asynchronous environment. + +## Installation + +### Guided installation + +The easiest way to use `minos` is with the help of the [`minos-cli`](https://github.com/minos-framework/minos-cli), which provides commands to setup both the project skeleton (configures containerization, databases, brokers, etc.) and the microservice skeleton (the base microservice structure, environment configuration, etc.) + +### Manual installation + +If you want to directly use `minos` without the command-line utility, the following command will install the needed packages: + +```shell +pip install \ + minos-microservice-aggregate \ + minos-microservice-common \ + minos-microservice-cqrs \ + minos-microservice-networks \ + minos-microservice-saga +``` + +## Usage + +This section includes a set of minimal examples of how-to-work with `minos`, so that anyone can get the gist of the framework. + +### Create an Aggregate + +Here is an example of the creation the `Foo` aggregate. In this case, it has two attributes, a `bar` being a `str`, and a `foobar` being an optional reference to the external `FooBar` aggregate, which it is assumed that it has a `something` attribute. + +```python +from __future__ import annotations +from typing import Optional +from minos.aggregate import Aggregate, AggregateRef, ModelRef + + +class Foo(Aggregate): + """Foo Aggregate class.""" + + bar: str + foobar: Optional[ModelRef[FooBar]] + + +class FooBar(AggregateRef): + """FooBar AggregateRef clas.""" + + something: str +``` + +### Expose a Command + +Here is an example of the definition of a command to create `Foo` instances. To do that, it is necessary to define a `CommandService` that contains the handling function. It will handle both the broker messages sent to the `"CreateFoo"` topic and the rest calls to the `"/foos"` path with the `"POST"` method. In this case, the handling function unpacks the `Request`'s content and then calls the `create` method from the `Aggregate`, which stores the `Foo` instance following an event-driven strategy (it also publishes the `"FooCreated"` event). Finally, a `Response` is returned to be handled by the external caller (another microservice or the API-gateway). + +```python +from minos.cqrs import CommandService +from minos.networks import enroute, Request, Response + + +class FooCommandService(CommandService): + """Foo Command Service class.""" + + @enroute.broker.command("CreateFoo") + @enroute.rest.command("/foos", "POST") + async def create_foo(self, request: Request) -> Response: + """Create a new Foo. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: A ``Response`` containing identifier of the already created instance. + """ + content = await request.content() + bar = content["bar"] + + foo = await Foo.create(bar) + + return Response({"uuid": foo.uuid}) +``` + +### Subscribe to an Event and Expose a Query + +Here is an example of the event and query handling. In this case, it must be defined on a `QueryService` class. In this case a `"FooCreated"` event is handled (and only a `print` of the content is performed). The event contents typically contains instances of `AggregateDiff` type, which is referred to the difference respect to the previously stored instance. The exposed query is connected to the calls that come from the `"/foos/example"` path and `"GET"` method and a naive string is returned. + +*Disclaimer*: A real `QueryService` implementation must populate a query-oriented database based on the events to which is subscribed to, and expose queries performed over that query-oriented database. + +```python +from minos.cqrs import QueryService +from minos.networks import enroute, Request, Response + + +class FooQueryService(QueryService): + """Foo Query Service class.""" + + @enroute.broker.event("FooCreated") + async def foo_created(self, request: Request) -> None: + """Handle the "FooCreated" event. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: This method does not return anything. + """ + diff = await request.content() + print(f"A Foo was created: {diff}") + + @enroute.rest.query("/foos/example", "GET") + async def example(self, request: Request) -> Response: + """Handle the example query. + + :param request: The ``Request`` that contains the necessary information. + :return: A ``Response`` instance. + """ + return Response("This is an example response!") +``` + +### Interact with another Microservice + +Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foo/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. + +```python +from minos.common import ModelType +from minos.cqrs import CommandService +from minos.networks import enroute, Request +from minos.saga import Saga, SagaContext, SagaRequest, SagaResponse + +CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) + + +def _create_foobar(context: SagaContext) -> SagaRequest: + something = context["something"] + content = CreateFooBarDTO(56, something) + return SagaRequest("CreateFooBar", content) + + +async def _success_foobar(context: SagaContext, response: SagaResponse) -> SagaContext: + context["foobar_uuid"] = await response.content() + return context + + +async def _error_foobar(context: SagaContext, response: SagaResponse) -> SagaContext: + raise ValueError("The foobar could not be created!") + + +async def _update_foo(context: SagaContext) -> None: + foo = await Foo.get(context["uuid"]) + foo.foobar = context["foobar_uuid"] + await foo.save() + + +ADD_FOOBAR_SAGA = ( + Saga() + .remote_step().on_execute(_create_foobar).on_success(_success_foobar).on_error(_error_foobar) + .local_step().on_execute(_update_foo) + .commit() +) + + +class FooCommandService(CommandService): + """Foo Command Service class.""" + + @enroute.rest.command("/foo/add-foobar", "POST") + async def update_foo(self, request: Request) -> None: + """Run a saga example. + + :param request: The ``Request`` that contains the initial saga's context. + :return: This method does not return anything. + """ + content = await request.content() + + await self.saga_manager.run( + ADD_FOOBAR_SAGA, {"uuid": content["uuid"], "something": content["something"]} + ) + +``` ## Documentation @@ -45,17 +204,18 @@ The core packages provide the base implementation of the framework. ### Plugins -The plugin packages provide connectors to external technologies like brokers, discovery services, databases, serializers and so on. +The plugin packages provide connectors to external technologies like brokers, discovery services, databases, serializers and so on. ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). ## Getting Help For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). ## Discussion and Development + Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. ## How to contribute From 9ed0404dd2177712e0af152c81c5c306b891674d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 11:24:48 +0100 Subject: [PATCH 13/97] ISSUE #123 * Add `Foundational Patterns` section. --- README.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/README.md b/README.md index 1de7e006a..df2829f21 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,48 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an asynchronous environment. +## Foundational Patterns + +The `minos` framework is built strongly following the following set of patterns: + +### Application architecture + +* [Microservice architecture](https://microservices.io/patterns/microservices.html): Architect an application as a collection of loosely coupled services. + +### Decomposition + +* [Decompose by subdomain](https://microservices.io/patterns/decomposition/decompose-by-subdomain.html): Define services corresponding to Domain-Driven Design (DDD) subdomains +* [Self-contained Service](https://microservices.io/patterns/decomposition/self-contained-service.html): Microservices can respond to a synchronous request without waiting for the response from any other service. + +### Data management + +* [Database per service](https://microservices.io/patterns/data/database-per-service.html): Keep each microservice's persistent data private to that service and accessible only via its API. A service's transactions only involve its database. +* [Saga](https://microservices.io/patterns/data/saga.html): Transaction that spans multiple services. +* [CQRS](https://microservices.io/patterns/data/cqrs.html): view database, which is a read-only replica that is designed to support queries that retrieves data from microservice. The application keeps the replica up to date by subscribing to Domain events published by the service that own the data. +* [Domain event](https://microservices.io/patterns/data/domain-event.html): A service often needs to publish events when it updates its data. These events might be needed, for example, to update a CQRS view. +* [Event Sourcing](https://microservices.io/patterns/data/event-sourcing.html): Event sourcing persists the state of a business entity such an Order or a Customer as a sequence of state-changing events. Whenever the state of a business entity changes, a new event is appended to the list of events. Since saving an event is a single operation, it is inherently atomic. The application reconstructs an entity's current state by replaying the events. + +### Communication style + +* [Messaging](https://microservices.io/patterns/communication-style/messaging.html): Services communicating by exchanging messages over messaging channels. (Apache Kafka is used in this case) + +### External APIs + +* [API gateway](https://microservices.io/patterns/apigateway.html): Single entry point for all clients. The API gateway proxy/route to the appropriate service. + +### Service discovery + +* [Service registry](https://microservices.io/patterns/service-registry.html): Database of services. A service registry might invoke a service instance's health check API to verify that it is able to handle requests +* [Self Registration](https://microservices.io/patterns/self-registration.html): Each service instance register on startup and unregister on stop. + +### Security + +* [Access token](https://microservices.io/patterns/security/access-token.html): The API Gateway authenticates the request and passes an access token (e.g. JSON Web Token) that securely identifies the requestor in each request to the services. A service can include the access token in requests it makes to other services. + +### Observability + +* [Health Check API](https://microservices.io/patterns/observability/health-check-api.html): A service has a health check API endpoint (e.g. HTTP `/health`) that returns the health of the service. + ## Installation ### Guided installation From 07f90ac300f2d9029d5c8cb14f596e7c92e4c14a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 11:25:25 +0100 Subject: [PATCH 14/97] ISSUE #123 * Minor improvement. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index df2829f21..1bd15f33e 100644 --- a/README.md +++ b/README.md @@ -248,6 +248,8 @@ The core packages provide the base implementation of the framework. The plugin packages provide connectors to external technologies like brokers, discovery services, databases, serializers and so on. +* Coming soon... + ## Source Code The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). From f5a6a6a37ad3b8ffa645fdbcf5e39ed23d9ab8f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 11:36:42 +0100 Subject: [PATCH 15/97] ISSUE #? * Improve GitHub Workflows config. --- .github/workflows/minos-microservice-aggregate-tests.yml | 1 + .github/workflows/minos-microservice-common-tests.yml | 1 + .github/workflows/minos-microservice-cqrs-tests.yml | 1 + .github/workflows/minos-microservice-networks-tests.yml | 1 + .github/workflows/minos-microservice-saga-tests.yml | 1 + 5 files changed, 5 insertions(+) diff --git a/.github/workflows/minos-microservice-aggregate-tests.yml b/.github/workflows/minos-microservice-aggregate-tests.yml index e452e4b1c..1c731a5dc 100644 --- a/.github/workflows/minos-microservice-aggregate-tests.yml +++ b/.github/workflows/minos-microservice-aggregate-tests.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - '*.*.x' pull_request: paths: - 'packages/core/minos-microservice-aggregate/**' diff --git a/.github/workflows/minos-microservice-common-tests.yml b/.github/workflows/minos-microservice-common-tests.yml index 09f420aff..eb3f220b6 100644 --- a/.github/workflows/minos-microservice-common-tests.yml +++ b/.github/workflows/minos-microservice-common-tests.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - '*.*.x' pull_request: paths: - 'packages/core/minos-microservice-common/**' diff --git a/.github/workflows/minos-microservice-cqrs-tests.yml b/.github/workflows/minos-microservice-cqrs-tests.yml index 43c3672fc..60c857a43 100644 --- a/.github/workflows/minos-microservice-cqrs-tests.yml +++ b/.github/workflows/minos-microservice-cqrs-tests.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - '*.*.x' pull_request: paths: - 'packages/core/minos-microservice-cqrs/**' diff --git a/.github/workflows/minos-microservice-networks-tests.yml b/.github/workflows/minos-microservice-networks-tests.yml index 1226367fc..b8e73c48b 100644 --- a/.github/workflows/minos-microservice-networks-tests.yml +++ b/.github/workflows/minos-microservice-networks-tests.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - '*.*.x' pull_request: paths: - 'packages/core/minos-microservice-networks/**' diff --git a/.github/workflows/minos-microservice-saga-tests.yml b/.github/workflows/minos-microservice-saga-tests.yml index 204d4bebd..49ee0fb14 100644 --- a/.github/workflows/minos-microservice-saga-tests.yml +++ b/.github/workflows/minos-microservice-saga-tests.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - '*.*.x' pull_request: paths: - 'packages/core/minos-microservice-saga/**' From 0da7a02f79fcd54fa44198a18e9c383d2a9a5fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 11:39:23 +0100 Subject: [PATCH 16/97] v0.4.1 --- packages/core/minos-microservice-aggregate/HISTORY.md | 4 ++++ .../minos-microservice-aggregate/minos/aggregate/__init__.py | 2 +- packages/core/minos-microservice-aggregate/pyproject.toml | 4 ++-- packages/core/minos-microservice-common/HISTORY.md | 5 +++++ .../core/minos-microservice-common/minos/common/__init__.py | 2 +- packages/core/minos-microservice-common/pyproject.toml | 4 ++-- packages/core/minos-microservice-cqrs/HISTORY.md | 4 ++++ packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py | 2 +- packages/core/minos-microservice-cqrs/pyproject.toml | 4 ++-- packages/core/minos-microservice-networks/HISTORY.md | 5 +++++ .../minos-microservice-networks/minos/networks/__init__.py | 2 +- packages/core/minos-microservice-networks/pyproject.toml | 4 ++-- packages/core/minos-microservice-saga/HISTORY.md | 5 +++++ packages/core/minos-microservice-saga/minos/saga/__init__.py | 2 +- packages/core/minos-microservice-saga/pyproject.toml | 4 ++-- 15 files changed, 38 insertions(+), 15 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/HISTORY.md b/packages/core/minos-microservice-aggregate/HISTORY.md index 305a48804..129555d94 100644 --- a/packages/core/minos-microservice-aggregate/HISTORY.md +++ b/packages/core/minos-microservice-aggregate/HISTORY.md @@ -50,3 +50,7 @@ * Be compatible with `minos-microservice-common~=0.4.0`. * Be compatible with `minos-microservice-networks~=0.4.0`. + +## 0.4.1 (2022-01-31) + +* Update `README.md`. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 869432819..51cd06070 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.0" +__version__ = "0.4.1" from .contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, diff --git a/packages/core/minos-microservice-aggregate/pyproject.toml b/packages/core/minos-microservice-aggregate/pyproject.toml index 7511f763e..85f7a6985 100644 --- a/packages/core/minos-microservice-aggregate/pyproject.toml +++ b/packages/core/minos-microservice-aggregate/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "minos-microservice-aggregate" -version = "0.4.0" +version = "0.4.1" description = "Python Package for Minos Microservices containing all the Aggregate stuff" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" @@ -8,7 +8,7 @@ homepage = "http://www.minos.run/" authors = ["Minos Framework Devs "] license = "MIT" classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3", diff --git a/packages/core/minos-microservice-common/HISTORY.md b/packages/core/minos-microservice-common/HISTORY.md index 310fc2c8e..9d6c0db6f 100644 --- a/packages/core/minos-microservice-common/HISTORY.md +++ b/packages/core/minos-microservice-common/HISTORY.md @@ -269,3 +269,8 @@ History ------------------ * Add waiting time before destroying the `minos.common.MinosPool` acquired instances. + +0.4.1 (2022-01-31) +------------------ + +* Update `README.md`. diff --git a/packages/core/minos-microservice-common/minos/common/__init__.py b/packages/core/minos-microservice-common/minos/common/__init__.py index b30086083..b4df02ca2 100644 --- a/packages/core/minos-microservice-common/minos/common/__init__.py +++ b/packages/core/minos-microservice-common/minos/common/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.0" +__version__ = "0.4.1" from .configuration import ( BROKER, diff --git a/packages/core/minos-microservice-common/pyproject.toml b/packages/core/minos-microservice-common/pyproject.toml index 60ef02bbb..b67f8bff5 100644 --- a/packages/core/minos-microservice-common/pyproject.toml +++ b/packages/core/minos-microservice-common/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." readme = "README.md" repository = "https://github.com/minos-framework/minos-python" @@ -8,7 +8,7 @@ homepage = "http://www.minos.run/" authors = ["Minos Framework Devs "] license = "MIT" classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3", diff --git a/packages/core/minos-microservice-cqrs/HISTORY.md b/packages/core/minos-microservice-cqrs/HISTORY.md index 7707bd8f0..9c746bc80 100644 --- a/packages/core/minos-microservice-cqrs/HISTORY.md +++ b/packages/core/minos-microservice-cqrs/HISTORY.md @@ -56,3 +56,7 @@ * Be compatible with `minos-microservice-common~=0.4.0`. * Be compatible with `minos-microservice-aggregate~=0.4.0`. * Be compatible with `minos-microservice-networks~=0.4.0`. + +# 0.4.1 (2022-01-31) + +* Update `README.md`. diff --git a/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py b/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py index 66d93ace3..ba8961a06 100644 --- a/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py +++ b/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.0" +__version__ = "0.4.1" from .exceptions import ( MinosCqrsException, diff --git a/packages/core/minos-microservice-cqrs/pyproject.toml b/packages/core/minos-microservice-cqrs/pyproject.toml index 3c0e02dfa..1682fc7d7 100644 --- a/packages/core/minos-microservice-cqrs/pyproject.toml +++ b/packages/core/minos-microservice-cqrs/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "minos-microservice-cqrs" -version = "0.4.0" +version = "0.4.1" description = "Minos Microservice CQRS package" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" @@ -8,7 +8,7 @@ homepage = "http://www.minos.run/" authors = ["Minos Framework Devs "] license = "MIT" classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3", diff --git a/packages/core/minos-microservice-networks/HISTORY.md b/packages/core/minos-microservice-networks/HISTORY.md index c2a69f6a8..448ee107d 100644 --- a/packages/core/minos-microservice-networks/HISTORY.md +++ b/packages/core/minos-microservice-networks/HISTORY.md @@ -191,3 +191,8 @@ History * Refactor `DynamicBroker` and `DynamicBrokerPool` as `BrokerClient` and `BrokerClientPool`. The new `BrokerClient` has a `send(message: BrokerMessage) -> Awaitable[None]` method for sending messages and a `receive() -> Awaitable[BrokerMessage]` to receive them. * Implement a builder pattern on `BrokerPublisher` * Be compatible with `minos-microservice-common~=0.4.0`. + +0.4.1 (2022-01-31) +------------------ + +* Update `README.md`. diff --git a/packages/core/minos-microservice-networks/minos/networks/__init__.py b/packages/core/minos-microservice-networks/minos/networks/__init__.py index 72680f135..9ecff3bcc 100644 --- a/packages/core/minos-microservice-networks/minos/networks/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.0" +__version__ = "0.4.1" from .brokers import ( REQUEST_HEADERS_CONTEXT_VAR, diff --git a/packages/core/minos-microservice-networks/pyproject.toml b/packages/core/minos-microservice-networks/pyproject.toml index 306f40987..2edd79d2c 100644 --- a/packages/core/minos-microservice-networks/pyproject.toml +++ b/packages/core/minos-microservice-networks/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." readme = "README.md" repository = "https://github.com/minos-framework/minos-python" @@ -8,7 +8,7 @@ homepage = "http://www.minos.run/" authors = ["Minos Framework Devs "] license = "MIT" classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3", diff --git a/packages/core/minos-microservice-saga/HISTORY.md b/packages/core/minos-microservice-saga/HISTORY.md index 395374a29..dcbad1fda 100644 --- a/packages/core/minos-microservice-saga/HISTORY.md +++ b/packages/core/minos-microservice-saga/HISTORY.md @@ -154,3 +154,8 @@ History * Be compatible with `minos-microservice-common~=0.4.0`. * Be compatible with `minos-microservice-aggregate~=0.4.0`. * Be compatible with `minos-microservice-networks~=0.4.0`. + +0.4.1 (2022-01-31) +------------------ + +* Update `README.md`. diff --git a/packages/core/minos-microservice-saga/minos/saga/__init__.py b/packages/core/minos-microservice-saga/minos/saga/__init__.py index 4d6f9abeb..e9b6266d7 100644 --- a/packages/core/minos-microservice-saga/minos/saga/__init__.py +++ b/packages/core/minos-microservice-saga/minos/saga/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.0" +__version__ = "0.4.1" from .context import ( SagaContext, diff --git a/packages/core/minos-microservice-saga/pyproject.toml b/packages/core/minos-microservice-saga/pyproject.toml index 646b9ea16..c26c0b891 100644 --- a/packages/core/minos-microservice-saga/pyproject.toml +++ b/packages/core/minos-microservice-saga/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "minos-microservice-saga" -version = "0.4.0" +version = "0.4.1" description = "Saga Library for MinOS project." readme = "README.md" repository = "https://github.com/minos-framework/minos-python" @@ -8,7 +8,7 @@ homepage = "http://www.minos.run/" authors = ["Minos Framework Devs "] license = "MIT" classifiers = [ - "Development Status :: 2 - Pre-Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Natural Language :: English", "Programming Language :: Python :: 3", From dedcf5cb4c628c54d29dfebc90de02d85e83a15f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 13:12:04 +0100 Subject: [PATCH 17/97] ISSUE #121 * Rename `AggregateRef` as `ExternalAggregate`. * Rename `ModelRef` as `Ref`. * Rename `ModelRefExtractor` as `RefExtractor`. * Rename `ModelRefInjector` as `RefInjector`. * Rename `ModelRefResolver` as `RefResolver`. --- .../minos/aggregate/__init__.py | 10 +-- .../minos/aggregate/models/__init__.py | 10 +-- .../minos/aggregate/models/refs/__init__.py | 10 +-- .../minos/aggregate/models/refs/extractors.py | 12 ++-- .../minos/aggregate/models/refs/injectors.py | 2 +- .../minos/aggregate/models/refs/models.py | 6 +- .../minos/aggregate/models/refs/resolvers.py | 14 ++-- .../test_aggregates/test_broker.py | 4 +- .../test_models/test_diffs/test_aggregates.py | 4 +- .../test_models/test_diffs/test_fields.py | 6 +- .../test_models/test_refs/test_extractors.py | 40 ++++++------ .../test_models/test_refs/test_injectors.py | 16 ++--- .../test_models/test_refs/test_models.py | 64 +++++++++---------- .../test_models/test_refs/test_resolvers.py | 14 ++-- .../tests/utils.py | 4 +- .../minos/cqrs/handlers.py | 10 +-- .../tests/test_cqrs/test_handlers.py | 14 ++-- .../minos-microservice-cqrs/tests/utils.py | 8 +-- 18 files changed, 124 insertions(+), 124 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 869432819..8a1a036e9 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -28,19 +28,19 @@ Action, Aggregate, AggregateDiff, - AggregateRef, Entity, EntitySet, + ExternalAggregate, FieldDiff, FieldDiffContainer, IncrementalFieldDiff, IncrementalSet, IncrementalSetDiff, IncrementalSetDiffEntry, - ModelRef, - ModelRefExtractor, - ModelRefInjector, - ModelRefResolver, + Ref, + RefExtractor, + RefInjector, + RefResolver, ValueObject, ValueObjectSet, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index d05225f1d..dbff50e63 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -20,11 +20,11 @@ EntitySet, ) from .refs import ( - AggregateRef, - ModelRef, - ModelRefExtractor, - ModelRefInjector, - ModelRefResolver, + ExternalAggregate, + Ref, + RefExtractor, + RefInjector, + RefResolver, ) from .value_objects import ( ValueObject, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py index e50c49696..8c67a58f6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py @@ -1,13 +1,13 @@ from .extractors import ( - ModelRefExtractor, + RefExtractor, ) from .injectors import ( - ModelRefInjector, + RefInjector, ) from .models import ( - AggregateRef, - ModelRef, + ExternalAggregate, + Ref, ) from .resolvers import ( - ModelRefResolver, + RefResolver, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/extractors.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/extractors.py index 1a4c39f4f..298727725 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/extractors.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/extractors.py @@ -22,11 +22,11 @@ ) from .models import ( - ModelRef, + Ref, ) -class ModelRefExtractor: +class RefExtractor: """Model Reference Extractor class.""" def __init__(self, value: Any, type_: Optional[type] = None, as_uuids: bool = True): @@ -49,9 +49,9 @@ def build(self) -> dict[str, set[UUID]]: return ans - def _build(self, value: Any, type_: type, ans: dict[str, set[ModelRef]]) -> None: + def _build(self, value: Any, type_: type, ans: dict[str, set[Ref]]) -> None: if get_origin(type_) is Union: - type_ = next((t for t in get_args(type_) if get_origin(t) is ModelRef), type_) + type_ = next((t for t in get_args(type_) if get_origin(t) is Ref), type_) if isinstance(value, (tuple, list, set)): self._build_iterable(value, get_args(type_)[0], ans) @@ -60,7 +60,7 @@ def _build(self, value: Any, type_: type, ans: dict[str, set[ModelRef]]) -> None self._build_iterable(value.keys(), get_args(type_)[0], ans) self._build_iterable(value.values(), get_args(type_)[1], ans) - elif isinstance(value, ModelRef): + elif isinstance(value, Ref): cls = value.data_cls or get_args(type_)[0] name = cls.__name__ ans[name].add(value) @@ -70,6 +70,6 @@ def _build(self, value: Any, type_: type, ans: dict[str, set[ModelRef]]) -> None for field in value.fields.values(): self._build(field.value, field.type, ans) - def _build_iterable(self, value: Iterable, value_: type, ans: dict[str, set[ModelRef]]) -> None: + def _build_iterable(self, value: Iterable, value_: type, ans: dict[str, set[Ref]]) -> None: for sub_value in value: self._build(sub_value, value_, ans) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/injectors.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/injectors.py index f36214f74..06ed13f7a 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/injectors.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/injectors.py @@ -11,7 +11,7 @@ ) -class ModelRefInjector: +class RefInjector: """Model Reference Injector class.""" def __init__(self, value: Any, mapper: dict[UUID, Model]): diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py index 31a9c86e2..b8dc4f65a 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py @@ -46,7 +46,7 @@ MT = TypeVar("MT", bound=Model) -class AggregateRef(Entity): +class ExternalAggregate(Entity): """Aggregate Ref class.""" version: int @@ -55,7 +55,7 @@ def __init__(self, uuid: UUID, *args, **kwargs): super().__init__(uuid=uuid, *args, **kwargs) -class ModelRef(DeclarativeModel, UUID, Generic[MT]): +class Ref(DeclarativeModel, UUID, Generic[MT]): """Model Reference.""" data: Union[MT, UUID] @@ -131,7 +131,7 @@ def encode_data(encoder: DataEncoder, target: Any, **kwargs) -> Any: return encoder.build(target, **kwargs) @classmethod - def decode_data(cls, decoder: DataDecoder, target: Any, type_: ModelType, **kwargs) -> ModelRef: + def decode_data(cls, decoder: DataDecoder, target: Any, type_: ModelType, **kwargs) -> Ref: """Decode data with the given decoder. :param decoder: The decoder instance. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/resolvers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/resolvers.py index 5bd227148..72b51fccd 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/resolvers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/resolvers.py @@ -30,15 +30,15 @@ ) from .extractors import ( - ModelRefExtractor, + RefExtractor, ) from .injectors import ( - ModelRefInjector, + RefInjector, ) -class ModelRefResolver: - """ModelRef Resolver class.""" +class RefResolver: + """Ref Resolver class.""" # noinspection PyUnusedLocal @inject @@ -47,20 +47,20 @@ def __init__(self, broker_pool: BrokerClientPool = Provide["broker_pool"], **kwa # noinspection PyUnusedLocal async def resolve(self, data: Any, **kwargs) -> Any: - """Resolve ModelRef instances. + """Resolve Ref instances. :param data: The data to be resolved. :param kwargs: Additional named arguments. :return: The data instance with model references already resolved. """ - missing = ModelRefExtractor(data).build() + missing = RefExtractor(data).build() if not len(missing): return data recovered = await self._query(missing) - return ModelRefInjector(data, recovered).build() + return RefInjector(data, recovered).build() async def _query(self, references: dict[str, set[UUID]]) -> dict[UUID, Model]: async with self.broker_pool.acquire() as broker: diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py index 2ec9a3515..ed6a9a3cc 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py @@ -8,7 +8,7 @@ AggregateDiff, FieldDiff, FieldDiffContainer, - ModelRef, + Ref, ) from minos.networks import ( BrokerMessageV1, @@ -40,7 +40,7 @@ async def test_create(self): [ FieldDiff("doors", int, 3), FieldDiff("color", str, "blue"), - FieldDiff("owner", Optional[ModelRef[Owner]], None), + FieldDiff("owner", Optional[Ref[Owner]], None), ] ), ), diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py index fe6fef6ad..7a195b747 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py @@ -12,7 +12,7 @@ FieldDiff, FieldDiffContainer, IncrementalFieldDiff, - ModelRef, + Ref, ) from minos.common import ( current_datetime, @@ -45,7 +45,7 @@ async def asyncSetUp(self) -> None: [ FieldDiff("doors", int, 3), FieldDiff("color", str, "blue"), - FieldDiff("owner", Optional[ModelRef[Owner]], None), + FieldDiff("owner", Optional[Ref[Owner]], None), ] ), ) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py index 1fc01894a..e3dcfc6a0 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py @@ -17,7 +17,7 @@ FieldDiff, FieldDiffContainer, IncrementalFieldDiff, - ModelRef, + Ref, ) from minos.common import ( NULL_DATETIME, @@ -76,7 +76,7 @@ def test_from_model(self): FieldDiff("updated_at", datetime, NULL_DATETIME), FieldDiff("doors", int, 5), FieldDiff("color", str, "red"), - FieldDiff("owner", Optional[ModelRef[Owner]], None), + FieldDiff("owner", Optional[Ref[Owner]], None), ] ) observed = FieldDiffContainer.from_model(self.car_two) @@ -87,7 +87,7 @@ def test_from_model_with_ignore(self): [ FieldDiff("doors", int, 5), FieldDiff("color", str, "red"), - FieldDiff("owner", Optional[ModelRef[Owner]], None), + FieldDiff("owner", Optional[Ref[Owner]], None), ] ) observed = FieldDiffContainer.from_model(self.car_two, ignore={"uuid", "version", "created_at", "updated_at"}) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_extractors.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_extractors.py index 7fe3262fe..5de4171fb 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_extractors.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_extractors.py @@ -8,82 +8,82 @@ ) from minos.aggregate import ( - ModelRef, - ModelRefExtractor, + Ref, + RefExtractor, ) from minos.common import ( ModelType, ) -class TestModelRefExtractor(unittest.TestCase): +class TestRefExtractor(unittest.TestCase): def test_simple(self): mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int}) - value = ModelRef(uuid4()) + value = Ref(uuid4()) expected = {"Foo": {value}} - observed = ModelRefExtractor(value, ModelRef[mt_foo]).build() + observed = RefExtractor(value, Ref[mt_foo]).build() self.assertEqual(expected, observed) def test_list(self): mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int}) - value = [ModelRef(uuid4()), ModelRef(uuid4())] + value = [Ref(uuid4()), Ref(uuid4())] expected = {"Foo": set(value)} - observed = ModelRefExtractor(value, list[ModelRef[mt_foo]]).build() + observed = RefExtractor(value, list[Ref[mt_foo]]).build() self.assertEqual(expected, observed) def test_dict(self): mt_key = ModelType.build("Key", {"uuid": UUID, "version": int}) mt_value = ModelType.build("Value", {"uuid": UUID, "version": int}) - value = {ModelRef(uuid4()): ModelRef(uuid4()), ModelRef(uuid4()): ModelRef(uuid4())} + value = {Ref(uuid4()): Ref(uuid4()), Ref(uuid4()): Ref(uuid4())} expected = {"Key": set(value.keys()), "Value": set(value.values())} - observed = ModelRefExtractor(value, dict[ModelRef[mt_key], ModelRef[mt_value]]).build() + observed = RefExtractor(value, dict[Ref[mt_key], Ref[mt_value]]).build() self.assertEqual(expected, observed) def test_model(self): mt_bar = ModelType.build("Bar", {"uuid": UUID, "version": int}) - mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": ModelRef[mt_bar]}) + mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": Ref[mt_bar]}) - value = mt_foo(uuid=uuid4(), version=1, another=ModelRef(uuid4())) + value = mt_foo(uuid=uuid4(), version=1, another=Ref(uuid4())) expected = {"Bar": {value.another}} - observed = ModelRefExtractor(value, mt_foo).build() + observed = RefExtractor(value, mt_foo).build() self.assertEqual(expected, observed) def test_model_without_kind(self): mt_bar = ModelType.build("Bar", {"uuid": UUID, "version": int}) - mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": ModelRef[mt_bar]}) + mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": Ref[mt_bar]}) - value = mt_foo(uuid=uuid4(), version=1, another=ModelRef(uuid4())) + value = mt_foo(uuid=uuid4(), version=1, another=Ref(uuid4())) - expected = ModelRefExtractor(value, mt_foo).build() - observed = ModelRefExtractor(value).build() + expected = RefExtractor(value, mt_foo).build() + observed = RefExtractor(value).build() self.assertEqual(expected, observed) def test_optional(self): mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int}) - value = ModelRef(uuid4()) + value = Ref(uuid4()) expected = {"Foo": {value}} - observed = ModelRefExtractor(value, Optional[ModelRef[mt_foo]]).build() + observed = RefExtractor(value, Optional[Ref[mt_foo]]).build() self.assertEqual(expected, observed) def test_model_cls_by_type_hints(self): mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int}) - value = ModelRef(mt_foo(uuid4(), 1)) + value = Ref(mt_foo(uuid4(), 1)) self.assertEqual(mt_foo, value.data_cls) def test_model_cls_none(self): - value = ModelRef(uuid4()) + value = Ref(uuid4()) self.assertEqual(None, value.data_cls) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_injectors.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_injectors.py index 202d04617..f88b5d0a7 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_injectors.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_injectors.py @@ -5,8 +5,8 @@ ) from minos.aggregate import ( - ModelRef, - ModelRefInjector, + Ref, + RefInjector, ) from minos.common import ( ModelType, @@ -17,13 +17,13 @@ ) -class TestModelRefInjector(MinosTestCase): +class TestRefInjector(MinosTestCase): async def test_simple(self): model = await Car.create(3, "test") mapper = {model.uuid: model} expected = model - observed = ModelRefInjector(model.uuid, mapper).build() + observed = RefInjector(model.uuid, mapper).build() self.assertEqual(expected, observed) @@ -32,7 +32,7 @@ async def test_list(self): mapper = {model.uuid: model} expected = [model, model, model] - observed = ModelRefInjector([model.uuid, model.uuid, model.uuid], mapper).build() + observed = RefInjector([model.uuid, model.uuid, model.uuid], mapper).build() self.assertEqual(expected, observed) @@ -41,20 +41,20 @@ async def test_dict(self): mapper = {model.uuid: model} expected = {model: model} - observed = ModelRefInjector({model.uuid: model.uuid}, mapper).build() + observed = RefInjector({model.uuid: model.uuid}, mapper).build() self.assertEqual(expected, observed) def test_model(self): mt_bar = ModelType.build("Bar", {"uuid": UUID, "version": int}) - mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": ModelRef[mt_bar]}) + mt_foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": Ref[mt_bar]}) model = mt_bar(uuid=uuid4(), version=1) mapper = {model.uuid: model} value = mt_foo(uuid=uuid4(), version=1, another=model.uuid) expected = mt_foo(uuid=value.uuid, version=1, another=model) - observed = ModelRefInjector(value, mapper).build() + observed = RefInjector(value, mapper).build() self.assertEqual(expected, observed) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py index 71e279dc4..7756df8b0 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py @@ -11,8 +11,8 @@ from minos.aggregate import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, - AggregateRef, - ModelRef, + ExternalAggregate, + Ref, ) from minos.common import ( DeclarativeModel, @@ -29,7 +29,7 @@ ) -class Product(AggregateRef): +class Product(ExternalAggregate): """For testing purposes.""" title: str @@ -50,34 +50,34 @@ def test_values(self): FakeMessage = ModelType.build("FakeMessage", {"content": Any}) Bar = ModelType.build("Bar", {"uuid": UUID, "age": int}) -Foo = ModelType.build("Foo", {"another": ModelRef[Bar]}) +Foo = ModelType.build("Foo", {"another": Ref[Bar]}) -class TestModelRef(MinosTestCase): +class TestRef(MinosTestCase): def test_subclass(self): # noinspection PyTypeHints - self.assertTrue(issubclass(ModelRef, (DeclarativeModel, UUID, Generic))) + self.assertTrue(issubclass(Ref, (DeclarativeModel, UUID, Generic))) def test_raises(self): with self.assertRaises(ValueError): # noinspection PyTypeChecker - ModelRef(56) + Ref(56) def test_uuid(self): uuid = uuid4() - value = ModelRef(uuid) + value = Ref(uuid) self.assertEqual(uuid, value) def test_uuid_int(self): uuid = uuid4() - value = ModelRef(uuid) + value = Ref(uuid) self.assertEqual(uuid.int, value.int) def test_uuid_is_safe(self): uuid = uuid4() - value = ModelRef(uuid) + value = Ref(uuid) self.assertEqual(uuid.is_safe, value.is_safe) @@ -89,46 +89,46 @@ def test_model(self): def test_model_uuid(self): uuid = uuid4() - value = ModelRef(Bar(uuid, 1)) + value = Ref(Bar(uuid, 1)) self.assertEqual(uuid, value.uuid) def test_model_attribute(self): - value = ModelRef(Bar(uuid4(), 1)) + value = Ref(Bar(uuid4(), 1)) self.assertEqual(1, value.age) def test_model_attribute_raises(self): - value = ModelRef(Bar(uuid4(), 1)) + value = Ref(Bar(uuid4(), 1)) with self.assertRaises(AttributeError): value.year def test_fields(self): - value = ModelRef(Bar(uuid4(), 1)) + value = Ref(Bar(uuid4(), 1)) self.assertEqual({"data": Field("data", Union[Bar, UUID], value)}, value.fields) def test_model_avro_data(self): value = Bar(uuid4(), 1) - self.assertEqual(value.avro_data, ModelRef(value).avro_data) + self.assertEqual(value.avro_data, Ref(value).avro_data) def test_uuid_avro_data(self): value = uuid4() - self.assertEqual(str(value), ModelRef(value).avro_data) + self.assertEqual(str(value), Ref(value).avro_data) async def test_model_avro_data_submitting(self): uuid = uuid4() value = Bar(uuid, 1) IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.set(True) - self.assertEqual(str(uuid), ModelRef(value).avro_data) + self.assertEqual(str(uuid), Ref(value).avro_data) async def test_uuid_avro_data_submitting(self): value = uuid4() IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.set(True) - self.assertEqual(str(value), ModelRef(value).avro_data) + self.assertEqual(str(value), Ref(value).avro_data) def test_model_avro_schema(self): another = Bar(uuid4(), 1) @@ -143,13 +143,13 @@ def test_model_avro_schema(self): "name": "Bar", "namespace": "", "type": "record", - "logicalType": "minos.aggregate.models.refs.models.ModelRef", + "logicalType": "minos.aggregate.models.refs.models.Ref", }, - {"logicalType": "minos.aggregate.models.refs.models.ModelRef", "type": "string"}, + {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, ] ] - self.assertEqual(expected, ModelRef(another).avro_schema) + self.assertEqual(expected, Ref(another).avro_schema) def test_uuid_avro_schema(self): another = uuid4() @@ -162,12 +162,12 @@ def test_uuid_avro_schema(self): {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.refs.models.ModelRef", + "logicalType": "minos.aggregate.models.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", }, - {"logicalType": "minos.aggregate.models.refs.models.ModelRef", "type": "string"}, + {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, ] ] self.assertEqual(expected, ref.avro_schema) @@ -177,13 +177,13 @@ def test_model_from_avro(self): expected = Foo(another).another # FIXME: This should not be needed to set the type hint properly schema = [ - {"logicalType": "minos.aggregate.models.refs.models.ModelRef", "type": "string"}, + {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, { "fields": [ {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.refs.models.ModelRef", + "logicalType": "minos.aggregate.models.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", @@ -204,12 +204,12 @@ def test_uuid_from_avro(self): {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.refs.models.ModelRef", + "logicalType": "minos.aggregate.models.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", }, - {"logicalType": "minos.aggregate.models.refs.models.ModelRef", "type": "string"}, + {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, ] data = str(another) @@ -238,7 +238,7 @@ async def test_resolve(self): async def test_resolve_already(self): uuid = uuid4() - ref = ModelRef(Bar(uuid, 1)) + ref = Ref(Bar(uuid, 1)) await ref.resolve() @@ -246,20 +246,20 @@ async def test_resolve_already(self): self.assertEqual(0, len(observed)) async def test_resolved(self): - self.assertFalse(ModelRef(uuid4()).resolved) - self.assertTrue(ModelRef(Bar(uuid4(), 4)).resolved) + self.assertFalse(Ref(uuid4()).resolved) + self.assertTrue(Ref(Bar(uuid4(), 4)).resolved) def test_avro_model(self): another = Bar(uuid4(), 1) ref = Foo(another).another # FIXME: This should not be needed to set the type hint properly - self.assertEqual(ref, ModelRef.from_avro_bytes(ref.avro_bytes)) + self.assertEqual(ref, Ref.from_avro_bytes(ref.avro_bytes)) def test_avro_uuid(self): another = uuid4() ref = Foo(another).another # FIXME: This should not be needed to set the type hint properly - self.assertEqual(ref, ModelRef.from_avro_bytes(ref.avro_bytes)) + self.assertEqual(ref, Ref.from_avro_bytes(ref.avro_bytes)) if __name__ == "__main__": diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_resolvers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_resolvers.py index bf842d3a5..1b74cc24e 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_resolvers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_resolvers.py @@ -5,8 +5,8 @@ ) from minos.aggregate import ( - ModelRef, - ModelRefResolver, + Ref, + RefResolver, ) from minos.common import ( ModelType, @@ -20,17 +20,17 @@ ) Bar = ModelType.build("Bar", {"uuid": UUID, "version": int}) -Foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": ModelRef[Bar]}) +Foo = ModelType.build("Foo", {"uuid": UUID, "version": int, "another": Ref[Bar]}) -class TestModelRefResolver(MinosTestCase): +class TestRefResolver(MinosTestCase): def setUp(self) -> None: super().setUp() - self.resolver = ModelRefResolver() + self.resolver = RefResolver() self.uuid = uuid4() self.another_uuid = uuid4() - self.value = Foo(self.uuid, 1, another=ModelRef(self.another_uuid)) + self.value = Foo(self.uuid, 1, another=Ref(self.another_uuid)) async def test_resolve(self): self.broker_subscriber_builder.with_messages( @@ -46,7 +46,7 @@ async def test_resolve(self): self.assertEqual("GetBars", observed[0].topic) self.assertEqual({"uuids": {self.another_uuid}}, observed[0].content) - self.assertEqual(Foo(self.uuid, 1, another=ModelRef(Bar(self.another_uuid, 1))), resolved) + self.assertEqual(Foo(self.uuid, 1, another=Ref(Bar(self.another_uuid, 1))), resolved) async def test_resolve_already(self): self.assertEqual(34, await self.resolver.resolve(34)) diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index 9098ba5be..98eb269a6 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -26,7 +26,7 @@ InMemoryEventRepository, InMemorySnapshotRepository, InMemoryTransactionRepository, - ModelRef, + Ref, ValueObject, ValueObjectSet, ) @@ -148,7 +148,7 @@ class Car(Aggregate): doors: int color: str - owner: Optional[ModelRef[Owner]] + owner: Optional[Ref[Owner]] class Order(Aggregate): diff --git a/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py b/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py index 93d3c7ab5..207583675 100644 --- a/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py +++ b/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py @@ -9,7 +9,7 @@ from minos.aggregate import ( AggregateDiff, - ModelRefResolver, + RefResolver, ) logger = logging.getLogger(__name__) @@ -20,18 +20,18 @@ class PreEventHandler: @classmethod async def handle(cls, diff: T, resolve_references: bool = True, **kwargs) -> T: - """Handle ModelRef resolution for Events. + """Handle Ref resolution for Events. - :param diff: The instance containing ``ModelRef`` instances. + :param diff: The instance containing ``Ref`` instances. :param resolve_references: If ``True`` the resolution is performed, otherwise it is skipped. :param kwargs: Additional named arguments. - :return: The original instance with the ``ModelRef`` references already resolved. + :return: The original instance with the ``Ref`` references already resolved. """ if not isinstance(diff, AggregateDiff) or not resolve_references: return diff try: - return await ModelRefResolver(**kwargs).resolve(diff) + return await RefResolver(**kwargs).resolve(diff) except Exception as exc: logger.warning(f"An exception was raised while trying to resolve model references: {exc!r}") return diff diff --git a/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py b/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py index e0d93deae..79672e7d4 100644 --- a/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py +++ b/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py @@ -11,7 +11,7 @@ AggregateDiff, FieldDiff, FieldDiffContainer, - ModelRef, + Ref, ) from minos.common import ( current_datetime, @@ -35,7 +35,7 @@ def setUp(self) -> None: 1, Action.CREATE, self.now, - FieldDiffContainer([FieldDiff("bars", list[ModelRef[Bar]], [b.uuid for b in self.bars])]), + FieldDiffContainer([FieldDiff("bars", list[Ref[Bar]], [b.uuid for b in self.bars])]), ) async def test_handle(self): @@ -45,10 +45,10 @@ async def test_handle(self): 1, Action.CREATE, self.now, - FieldDiffContainer([FieldDiff("bars", list[ModelRef[Bar]], self.bars)]), + FieldDiffContainer([FieldDiff("bars", list[Ref[Bar]], self.bars)]), ) - with patch("minos.aggregate.ModelRefResolver.resolve", return_value=value): + with patch("minos.aggregate.RefResolver.resolve", return_value=value): observed = await PreEventHandler.handle(self.diff) expected = AggregateDiff( @@ -57,7 +57,7 @@ async def test_handle(self): 1, Action.CREATE, self.now, - FieldDiffContainer([FieldDiff("bars", list[ModelRef[Bar]], self.bars)]), + FieldDiffContainer([FieldDiff("bars", list[Ref[Bar]], self.bars)]), ) self.assertEqual(expected, observed) @@ -70,7 +70,7 @@ async def test_handle_without_resolving_references(self): self.assertEqual(self.diff, observed) async def test_handle_raises(self): - with patch("minos.aggregate.ModelRefResolver.resolve", side_effect=ValueError): + with patch("minos.aggregate.RefResolver.resolve", side_effect=ValueError): observed = await PreEventHandler.handle(self.diff) expected = AggregateDiff( @@ -79,7 +79,7 @@ async def test_handle_raises(self): 1, Action.CREATE, self.now, - FieldDiffContainer([FieldDiff("bars", list[ModelRef[Bar]], [b.uuid for b in self.bars])]), + FieldDiffContainer([FieldDiff("bars", list[Ref[Bar]], [b.uuid for b in self.bars])]), ) self.assertEqual(expected, observed) diff --git a/packages/core/minos-microservice-cqrs/tests/utils.py b/packages/core/minos-microservice-cqrs/tests/utils.py index 133fafaa6..18036cfae 100644 --- a/packages/core/minos-microservice-cqrs/tests/utils.py +++ b/packages/core/minos-microservice-cqrs/tests/utils.py @@ -8,8 +8,8 @@ from minos.aggregate import ( Aggregate, - AggregateRef, - ModelRef, + ExternalAggregate, + Ref, ) from minos.cqrs import ( CommandService, @@ -48,10 +48,10 @@ async def create_foo(self, request: Request) -> Response: class Foo(Aggregate): """For testing purposes""" - bar: ModelRef[Bar] + bar: Ref[Bar] -class Bar(AggregateRef): +class Bar(ExternalAggregate): """For testing purposes""" name: str From bfcb2aeb1260734444b5b613225fe6023257dd5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 13:28:33 +0100 Subject: [PATCH 18/97] ISSUE #? * Minor improvements. --- README.md | 10 +++++----- packages/core/minos-microservice-aggregate/README.md | 4 ++-- packages/core/minos-microservice-common/README.md | 4 ++-- packages/core/minos-microservice-cqrs/README.md | 4 ++-- packages/core/minos-microservice-networks/README.md | 4 ++-- packages/core/minos-microservice-saga/README.md | 4 ++-- 6 files changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 1bd15f33e..486db2085 100644 --- a/README.md +++ b/README.md @@ -226,10 +226,6 @@ class FooCommandService(CommandService): ``` -## Documentation - -The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). - ## Packages This project follows a modular structure based on python packages. @@ -250,9 +246,13 @@ The plugin packages provide connectors to external technologies like brokers, di * Coming soon... +## Documentation + +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). + ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). ## Getting Help diff --git a/packages/core/minos-microservice-aggregate/README.md b/packages/core/minos-microservice-aggregate/README.md index 4549b7c97..3e13dd2b3 100644 --- a/packages/core/minos-microservice-aggregate/README.md +++ b/packages/core/minos-microservice-aggregate/README.md @@ -18,11 +18,11 @@ asynchronous environment. ## Documentation -The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). ## Getting Help diff --git a/packages/core/minos-microservice-common/README.md b/packages/core/minos-microservice-common/README.md index e68118534..3837018db 100644 --- a/packages/core/minos-microservice-common/README.md +++ b/packages/core/minos-microservice-common/README.md @@ -18,11 +18,11 @@ asynchronous environment. ## Documentation -The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). ## Getting Help diff --git a/packages/core/minos-microservice-cqrs/README.md b/packages/core/minos-microservice-cqrs/README.md index fbc61448c..e14b9b739 100644 --- a/packages/core/minos-microservice-cqrs/README.md +++ b/packages/core/minos-microservice-cqrs/README.md @@ -18,11 +18,11 @@ asynchronous environment. ## Documentation -The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). ## Getting Help diff --git a/packages/core/minos-microservice-networks/README.md b/packages/core/minos-microservice-networks/README.md index 12f2b9380..885fbc60b 100644 --- a/packages/core/minos-microservice-networks/README.md +++ b/packages/core/minos-microservice-networks/README.md @@ -18,11 +18,11 @@ asynchronous environment. ## Documentation -The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). ## Getting Help diff --git a/packages/core/minos-microservice-saga/README.md b/packages/core/minos-microservice-saga/README.md index 75dcb13f2..8b270fe68 100644 --- a/packages/core/minos-microservice-saga/README.md +++ b/packages/core/minos-microservice-saga/README.md @@ -18,11 +18,11 @@ asynchronous environment. ## Documentation -The official API Reference is publicly available at [GiHub Pages](https://minos-framework.github.io/minos-python). +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). ## Source Code -The source code of this project is hosted at [GitHub](https://github.com/minos-framework/minos-python). +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). ## Getting Help From 65042af42e3555e7ea439544711934bf019b01c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 15:31:05 +0100 Subject: [PATCH 19/97] ISSUE #121 * Rename `Aggregate` as `RootEntity`. --- README.md | 4 ++-- .../minos/aggregate/__init__.py | 2 +- .../minos/aggregate/events/entries.py | 4 ++-- .../minos/aggregate/exceptions.py | 4 ++-- .../minos/aggregate/models/__init__.py | 2 +- .../minos/aggregate/models/aggregates.py | 6 +++--- .../minos/aggregate/models/diffs/aggregates.py | 8 ++++---- .../minos/aggregate/snapshots/abc.py | 10 +++++----- .../minos/aggregate/snapshots/entries.py | 12 ++++++------ .../minos/aggregate/snapshots/memory.py | 8 ++++---- .../minos/aggregate/snapshots/pg/api.py | 6 +++--- .../minos/aggregate/snapshots/pg/readers.py | 6 +++--- .../minos/aggregate/snapshots/pg/writers.py | 10 +++++----- .../minos/aggregate/snapshots/services.py | 4 ++-- .../tests/test_aggregate/test_snapshots/test_abc.py | 6 +++--- .../core/minos-microservice-aggregate/tests/utils.py | 10 +++++----- packages/core/minos-microservice-cqrs/tests/utils.py | 4 ++-- 17 files changed, 53 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 486db2085..26819cc9e 100644 --- a/README.md +++ b/README.md @@ -88,10 +88,10 @@ Here is an example of the creation the `Foo` aggregate. In this case, it has two ```python from __future__ import annotations from typing import Optional -from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.aggregate import RootEntity, AggregateRef, ModelRef -class Foo(Aggregate): +class Foo(RootEntity): """Foo Aggregate class.""" bar: str diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 553df2299..324ef616f 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -26,7 +26,7 @@ ) from .models import ( Action, - Aggregate, + RootEntity, AggregateDiff, Entity, EntitySet, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index 57eaf6cf7..32c04fd95 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -25,7 +25,7 @@ if TYPE_CHECKING: from ..models import ( Action, - Aggregate, + RootEntity, AggregateDiff, FieldDiffContainer, ) @@ -129,7 +129,7 @@ def as_raw(self) -> dict[str, Any]: } @property - def aggregate_cls(self) -> Type[Aggregate]: + def aggregate_cls(self) -> Type[RootEntity]: """Load the concrete ``Aggregate`` class. :return: A ``Type`` object. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py index 3f317c4e3..3c39ad69e 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py @@ -12,7 +12,7 @@ if TYPE_CHECKING: from .models import ( - Aggregate, + RootEntity, AggregateDiff, ) @@ -52,7 +52,7 @@ class SnapshotRepositoryException(AggregateException): class SnapshotRepositoryConflictException(SnapshotRepositoryException): """Exception to be raised when current version is newer than the one to be processed.""" - def __init__(self, previous: Aggregate, aggregate_diff: AggregateDiff): + def __init__(self, previous: RootEntity, aggregate_diff: AggregateDiff): self.previous = previous self.aggregate_diff = aggregate_diff super().__init__( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index dbff50e63..f5685ba2a 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -2,7 +2,7 @@ Action, ) from .aggregates import ( - Aggregate, + RootEntity, ) from .collections import ( IncrementalSet, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py index 937644b85..5f81e5539 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py @@ -52,7 +52,7 @@ logger = logging.getLogger(__name__) -class Aggregate(Entity): +class RootEntity(Entity): """Base aggregate class.""" version: int @@ -249,7 +249,7 @@ def _update_from_repository_entry(self, entry: EventEntry) -> None: self.created_at = entry.created_at self.updated_at = entry.created_at - def diff(self, another: Aggregate) -> AggregateDiff: + def diff(self, another: RootEntity) -> AggregateDiff: """Compute the difference with another aggregate. Both ``Aggregate`` instances (``self`` and ``another``) must share the same ``uuid`` value. @@ -304,4 +304,4 @@ def from_diff(cls: Type[T], aggregate_diff: AggregateDiff, *args, **kwargs) -> T ) -T = TypeVar("T", bound=Aggregate) +T = TypeVar("T", bound=RootEntity) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py index f0a1e69e3..c7ab4e0fb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py @@ -35,7 +35,7 @@ if TYPE_CHECKING: from ..aggregates import ( - Aggregate, + RootEntity, ) logger = logging.getLogger(__name__) @@ -95,7 +95,7 @@ def get_all(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, return self.fields_diff.get_all(return_diff) @classmethod - def from_difference(cls, a: Aggregate, b: Aggregate, action: Action = Action.UPDATE) -> AggregateDiff: + def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.UPDATE) -> AggregateDiff: """Build an ``AggregateDiff`` instance from the difference of two aggregates. :param a: One ``Aggregate`` instance. @@ -125,7 +125,7 @@ def from_difference(cls, a: Aggregate, b: Aggregate, action: Action = Action.UPD ) @classmethod - def from_aggregate(cls, aggregate: Aggregate, action: Action = Action.CREATE) -> AggregateDiff: + def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) -> AggregateDiff: """Build an ``AggregateDiff`` from an ``Aggregate`` (considering all fields as differences). :param aggregate: An ``Aggregate`` instance. @@ -144,7 +144,7 @@ def from_aggregate(cls, aggregate: Aggregate, action: Action = Action.CREATE) -> ) @classmethod - def from_deleted_aggregate(cls, aggregate: Aggregate, action: Action = Action.DELETE) -> AggregateDiff: + def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.DELETE) -> AggregateDiff: """Build an ``AggregateDiff`` from an ``Aggregate`` (considering all fields as differences). :param aggregate: An ``Aggregate`` instance. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py index 082a0dbb0..3ac3265c6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py @@ -31,7 +31,7 @@ if TYPE_CHECKING: from ..models import ( - Aggregate, + RootEntity, ) @@ -43,7 +43,7 @@ class SnapshotRepository(ABC, MinosSetup): async def get( self, aggregate_name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs - ) -> Aggregate: + ) -> RootEntity: """Get an aggregate instance from its identifier. :param aggregate_name: Class name of the ``Aggregate``. @@ -62,7 +62,7 @@ async def get( return await self._get(aggregate_name=aggregate_name, uuid=uuid, transaction=transaction, **kwargs) @abstractmethod - async def _get(self, *args, **kwargs) -> Aggregate: + async def _get(self, *args, **kwargs) -> RootEntity: raise NotImplementedError async def find( @@ -74,7 +74,7 @@ async def find( streaming_mode: bool = False, transaction: Optional[TransactionEntry] = None, **kwargs, - ) -> AsyncIterator[Aggregate]: + ) -> AsyncIterator[RootEntity]: """Find a collection of ``Aggregate`` instances based on a ``Condition``. :param aggregate_name: Class name of the ``Aggregate``. @@ -110,7 +110,7 @@ async def find( yield aggregate @abstractmethod - def _find(self, *args, **kwargs) -> AsyncIterator[Aggregate]: + def _find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: raise NotImplementedError def synchronize(self, **kwargs) -> Awaitable[None]: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py index 41d1e234c..eba7324fb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py @@ -33,7 +33,7 @@ if TYPE_CHECKING: from ..models import ( - Aggregate, + RootEntity, ) @@ -84,7 +84,7 @@ def __init__( self.transaction_uuid = transaction_uuid @classmethod - def from_aggregate(cls, aggregate: Aggregate, **kwargs) -> SnapshotEntry: + def from_aggregate(cls, aggregate: RootEntity, **kwargs) -> SnapshotEntry: """Build a new instance from an ``Aggregate``. :param aggregate: The aggregate instance. @@ -160,14 +160,14 @@ def encoded_data(self) -> Optional[str]: return json.dumps(self.data) - def build_aggregate(self, **kwargs) -> Aggregate: + def build_aggregate(self, **kwargs) -> RootEntity: """Rebuild the stored ``Aggregate`` object instance from the internal state. :param kwargs: Additional named arguments. :return: A ``Aggregate`` instance. """ from ..models import ( - Aggregate, + RootEntity, ) if self.data is None: @@ -180,11 +180,11 @@ def build_aggregate(self, **kwargs) -> Aggregate: "updated_at": self.updated_at, } data |= kwargs - instance = Aggregate.from_avro(self.schema, data) + instance = RootEntity.from_avro(self.schema, data) return instance @property - def aggregate_cls(self) -> Type[Aggregate]: + def aggregate_cls(self) -> Type[RootEntity]: """Load the concrete ``Aggregate`` class. :return: A ``Type`` object. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py index 3dec8858e..74dd974ab 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py @@ -47,7 +47,7 @@ if TYPE_CHECKING: from ..models import ( - Aggregate, + RootEntity, ) @@ -83,7 +83,7 @@ async def _find( ordering: Optional[_Ordering] = None, limit: Optional[int] = None, **kwargs, - ) -> AsyncIterator[Aggregate]: + ) -> AsyncIterator[RootEntity]: uuids = {v.aggregate_uuid async for v in self._event_repository.select(aggregate_name=aggregate_name)} aggregates = list() @@ -108,7 +108,7 @@ async def _find( # noinspection PyMethodOverriding async def _get( self, aggregate_name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs - ) -> Aggregate: + ) -> RootEntity: transaction_uuids = await self._get_transaction_uuids(transaction) entries = await self._get_event_entries(aggregate_name, uuid, transaction_uuids) @@ -154,7 +154,7 @@ async def _get_event_entries( return entries @staticmethod - def _build_aggregate(entries: list[EventEntry], **kwargs) -> Aggregate: + def _build_aggregate(entries: list[EventEntry], **kwargs) -> RootEntity: cls = entries[0].aggregate_cls aggregate = cls.from_diff(entries[0].aggregate_diff, **kwargs) for entry in entries[1:]: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py index 9d0d12975..8e0dd7561 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py @@ -24,7 +24,7 @@ if TYPE_CHECKING: from ...models import ( - Aggregate, + RootEntity, ) @@ -62,10 +62,10 @@ async def _destroy(self) -> None: await self.reader.destroy() await self.writer.destroy() - def _get(self, *args, **kwargs) -> Awaitable[Aggregate]: + def _get(self, *args, **kwargs) -> Awaitable[RootEntity]: return self.reader.get(*args, **kwargs) - def _find(self, *args, **kwargs) -> AsyncIterator[Aggregate]: + def _find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: return self.reader.find(*args, **kwargs) def _synchronize(self, *args, **kwargs) -> Awaitable[None]: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py index 2cef349b1..cbbe5d235 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py @@ -39,7 +39,7 @@ if TYPE_CHECKING: from ...models import ( - Aggregate, + RootEntity, ) logger = logging.getLogger(__name__) @@ -51,7 +51,7 @@ class PostgreSqlSnapshotReader(PostgreSqlSnapshotSetup): The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. """ - async def get(self, aggregate_name: str, uuid: UUID, **kwargs) -> Aggregate: + async def get(self, aggregate_name: str, uuid: UUID, **kwargs) -> RootEntity: """Get an aggregate instance from its identifier. :param aggregate_name: Class name of the ``Aggregate``. @@ -80,7 +80,7 @@ async def get_entry(self, aggregate_name: str, uuid: UUID, **kwargs) -> Snapshot except StopAsyncIteration: raise AggregateNotFoundException(f"Some aggregates could not be found: {uuid!s}") - async def find(self, *args, **kwargs) -> AsyncIterator[Aggregate]: + async def find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: """Find a collection of ``Aggregate`` instances based on a ``Condition``. :param args: Additional positional arguments. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index 0c3197ed4..ea66a6649 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -42,7 +42,7 @@ if TYPE_CHECKING: from ...models import ( - Aggregate, + RootEntity, AggregateDiff, ) from .readers import ( @@ -137,7 +137,7 @@ async def _submit_update_or_create(self, event_entry: EventEntry, **kwargs) -> S snapshot_entry = await self._submit_entry(snapshot_entry, **kwargs) return snapshot_entry - async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> Aggregate: + async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> RootEntity: diff = event_entry.aggregate_diff try: @@ -148,14 +148,14 @@ async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> Aggregate aggregate = await self._update_if_exists(diff, transaction=transaction, **kwargs) return aggregate - async def _update_if_exists(self, aggregate_diff: AggregateDiff, **kwargs) -> Aggregate: + async def _update_if_exists(self, aggregate_diff: AggregateDiff, **kwargs) -> RootEntity: # noinspection PyBroadException try: # noinspection PyTypeChecker previous = await self._select_one_aggregate(aggregate_diff.uuid, aggregate_diff.name, **kwargs) except AggregateNotFoundException: # noinspection PyTypeChecker - aggregate_cls: Type[Aggregate] = import_module(aggregate_diff.name) + aggregate_cls: Type[RootEntity] = import_module(aggregate_diff.name) return aggregate_cls.from_diff(aggregate_diff, **kwargs) if previous.version >= aggregate_diff.version: @@ -164,7 +164,7 @@ async def _update_if_exists(self, aggregate_diff: AggregateDiff, **kwargs) -> Ag previous.apply_diff(aggregate_diff) return previous - async def _select_one_aggregate(self, aggregate_uuid: UUID, aggregate_name: str, **kwargs) -> Aggregate: + async def _select_one_aggregate(self, aggregate_uuid: UUID, aggregate_name: str, **kwargs) -> RootEntity: snapshot_entry = await self._reader.get_entry(aggregate_name, aggregate_uuid, **kwargs) return snapshot_entry.build_aggregate(**kwargs) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py index d4e60a931..4b682406f 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py @@ -41,7 +41,7 @@ if TYPE_CHECKING: from ..models import ( - Aggregate, + RootEntity, ) logger = logging.getLogger(__name__) @@ -108,7 +108,7 @@ async def __get_many__(self, request: Request) -> Response: return Response(aggregates) @cached_property - def __aggregate_cls__(self) -> Type[Aggregate]: + def __aggregate_cls__(self) -> Type[RootEntity]: # noinspection PyTypeChecker return import_module(self.config.service.aggregate) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py index 7c754dc6d..a00431b82 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py @@ -16,7 +16,7 @@ from minos.aggregate import ( TRANSACTION_CONTEXT_VAR, - Aggregate, + RootEntity, Condition, Ordering, SnapshotRepository, @@ -33,10 +33,10 @@ class _SnapshotRepository(SnapshotRepository): """For testing purposes.""" - async def _get(self, *args, **kwargs) -> Aggregate: + async def _get(self, *args, **kwargs) -> RootEntity: """For testing purposes.""" - def _find(self, *args, **kwargs) -> AsyncIterator[Aggregate]: + def _find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: """For testing purposes.""" async def _synchronize(self, **kwargs) -> None: diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index 98eb269a6..15421a8bf 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -20,7 +20,7 @@ ) from minos.aggregate import ( - Aggregate, + RootEntity, Entity, EntitySet, InMemoryEventRepository, @@ -28,7 +28,7 @@ InMemoryTransactionRepository, Ref, ValueObject, - ValueObjectSet, + ValueObjectSet, ExternalAggregate, ) from minos.common import ( Lock, @@ -135,7 +135,7 @@ async def _destroy_instance(self, instance) -> None: """For testing purposes.""" -class Owner(Aggregate): +class Owner(RootEntity): """Aggregate ``Owner`` class for testing purposes.""" name: str @@ -143,7 +143,7 @@ class Owner(Aggregate): age: Optional[int] -class Car(Aggregate): +class Car(RootEntity): """Aggregate ``Car`` class for testing purposes.""" doors: int @@ -151,7 +151,7 @@ class Car(Aggregate): owner: Optional[Ref[Owner]] -class Order(Aggregate): +class Order(RootEntity): """For testing purposes""" products: EntitySet[OrderItem] diff --git a/packages/core/minos-microservice-cqrs/tests/utils.py b/packages/core/minos-microservice-cqrs/tests/utils.py index 18036cfae..60eb730cb 100644 --- a/packages/core/minos-microservice-cqrs/tests/utils.py +++ b/packages/core/minos-microservice-cqrs/tests/utils.py @@ -7,7 +7,7 @@ ) from minos.aggregate import ( - Aggregate, + RootEntity, ExternalAggregate, Ref, ) @@ -45,7 +45,7 @@ async def create_foo(self, request: Request) -> Response: """For testing purpose""" -class Foo(Aggregate): +class Foo(RootEntity): """For testing purposes""" bar: Ref[Bar] From f25c23783eb518429045a5d10ea0f01bfa5cd511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 15:34:20 +0100 Subject: [PATCH 20/97] ISSUE #121 * Rename `ExternalAggregate` as `ExternalEntity`. --- .../minos-microservice-aggregate/minos/aggregate/__init__.py | 2 +- .../minos/aggregate/models/__init__.py | 2 +- .../minos/aggregate/models/refs/__init__.py | 2 +- .../minos/aggregate/models/refs/models.py | 2 +- .../tests/test_aggregate/test_models/test_refs/test_models.py | 4 ++-- packages/core/minos-microservice-aggregate/tests/utils.py | 2 +- packages/core/minos-microservice-cqrs/tests/utils.py | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 324ef616f..f9d897e43 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -30,7 +30,7 @@ AggregateDiff, Entity, EntitySet, - ExternalAggregate, + ExternalEntity, FieldDiff, FieldDiffContainer, IncrementalFieldDiff, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index f5685ba2a..3c7f3bbc0 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -20,7 +20,7 @@ EntitySet, ) from .refs import ( - ExternalAggregate, + ExternalEntity, Ref, RefExtractor, RefInjector, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py index 8c67a58f6..4a64c0223 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py @@ -5,7 +5,7 @@ RefInjector, ) from .models import ( - ExternalAggregate, + ExternalEntity, Ref, ) from .resolvers import ( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py index b8dc4f65a..344791c80 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py @@ -46,7 +46,7 @@ MT = TypeVar("MT", bound=Model) -class ExternalAggregate(Entity): +class ExternalEntity(Entity): """Aggregate Ref class.""" version: int diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py index 7756df8b0..bacc8945a 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py @@ -11,7 +11,7 @@ from minos.aggregate import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, - ExternalAggregate, + ExternalEntity, Ref, ) from minos.common import ( @@ -29,7 +29,7 @@ ) -class Product(ExternalAggregate): +class Product(ExternalEntity): """For testing purposes.""" title: str diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index 15421a8bf..51df28953 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -28,7 +28,7 @@ InMemoryTransactionRepository, Ref, ValueObject, - ValueObjectSet, ExternalAggregate, + ValueObjectSet, ExternalEntity, ) from minos.common import ( Lock, diff --git a/packages/core/minos-microservice-cqrs/tests/utils.py b/packages/core/minos-microservice-cqrs/tests/utils.py index 60eb730cb..dc34e3cae 100644 --- a/packages/core/minos-microservice-cqrs/tests/utils.py +++ b/packages/core/minos-microservice-cqrs/tests/utils.py @@ -8,7 +8,7 @@ from minos.aggregate import ( RootEntity, - ExternalAggregate, + ExternalEntity, Ref, ) from minos.cqrs import ( @@ -51,7 +51,7 @@ class Foo(RootEntity): bar: Ref[Bar] -class Bar(ExternalAggregate): +class Bar(ExternalEntity): """For testing purposes""" name: str From c4a96e3266a73ab3b8db66ea0ce03bd7a828cfe3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 15:34:57 +0100 Subject: [PATCH 21/97] ISSUE #121 * Rename `AggregateDiff` as `Event`. --- .../minos/aggregate/__init__.py | 2 +- .../minos/aggregate/events/entries.py | 10 ++--- .../aggregate/events/repositories/abc.py | 16 +++---- .../minos/aggregate/exceptions.py | 4 +- .../minos/aggregate/models/__init__.py | 2 +- .../minos/aggregate/models/aggregates.py | 14 +++---- .../minos/aggregate/models/diffs/__init__.py | 2 +- .../aggregate/models/diffs/aggregates.py | 10 ++--- .../minos/aggregate/snapshots/pg/writers.py | 4 +- .../test_events/test_entries.py | 8 ++-- .../test_events/test_repositories/test_abc.py | 14 +++---- .../test_aggregates/test_broker.py | 10 ++--- .../test_aggregates/test_differences.py | 8 ++-- .../test_models/test_diffs/test_aggregates.py | 42 +++++++++---------- .../minos/cqrs/handlers.py | 4 +- .../tests/test_cqrs/test_handlers.py | 10 ++--- 16 files changed, 80 insertions(+), 80 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index f9d897e43..d4b647cfa 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -27,7 +27,7 @@ from .models import ( Action, RootEntity, - AggregateDiff, + Event, Entity, EntitySet, ExternalEntity, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index 32c04fd95..6ba8d1ac4 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -26,7 +26,7 @@ from ..models import ( Action, RootEntity, - AggregateDiff, + Event, FieldDiffContainer, ) from ..transactions import ( @@ -81,7 +81,7 @@ def __init__( @classmethod def from_aggregate_diff( - cls, aggregate_diff: AggregateDiff, *, transaction: Optional[TransactionEntry] = None, **kwargs + cls, aggregate_diff: Event, *, transaction: Optional[TransactionEntry] = None, **kwargs ) -> EventEntry: """Build a new instance from an ``Aggregate``. @@ -138,16 +138,16 @@ def aggregate_cls(self) -> Type[RootEntity]: return import_module(self.aggregate_name) @property - def aggregate_diff(self) -> AggregateDiff: + def aggregate_diff(self) -> Event: """Get the stored ``AggregateDiff`` instance. :return: An ``AggregateDiff`` instance. """ from ..models import ( - AggregateDiff, + Event, ) - return AggregateDiff( + return Event( self.aggregate_uuid, self.aggregate_name, self.version, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py index 36588812f..769623bfd 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py @@ -61,7 +61,7 @@ if TYPE_CHECKING: from ...models import ( - AggregateDiff, + Event, ) @@ -100,7 +100,7 @@ def transaction(self, **kwargs) -> TransactionEntry: """ return TransactionEntry(event_repository=self, transaction_repository=self._transaction_repository, **kwargs) - async def create(self, entry: Union[AggregateDiff, EventEntry]) -> EventEntry: + async def create(self, entry: Union[Event, EventEntry]) -> EventEntry: """Store new creation entry into the repository. :param entry: Entry to be stored. @@ -113,7 +113,7 @@ async def create(self, entry: Union[AggregateDiff, EventEntry]) -> EventEntry: entry.action = Action.CREATE return await self.submit(entry) - async def update(self, entry: Union[AggregateDiff, EventEntry]) -> EventEntry: + async def update(self, entry: Union[Event, EventEntry]) -> EventEntry: """Store new update entry into the repository. :param entry: Entry to be stored. @@ -126,7 +126,7 @@ async def update(self, entry: Union[AggregateDiff, EventEntry]) -> EventEntry: entry.action = Action.UPDATE return await self.submit(entry) - async def delete(self, entry: Union[AggregateDiff, EventEntry]) -> EventEntry: + async def delete(self, entry: Union[Event, EventEntry]) -> EventEntry: """Store new deletion entry into the repository. :param entry: Entry to be stored. @@ -139,7 +139,7 @@ async def delete(self, entry: Union[AggregateDiff, EventEntry]) -> EventEntry: entry.action = Action.DELETE return await self.submit(entry) - async def submit(self, entry: Union[AggregateDiff, EventEntry], **kwargs) -> EventEntry: + async def submit(self, entry: Union[Event, EventEntry], **kwargs) -> EventEntry: """Store new entry into the repository. :param entry: The entry to be stored. @@ -148,14 +148,14 @@ async def submit(self, entry: Union[AggregateDiff, EventEntry], **kwargs) -> Eve """ from ...models import ( Action, - AggregateDiff, + Event, ) token = IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.set(True) try: transaction = TRANSACTION_CONTEXT_VAR.get() - if isinstance(entry, AggregateDiff): + if isinstance(entry, Event): entry = EventEntry.from_aggregate_diff(entry, transaction=transaction) if not isinstance(entry.action, Action): @@ -208,7 +208,7 @@ async def validate(self, entry: EventEntry, transaction_uuid_ne: Optional[UUID] async def _submit(self, entry: EventEntry, **kwargs) -> EventEntry: raise NotImplementedError - async def _send_events(self, aggregate_diff: AggregateDiff): + async def _send_events(self, aggregate_diff: Event): from ...models import ( Action, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py index 3c39ad69e..069150c41 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py @@ -13,7 +13,7 @@ if TYPE_CHECKING: from .models import ( RootEntity, - AggregateDiff, + Event, ) @@ -52,7 +52,7 @@ class SnapshotRepositoryException(AggregateException): class SnapshotRepositoryConflictException(SnapshotRepositoryException): """Exception to be raised when current version is newer than the one to be processed.""" - def __init__(self, previous: RootEntity, aggregate_diff: AggregateDiff): + def __init__(self, previous: RootEntity, aggregate_diff: Event): self.previous = previous self.aggregate_diff = aggregate_diff super().__init__( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index 3c7f3bbc0..149f23624 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -10,7 +10,7 @@ IncrementalSetDiffEntry, ) from .diffs import ( - AggregateDiff, + Event, FieldDiff, FieldDiffContainer, IncrementalFieldDiff, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py index 5f81e5539..fc1e16330 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py @@ -42,7 +42,7 @@ SnapshotRepository, ) from .diffs import ( - AggregateDiff, + Event, IncrementalFieldDiff, ) from .entities import ( @@ -155,7 +155,7 @@ async def create(cls: Type[T], *args, **kwargs) -> T: instance: T = cls(*args, **kwargs) - aggregate_diff = AggregateDiff.from_aggregate(instance) + aggregate_diff = Event.from_aggregate(instance) entry = await instance._repository.submit(aggregate_diff) instance._update_from_repository_entry(entry) @@ -237,7 +237,7 @@ async def delete(self) -> None: :return: This method does not return anything. """ - aggregate_diff = AggregateDiff.from_deleted_aggregate(self) + aggregate_diff = Event.from_deleted_aggregate(self) entry = await self._repository.submit(aggregate_diff) self._update_from_repository_entry(entry) @@ -249,7 +249,7 @@ def _update_from_repository_entry(self, entry: EventEntry) -> None: self.created_at = entry.created_at self.updated_at = entry.created_at - def diff(self, another: RootEntity) -> AggregateDiff: + def diff(self, another: RootEntity) -> Event: """Compute the difference with another aggregate. Both ``Aggregate`` instances (``self`` and ``another``) must share the same ``uuid`` value. @@ -257,9 +257,9 @@ def diff(self, another: RootEntity) -> AggregateDiff: :param another: Another ``Aggregate`` instance. :return: An ``FieldDiffContainer`` instance. """ - return AggregateDiff.from_difference(self, another) + return Event.from_difference(self, another) - def apply_diff(self, aggregate_diff: AggregateDiff) -> None: + def apply_diff(self, aggregate_diff: Event) -> None: """Apply the differences over the instance. :param aggregate_diff: The ``FieldDiffContainer`` containing the values to be set. @@ -285,7 +285,7 @@ def apply_diff(self, aggregate_diff: AggregateDiff) -> None: self.updated_at = aggregate_diff.created_at @classmethod - def from_diff(cls: Type[T], aggregate_diff: AggregateDiff, *args, **kwargs) -> T: + def from_diff(cls: Type[T], aggregate_diff: Event, *args, **kwargs) -> T: """Build a new instance from an ``AggregateDiff``. :param aggregate_diff: The difference that contains the data. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py index 2543280c3..de1186494 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py @@ -1,5 +1,5 @@ from .aggregates import ( - AggregateDiff, + Event, ) from .fields import ( FieldDiff, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py index c7ab4e0fb..357ef9a13 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py @@ -42,7 +42,7 @@ @total_ordering -class AggregateDiff(DeclarativeModel): +class Event(DeclarativeModel): """Aggregate Diff class.""" uuid: UUID @@ -95,7 +95,7 @@ def get_all(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, return self.fields_diff.get_all(return_diff) @classmethod - def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.UPDATE) -> AggregateDiff: + def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.UPDATE) -> Event: """Build an ``AggregateDiff`` instance from the difference of two aggregates. :param a: One ``Aggregate`` instance. @@ -125,7 +125,7 @@ def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.U ) @classmethod - def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) -> AggregateDiff: + def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) -> Event: """Build an ``AggregateDiff`` from an ``Aggregate`` (considering all fields as differences). :param aggregate: An ``Aggregate`` instance. @@ -144,7 +144,7 @@ def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) - ) @classmethod - def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.DELETE) -> AggregateDiff: + def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.DELETE) -> Event: """Build an ``AggregateDiff`` from an ``Aggregate`` (considering all fields as differences). :param aggregate: An ``Aggregate`` instance. @@ -160,7 +160,7 @@ def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.D fields_diff=FieldDiffContainer.empty(), ) - def decompose(self) -> list[AggregateDiff]: + def decompose(self) -> list[Event]: """Decompose AggregateDiff Fields into AggregateDiff with once Field. :return: An list of``AggregateDiff`` instances. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index ea66a6649..5d058d29d 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -43,7 +43,7 @@ if TYPE_CHECKING: from ...models import ( RootEntity, - AggregateDiff, + Event, ) from .readers import ( PostgreSqlSnapshotReader, @@ -148,7 +148,7 @@ async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> RootEntit aggregate = await self._update_if_exists(diff, transaction=transaction, **kwargs) return aggregate - async def _update_if_exists(self, aggregate_diff: AggregateDiff, **kwargs) -> RootEntity: + async def _update_if_exists(self, aggregate_diff: Event, **kwargs) -> RootEntity: # noinspection PyBroadException try: # noinspection PyTypeChecker diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py index b6ac965e9..24f3592c1 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py @@ -8,7 +8,7 @@ from minos.aggregate import ( Action, - AggregateDiff, + Event, EventEntry, FieldDiff, FieldDiffContainer, @@ -62,7 +62,7 @@ def test_constructor_extended(self): async def test_from_aggregate_diff(self): fields_diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) created_at = current_datetime() - aggregate_diff = AggregateDiff(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) + aggregate_diff = Event(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) entry = EventEntry.from_aggregate_diff(aggregate_diff) self.assertEqual(self.uuid, entry.aggregate_uuid) @@ -78,7 +78,7 @@ async def test_from_aggregate_diff_with_transaction(self): transaction = TransactionEntry(self.transaction_uuid) fields_diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) created_at = current_datetime() - aggregate_diff = AggregateDiff(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) + aggregate_diff = Event(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) entry = EventEntry.from_aggregate_diff(aggregate_diff, transaction=transaction) self.assertEqual(self.uuid, entry.aggregate_uuid) @@ -119,7 +119,7 @@ def test_aggregate_diff(self): version = 1 now = current_datetime() - aggregate_diff = AggregateDiff(self.uuid, Car.classname, version, Action.CREATE, now, field_diff_container) + aggregate_diff = Event(self.uuid, Car.classname, version, Action.CREATE, now, field_diff_container) entry = EventEntry.from_aggregate_diff(aggregate_diff) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py index af08bda6e..1e14018ec 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py @@ -20,7 +20,7 @@ IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, TRANSACTION_CONTEXT_VAR, Action, - AggregateDiff, + Event, EventEntry, EventRepository, EventRepositoryConflictException, @@ -151,7 +151,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._send_events = send_events_mock uuid = uuid4() - aggregate_diff = AggregateDiff( + aggregate_diff = Event( uuid=uuid, name="example.Car", version=2, @@ -197,7 +197,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._send_events = send_events_mock uuid = uuid4() - aggregate_diff = AggregateDiff( + aggregate_diff = Event( uuid=uuid, name="example.Car", version=2, @@ -238,7 +238,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._submit = submit_mock uuid = uuid4() - aggregate_diff = AggregateDiff( + aggregate_diff = Event( uuid=uuid, name="example.Car", version=2, @@ -258,7 +258,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.assertIsInstance(observed[0], BrokerMessageV1) self.assertEqual("CarUpdated", observed[0].topic) self.assertEqual( - AggregateDiff( + Event( uuid=uuid, name="example.Car", version=56, @@ -271,7 +271,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.assertEqual("CarUpdated.colors.create", observed[1].topic) self.assertIsInstance(observed[1], BrokerMessageV1) self.assertEqual( - AggregateDiff( + Event( uuid=uuid, name="example.Car", version=56, @@ -298,7 +298,7 @@ async def _fn(e: EventEntry) -> EventEntry: uuid = uuid4() aggregate_diff = EventEntry.from_aggregate_diff( - AggregateDiff( + Event( uuid=uuid, name="example.Car", version=2, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py index ed6a9a3cc..eb3ef0914 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py @@ -5,7 +5,7 @@ from minos.aggregate import ( Action, - AggregateDiff, + Event, FieldDiff, FieldDiffContainer, Ref, @@ -30,7 +30,7 @@ async def test_create(self): self.assertIsInstance(observed[0], BrokerMessageV1) self.assertEqual("CarCreated", observed[0].topic) self.assertEqual( - AggregateDiff( + Event( uuid=car.uuid, name=Car.classname, version=1, @@ -59,7 +59,7 @@ async def test_update(self): self.assertIsInstance(observed[0], BrokerMessageV1) self.assertEqual("CarUpdated", observed[0].topic) self.assertEqual( - AggregateDiff( + Event( uuid=car.uuid, name=Car.classname, version=2, @@ -72,7 +72,7 @@ async def test_update(self): self.assertIsInstance(observed[1], BrokerMessageV1) self.assertEqual("CarUpdated.color", observed[1].topic) self.assertEqual( - AggregateDiff( + Event( uuid=car.uuid, name=Car.classname, version=2, @@ -95,7 +95,7 @@ async def test_delete(self): self.assertIsInstance(observed[0], BrokerMessageV1) self.assertEqual("CarDeleted", observed[0].topic) self.assertEqual( - AggregateDiff( + Event( uuid=car.uuid, name=Car.classname, version=2, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py index 83769a090..6638973ef 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py @@ -5,7 +5,7 @@ from minos.aggregate import ( Action, - AggregateDiff, + Event, FieldDiff, FieldDiffContainer, ) @@ -43,7 +43,7 @@ async def asyncSetUp(self) -> None: ) def test_diff(self): - expected = AggregateDiff( + expected = Event( uuid=self.uuid, name=Car.classname, version=3, @@ -55,7 +55,7 @@ def test_diff(self): self.assertEqual(expected, observed) def test_apply_diff(self): - diff = AggregateDiff( + diff = Event( uuid=self.uuid, name=Car.classname, version=3, @@ -67,7 +67,7 @@ def test_apply_diff(self): self.assertEqual(self.final, self.initial) def test_apply_diff_raises(self): - diff = AggregateDiff( + diff = Event( uuid=self.uuid_another, name=Car.classname, version=3, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py index 7a195b747..cf0c22252 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py @@ -8,7 +8,7 @@ from minos.aggregate import ( Action, - AggregateDiff, + Event, FieldDiff, FieldDiffContainer, IncrementalFieldDiff, @@ -35,7 +35,7 @@ async def asyncSetUp(self) -> None: self.final = Car(5, "yellow", uuid=self.uuid, version=3) self.another = Car(3, "blue", uuid=self.uuid_another, version=1) - self.diff = AggregateDiff( + self.diff = Event( uuid=self.uuid, name=Car.classname, version=1, @@ -55,27 +55,27 @@ def test_simplified_name(self): def test_total_ordering(self): observed = [ - AggregateDiff.from_aggregate(Car(3, "blue", version=4)), - AggregateDiff.from_aggregate(Car(3, "blue", version=1)), - AggregateDiff.from_aggregate(Car(3, "blue", version=3)), - AggregateDiff.from_aggregate(Car(3, "blue", version=2)), + Event.from_aggregate(Car(3, "blue", version=4)), + Event.from_aggregate(Car(3, "blue", version=1)), + Event.from_aggregate(Car(3, "blue", version=3)), + Event.from_aggregate(Car(3, "blue", version=2)), ] observed.sort() expected = [ - AggregateDiff.from_aggregate(Car(3, "blue", version=1)), - AggregateDiff.from_aggregate(Car(3, "blue", version=2)), - AggregateDiff.from_aggregate(Car(3, "blue", version=3)), - AggregateDiff.from_aggregate(Car(3, "blue", version=4)), + Event.from_aggregate(Car(3, "blue", version=1)), + Event.from_aggregate(Car(3, "blue", version=2)), + Event.from_aggregate(Car(3, "blue", version=3)), + Event.from_aggregate(Car(3, "blue", version=4)), ] self.assertEqual(expected, observed) def test_from_aggregate(self): - observed = AggregateDiff.from_aggregate(self.initial) + observed = Event.from_aggregate(self.initial) self.assertEqual(self.diff, observed) def test_from_deleted_aggregate(self): - expected = AggregateDiff( + expected = Event( uuid=self.uuid, name=Car.classname, version=1, @@ -83,11 +83,11 @@ def test_from_deleted_aggregate(self): created_at=self.initial.updated_at, fields_diff=FieldDiffContainer.empty(), ) - observed = AggregateDiff.from_deleted_aggregate(self.initial) + observed = Event.from_deleted_aggregate(self.initial) self.assertEqual(expected, observed) def test_from_difference(self): - expected = AggregateDiff( + expected = Event( uuid=self.uuid, name=Car.classname, version=3, @@ -95,22 +95,22 @@ def test_from_difference(self): created_at=self.final.updated_at, fields_diff=FieldDiffContainer([FieldDiff("doors", int, 5), FieldDiff("color", str, "yellow")]), ) - observed = AggregateDiff.from_difference(self.final, self.initial) + observed = Event.from_difference(self.final, self.initial) self.assertEqual(expected, observed) def test_from_difference_raises(self): with self.assertRaises(ValueError): - AggregateDiff.from_difference(self.initial, self.another) + Event.from_difference(self.initial, self.another) def test_avro_serialization(self): serialized = self.diff.avro_bytes self.assertIsInstance(serialized, bytes) - deserialized = AggregateDiff.from_avro_bytes(serialized) + deserialized = Event.from_avro_bytes(serialized) self.assertEqual(self.diff, deserialized) def test_decompose(self): - aggr = AggregateDiff( + aggr = Event( uuid=self.uuid, name=Car.classname, version=3, @@ -120,7 +120,7 @@ def test_decompose(self): ) expected = [ - AggregateDiff( + Event( uuid=self.uuid, name=Car.classname, version=3, @@ -128,7 +128,7 @@ def test_decompose(self): created_at=aggr.created_at, fields_diff=FieldDiffContainer([FieldDiff("doors", int, 5)]), ), - AggregateDiff( + Event( uuid=self.uuid, name=Car.classname, version=3, @@ -144,7 +144,7 @@ def test_decompose(self): class TestAggregateDiffAccessors(unittest.TestCase): def setUp(self) -> None: - self.diff = AggregateDiff( + self.diff = Event( uuid=uuid4(), name="src.domain.Car", version=1, diff --git a/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py b/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py index 207583675..300d9c042 100644 --- a/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py +++ b/packages/core/minos-microservice-cqrs/minos/cqrs/handlers.py @@ -8,7 +8,7 @@ ) from minos.aggregate import ( - AggregateDiff, + Event, RefResolver, ) @@ -27,7 +27,7 @@ async def handle(cls, diff: T, resolve_references: bool = True, **kwargs) -> T: :param kwargs: Additional named arguments. :return: The original instance with the ``Ref`` references already resolved. """ - if not isinstance(diff, AggregateDiff) or not resolve_references: + if not isinstance(diff, Event) or not resolve_references: return diff try: diff --git a/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py b/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py index 79672e7d4..d28a1e459 100644 --- a/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py +++ b/packages/core/minos-microservice-cqrs/tests/test_cqrs/test_handlers.py @@ -8,7 +8,7 @@ from minos.aggregate import ( Action, - AggregateDiff, + Event, FieldDiff, FieldDiffContainer, Ref, @@ -29,7 +29,7 @@ def setUp(self) -> None: self.uuid = uuid4() self.bars = [Bar(uuid4(), 1, "hello"), Bar(uuid4(), 1, "world")] self.now = current_datetime() - self.diff = AggregateDiff( + self.diff = Event( self.uuid, "Foo", 1, @@ -39,7 +39,7 @@ def setUp(self) -> None: ) async def test_handle(self): - value = AggregateDiff( + value = Event( self.uuid, "Foo", 1, @@ -51,7 +51,7 @@ async def test_handle(self): with patch("minos.aggregate.RefResolver.resolve", return_value=value): observed = await PreEventHandler.handle(self.diff) - expected = AggregateDiff( + expected = Event( self.uuid, "Foo", 1, @@ -73,7 +73,7 @@ async def test_handle_raises(self): with patch("minos.aggregate.RefResolver.resolve", side_effect=ValueError): observed = await PreEventHandler.handle(self.diff) - expected = AggregateDiff( + expected = Event( self.uuid, "Foo", 1, From 14007b33501f9e7de59b6d140687a960641269ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 15:36:57 +0100 Subject: [PATCH 22/97] ISSUE #121 * Reformat code. --- .../minos-microservice-aggregate/minos/aggregate/__init__.py | 4 ++-- .../minos/aggregate/events/entries.py | 2 +- .../minos/aggregate/exceptions.py | 2 +- .../minos/aggregate/snapshots/pg/writers.py | 2 +- .../tests/test_aggregate/test_snapshots/test_abc.py | 2 +- packages/core/minos-microservice-aggregate/tests/utils.py | 5 +++-- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index d4b647cfa..c248df4fa 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -26,10 +26,9 @@ ) from .models import ( Action, - RootEntity, - Event, Entity, EntitySet, + Event, ExternalEntity, FieldDiff, FieldDiffContainer, @@ -41,6 +40,7 @@ RefExtractor, RefInjector, RefResolver, + RootEntity, ValueObject, ValueObjectSet, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index 6ba8d1ac4..6e04c8afc 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -25,9 +25,9 @@ if TYPE_CHECKING: from ..models import ( Action, - RootEntity, Event, FieldDiffContainer, + RootEntity, ) from ..transactions import ( TransactionEntry, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py index 069150c41..3cb73ded2 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py @@ -12,8 +12,8 @@ if TYPE_CHECKING: from .models import ( - RootEntity, Event, + RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index 5d058d29d..b10d73ad8 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -42,8 +42,8 @@ if TYPE_CHECKING: from ...models import ( - RootEntity, Event, + RootEntity, ) from .readers import ( PostgreSqlSnapshotReader, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py index a00431b82..e475338c7 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py @@ -16,9 +16,9 @@ from minos.aggregate import ( TRANSACTION_CONTEXT_VAR, - RootEntity, Condition, Ordering, + RootEntity, SnapshotRepository, TransactionEntry, ) diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index 51df28953..56156c752 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -20,15 +20,16 @@ ) from minos.aggregate import ( - RootEntity, Entity, EntitySet, + ExternalEntity, InMemoryEventRepository, InMemorySnapshotRepository, InMemoryTransactionRepository, Ref, + RootEntity, ValueObject, - ValueObjectSet, ExternalEntity, + ValueObjectSet, ) from minos.common import ( Lock, From b2377a2fd9f61365585cb0ae4f2efbbecb9a7f8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:01:38 +0100 Subject: [PATCH 23/97] ISSUE #121 * Rename `AggregateNotFoundException` as `NotFoundException`. * Rename `DeletedAggregateException` as `AlreadyDeletedException`. --- .../minos/aggregate/__init__.py | 4 ++-- .../minos/aggregate/exceptions.py | 10 +++++----- .../minos/aggregate/snapshots/entries.py | 4 ++-- .../minos/aggregate/snapshots/memory.py | 10 +++++----- .../minos/aggregate/snapshots/pg/readers.py | 4 ++-- .../minos/aggregate/snapshots/pg/writers.py | 4 ++-- .../tests/test_aggregate/test_exceptions.py | 8 ++++---- .../test_models/test_aggregates/test_base.py | 10 +++++----- .../test_aggregates/test_with_postgresql.py | 6 +++--- .../test_aggregate/test_snapshots/test_memory.py | 12 ++++++------ .../test_snapshots/test_pg/test_readers.py | 12 ++++++------ .../test_snapshots/test_pg/test_writers.py | 4 ++-- 12 files changed, 44 insertions(+), 44 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index c248df4fa..158af1340 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -13,8 +13,8 @@ ) from .exceptions import ( AggregateException, - AggregateNotFoundException, - DeletedAggregateException, + NotFoundException, + AlreadyDeletedException, EventRepositoryConflictException, EventRepositoryException, SnapshotRepositoryConflictException, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py index 3cb73ded2..f78edf06b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py @@ -56,17 +56,17 @@ def __init__(self, previous: RootEntity, aggregate_diff: Event): self.previous = previous self.aggregate_diff = aggregate_diff super().__init__( - f"Version for {repr(previous.classname)} aggregate must be " + f"Version for {repr(previous.classname)} root entity must be " f"greater than {previous.version}. Obtained: {aggregate_diff.version}" ) -class AggregateNotFoundException(SnapshotRepositoryException): - """Exception to be raised when some aggregate is not found on the repository.""" +class NotFoundException(SnapshotRepositoryException): + """Exception to be raised when a ``RootEntity`` is not found on the repository.""" -class DeletedAggregateException(SnapshotRepositoryException): - """Exception to be raised when some aggregate is already deleted from the repository.""" +class AlreadyDeletedException(SnapshotRepositoryException): + """Exception to be raised when a ``RootEntity`` is already deleted from the repository.""" class ValueObjectException(AggregateException): diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py index eba7324fb..3fb13acf6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py @@ -28,7 +28,7 @@ EventEntry, ) from ..exceptions import ( - DeletedAggregateException, + AlreadyDeletedException, ) if TYPE_CHECKING: @@ -171,7 +171,7 @@ def build_aggregate(self, **kwargs) -> RootEntity: ) if self.data is None: - raise DeletedAggregateException(f"The {self.aggregate_uuid!r} id points to an already deleted aggregate.") + raise AlreadyDeletedException(f"The {self.aggregate_uuid!r} id points to an already deleted aggregate.") data = dict(self.data) data |= { "uuid": self.aggregate_uuid, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py index 74dd974ab..6271df885 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py @@ -29,8 +29,8 @@ EventRepository, ) from ..exceptions import ( - AggregateNotFoundException, - DeletedAggregateException, + NotFoundException, + AlreadyDeletedException, ) from ..queries import ( _Condition, @@ -90,7 +90,7 @@ async def _find( for uuid in uuids: try: aggregate = await self.get(aggregate_name, uuid, **kwargs) - except DeletedAggregateException: + except AlreadyDeletedException: continue if condition.evaluate(aggregate): @@ -113,10 +113,10 @@ async def _get( entries = await self._get_event_entries(aggregate_name, uuid, transaction_uuids) if not len(entries): - raise AggregateNotFoundException(f"Not found any entries for the {uuid!r} id.") + raise NotFoundException(f"Not found any entries for the {uuid!r} id.") if entries[-1].action.is_delete: - raise DeletedAggregateException(f"The {uuid!r} id points to an already deleted aggregate.") + raise AlreadyDeletedException(f"The {uuid!r} id points to an already deleted aggregate.") return self._build_aggregate(entries, **kwargs) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py index cbbe5d235..a327c507d 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py @@ -17,7 +17,7 @@ ) from ...exceptions import ( - AggregateNotFoundException, + NotFoundException, ) from ...queries import ( _Condition, @@ -78,7 +78,7 @@ async def get_entry(self, aggregate_name: str, uuid: UUID, **kwargs) -> Snapshot aggregate_name, _EqualCondition("uuid", uuid), **kwargs | {"exclude_deleted": False} ).__anext__() except StopAsyncIteration: - raise AggregateNotFoundException(f"Some aggregates could not be found: {uuid!s}") + raise NotFoundException(f"Some aggregates could not be found: {uuid!s}") async def find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: """Find a collection of ``Aggregate`` instances based on a ``Condition``. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index b10d73ad8..97b6589e6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -25,7 +25,7 @@ EventRepository, ) from ...exceptions import ( - AggregateNotFoundException, + NotFoundException, SnapshotRepositoryConflictException, TransactionNotFoundException, ) @@ -153,7 +153,7 @@ async def _update_if_exists(self, aggregate_diff: Event, **kwargs) -> RootEntity try: # noinspection PyTypeChecker previous = await self._select_one_aggregate(aggregate_diff.uuid, aggregate_diff.name, **kwargs) - except AggregateNotFoundException: + except NotFoundException: # noinspection PyTypeChecker aggregate_cls: Type[RootEntity] = import_module(aggregate_diff.name) return aggregate_cls.from_diff(aggregate_diff, **kwargs) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py index 9b0ec8e17..6adc8b2b3 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py @@ -2,8 +2,8 @@ from minos.aggregate import ( AggregateException, - AggregateNotFoundException, - DeletedAggregateException, + NotFoundException, + AlreadyDeletedException, EventRepositoryException, SnapshotRepositoryException, ) @@ -23,10 +23,10 @@ def test_snapshot(self): self.assertTrue(issubclass(SnapshotRepositoryException, AggregateException)) def test_snapshot_aggregate_not_found(self): - self.assertTrue(issubclass(AggregateNotFoundException, SnapshotRepositoryException)) + self.assertTrue(issubclass(NotFoundException, SnapshotRepositoryException)) def test_snapshot_deleted_aggregate(self): - self.assertTrue(issubclass(DeletedAggregateException, SnapshotRepositoryException)) + self.assertTrue(issubclass(AlreadyDeletedException, SnapshotRepositoryException)) if __name__ == "__main__": diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py index 23104e279..e66a9cdc5 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py @@ -7,9 +7,9 @@ ) from minos.aggregate import ( - AggregateNotFoundException, + NotFoundException, Condition, - DeletedAggregateException, + AlreadyDeletedException, EventRepositoryException, Ordering, ) @@ -77,7 +77,7 @@ async def test_get(self): self.assertEqual(original, recovered) async def test_get_raises(self): - with self.assertRaises(AggregateNotFoundException): + with self.assertRaises(NotFoundException): await Car.get(NULL_UUID, **self.kwargs) async def test_update(self): @@ -138,7 +138,7 @@ async def test_save_create(self): car.color = "red" car.doors = 5 - with self.assertRaises(AggregateNotFoundException): + with self.assertRaises(NotFoundException): await car.refresh() await car.save() @@ -182,7 +182,7 @@ async def test_save_raises(self): async def test_delete(self): car = await Car.create(doors=3, color="blue", **self.kwargs) await car.delete() - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await Car.get(car.uuid, **self.kwargs) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py index ef878482b..1ed874e1a 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py @@ -1,7 +1,7 @@ import unittest from minos.aggregate import ( - DeletedAggregateException, + AlreadyDeletedException, EntitySet, PostgreSqlEventRepository, PostgreSqlSnapshotRepository, @@ -51,7 +51,7 @@ async def test_create_update_delete(self): self.assertEqual(car, await Car.get(car.uuid)) await car.delete() - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await Car.get(car.uuid) car = await Car.create(doors=3, color="blue") @@ -62,7 +62,7 @@ async def test_create_update_delete(self): self.assertEqual(expected, await Car.get(car.uuid)) await car.delete() - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await Car.get(car.uuid) async def test_entity_set_value_object_set(self): diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py index 190da794a..656e3278b 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py @@ -7,9 +7,9 @@ ) from minos.aggregate import ( - AggregateNotFoundException, + NotFoundException, Condition, - DeletedAggregateException, + AlreadyDeletedException, EventEntry, FieldDiff, FieldDiffContainer, @@ -282,13 +282,13 @@ async def test_get_with_transaction(self): self.assertEqual(expected, observed) async def test_get_raises(self): - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await self.snapshot_repository.get("tests.utils.Car", self.uuid_1) - with self.assertRaises(AggregateNotFoundException): + with self.assertRaises(NotFoundException): await self.snapshot_repository.get("tests.utils.Car", uuid4()) async def test_get_with_transaction_raises(self): - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await self.snapshot_repository.get( "tests.utils.Car", self.uuid_2, transaction=TransactionEntry(self.transaction_2) ) @@ -346,7 +346,7 @@ def _assert_equal_snapshot_entries(self, expected: list[SnapshotEntry], observed self.assertEqual(len(expected), len(observed)) for exp, obs in zip(expected, observed): if exp.data is None: - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): # noinspection PyStatementEffect obs.build_aggregate() else: diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py index 0d6a10f08..a2fab8721 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py @@ -7,9 +7,9 @@ ) from minos.aggregate import ( - AggregateNotFoundException, + NotFoundException, Condition, - DeletedAggregateException, + AlreadyDeletedException, EventEntry, FieldDiff, FieldDiffContainer, @@ -295,14 +295,14 @@ async def test_get_with_transaction(self): async def test_get_raises(self): - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await self.reader.get("tests.utils.Car", self.uuid_1) - with self.assertRaises(AggregateNotFoundException): + with self.assertRaises(NotFoundException): await self.reader.get("tests.utils.Car", uuid4()) async def test_get_with_transaction_raises(self): - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): await self.reader.get("tests.utils.Car", self.uuid_2, transaction=TransactionEntry(self.transaction_2)) async def test_find(self): @@ -360,7 +360,7 @@ def _assert_equal_snapshot_entries(self, expected: list[SnapshotEntry], observed self.assertEqual(len(expected), len(observed)) for exp, obs in zip(expected, observed): if exp.data is None: - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): # noinspection PyStatementEffect obs.build_aggregate() else: diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py index 484961e52..234e218d5 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py @@ -13,7 +13,7 @@ from minos.aggregate import ( Action, Condition, - DeletedAggregateException, + AlreadyDeletedException, EventEntry, FieldDiff, FieldDiffContainer, @@ -299,7 +299,7 @@ def _assert_equal_snapshot_entries(self, expected: list[SnapshotEntry], observed self.assertEqual(len(expected), len(observed)) for exp, obs in zip(expected, observed): if exp.data is None: - with self.assertRaises(DeletedAggregateException): + with self.assertRaises(AlreadyDeletedException): # noinspection PyStatementEffect obs.build_aggregate() else: From e5334602be1d51c1ed61917729cb77d849a6ff71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:03:22 +0100 Subject: [PATCH 24/97] ISSUE #121 * Fix comments --- .../minos/aggregate/events/entries.py | 4 ++-- .../minos/aggregate/models/aggregates.py | 2 +- .../minos/aggregate/models/diffs/aggregates.py | 16 ++++++++-------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index 6e04c8afc..c64d357d7 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -139,9 +139,9 @@ def aggregate_cls(self) -> Type[RootEntity]: @property def aggregate_diff(self) -> Event: - """Get the stored ``AggregateDiff`` instance. + """Get the stored ``Event`` instance. - :return: An ``AggregateDiff`` instance. + :return: An ``Event`` instance. """ from ..models import ( Event, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py index fc1e16330..d4c78c77e 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py @@ -286,7 +286,7 @@ def apply_diff(self, aggregate_diff: Event) -> None: @classmethod def from_diff(cls: Type[T], aggregate_diff: Event, *args, **kwargs) -> T: - """Build a new instance from an ``AggregateDiff``. + """Build a new instance from an ``Event``. :param aggregate_diff: The difference that contains the data. :param args: Additional positional arguments. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py index 357ef9a13..a278d6a3c 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py @@ -96,12 +96,12 @@ def get_all(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, @classmethod def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.UPDATE) -> Event: - """Build an ``AggregateDiff`` instance from the difference of two aggregates. + """Build an ``Event`` instance from the difference of two aggregates. :param a: One ``Aggregate`` instance. :param b: Another ``Aggregate`` instance. :param action: The action to that generates the aggregate difference. - :return: An ``AggregateDiff`` instance. + :return: An ``Event`` instance. """ logger.debug(f"Computing the {cls!r} between {a!r} and {b!r}...") @@ -126,11 +126,11 @@ def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.U @classmethod def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) -> Event: - """Build an ``AggregateDiff`` from an ``Aggregate`` (considering all fields as differences). + """Build an ``Event`` from an ``Aggregate`` (considering all fields as differences). :param aggregate: An ``Aggregate`` instance. :param action: The action to that generates the aggregate difference. - :return: An ``AggregateDiff`` instance. + :return: An ``Event`` instance. """ fields_diff = FieldDiffContainer.from_model(aggregate, ignore={"uuid", "version", "created_at", "updated_at"}) @@ -145,11 +145,11 @@ def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) - @classmethod def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.DELETE) -> Event: - """Build an ``AggregateDiff`` from an ``Aggregate`` (considering all fields as differences). + """Build an ``Event`` from an ``Aggregate`` (considering all fields as differences). :param aggregate: An ``Aggregate`` instance. :param action: The action to that generates the aggregate difference. - :return: An ``AggregateDiff`` instance. + :return: An ``Event`` instance. """ return cls( uuid=aggregate.uuid, @@ -161,9 +161,9 @@ def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.D ) def decompose(self) -> list[Event]: - """Decompose AggregateDiff Fields into AggregateDiff with once Field. + """Decompose the ``Event`` fields into multiple ``Event`` instances with once Field. - :return: An list of``AggregateDiff`` instances. + :return: An list of``Event`` instances. """ return [ type(self)( From 14551ba3511482143582761f5008aa4e9a74d1e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:04:18 +0100 Subject: [PATCH 25/97] ISSUE #121 * Minor change. --- .../minos/aggregate/events/entries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index c64d357d7..a3506df9e 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -35,7 +35,7 @@ class EventEntry: - """Class that represents an entry (or row) on the events repository database which stores the aggregate changes.""" + """Class that represents an entry (or row) on the event repository database which stores the aggregate changes.""" __slots__ = ( "aggregate_uuid", From 6bed265501db31d6d0e72c3886e5563e94bc2ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:18:11 +0100 Subject: [PATCH 26/97] ISSUE #121 * Fix broken test. * Run `make reformat` --- .../minos/aggregate/__init__.py | 2 +- .../minos/aggregate/snapshots/memory.py | 2 +- .../tests/test_aggregate/test_exceptions.py | 2 +- .../test_models/test_aggregates/test_base.py | 4 ++-- .../tests/test_aggregate/test_snapshots/test_memory.py | 4 ++-- .../test_snapshots/test_pg/test_readers.py | 4 ++-- .../test_snapshots/test_pg/test_writers.py | 2 +- .../tests/test_aggregate/test_snapshots/test_services.py | 9 +++++---- 8 files changed, 15 insertions(+), 14 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 158af1340..1528518c6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -13,10 +13,10 @@ ) from .exceptions import ( AggregateException, - NotFoundException, AlreadyDeletedException, EventRepositoryConflictException, EventRepositoryException, + NotFoundException, SnapshotRepositoryConflictException, SnapshotRepositoryException, TransactionNotFoundException, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py index 6271df885..7eb957a53 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py @@ -29,8 +29,8 @@ EventRepository, ) from ..exceptions import ( - NotFoundException, AlreadyDeletedException, + NotFoundException, ) from ..queries import ( _Condition, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py index 6adc8b2b3..b949f15d1 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py @@ -2,9 +2,9 @@ from minos.aggregate import ( AggregateException, - NotFoundException, AlreadyDeletedException, EventRepositoryException, + NotFoundException, SnapshotRepositoryException, ) from minos.common import ( diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py index e66a9cdc5..031c35984 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py @@ -7,10 +7,10 @@ ) from minos.aggregate import ( - NotFoundException, - Condition, AlreadyDeletedException, + Condition, EventRepositoryException, + NotFoundException, Ordering, ) from minos.common import ( diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py index 656e3278b..5abb33e8e 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py @@ -7,13 +7,13 @@ ) from minos.aggregate import ( - NotFoundException, - Condition, AlreadyDeletedException, + Condition, EventEntry, FieldDiff, FieldDiffContainer, InMemorySnapshotRepository, + NotFoundException, Ordering, SnapshotEntry, SnapshotRepository, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py index a2fab8721..2427bb7ce 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py @@ -7,12 +7,12 @@ ) from minos.aggregate import ( - NotFoundException, - Condition, AlreadyDeletedException, + Condition, EventEntry, FieldDiff, FieldDiffContainer, + NotFoundException, Ordering, PostgreSqlSnapshotReader, PostgreSqlSnapshotSetup, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py index 234e218d5..4039b54f9 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py @@ -12,8 +12,8 @@ from minos.aggregate import ( Action, - Condition, AlreadyDeletedException, + Condition, EventEntry, FieldDiff, FieldDiffContainer, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py index a30247cb5..09df749a5 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py @@ -9,6 +9,7 @@ ) from minos.aggregate import ( + RootEntity, SnapshotService, ) from minos.common import ( @@ -52,14 +53,14 @@ def test_get_enroute(self): async def test_get_aggregate(self): uuid = uuid4() expected = Agg(uuid) - with patch("minos.aggregate.Aggregate.get", return_value=expected): + with patch.object(RootEntity, "get", return_value=expected): response = await self.service.__get_one__(InMemoryRequest({"uuid": uuid})) self.assertEqual(expected, await response.content()) async def test_get_aggregate_raises(self): with self.assertRaises(ResponseException): await self.service.__get_one__(InMemoryRequest()) - with patch("minos.aggregate.Aggregate.get", side_effect=ValueError): + with patch.object(RootEntity, "get", side_effect=ValueError): with self.assertRaises(ResponseException): await self.service.__get_one__(InMemoryRequest({"uuid": uuid4()})) @@ -67,14 +68,14 @@ async def test_get_aggregates(self): uuids = [uuid4(), uuid4()] expected = [Agg(u) for u in uuids] - with patch("minos.aggregate.Aggregate.get", side_effect=expected): + with patch.object(RootEntity, "get", side_effect=expected): response = await self.service.__get_many__(InMemoryRequest({"uuids": uuids})) self.assertEqual(expected, await response.content()) async def test_get_aggregates_raises(self): with self.assertRaises(ResponseException): await self.service.__get_many__(InMemoryRequest()) - with patch("minos.aggregate.Aggregate.get", side_effect=ValueError): + with patch.object(RootEntity, "get", side_effect=ValueError): with self.assertRaises(ResponseException): await self.service.__get_many__(InMemoryRequest({"uuids": [uuid4()]})) From 2ef634bbd54da44f34a640ce33cb9c98ecfb02f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:22:27 +0100 Subject: [PATCH 27/97] ISSUE #121 * Simplify tests. --- .../test_events/test_repositories/test_abc.py | 4 +- .../test_aggregate/test_snapshots/test_abc.py | 18 ++--- .../test_snapshots/test_pg/test_api.py | 10 +-- .../test_snapshots/test_pg/test_queries.py | 65 ++++++++++--------- 4 files changed, 51 insertions(+), 46 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py index 1e14018ec..26bfef0d2 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py @@ -465,7 +465,7 @@ async def test_select(self): self.event_repository._select = mock aggregate_uuid = uuid4() - aggregate_name = "path.to.Aggregate" + aggregate_name = "path.to.Product" transaction_uuid = uuid4() iterable = self.event_repository.select( @@ -477,7 +477,7 @@ async def test_select(self): self.assertEqual(1, mock.call_count) args = call( aggregate_uuid=aggregate_uuid, - aggregate_name="path.to.Aggregate", + aggregate_name=aggregate_name, version=None, version_lt=None, version_gt=None, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py index e475338c7..3a05ca530 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py @@ -57,6 +57,8 @@ def setUp(self) -> None: self.snapshot_repository._find = self.find_mock self.snapshot_repository._synchronize = self.synchronize_mock + self.classname = "path.to.Product" + def test_subclass(self): self.assertTrue(issubclass(SnapshotRepository, (ABC, MinosSetup))) @@ -67,18 +69,18 @@ def test_abstract(self): async def test_get(self): transaction = TransactionEntry() uuid = uuid4() - observed = await self.snapshot_repository.get("path.to.Aggregate", uuid, transaction) + observed = await self.snapshot_repository.get(self.classname, uuid, transaction) self.assertEqual(1, observed) self.assertEqual(1, self.synchronize_mock.call_count) self.assertEqual(call(), self.synchronize_mock.call_args) self.assertEqual(1, self.get_mock.call_count) - args = call(aggregate_name="path.to.Aggregate", uuid=uuid, transaction=transaction) + args = call(aggregate_name=self.classname, uuid=uuid, transaction=transaction) self.assertEqual(args, self.get_mock.call_args) async def test_get_transaction_null(self): - await self.snapshot_repository.get("path.to.Aggregate", uuid4()) + await self.snapshot_repository.get(self.classname, uuid4()) self.assertEqual(1, self.get_mock.call_count) self.assertEqual(None, self.get_mock.call_args.kwargs["transaction"]) @@ -86,7 +88,7 @@ async def test_get_transaction_null(self): async def test_get_transaction_context(self): transaction = TransactionEntry() TRANSACTION_CONTEXT_VAR.set(transaction) - await self.snapshot_repository.get("path.to.Aggregate", uuid4()) + await self.snapshot_repository.get(self.classname, uuid4()) self.assertEqual(1, self.get_mock.call_count) self.assertEqual(transaction, self.get_mock.call_args.kwargs["transaction"]) @@ -94,7 +96,7 @@ async def test_get_transaction_context(self): async def test_find(self): transaction = TransactionEntry() iterable = self.snapshot_repository.find( - "path.to.Aggregate", Condition.TRUE, Ordering.ASC("name"), 10, True, transaction + self.classname, Condition.TRUE, Ordering.ASC("name"), 10, True, transaction ) observed = [a async for a in iterable] self.assertEqual(list(range(5)), observed) @@ -104,7 +106,7 @@ async def test_find(self): self.assertEqual(1, self.find_mock.call_count) args = call( - aggregate_name="path.to.Aggregate", + aggregate_name=self.classname, condition=Condition.TRUE, ordering=Ordering.ASC("name"), limit=10, @@ -114,7 +116,7 @@ async def test_find(self): self.assertEqual(args, self.find_mock.call_args) async def test_find_transaction_null(self): - [a async for a in self.snapshot_repository.find("path.to.Aggregate", Condition.TRUE)] + [a async for a in self.snapshot_repository.find(self.classname, Condition.TRUE)] self.assertEqual(1, self.find_mock.call_count) self.assertEqual(None, self.find_mock.call_args.kwargs["transaction"]) @@ -122,7 +124,7 @@ async def test_find_transaction_null(self): async def test_find_transaction_context(self): transaction = TransactionEntry() TRANSACTION_CONTEXT_VAR.set(transaction) - [a async for a in self.snapshot_repository.find("path.to.Aggregate", Condition.TRUE)] + [a async for a in self.snapshot_repository.find(self.classname, Condition.TRUE)] self.assertEqual(1, self.find_mock.call_count) self.assertEqual(transaction, self.find_mock.call_args.kwargs["transaction"]) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py index c2e41acdb..549fdaf55 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py @@ -41,6 +41,8 @@ def setUp(self) -> None: self.snapshot_repository.reader.find = self.find_mock self.snapshot_repository.writer.dispatch = self.dispatch_mock + self.classname = "path.to.Product" + def test_from_config(self): self.assertIsInstance(self.snapshot_repository.reader, PostgreSqlSnapshotReader) self.assertIsInstance(self.snapshot_repository.writer, PostgreSqlSnapshotWriter) @@ -48,20 +50,20 @@ def test_from_config(self): async def test_get(self): transaction = TransactionEntry() uuid = uuid4() - observed = await self.snapshot_repository.get("path.to.Aggregate", uuid, transaction) + observed = await self.snapshot_repository.get(self.classname, uuid, transaction) self.assertEqual(1, observed) self.assertEqual(1, self.dispatch_mock.call_count) self.assertEqual(call(), self.dispatch_mock.call_args) self.assertEqual(1, self.get_mock.call_count) - args = call(aggregate_name="path.to.Aggregate", uuid=uuid, transaction=transaction) + args = call(aggregate_name=self.classname, uuid=uuid, transaction=transaction) self.assertEqual(args, self.get_mock.call_args) async def test_find(self): transaction = TransactionEntry() iterable = self.snapshot_repository.find( - "path.to.Aggregate", Condition.TRUE, Ordering.ASC("name"), 10, True, transaction + self.classname, Condition.TRUE, Ordering.ASC("name"), 10, True, transaction ) observed = [a async for a in iterable] self.assertEqual(list(range(5)), observed) @@ -71,7 +73,7 @@ async def test_find(self): self.assertEqual(1, self.find_mock.call_count) args = call( - aggregate_name="path.to.Aggregate", + aggregate_name=self.classname, condition=Condition.TRUE, ordering=Ordering.ASC("name"), limit=10, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py index 01615a959..e66f4c63e 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py @@ -43,8 +43,9 @@ class TestPostgreSqlSnapshotQueryBuilder(PostgresAsyncTestCase): def setUp(self) -> None: super().setUp() + self.classname = "path.to.Product" self.base_parameters = { - "aggregate_name": "path.to.Aggregate", + "aggregate_name": self.classname, "transaction_uuid_1": NULL_UUID, } self.base_select = _SELECT_ENTRIES_QUERY.format( @@ -54,8 +55,8 @@ def setUp(self) -> None: ) def test_constructor(self): - qb = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE) - self.assertEqual("path.to.Aggregate", qb.aggregate_name) + qb = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE) + self.assertEqual(self.classname, qb.aggregate_name) self.assertEqual(Condition.TRUE, qb.condition) self.assertEqual(None, qb.ordering) self.assertEqual(None, qb.limit) @@ -64,9 +65,9 @@ def test_constructor(self): def test_constructor_full(self): transaction_uuids = (NULL_UUID, uuid4()) qb = PostgreSqlSnapshotQueryBuilder( - "path.to.Aggregate", Condition.TRUE, Ordering.ASC("name"), 10, transaction_uuids, True + self.classname, Condition.TRUE, Ordering.ASC("name"), 10, transaction_uuids, True ) - self.assertEqual("path.to.Aggregate", qb.aggregate_name) + self.assertEqual(self.classname, qb.aggregate_name) self.assertEqual(Condition.TRUE, qb.condition) self.assertEqual(Ordering.ASC("name"), qb.ordering) self.assertEqual(10, qb.limit) @@ -74,7 +75,7 @@ def test_constructor_full(self): self.assertTrue(qb.exclude_deleted) def test_build_submitting_context_var(self): - builder = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE) + builder = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE) def _fn(): self.assertEqual(True, IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.get()) @@ -91,12 +92,12 @@ def _fn(): def test_build_raises(self): with self.assertRaises(ValueError): # noinspection PyTypeChecker - PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", True).build() + PostgreSqlSnapshotQueryBuilder(self.classname, True).build() async def test_build_with_transactions(self): transaction_uuids = (NULL_UUID, uuid4()) observed = PostgreSqlSnapshotQueryBuilder( - "path.to.Aggregate", Condition.TRUE, transaction_uuids=transaction_uuids + self.classname, Condition.TRUE, transaction_uuids=transaction_uuids ).build() expected_query = SQL(" WHERE ").join( @@ -123,7 +124,7 @@ async def test_build_with_transactions(self): async def test_build_true(self): condition = Condition.TRUE - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("TRUE")]) expected_parameters = self.base_parameters @@ -133,7 +134,7 @@ async def test_build_true(self): async def test_build_false(self): condition = Condition.FALSE - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("FALSE")]) expected_parameters = self.base_parameters self.assertEqual(await self._flatten_query(expected_query), await self._flatten_query(observed[0])) @@ -143,7 +144,7 @@ async def test_build_fixed_uuid(self): uuid = uuid4() condition = Condition.EQUAL("uuid", uuid) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL('("aggregate_uuid" = %(hello)s)')]) expected_parameters = {"hello": str(uuid)} | self.base_parameters @@ -154,7 +155,7 @@ async def test_build_fixed_uuid(self): async def test_build_fixed_version(self): condition = Condition.EQUAL("version", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL('("version" = %(hello)s)')]) expected_parameters = {"hello": 1} | self.base_parameters @@ -165,7 +166,7 @@ async def test_build_fixed_version(self): async def test_build_fixed_created_at(self): condition = Condition.EQUAL("created_at", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL('("created_at" = %(hello)s)')]) expected_parameters = {"hello": 1} | self.base_parameters @@ -176,7 +177,7 @@ async def test_build_fixed_created_at(self): async def test_build_fixed_updated_at(self): condition = Condition.EQUAL("updated_at", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL('("updated_at" = %(hello)s)')]) expected_parameters = {"hello": 1} | self.base_parameters @@ -187,7 +188,7 @@ async def test_build_fixed_updated_at(self): async def test_build_lower(self): condition = Condition.LOWER("age", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' < %(hello)s::jsonb)")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -198,7 +199,7 @@ async def test_build_lower(self): async def test_build_lower_equal(self): condition = Condition.LOWER_EQUAL("age", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' <= %(hello)s::jsonb)")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -209,7 +210,7 @@ async def test_build_lower_equal(self): async def test_build_greater(self): condition = Condition.GREATER("age", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' > %(hello)s::jsonb)")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -220,7 +221,7 @@ async def test_build_greater(self): async def test_build_greater_equal(self): condition = Condition.GREATER_EQUAL("age", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' >= %(hello)s::jsonb)")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -231,7 +232,7 @@ async def test_build_greater_equal(self): async def test_build_equal(self): condition = Condition.EQUAL("age", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' = %(hello)s::jsonb)")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -242,7 +243,7 @@ async def test_build_equal(self): async def test_build_not_equal(self): condition = Condition.NOT_EQUAL("age", 1) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' <> %(hello)s::jsonb)")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -253,7 +254,7 @@ async def test_build_not_equal(self): async def test_build_in(self): condition = Condition.IN("age", [1, 2, 3]) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(data#>'{age}' IN %(hello)s::jsonb)")]) expected_parameters = {"hello": (1, 2, 3)} | self.base_parameters @@ -264,7 +265,7 @@ async def test_build_in(self): async def test_build_in_empty(self): condition = Condition.IN("age", []) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("FALSE")]) expected_parameters = self.base_parameters @@ -275,7 +276,7 @@ async def test_build_in_empty(self): async def test_build_not(self): condition = Condition.NOT(Condition.LOWER("age", 1)) with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("(NOT (data#>'{age}' < %(hello)s::jsonb))")]) expected_parameters = {"hello": 1} | self.base_parameters @@ -288,7 +289,7 @@ async def test_build_and(self): with patch( "minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello", "goodbye"] ): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join( [self.base_select, SQL("((data#>'{age}' < %(hello)s::jsonb) AND (data#>'{level}' < %(goodbye)s::jsonb))")] @@ -303,7 +304,7 @@ async def test_build_or(self): with patch( "minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello", "goodbye"] ): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() expected_query = SQL(" WHERE ").join( [self.base_select, SQL("((data#>'{age}' < %(hello)s::jsonb) OR (data#>'{level}' < %(goodbye)s::jsonb))")] @@ -314,7 +315,7 @@ async def test_build_or(self): self.assertEqual(self._flatten_parameters(expected_parameters), self._flatten_parameters(observed[1])) async def test_build_exclude_deleted(self): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE, exclude_deleted=True).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE, exclude_deleted=True).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("TRUE AND (data IS NOT NULL)")]) expected_parameters = self.base_parameters @@ -324,7 +325,7 @@ async def test_build_exclude_deleted(self): async def test_build_fixed_ordering_asc(self): ordering = Ordering.ASC("created_at") - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE, ordering).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE, ordering).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL('TRUE ORDER BY "created_at" ASC')]) @@ -335,7 +336,7 @@ async def test_build_fixed_ordering_asc(self): async def test_build_fixed_ordering_desc(self): ordering = Ordering.DESC("created_at") - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE, ordering).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE, ordering).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL('TRUE ORDER BY "created_at" DESC')]) expected_parameters = self.base_parameters @@ -345,7 +346,7 @@ async def test_build_fixed_ordering_desc(self): async def test_build_ordering_asc(self): ordering = Ordering.ASC("name") - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE, ordering).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE, ordering).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("TRUE ORDER BY data#>'{name}' ASC")]) expected_parameters = self.base_parameters @@ -355,7 +356,7 @@ async def test_build_ordering_asc(self): async def test_build_ordering_desc(self): ordering = Ordering.DESC("name") - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE, ordering).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE, ordering).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("TRUE ORDER BY data#>'{name}' DESC")]) @@ -365,7 +366,7 @@ async def test_build_ordering_desc(self): self.assertEqual(self._flatten_parameters(expected_parameters), self._flatten_parameters(observed[1])) async def test_build_limit(self): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", Condition.TRUE, limit=10).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE, limit=10).build() expected_query = SQL(" WHERE ").join([self.base_select, SQL("TRUE LIMIT 10")]) @@ -385,7 +386,7 @@ async def test_build_complex(self): with patch( "minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["one", "two", "three"] ): - observed = PostgreSqlSnapshotQueryBuilder("path.to.Aggregate", condition, ordering, limit).build() + observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition, ordering, limit).build() expected_query = SQL(" WHERE ").join( [ From 9c789a2afa9d3d2f9d450de97575ea505d8ba8ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:26:25 +0100 Subject: [PATCH 28/97] ISSUE #121 * Improve docstring. --- .../minos/aggregate/events/entries.py | 4 +-- .../aggregate/events/repositories/abc.py | 30 +++++++++---------- .../minos/aggregate/models/aggregates.py | 14 ++++----- .../aggregate/models/diffs/aggregates.py | 16 +++++----- .../minos/aggregate/models/refs/models.py | 2 +- .../minos/aggregate/snapshots/abc.py | 14 ++++----- .../minos/aggregate/snapshots/entries.py | 8 ++--- .../minos/aggregate/snapshots/pg/readers.py | 24 +++++++-------- .../minos/aggregate/snapshots/pg/writers.py | 4 +-- .../transactions/repositories/abc.py | 2 +- .../tests/utils.py | 4 +-- 11 files changed, 61 insertions(+), 61 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index a3506df9e..ef2023377 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -83,7 +83,7 @@ def __init__( def from_aggregate_diff( cls, aggregate_diff: Event, *, transaction: Optional[TransactionEntry] = None, **kwargs ) -> EventEntry: - """Build a new instance from an ``Aggregate``. + """Build a new instance from a ``RootEntity``. :param aggregate_diff: The aggregate difference. :param transaction: Optional transaction. @@ -130,7 +130,7 @@ def as_raw(self) -> dict[str, Any]: @property def aggregate_cls(self) -> Type[RootEntity]: - """Load the concrete ``Aggregate`` class. + """Load the concrete ``RootEntity`` class. :return: A ``Type`` object. """ diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py index 769623bfd..e122dce92 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py @@ -268,21 +268,21 @@ async def select( ) -> AsyncIterator[EventEntry]: """Perform a selection query of entries stored in to the repository. - :param aggregate_uuid: Aggregate identifier. - :param aggregate_name: Aggregate name. - :param version: Aggregate version. - :param version_lt: Aggregate version lower than the given value. - :param version_gt: Aggregate version greater than the given value. - :param version_le: Aggregate version lower or equal to the given value. - :param version_ge: Aggregate version greater or equal to the given value. - :param id: Entry identifier. - :param id_lt: Entry identifier lower than the given value. - :param id_gt: Entry identifier greater than the given value. - :param id_le: Entry identifier lower or equal to the given value. - :param id_ge: Entry identifier greater or equal to the given value. - :param transaction_uuid: Transaction identifier. - :param transaction_uuid_ne: Transaction identifier distinct of the given value. - :param transaction_uuid_in: Destination Transaction identifier equal to one of the given values. + :param aggregate_uuid: The identifier must be equal to the given value. + :param aggregate_name: The classname must be equal to the given value. + :param version: The version must be equal to the given value. + :param version_lt: The version must be lower than the given value. + :param version_gt: The version must be greater than the given value. + :param version_le: The version must be lower or equal to the given value. + :param version_ge: The version must be greater or equal to the given value. + :param id: The entry identifier must be equal to the given value. + :param id_lt: The entry identifier must be lower than the given value. + :param id_gt: The entry identifier must be greater than the given value. + :param id_le: The entry identifier must be lower or equal to the given value. + :param id_ge: The entry identifier must be greater or equal to the given value. + :param transaction_uuid: The transaction identifier must be equal to the given value. + :param transaction_uuid_ne: The transaction identifier must be distinct of the given value. + :param transaction_uuid_in: The destination transaction identifier must be equal to one of the given values. :return: A list of entries. """ generator = self._select( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py index d4c78c77e..7e6680f45 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py @@ -130,11 +130,11 @@ async def find( @classmethod async def create(cls: Type[T], *args, **kwargs) -> T: - """Create a new ``Aggregate`` instance. + """Create a new ``RootEntity`` instance. :param args: Additional positional arguments. :param kwargs: Additional named arguments. - :return: A new ``Aggregate`` instance. + :return: A new ``RootEntity`` instance. """ if "uuid" in kwargs: raise EventRepositoryException( @@ -164,10 +164,10 @@ async def create(cls: Type[T], *args, **kwargs) -> T: # noinspection PyMethodParameters,PyShadowingBuiltins async def update(self: T, **kwargs) -> T: - """Update an existing ``Aggregate`` instance. + """Update an existing ``RootEntity`` instance. :param kwargs: Additional named arguments. - :return: An updated ``Aggregate`` instance. + :return: An updated ``RootEntity`` instance. """ if "version" in kwargs: @@ -252,9 +252,9 @@ def _update_from_repository_entry(self, entry: EventEntry) -> None: def diff(self, another: RootEntity) -> Event: """Compute the difference with another aggregate. - Both ``Aggregate`` instances (``self`` and ``another``) must share the same ``uuid`` value. + Both ``RootEntity`` instances (``self`` and ``another``) must share the same ``uuid`` value. - :param another: Another ``Aggregate`` instance. + :param another: Another ``RootEntity`` instance. :return: An ``FieldDiffContainer`` instance. """ return Event.from_difference(self, another) @@ -291,7 +291,7 @@ def from_diff(cls: Type[T], aggregate_diff: Event, *args, **kwargs) -> T: :param aggregate_diff: The difference that contains the data. :param args: Additional positional arguments. :param kwargs: Additional named arguments. - :return: A new ``Aggregate`` instance. + :return: A new ``RootEntity`` instance. """ return cls( *args, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py index a278d6a3c..cb211ae1b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py @@ -43,7 +43,7 @@ @total_ordering class Event(DeclarativeModel): - """Aggregate Diff class.""" + """Event class.""" uuid: UUID name: str @@ -55,7 +55,7 @@ class Event(DeclarativeModel): @property def simplified_name(self) -> str: - """Get the Aggregate's simplified name. + """Get the RootEntity's simplified name. :return: An string value. """ @@ -98,8 +98,8 @@ def get_all(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.UPDATE) -> Event: """Build an ``Event`` instance from the difference of two aggregates. - :param a: One ``Aggregate`` instance. - :param b: Another ``Aggregate`` instance. + :param a: One ``RootEntity`` instance. + :param b: Another ``RootEntity`` instance. :param action: The action to that generates the aggregate difference. :return: An ``Event`` instance. """ @@ -126,9 +126,9 @@ def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.U @classmethod def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) -> Event: - """Build an ``Event`` from an ``Aggregate`` (considering all fields as differences). + """Build an ``Event`` from a ``RootEntity`` (considering all fields as differences). - :param aggregate: An ``Aggregate`` instance. + :param aggregate: A ``RootEntity`` instance. :param action: The action to that generates the aggregate difference. :return: An ``Event`` instance. """ @@ -145,9 +145,9 @@ def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) - @classmethod def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.DELETE) -> Event: - """Build an ``Event`` from an ``Aggregate`` (considering all fields as differences). + """Build an ``Event`` from a ``RootEntity`` (considering all fields as differences). - :param aggregate: An ``Aggregate`` instance. + :param aggregate: A ``RootEntity`` instance. :param action: The action to that generates the aggregate difference. :return: An ``Event`` instance. """ diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py index 344791c80..8b48e6556 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py @@ -47,7 +47,7 @@ class ExternalEntity(Entity): - """Aggregate Ref class.""" + """External Entity class.""" version: int diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py index 3ac3265c6..abe5c937b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py @@ -46,13 +46,13 @@ async def get( ) -> RootEntity: """Get an aggregate instance from its identifier. - :param aggregate_name: Class name of the ``Aggregate``. - :param uuid: Identifier of the ``Aggregate``. + :param aggregate_name: Class name of the ``RootEntity``. + :param uuid: Identifier of the ``RootEntity``. :param transaction: The transaction within the operation is performed. If not any value is provided, then the transaction is extracted from the context var. If not any transaction is being scoped then the query is performed to the global snapshot. :param kwargs: Additional named arguments. - :return: The ``Aggregate`` instance. + :return: The ``RootEntity`` instance. """ if transaction is None: transaction = TRANSACTION_CONTEXT_VAR.get() @@ -75,10 +75,10 @@ async def find( transaction: Optional[TransactionEntry] = None, **kwargs, ) -> AsyncIterator[RootEntity]: - """Find a collection of ``Aggregate`` instances based on a ``Condition``. + """Find a collection of ``RootEntity`` instances based on a ``Condition``. - :param aggregate_name: Class name of the ``Aggregate``. - :param condition: The condition that must be satisfied by the ``Aggregate`` instances. + :param aggregate_name: Class name of the ``RootEntity``. + :param condition: The condition that must be satisfied by the ``RootEntity`` instances. :param ordering: Optional argument to return the instance with specific ordering strategy. The default behaviour is to retrieve them without any order pattern. :param limit: Optional argument to return only a subset of instances. The default behaviour is to return all the @@ -89,7 +89,7 @@ async def find( transaction is extracted from the context var. If not any transaction is being scoped then the query is performed to the global snapshot. :param kwargs: Additional named arguments. - :return: An asynchronous iterator that containing the ``Aggregate`` instances. + :return: An asynchronous iterator that containing the ``RootEntity`` instances. """ if transaction is None: transaction = TRANSACTION_CONTEXT_VAR.get() diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py index 3fb13acf6..6df7f4bce 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py @@ -85,7 +85,7 @@ def __init__( @classmethod def from_aggregate(cls, aggregate: RootEntity, **kwargs) -> SnapshotEntry: - """Build a new instance from an ``Aggregate``. + """Build a new instance from a ``RootEntity``. :param aggregate: The aggregate instance. :return: A new ``MinosSnapshotEntry`` instance. @@ -161,10 +161,10 @@ def encoded_data(self) -> Optional[str]: return json.dumps(self.data) def build_aggregate(self, **kwargs) -> RootEntity: - """Rebuild the stored ``Aggregate`` object instance from the internal state. + """Rebuild the stored ``RootEntity`` object instance from the internal state. :param kwargs: Additional named arguments. - :return: A ``Aggregate`` instance. + :return: A ``RootEntity`` instance. """ from ..models import ( RootEntity, @@ -185,7 +185,7 @@ def build_aggregate(self, **kwargs) -> RootEntity: @property def aggregate_cls(self) -> Type[RootEntity]: - """Load the concrete ``Aggregate`` class. + """Load the concrete ``RootEntity`` class. :return: A ``Type`` object. """ diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py index a327c507d..260e3b440 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py @@ -54,10 +54,10 @@ class PostgreSqlSnapshotReader(PostgreSqlSnapshotSetup): async def get(self, aggregate_name: str, uuid: UUID, **kwargs) -> RootEntity: """Get an aggregate instance from its identifier. - :param aggregate_name: Class name of the ``Aggregate``. - :param uuid: Identifier of the ``Aggregate``. + :param aggregate_name: Class name of the ``RootEntity``. + :param uuid: Identifier of the ``RootEntity``. :param kwargs: Additional named arguments. - :return: The ``Aggregate`` instance. + :return: The ``RootEntity`` instance. """ snapshot_entry = await self.get_entry(aggregate_name, uuid, **kwargs) aggregate = snapshot_entry.build_aggregate(**kwargs) @@ -67,8 +67,8 @@ async def get(self, aggregate_name: str, uuid: UUID, **kwargs) -> RootEntity: async def get_entry(self, aggregate_name: str, uuid: UUID, **kwargs) -> SnapshotEntry: """Get a ``SnapshotEntry`` from its identifier. - :param aggregate_name: Class name of the ``Aggregate``. - :param uuid: Identifier of the ``Aggregate``. + :param aggregate_name: Class name of the ``RootEntity``. + :param uuid: Identifier of the ``RootEntity``. :param kwargs: Additional named arguments. :return: The ``SnapshotEntry`` instance. """ @@ -81,11 +81,11 @@ async def get_entry(self, aggregate_name: str, uuid: UUID, **kwargs) -> Snapshot raise NotFoundException(f"Some aggregates could not be found: {uuid!s}") async def find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: - """Find a collection of ``Aggregate`` instances based on a ``Condition``. + """Find a collection of ``RootEntity`` instances based on a ``Condition``. :param args: Additional positional arguments. :param kwargs: Additional named arguments. - :return: An asynchronous iterator that containing the ``Aggregate`` instances. + :return: An asynchronous iterator that containing the ``RootEntity`` instances. """ async for snapshot_entry in self.find_entries(*args, **kwargs): yield snapshot_entry.build_aggregate(**kwargs) @@ -103,8 +103,8 @@ async def find_entries( ) -> AsyncIterator[SnapshotEntry]: """Find a collection of ``SnapshotEntry`` instances based on a ``Condition``. - :param aggregate_name: Class name of the ``Aggregate``. - :param condition: The condition that must be satisfied by the ``Aggregate`` instances. + :param aggregate_name: Class name of the ``RootEntity``. + :param condition: The condition that must be satisfied by the ``RootEntity`` instances. :param ordering: Optional argument to return the instance with specific ordering strategy. The default behaviour is to retrieve them without any order pattern. :param limit: Optional argument to return only a subset of instances. The default behaviour is to return all the @@ -114,10 +114,10 @@ async def find_entries( :param transaction: The transaction within the operation is performed. If not any value is provided, then the transaction is extracted from the context var. If not any transaction is being scoped then the query is performed to the global snapshot. - :param exclude_deleted: If ``True``, deleted ``Aggregate`` entries are included, otherwise deleted ``Aggregate`` - entries are filtered. + :param exclude_deleted: If ``True``, deleted ``RootEntity`` entries are included, otherwise deleted + ``RootEntity`` entries are filtered. :param kwargs: Additional named arguments. - :return: An asynchronous iterator that containing the ``Aggregate`` instances. + :return: An asynchronous iterator that containing the ``RootEntity`` instances. """ if transaction is None: transaction_uuids = (NULL_UUID,) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index 97b6589e6..d80058586 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -75,9 +75,9 @@ def __init__( self._transaction_repository = transaction_repository async def is_synced(self, aggregate_name: str, **kwargs) -> bool: - """Check if the snapshot has the latest version of an ``Aggregate`` instance. + """Check if the snapshot has the latest version of a ``RootEntity`` instance. - :param aggregate_name: Class name of the ``Aggregate`` to be checked. + :param aggregate_name: Class name of the ``RootEntity`` to be checked. :return: ``True`` if it has the latest version for the identifier or ``False`` otherwise. """ offset = await self._load_offset(**kwargs) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py index d58af3467..c7c22225d 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py @@ -62,7 +62,7 @@ async def _submit(self, transaction: TransactionEntry) -> TransactionEntry: async def get(self, uuid: UUID, **kwargs) -> TransactionEntry: """Get a ``TransactionEntry`` from its identifier. - :param uuid: Identifier of the ``Aggregate``. + :param uuid: Identifier of the ``RootEntity``. :param kwargs: Additional named arguments. :return: The ``TransactionEntry`` instance. """ diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index 56156c752..a1b0a3441 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -137,7 +137,7 @@ async def _destroy_instance(self, instance) -> None: class Owner(RootEntity): - """Aggregate ``Owner`` class for testing purposes.""" + """For testing purposes""" name: str surname: str @@ -145,7 +145,7 @@ class Owner(RootEntity): class Car(RootEntity): - """Aggregate ``Car`` class for testing purposes.""" + """For testing purposes""" doors: int color: str From 6d48765445e9bcb41f8273e4297e7d3c02b1f221 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 17:39:55 +0100 Subject: [PATCH 29/97] ISSUE #121 * Rename tests. --- .../test_aggregate/test_models/test_aggregates/test_base.py | 2 +- .../test_aggregate/test_models/test_aggregates/test_broker.py | 2 +- .../test_models/test_aggregates/test_differences.py | 2 +- .../test_models/test_aggregates/test_not_provided.py | 2 +- .../test_models/test_aggregates/test_with_postgresql.py | 2 +- .../test_aggregate/test_models/test_diffs/test_aggregates.py | 4 ++-- .../tests/test_aggregate/test_models/test_refs/test_models.py | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py index 031c35984..3cfe81c00 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py @@ -23,7 +23,7 @@ ) -class TestAggregate(MinosTestCase): +class TestRootEntity(MinosTestCase): def setUp(self) -> None: super().setUp() self.kwargs = {"_repository": self.event_repository, "_snapshot": self.snapshot_repository} diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py index eb3ef0914..f94810954 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py @@ -20,7 +20,7 @@ ) -class TestAggregate(MinosTestCase): +class TestRootEntityBroker(MinosTestCase): async def test_create(self): car = await Car.create(doors=3, color="blue") diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py index 6638973ef..8fb49716e 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py @@ -18,7 +18,7 @@ ) -class TestAggregateDifferences(MinosTestCase): +class TestRootEntityDifferences(MinosTestCase): async def asyncSetUp(self) -> None: self.uuid = uuid4() self.uuid_another = uuid4() diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_not_provided.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_not_provided.py index 1acd9bedb..1d7ed117d 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_not_provided.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_not_provided.py @@ -15,7 +15,7 @@ ) -class TestAggregateNotProvided(MinosTestCase): +class TestRootEntityNotProvided(MinosTestCase): async def test_create_raises(self): with self.assertRaises(NotProvidedException): await Car.create(doors=3, color="blue", _repository=None) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py index 1ed874e1a..d09f07547 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py @@ -21,7 +21,7 @@ ) -class TestAggregateWithPostgreSql(MinosTestCase, PostgresAsyncTestCase): +class TestExternalEntityWithPostgreSql(MinosTestCase, PostgresAsyncTestCase): CONFIG_FILE_PATH = BASE_PATH / "test_config.yml" def setUp(self): diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py index cf0c22252..8e71ad5ed 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py @@ -24,7 +24,7 @@ ) -class TestAggregateDiff(MinosTestCase): +class TestEvent(MinosTestCase): async def asyncSetUp(self) -> None: await super().asyncSetUp() @@ -142,7 +142,7 @@ def test_decompose(self): self.assertEqual(expected, observed) -class TestAggregateDiffAccessors(unittest.TestCase): +class TestEventAccessors(unittest.TestCase): def setUp(self) -> None: self.diff = Event( uuid=uuid4(), diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py index bacc8945a..2b1b6f486 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py @@ -36,7 +36,7 @@ class Product(ExternalEntity): quantity: int -class TestSubAggregate(unittest.TestCase): +class TestExternalEntity(unittest.TestCase): def test_values(self): uuid = uuid4() product = Product(uuid, 3, "apple", 3028) From 067eb763293d64f47aad3924f7145b9ee11d6c2a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:04 +0000 Subject: [PATCH 30/97] Bump black in /packages/core/minos-microservice-common Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/commits/22.1.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- .../minos-microservice-common/poetry.lock | 41 +++++++++++++------ .../minos-microservice-common/pyproject.toml | 2 +- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/packages/core/minos-microservice-common/poetry.lock b/packages/core/minos-microservice-common/poetry.lock index 741f945a4..9c28080aa 100644 --- a/packages/core/minos-microservice-common/poetry.lock +++ b/packages/core/minos-microservice-common/poetry.lock @@ -85,28 +85,24 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -811,7 +807,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "820cf0b3e427d6b50179bf3ddfd3c37edad1858cb61c0ad3319488bd3567cf1b" +content-hash = "6d2e61afb5b2cf90183a61ffe5fab62c065f3586603a70284571b91fa7dc359b" [metadata.files] aiomisc = [ @@ -843,8 +839,29 @@ babel = [ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, diff --git a/packages/core/minos-microservice-common/pyproject.toml b/packages/core/minos-microservice-common/pyproject.toml index b67f8bff5..6aa7e7a60 100644 --- a/packages/core/minos-microservice-common/pyproject.toml +++ b/packages/core/minos-microservice-common/pyproject.toml @@ -41,7 +41,7 @@ dependency-injector = "^4.32.2" cached-property = "^1.5.2" [tool.poetry.dev-dependencies] -black = "^21.12b0" +black = "^22.1" isort = "^5.8.0" pytest = "^6.2.4" coverage = "^6.3" From bbd2e50feb4ea73f920a72d16d3679ba71686163 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:22 +0000 Subject: [PATCH 31/97] Bump dependency-injector in /packages/core/minos-microservice-networks Bumps [dependency-injector](https://github.com/ets-labs/python-dependency-injector) from 4.37.0 to 4.38.0. - [Release notes](https://github.com/ets-labs/python-dependency-injector/releases) - [Commits](https://github.com/ets-labs/python-dependency-injector/compare/4.37.0...4.38.0) --- updated-dependencies: - dependency-name: dependency-injector dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../minos-microservice-networks/poetry.lock | 76 +++++++++---------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/packages/core/minos-microservice-networks/poetry.lock b/packages/core/minos-microservice-networks/poetry.lock index 8f2119eef..20d97c2ab 100644 --- a/packages/core/minos-microservice-networks/poetry.lock +++ b/packages/core/minos-microservice-networks/poetry.lock @@ -243,7 +243,7 @@ python-versions = "*" [[package]] name = "dependency-injector" -version = "4.37.0" +version = "4.38.0" description = "Dependency injection framework for Python" category = "main" optional = false @@ -449,7 +449,7 @@ python-versions = "*" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -1140,42 +1140,42 @@ crontab = [ {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, ] dependency-injector = [ - {file = "dependency-injector-4.37.0.tar.gz", hash = "sha256:8881c65ecc133d4b0af1cf35215a7bfab8d907e10ee1452d2dfef27cc3ca23d3"}, - {file = "dependency_injector-4.37.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fdabe9dd14259fe14eb4c65f5bf244524a5cc43a474cb448528daeda4453573"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a184b71e8aa2fffd6c3d3828c2db045a14c3bc1ac9ca7945db76b9ac93efca81"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cc2cb5b85a587f9b95505391ab4f1ef02432a590807f2230f445666d0bd3984"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:985570539c2703c6c009077026042a05b05474e75bec585607a556c1970bdeee"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win32.whl", hash = "sha256:b73bd0dd82b42950fb78baae68750ecb5c943d39cbfacea8dbee9d6df6535427"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:a944c1bbbb81dbeca8c30001bc8b7e061ca52cf291bf0dd35005863484e6ea8a"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d15b6fe1be06bffecf9b5f28fd972596f1ef6b7553d884c317b6d472ca0fb040"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf05aefcb3cd856624e2203f69a61ad54ffa0541a23a8e6d136c178b7a37153"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ededd0f6f7abe153030f3f50959abf5cb65bf7e5215a59b9333e027d6262d161"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3c5312fa1854eb45ed78a720ac5e1e354769e55a2fb42ca142b5dd612e8f0da"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win32.whl", hash = "sha256:6446bd95a80a487893e162eeb8aa2f3029ab47bb4641a9e5d431f3c024b459c9"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win_amd64.whl", hash = "sha256:fb29620e8249d66e8328d30c44d2f788d773132cdb6d0d62be4f1dd4343fc748"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9fad82e44a34c83a0b522692aace49f3149d44b3ff826197a131a27a8df51df"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bfbcaa71ea2fd3a54e46d5038e6cedbb66d7c1319ac638f935f6cbba348ffc9"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d550f4e9e81e87ae23c5086e5b3b08f2331a02e9dc7a2553ce16275ba9921817"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5242bca4f404c4918ba00b48fa1780c42903a9ff850956e04134bfc8b423d04"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win32.whl", hash = "sha256:59f557f1f1f7fe856759fdc59b5f2c012e4caaf05b4f848cbb1f250bdf4d8541"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c69196827505288a8f94f9d36d4b4829fb23d5a62f0898e0aa7d5ad1fce0505e"}, - {file = "dependency_injector-4.37.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7639c601288417352af3318d683e96f034ffb685de2cfb8d79a75f982c262302"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b607090446e697b77d36be523ed845021d2379d62fcaf152998127066b70d80"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9f31a7b3806098476767531b40f8a59dac726ce7602158a6e093f9e2be46f1a"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86c4e918064de9e300152233da096797c4de7bb8e33ce86a7c6a398daf760c57"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win32.whl", hash = "sha256:9756873290abd53111f9a7edc055c62a7968ac67d0fc3f49e7dba5bdda5c78a3"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win_amd64.whl", hash = "sha256:35ac330fc1ed6ba0751f3eaa6a6f068c4e88cb1069bbe0c10568847db00dc62d"}, - {file = "dependency_injector-4.37.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dc75b54da62da105ea5d4541bc5f1d0d1edb1be3763d2e9e1184fd0f249f23b"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9f9572021c4ed1ae59d22437ba60c4d92d1a1ec1e5fee1f81ef0c58096b9ee8"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2c796ec1de86c5bd34ba6a96ea95409582ebc8e54d9a62f263c7c7852d593ae6"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7fda0bd48b8b3d6f9e7227d872b7d0cc95b8d54f296213369867f7490e38d06"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win32.whl", hash = "sha256:c80521fc43f2812fec10ab4b92e7168659e25b5b13e0e3d45da0260e959da24a"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win_amd64.whl", hash = "sha256:8930da0c2a0bdc3d96863e9f9522abeeb106ee7bb5c670805e97e42838191998"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6001f91e67700479088763babe976354538344ca347abe2d4405f6f4bc40b803"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14ccce9356f161c42664b73085c7ead179186e6cb8434bf885fa64b213e32712"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:58be030a8b0f4a856523ce3799cecfcf686a545b79f1f897262cec43090a7fd3"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3bc779fe3f1331299032c51ec66c01dfd49e1a052c7ac3ac96aef30313c2e80"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7c781db928a6f02f5f373773dc1a263e1e9dfcce2a854b42c9c261db2eb0042f"}, + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, From be244db0677376a6ceeb3bf1307999c2129df6bd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:25 +0000 Subject: [PATCH 32/97] Bump black from 21.12b0 to 22.1.0 Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/commits/22.1.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- poetry.lock | 51 +++++++++++++++++++++++++++++++++----------------- pyproject.toml | 2 +- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/poetry.lock b/poetry.lock index b331d6c9d..f1b7be8db 100644 --- a/poetry.lock +++ b/poetry.lock @@ -130,28 +130,24 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -449,7 +445,7 @@ python-versions = "*" [[package]] name = "minos-microservice-aggregate" -version = "0.4.0" +version = "0.4.1" description = "Python Package for Minos Microservices containing all the Aggregate stuff" category = "main" optional = false @@ -466,7 +462,7 @@ url = "packages/core/minos-microservice-aggregate" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -489,7 +485,7 @@ url = "packages/core/minos-microservice-common" [[package]] name = "minos-microservice-cqrs" -version = "0.4.0" +version = "0.4.1" description = "Minos Microservice CQRS package" category = "main" optional = false @@ -508,7 +504,7 @@ url = "packages/core/minos-microservice-cqrs" [[package]] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." category = "main" optional = false @@ -531,7 +527,7 @@ url = "packages/core/minos-microservice-networks" [[package]] name = "minos-microservice-saga" -version = "0.4.0" +version = "0.4.1" description = "Saga Library for MinOS project." category = "main" optional = false @@ -1004,7 +1000,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "33fedaaa2db26d5be69f53f87a6a3de1d454861b75f229c97e5c8004a7c190ba" +content-hash = "c9a5212d1726c058d89839572061d9c54dda1d2044e82ded35122c0fee5eb4a5" [metadata.files] aiohttp = [ @@ -1137,8 +1133,29 @@ babel = [ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, diff --git a/pyproject.toml b/pyproject.toml index 3ee16910a..74779ee80 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,7 +14,7 @@ minos-microservice-saga = { path = "packages/core/minos-microservice-saga", deve minos-microservice-cqrs = { path = "packages/core/minos-microservice-cqrs", develop = true } [tool.poetry.dev-dependencies] -black = "^21.12b0" +black = "^22.1" isort = "^5.8.0" pytest = "^6.2.4" coverage = "^6.3" From d2d4b90642504ff0e3559c761c087fb4ddd09600 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:26 +0000 Subject: [PATCH 33/97] Bump black in /packages/core/minos-microservice-cqrs Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/commits/22.1.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- .../core/minos-microservice-cqrs/poetry.lock | 47 +++++++++++++------ .../minos-microservice-cqrs/pyproject.toml | 2 +- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/packages/core/minos-microservice-cqrs/poetry.lock b/packages/core/minos-microservice-cqrs/poetry.lock index 208d8c7a9..25a8773e6 100644 --- a/packages/core/minos-microservice-cqrs/poetry.lock +++ b/packages/core/minos-microservice-cqrs/poetry.lock @@ -130,28 +130,24 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -449,7 +445,7 @@ python-versions = "*" [[package]] name = "minos-microservice-aggregate" -version = "0.4.0" +version = "0.4.1" description = "Python Package for Minos Microservices containing all the Aggregate stuff" category = "main" optional = false @@ -466,7 +462,7 @@ url = "../minos-microservice-aggregate" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -489,7 +485,7 @@ url = "../minos-microservice-common" [[package]] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." category = "main" optional = false @@ -966,7 +962,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "bec0d6c2fbf3ab06a59d617d379e59136374f00de999a130e8df511bcefc485d" +content-hash = "da5928149e0d3787d4d29665728c6e66db783900a95f01664333096a04edd9f8" [metadata.files] aiohttp = [ @@ -1099,8 +1095,29 @@ babel = [ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, diff --git a/packages/core/minos-microservice-cqrs/pyproject.toml b/packages/core/minos-microservice-cqrs/pyproject.toml index 1682fc7d7..ad41acf4e 100644 --- a/packages/core/minos-microservice-cqrs/pyproject.toml +++ b/packages/core/minos-microservice-cqrs/pyproject.toml @@ -40,7 +40,7 @@ dependency-injector = "^4.34.0" minos-microservice-common = { path = "../minos-microservice-common", develop = true } minos-microservice-networks = { path = "../minos-microservice-networks", develop = true } minos-microservice-aggregate = { path = "../minos-microservice-aggregate", develop = true } -black = "^21.12b0" +black = "^22.1" isort = "^5.8.0" pytest = "^6.2.4" coverage = "^6.3" From 8167dbc937e8c49fad5e19ac199e7e5b2853ad0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:30 +0000 Subject: [PATCH 34/97] Bump dependency-injector in /packages/core/minos-microservice-common Bumps [dependency-injector](https://github.com/ets-labs/python-dependency-injector) from 4.37.0 to 4.38.0. - [Release notes](https://github.com/ets-labs/python-dependency-injector/releases) - [Commits](https://github.com/ets-labs/python-dependency-injector/compare/4.37.0...4.38.0) --- updated-dependencies: - dependency-name: dependency-injector dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../minos-microservice-common/poetry.lock | 74 +++++++++---------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/packages/core/minos-microservice-common/poetry.lock b/packages/core/minos-microservice-common/poetry.lock index 741f945a4..c04cd5798 100644 --- a/packages/core/minos-microservice-common/poetry.lock +++ b/packages/core/minos-microservice-common/poetry.lock @@ -190,7 +190,7 @@ toml = ["tomli"] [[package]] name = "dependency-injector" -version = "4.37.0" +version = "4.38.0" description = "Dependency injection framework for Python" category = "main" optional = false @@ -921,42 +921,42 @@ coverage = [ {file = "coverage-6.3.tar.gz", hash = "sha256:987a84ff98a309994ca77ed3cc4b92424f824278e48e4bf7d1bb79a63cfe2099"}, ] dependency-injector = [ - {file = "dependency-injector-4.37.0.tar.gz", hash = "sha256:8881c65ecc133d4b0af1cf35215a7bfab8d907e10ee1452d2dfef27cc3ca23d3"}, - {file = "dependency_injector-4.37.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fdabe9dd14259fe14eb4c65f5bf244524a5cc43a474cb448528daeda4453573"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a184b71e8aa2fffd6c3d3828c2db045a14c3bc1ac9ca7945db76b9ac93efca81"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cc2cb5b85a587f9b95505391ab4f1ef02432a590807f2230f445666d0bd3984"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:985570539c2703c6c009077026042a05b05474e75bec585607a556c1970bdeee"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win32.whl", hash = "sha256:b73bd0dd82b42950fb78baae68750ecb5c943d39cbfacea8dbee9d6df6535427"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:a944c1bbbb81dbeca8c30001bc8b7e061ca52cf291bf0dd35005863484e6ea8a"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d15b6fe1be06bffecf9b5f28fd972596f1ef6b7553d884c317b6d472ca0fb040"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf05aefcb3cd856624e2203f69a61ad54ffa0541a23a8e6d136c178b7a37153"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ededd0f6f7abe153030f3f50959abf5cb65bf7e5215a59b9333e027d6262d161"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3c5312fa1854eb45ed78a720ac5e1e354769e55a2fb42ca142b5dd612e8f0da"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win32.whl", hash = "sha256:6446bd95a80a487893e162eeb8aa2f3029ab47bb4641a9e5d431f3c024b459c9"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win_amd64.whl", hash = "sha256:fb29620e8249d66e8328d30c44d2f788d773132cdb6d0d62be4f1dd4343fc748"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9fad82e44a34c83a0b522692aace49f3149d44b3ff826197a131a27a8df51df"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bfbcaa71ea2fd3a54e46d5038e6cedbb66d7c1319ac638f935f6cbba348ffc9"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d550f4e9e81e87ae23c5086e5b3b08f2331a02e9dc7a2553ce16275ba9921817"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5242bca4f404c4918ba00b48fa1780c42903a9ff850956e04134bfc8b423d04"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win32.whl", hash = "sha256:59f557f1f1f7fe856759fdc59b5f2c012e4caaf05b4f848cbb1f250bdf4d8541"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c69196827505288a8f94f9d36d4b4829fb23d5a62f0898e0aa7d5ad1fce0505e"}, - {file = "dependency_injector-4.37.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7639c601288417352af3318d683e96f034ffb685de2cfb8d79a75f982c262302"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b607090446e697b77d36be523ed845021d2379d62fcaf152998127066b70d80"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9f31a7b3806098476767531b40f8a59dac726ce7602158a6e093f9e2be46f1a"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86c4e918064de9e300152233da096797c4de7bb8e33ce86a7c6a398daf760c57"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win32.whl", hash = "sha256:9756873290abd53111f9a7edc055c62a7968ac67d0fc3f49e7dba5bdda5c78a3"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win_amd64.whl", hash = "sha256:35ac330fc1ed6ba0751f3eaa6a6f068c4e88cb1069bbe0c10568847db00dc62d"}, - {file = "dependency_injector-4.37.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dc75b54da62da105ea5d4541bc5f1d0d1edb1be3763d2e9e1184fd0f249f23b"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9f9572021c4ed1ae59d22437ba60c4d92d1a1ec1e5fee1f81ef0c58096b9ee8"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2c796ec1de86c5bd34ba6a96ea95409582ebc8e54d9a62f263c7c7852d593ae6"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7fda0bd48b8b3d6f9e7227d872b7d0cc95b8d54f296213369867f7490e38d06"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win32.whl", hash = "sha256:c80521fc43f2812fec10ab4b92e7168659e25b5b13e0e3d45da0260e959da24a"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win_amd64.whl", hash = "sha256:8930da0c2a0bdc3d96863e9f9522abeeb106ee7bb5c670805e97e42838191998"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6001f91e67700479088763babe976354538344ca347abe2d4405f6f4bc40b803"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14ccce9356f161c42664b73085c7ead179186e6cb8434bf885fa64b213e32712"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:58be030a8b0f4a856523ce3799cecfcf686a545b79f1f897262cec43090a7fd3"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3bc779fe3f1331299032c51ec66c01dfd49e1a052c7ac3ac96aef30313c2e80"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7c781db928a6f02f5f373773dc1a263e1e9dfcce2a854b42c9c261db2eb0042f"}, + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, From 1bcf33738058e62f4a04cfd2c894ab1fb4cc52d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:33 +0000 Subject: [PATCH 35/97] Bump dependency-injector in /packages/core/minos-microservice-saga Bumps [dependency-injector](https://github.com/ets-labs/python-dependency-injector) from 4.37.0 to 4.38.0. - [Release notes](https://github.com/ets-labs/python-dependency-injector/releases) - [Commits](https://github.com/ets-labs/python-dependency-injector/compare/4.37.0...4.38.0) --- updated-dependencies: - dependency-name: dependency-injector dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../core/minos-microservice-saga/poetry.lock | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/core/minos-microservice-saga/poetry.lock b/packages/core/minos-microservice-saga/poetry.lock index 9c8b4387a..bc462de78 100644 --- a/packages/core/minos-microservice-saga/poetry.lock +++ b/packages/core/minos-microservice-saga/poetry.lock @@ -243,7 +243,7 @@ python-versions = "*" [[package]] name = "dependency-injector" -version = "4.37.0" +version = "4.38.0" description = "Dependency injection framework for Python" category = "main" optional = false @@ -449,7 +449,7 @@ python-versions = "*" [[package]] name = "minos-microservice-aggregate" -version = "0.4.0" +version = "0.4.1" description = "Python Package for Minos Microservices containing all the Aggregate stuff" category = "main" optional = false @@ -466,7 +466,7 @@ url = "../minos-microservice-aggregate" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -489,7 +489,7 @@ url = "../minos-microservice-common" [[package]] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." category = "main" optional = false @@ -1180,42 +1180,42 @@ crontab = [ {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, ] dependency-injector = [ - {file = "dependency-injector-4.37.0.tar.gz", hash = "sha256:8881c65ecc133d4b0af1cf35215a7bfab8d907e10ee1452d2dfef27cc3ca23d3"}, - {file = "dependency_injector-4.37.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fdabe9dd14259fe14eb4c65f5bf244524a5cc43a474cb448528daeda4453573"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a184b71e8aa2fffd6c3d3828c2db045a14c3bc1ac9ca7945db76b9ac93efca81"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cc2cb5b85a587f9b95505391ab4f1ef02432a590807f2230f445666d0bd3984"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:985570539c2703c6c009077026042a05b05474e75bec585607a556c1970bdeee"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win32.whl", hash = "sha256:b73bd0dd82b42950fb78baae68750ecb5c943d39cbfacea8dbee9d6df6535427"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:a944c1bbbb81dbeca8c30001bc8b7e061ca52cf291bf0dd35005863484e6ea8a"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d15b6fe1be06bffecf9b5f28fd972596f1ef6b7553d884c317b6d472ca0fb040"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf05aefcb3cd856624e2203f69a61ad54ffa0541a23a8e6d136c178b7a37153"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ededd0f6f7abe153030f3f50959abf5cb65bf7e5215a59b9333e027d6262d161"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3c5312fa1854eb45ed78a720ac5e1e354769e55a2fb42ca142b5dd612e8f0da"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win32.whl", hash = "sha256:6446bd95a80a487893e162eeb8aa2f3029ab47bb4641a9e5d431f3c024b459c9"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win_amd64.whl", hash = "sha256:fb29620e8249d66e8328d30c44d2f788d773132cdb6d0d62be4f1dd4343fc748"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9fad82e44a34c83a0b522692aace49f3149d44b3ff826197a131a27a8df51df"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bfbcaa71ea2fd3a54e46d5038e6cedbb66d7c1319ac638f935f6cbba348ffc9"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d550f4e9e81e87ae23c5086e5b3b08f2331a02e9dc7a2553ce16275ba9921817"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5242bca4f404c4918ba00b48fa1780c42903a9ff850956e04134bfc8b423d04"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win32.whl", hash = "sha256:59f557f1f1f7fe856759fdc59b5f2c012e4caaf05b4f848cbb1f250bdf4d8541"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c69196827505288a8f94f9d36d4b4829fb23d5a62f0898e0aa7d5ad1fce0505e"}, - {file = "dependency_injector-4.37.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7639c601288417352af3318d683e96f034ffb685de2cfb8d79a75f982c262302"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b607090446e697b77d36be523ed845021d2379d62fcaf152998127066b70d80"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9f31a7b3806098476767531b40f8a59dac726ce7602158a6e093f9e2be46f1a"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86c4e918064de9e300152233da096797c4de7bb8e33ce86a7c6a398daf760c57"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win32.whl", hash = "sha256:9756873290abd53111f9a7edc055c62a7968ac67d0fc3f49e7dba5bdda5c78a3"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win_amd64.whl", hash = "sha256:35ac330fc1ed6ba0751f3eaa6a6f068c4e88cb1069bbe0c10568847db00dc62d"}, - {file = "dependency_injector-4.37.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dc75b54da62da105ea5d4541bc5f1d0d1edb1be3763d2e9e1184fd0f249f23b"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9f9572021c4ed1ae59d22437ba60c4d92d1a1ec1e5fee1f81ef0c58096b9ee8"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2c796ec1de86c5bd34ba6a96ea95409582ebc8e54d9a62f263c7c7852d593ae6"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7fda0bd48b8b3d6f9e7227d872b7d0cc95b8d54f296213369867f7490e38d06"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win32.whl", hash = "sha256:c80521fc43f2812fec10ab4b92e7168659e25b5b13e0e3d45da0260e959da24a"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win_amd64.whl", hash = "sha256:8930da0c2a0bdc3d96863e9f9522abeeb106ee7bb5c670805e97e42838191998"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6001f91e67700479088763babe976354538344ca347abe2d4405f6f4bc40b803"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14ccce9356f161c42664b73085c7ead179186e6cb8434bf885fa64b213e32712"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:58be030a8b0f4a856523ce3799cecfcf686a545b79f1f897262cec43090a7fd3"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3bc779fe3f1331299032c51ec66c01dfd49e1a052c7ac3ac96aef30313c2e80"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7c781db928a6f02f5f373773dc1a263e1e9dfcce2a854b42c9c261db2eb0042f"}, + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, From 1e403af90487984f61f47ee5eac8b9407c58dd34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:39 +0000 Subject: [PATCH 36/97] Bump black in /packages/core/minos-microservice-aggregate Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/commits/22.1.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- .../minos-microservice-aggregate/poetry.lock | 45 +++++++++++++------ .../pyproject.toml | 2 +- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/poetry.lock b/packages/core/minos-microservice-aggregate/poetry.lock index 65c2942b1..c48dbc0f7 100644 --- a/packages/core/minos-microservice-aggregate/poetry.lock +++ b/packages/core/minos-microservice-aggregate/poetry.lock @@ -130,28 +130,24 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -449,7 +445,7 @@ python-versions = "*" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -472,7 +468,7 @@ url = "../minos-microservice-common" [[package]] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." category = "main" optional = false @@ -949,7 +945,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "0ef4d2ebc5573e712d02eb7a4e38c1db284ae4964c89c5fad6110cf15042b3c9" +content-hash = "7780ec62aa832682987ee33f4fac9973fc1cc8c815dc1790d98c74e840cf5b22" [metadata.files] aiohttp = [ @@ -1082,8 +1078,29 @@ babel = [ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, diff --git a/packages/core/minos-microservice-aggregate/pyproject.toml b/packages/core/minos-microservice-aggregate/pyproject.toml index 85f7a6985..e3d38fdb5 100644 --- a/packages/core/minos-microservice-aggregate/pyproject.toml +++ b/packages/core/minos-microservice-aggregate/pyproject.toml @@ -37,7 +37,7 @@ minos-microservice-networks = "^0.4.0" [tool.poetry.dev-dependencies] minos-microservice-common = { path = "../minos-microservice-common", develop = true } minos-microservice-networks = { path = "../minos-microservice-networks", develop = true } -black = "^21.12b0" +black = "^22.1" isort = "^5.8.0" pytest = "^6.2.4" coverage = "^6.3" From 5c4ef3f77ddc55806e0b7aedff3c972d44d37aa1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:07:54 +0000 Subject: [PATCH 37/97] Bump black in /packages/core/minos-microservice-networks Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/commits/22.1.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- .../minos-microservice-networks/poetry.lock | 43 +++++++++++++------ .../pyproject.toml | 2 +- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/packages/core/minos-microservice-networks/poetry.lock b/packages/core/minos-microservice-networks/poetry.lock index 8f2119eef..36436b281 100644 --- a/packages/core/minos-microservice-networks/poetry.lock +++ b/packages/core/minos-microservice-networks/poetry.lock @@ -130,28 +130,24 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -449,7 +445,7 @@ python-versions = "*" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -926,7 +922,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "afc51001c22ebc77ddbc6acb5e515a4d62dfaa1a31d44f9f44ec50d4b871d403" +content-hash = "144987b09ed9467f52a2503d416fbe1b2a347e4b786d9af12f55da2b92423024" [metadata.files] aiohttp = [ @@ -1059,8 +1055,29 @@ babel = [ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, diff --git a/packages/core/minos-microservice-networks/pyproject.toml b/packages/core/minos-microservice-networks/pyproject.toml index 2edd79d2c..8bf1ae6eb 100644 --- a/packages/core/minos-microservice-networks/pyproject.toml +++ b/packages/core/minos-microservice-networks/pyproject.toml @@ -42,7 +42,7 @@ orjson = "^3.6.5" [tool.poetry.dev-dependencies] minos-microservice-common = { path = "../minos-microservice-common", develop = true } -black = "^21.12b0" +black = "^22.1" isort = "^5.8.0" pytest = "^6.2.4" coverage = "^6.3" From 954fb9a22a88d9678b75872b2024544e332dfb4c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:08:03 +0000 Subject: [PATCH 38/97] Bump black in /packages/core/minos-microservice-saga Bumps [black](https://github.com/psf/black) from 21.12b0 to 22.1.0. - [Release notes](https://github.com/psf/black/releases) - [Changelog](https://github.com/psf/black/blob/main/CHANGES.md) - [Commits](https://github.com/psf/black/commits/22.1.0) --- updated-dependencies: - dependency-name: black dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- .../core/minos-microservice-saga/poetry.lock | 47 +++++++++++++------ .../minos-microservice-saga/pyproject.toml | 2 +- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/packages/core/minos-microservice-saga/poetry.lock b/packages/core/minos-microservice-saga/poetry.lock index 9c8b4387a..d620c3c2d 100644 --- a/packages/core/minos-microservice-saga/poetry.lock +++ b/packages/core/minos-microservice-saga/poetry.lock @@ -130,28 +130,24 @@ pytz = ">=2015.7" [[package]] name = "black" -version = "21.12b0" +version = "22.1.0" description = "The uncompromising code formatter." category = "dev" optional = false python-versions = ">=3.6.2" [package.dependencies] -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.9.0,<1" +pathspec = ">=0.9.0" platformdirs = ">=2" -tomli = ">=0.2.6,<2.0.0" -typing-extensions = [ - {version = ">=3.10.0.0", markers = "python_version < \"3.10\""}, - {version = "!=3.10.0.1", markers = "python_version >= \"3.10\""}, -] +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] d = ["aiohttp (>=3.7.4)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -python2 = ["typed-ast (>=1.4.3)"] uvloop = ["uvloop (>=0.15.2)"] [[package]] @@ -449,7 +445,7 @@ python-versions = "*" [[package]] name = "minos-microservice-aggregate" -version = "0.4.0" +version = "0.4.1" description = "Python Package for Minos Microservices containing all the Aggregate stuff" category = "main" optional = false @@ -466,7 +462,7 @@ url = "../minos-microservice-aggregate" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -489,7 +485,7 @@ url = "../minos-microservice-common" [[package]] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." category = "main" optional = false @@ -966,7 +962,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "6eaba9a492ff4414d90f5ef97dfb85311388390cd2b4ed6a63c033058f1dccd2" +content-hash = "52ac994b2aac1c6bcdd88dcc2592190dcb9e03126627e5d5c7fa0743f29c19b8" [metadata.files] aiohttp = [ @@ -1099,8 +1095,29 @@ babel = [ {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] black = [ - {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, - {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, ] cached-property = [ {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, diff --git a/packages/core/minos-microservice-saga/pyproject.toml b/packages/core/minos-microservice-saga/pyproject.toml index c26c0b891..e7937c119 100644 --- a/packages/core/minos-microservice-saga/pyproject.toml +++ b/packages/core/minos-microservice-saga/pyproject.toml @@ -40,7 +40,7 @@ dependency-injector = "^4.32.2" minos-microservice-common = { path = "../minos-microservice-common", develop = true } minos-microservice-networks = { path = "../minos-microservice-networks", develop = true } minos-microservice-aggregate = { path = "../minos-microservice-aggregate", develop = true } -black = "^21.12b0" +black = "^22.1" isort = "^5.8.0" pytest = "^6.2.4" coverage = "^6.3" From ef5fe6696a6a6b71d8ea3edb77a352e6584cea50 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:08:06 +0000 Subject: [PATCH 39/97] Bump dependency-injector in /packages/core/minos-microservice-cqrs Bumps [dependency-injector](https://github.com/ets-labs/python-dependency-injector) from 4.37.0 to 4.38.0. - [Release notes](https://github.com/ets-labs/python-dependency-injector/releases) - [Commits](https://github.com/ets-labs/python-dependency-injector/compare/4.37.0...4.38.0) --- updated-dependencies: - dependency-name: dependency-injector dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- .../core/minos-microservice-cqrs/poetry.lock | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/packages/core/minos-microservice-cqrs/poetry.lock b/packages/core/minos-microservice-cqrs/poetry.lock index 208d8c7a9..984e7b818 100644 --- a/packages/core/minos-microservice-cqrs/poetry.lock +++ b/packages/core/minos-microservice-cqrs/poetry.lock @@ -243,7 +243,7 @@ python-versions = "*" [[package]] name = "dependency-injector" -version = "4.37.0" +version = "4.38.0" description = "Dependency injection framework for Python" category = "main" optional = false @@ -449,7 +449,7 @@ python-versions = "*" [[package]] name = "minos-microservice-aggregate" -version = "0.4.0" +version = "0.4.1" description = "Python Package for Minos Microservices containing all the Aggregate stuff" category = "main" optional = false @@ -466,7 +466,7 @@ url = "../minos-microservice-aggregate" [[package]] name = "minos-microservice-common" -version = "0.4.0" +version = "0.4.1" description = "Python Package with common Classes and Utilities used in Minos Microservices." category = "main" optional = false @@ -489,7 +489,7 @@ url = "../minos-microservice-common" [[package]] name = "minos-microservice-networks" -version = "0.4.0" +version = "0.4.1" description = "Python Package with the common network classes and utilities used in Minos Microservice." category = "main" optional = false @@ -1180,42 +1180,42 @@ crontab = [ {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, ] dependency-injector = [ - {file = "dependency-injector-4.37.0.tar.gz", hash = "sha256:8881c65ecc133d4b0af1cf35215a7bfab8d907e10ee1452d2dfef27cc3ca23d3"}, - {file = "dependency_injector-4.37.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fdabe9dd14259fe14eb4c65f5bf244524a5cc43a474cb448528daeda4453573"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a184b71e8aa2fffd6c3d3828c2db045a14c3bc1ac9ca7945db76b9ac93efca81"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cc2cb5b85a587f9b95505391ab4f1ef02432a590807f2230f445666d0bd3984"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:985570539c2703c6c009077026042a05b05474e75bec585607a556c1970bdeee"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win32.whl", hash = "sha256:b73bd0dd82b42950fb78baae68750ecb5c943d39cbfacea8dbee9d6df6535427"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:a944c1bbbb81dbeca8c30001bc8b7e061ca52cf291bf0dd35005863484e6ea8a"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d15b6fe1be06bffecf9b5f28fd972596f1ef6b7553d884c317b6d472ca0fb040"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf05aefcb3cd856624e2203f69a61ad54ffa0541a23a8e6d136c178b7a37153"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ededd0f6f7abe153030f3f50959abf5cb65bf7e5215a59b9333e027d6262d161"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3c5312fa1854eb45ed78a720ac5e1e354769e55a2fb42ca142b5dd612e8f0da"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win32.whl", hash = "sha256:6446bd95a80a487893e162eeb8aa2f3029ab47bb4641a9e5d431f3c024b459c9"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win_amd64.whl", hash = "sha256:fb29620e8249d66e8328d30c44d2f788d773132cdb6d0d62be4f1dd4343fc748"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9fad82e44a34c83a0b522692aace49f3149d44b3ff826197a131a27a8df51df"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bfbcaa71ea2fd3a54e46d5038e6cedbb66d7c1319ac638f935f6cbba348ffc9"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d550f4e9e81e87ae23c5086e5b3b08f2331a02e9dc7a2553ce16275ba9921817"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5242bca4f404c4918ba00b48fa1780c42903a9ff850956e04134bfc8b423d04"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win32.whl", hash = "sha256:59f557f1f1f7fe856759fdc59b5f2c012e4caaf05b4f848cbb1f250bdf4d8541"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c69196827505288a8f94f9d36d4b4829fb23d5a62f0898e0aa7d5ad1fce0505e"}, - {file = "dependency_injector-4.37.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7639c601288417352af3318d683e96f034ffb685de2cfb8d79a75f982c262302"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b607090446e697b77d36be523ed845021d2379d62fcaf152998127066b70d80"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9f31a7b3806098476767531b40f8a59dac726ce7602158a6e093f9e2be46f1a"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86c4e918064de9e300152233da096797c4de7bb8e33ce86a7c6a398daf760c57"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win32.whl", hash = "sha256:9756873290abd53111f9a7edc055c62a7968ac67d0fc3f49e7dba5bdda5c78a3"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win_amd64.whl", hash = "sha256:35ac330fc1ed6ba0751f3eaa6a6f068c4e88cb1069bbe0c10568847db00dc62d"}, - {file = "dependency_injector-4.37.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dc75b54da62da105ea5d4541bc5f1d0d1edb1be3763d2e9e1184fd0f249f23b"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9f9572021c4ed1ae59d22437ba60c4d92d1a1ec1e5fee1f81ef0c58096b9ee8"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2c796ec1de86c5bd34ba6a96ea95409582ebc8e54d9a62f263c7c7852d593ae6"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7fda0bd48b8b3d6f9e7227d872b7d0cc95b8d54f296213369867f7490e38d06"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win32.whl", hash = "sha256:c80521fc43f2812fec10ab4b92e7168659e25b5b13e0e3d45da0260e959da24a"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win_amd64.whl", hash = "sha256:8930da0c2a0bdc3d96863e9f9522abeeb106ee7bb5c670805e97e42838191998"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6001f91e67700479088763babe976354538344ca347abe2d4405f6f4bc40b803"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14ccce9356f161c42664b73085c7ead179186e6cb8434bf885fa64b213e32712"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:58be030a8b0f4a856523ce3799cecfcf686a545b79f1f897262cec43090a7fd3"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3bc779fe3f1331299032c51ec66c01dfd49e1a052c7ac3ac96aef30313c2e80"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7c781db928a6f02f5f373773dc1a263e1e9dfcce2a854b42c9c261db2eb0042f"}, + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, From bf9d41867f1a14452ab0158b89ffd626f9ed1b05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Mon, 31 Jan 2022 18:01:03 +0100 Subject: [PATCH 40/97] ISSUE #121 * Rename variables. --- .../minos/aggregate/events/entries.py | 49 +++++++------- .../aggregate/events/repositories/abc.py | 34 +++++----- .../aggregate/events/repositories/memory.py | 14 ++-- .../minos/aggregate/events/repositories/pg.py | 44 ++++++------- .../minos/aggregate/exceptions.py | 6 +- .../minos/aggregate/models/aggregates.py | 53 ++++++++------- .../aggregate/models/diffs/aggregates.py | 26 ++++---- .../minos/aggregate/snapshots/abc.py | 14 ++-- .../minos/aggregate/snapshots/entries.py | 53 ++++++++------- .../minos/aggregate/snapshots/memory.py | 24 +++---- .../minos/aggregate/snapshots/pg/abc.py | 6 +- .../minos/aggregate/snapshots/pg/queries.py | 18 ++--- .../minos/aggregate/snapshots/pg/readers.py | 24 ++++--- .../minos/aggregate/snapshots/pg/writers.py | 38 +++++------ .../minos/aggregate/snapshots/services.py | 17 +++-- .../minos/aggregate/transactions/entries.py | 8 +-- .../transactions/repositories/abc.py | 2 +- .../test_events/test_entries.py | 66 +++++++++---------- .../test_events/test_repositories/test_abc.py | 64 +++++++++--------- .../tests/test_aggregate/test_exceptions.py | 4 +- .../test_models/test_diffs/test_aggregates.py | 24 +++---- .../test_aggregate/test_snapshots/test_abc.py | 4 +- .../test_snapshots/test_entries.py | 36 +++++----- .../test_snapshots/test_memory.py | 28 ++++---- .../test_snapshots/test_pg/test_api.py | 4 +- .../test_snapshots/test_pg/test_queries.py | 8 +-- .../test_snapshots/test_pg/test_readers.py | 30 ++++----- .../test_snapshots/test_pg/test_writers.py | 62 ++++++++--------- .../test_snapshots/test_services.py | 12 ++-- .../test_transactions/test_entries.py | 6 +- .../tests/testcases/event_repository.py | 20 +++--- .../minos-microservice-cqrs/tests/utils.py | 2 +- 32 files changed, 392 insertions(+), 408 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index ef2023377..e6a1e14bb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -10,7 +10,6 @@ Any, Iterable, Optional, - Type, Union, ) from uuid import ( @@ -35,11 +34,11 @@ class EventEntry: - """Class that represents an entry (or row) on the event repository database which stores the aggregate changes.""" + """Class that represents an entry (or row) on the event repository database which stores the root entity changes.""" __slots__ = ( - "aggregate_uuid", - "aggregate_name", + "uuid", + "name", "version", "data", "id", @@ -51,8 +50,8 @@ class EventEntry: # noinspection PyShadowingBuiltins def __init__( self, - aggregate_uuid: UUID, - aggregate_name: str, + uuid: UUID, + name: str, version: Optional[int] = None, data: Union[bytes, memoryview] = bytes(), id: Optional[int] = None, @@ -69,8 +68,8 @@ def __init__( action = Action.value_of(action) - self.aggregate_uuid = aggregate_uuid - self.aggregate_name = aggregate_name + self.uuid = uuid + self.name = name self.version = version self.data = data @@ -80,12 +79,10 @@ def __init__( self.transaction_uuid = transaction_uuid @classmethod - def from_aggregate_diff( - cls, aggregate_diff: Event, *, transaction: Optional[TransactionEntry] = None, **kwargs - ) -> EventEntry: + def from_event(cls, event: Event, *, transaction: Optional[TransactionEntry] = None, **kwargs) -> EventEntry: """Build a new instance from a ``RootEntity``. - :param aggregate_diff: The aggregate difference. + :param event: The event. :param transaction: Optional transaction. :param kwargs: Additional named arguments. :return: A new ``EventEntry`` instance. @@ -95,10 +92,10 @@ def from_aggregate_diff( # noinspection PyTypeChecker return cls( - aggregate_uuid=aggregate_diff.uuid, - aggregate_name=aggregate_diff.name, - data=aggregate_diff.fields_diff.avro_bytes, - action=aggregate_diff.action, + uuid=event.uuid, + name=event.name, + data=event.fields_diff.avro_bytes, + action=event.action, **kwargs, ) @@ -118,8 +115,8 @@ def as_raw(self) -> dict[str, Any]: :return: A dictionary in which the keys are attribute names and values the attribute contents. """ return { - "aggregate_uuid": self.aggregate_uuid, - "aggregate_name": self.aggregate_name, + "uuid": self.uuid, + "name": self.name, "version": self.version, "data": self.data, "id": self.id, @@ -129,16 +126,16 @@ def as_raw(self) -> dict[str, Any]: } @property - def aggregate_cls(self) -> Type[RootEntity]: + def type_(self) -> type[RootEntity]: """Load the concrete ``RootEntity`` class. :return: A ``Type`` object. """ # noinspection PyTypeChecker - return import_module(self.aggregate_name) + return import_module(self.name) @property - def aggregate_diff(self) -> Event: + def event(self) -> Event: """Get the stored ``Event`` instance. :return: An ``Event`` instance. @@ -148,8 +145,8 @@ def aggregate_diff(self) -> Event: ) return Event( - self.aggregate_uuid, - self.aggregate_name, + self.uuid, + self.name, self.version, self.action, self.created_at, @@ -179,8 +176,8 @@ def __hash__(self) -> int: def __iter__(self) -> Iterable: yield from ( - self.aggregate_uuid, - self.aggregate_name, + self.uuid, + self.name, self.version, self.data, self.id, @@ -192,7 +189,7 @@ def __iter__(self) -> Iterable: def __repr__(self): return ( f"{type(self).__name__}(" - f"aggregate_uuid={self.aggregate_uuid!r}, aggregate_name={self.aggregate_name!r}, " + f"uuid={self.uuid!r}, name={self.name!r}, " f"version={self.version!r}, len(data)={len(self.data)!r}, " f"id={self.id!r}, action={self.action!r}, created_at={self.created_at!r}, " f"transaction_uuid={self.transaction_uuid!r})" diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py index e122dce92..7bdfe569b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py @@ -156,7 +156,7 @@ async def submit(self, entry: Union[Event, EventEntry], **kwargs) -> EventEntry: transaction = TRANSACTION_CONTEXT_VAR.get() if isinstance(entry, Event): - entry = EventEntry.from_aggregate_diff(entry, transaction=transaction) + entry = EventEntry.from_event(entry, transaction=transaction) if not isinstance(entry.action, Action): raise EventRepositoryException("The 'EventEntry.action' attribute must be an 'Action' instance.") @@ -168,7 +168,7 @@ async def submit(self, entry: Union[Event, EventEntry], **kwargs) -> EventEntry: entry = await self._submit(entry, **kwargs) if entry.transaction_uuid == NULL_UUID: - await self._send_events(entry.aggregate_diff) + await self._send_events(entry.event) finally: IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.reset(token) @@ -194,9 +194,7 @@ async def validate(self, entry: EventEntry, transaction_uuid_ne: Optional[UUID] if len(transaction_uuids): with suppress(StopAsyncIteration): - iterable = self.select( - aggregate_uuid=entry.aggregate_uuid, transaction_uuid_in=tuple(transaction_uuids), **kwargs - ) + iterable = self.select(uuid=entry.uuid, transaction_uuid_in=tuple(transaction_uuids), **kwargs) await iterable.__anext__() # Will raise a `StopAsyncIteration` exception if not any item. @@ -208,7 +206,7 @@ async def validate(self, entry: EventEntry, transaction_uuid_ne: Optional[UUID] async def _submit(self, entry: EventEntry, **kwargs) -> EventEntry: raise NotImplementedError - async def _send_events(self, aggregate_diff: Event): + async def _send_events(self, event: Event): from ...models import ( Action, ) @@ -218,28 +216,28 @@ async def _send_events(self, aggregate_diff: Event): Action.UPDATE: "Updated", Action.DELETE: "Deleted", } - topic = f"{aggregate_diff.simplified_name}{suffix_mapper[aggregate_diff.action]}" + topic = f"{event.simplified_name}{suffix_mapper[event.action]}" message = BrokerMessageV1( topic=topic, - payload=BrokerMessageV1Payload(content=aggregate_diff), + payload=BrokerMessageV1Payload(content=event), strategy=BrokerMessageV1Strategy.MULTICAST, ) futures = [self._broker_publisher.send(message)] - if aggregate_diff.action == Action.UPDATE: + if event.action == Action.UPDATE: from ...models import ( IncrementalFieldDiff, ) - for decomposed_aggregate_diff in aggregate_diff.decompose(): - diff = next(iter(decomposed_aggregate_diff.fields_diff.flatten_values())) + for decomposed_event in event.decompose(): + diff = next(iter(decomposed_event.fields_diff.flatten_values())) composed_topic = f"{topic}.{diff.name}" if isinstance(diff, IncrementalFieldDiff): composed_topic += f".{diff.action.value}" message = BrokerMessageV1( topic=composed_topic, - payload=BrokerMessageV1Payload(content=decomposed_aggregate_diff), + payload=BrokerMessageV1Payload(content=decomposed_event), strategy=BrokerMessageV1Strategy.MULTICAST, ) futures.append(self._broker_publisher.send(message)) @@ -249,8 +247,8 @@ async def _send_events(self, aggregate_diff: Event): # noinspection PyShadowingBuiltins async def select( self, - aggregate_uuid: Optional[UUID] = None, - aggregate_name: Optional[str] = None, + uuid: Optional[UUID] = None, + name: Optional[str] = None, version: Optional[int] = None, version_lt: Optional[int] = None, version_gt: Optional[int] = None, @@ -268,8 +266,8 @@ async def select( ) -> AsyncIterator[EventEntry]: """Perform a selection query of entries stored in to the repository. - :param aggregate_uuid: The identifier must be equal to the given value. - :param aggregate_name: The classname must be equal to the given value. + :param uuid: The identifier must be equal to the given value. + :param name: The classname must be equal to the given value. :param version: The version must be equal to the given value. :param version_lt: The version must be lower than the given value. :param version_gt: The version must be greater than the given value. @@ -286,8 +284,8 @@ async def select( :return: A list of entries. """ generator = self._select( - aggregate_uuid=aggregate_uuid, - aggregate_name=aggregate_name, + uuid=uuid, + name=name, version=version, version_lt=version_lt, version_gt=version_gt, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/memory.py index 737fa787c..73dcd74f0 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/memory.py @@ -43,8 +43,8 @@ def __init__(self, *args, **kwargs): self._next_versions = defaultdict(int) async def _submit(self, entry: EventEntry, **kwargs) -> EventEntry: - if entry.aggregate_uuid == NULL_UUID: - entry.aggregate_uuid = uuid4() + if entry.uuid == NULL_UUID: + entry.uuid = uuid4() next_version = self._get_next_version_id(entry) if entry.version is None: @@ -66,14 +66,14 @@ def _generate_next_id(self) -> int: return next(self._id_generator) + 1 def _get_next_version_id(self, entry: EventEntry) -> int: - key = (entry.aggregate_name, entry.aggregate_uuid, entry.transaction_uuid) + key = (entry.name, entry.uuid, entry.transaction_uuid) self._next_versions[key] += 1 return self._next_versions[key] async def _select( self, - aggregate_uuid: Optional[int] = None, - aggregate_name: Optional[str] = None, + uuid: Optional[int] = None, + name: Optional[str] = None, version: Optional[int] = None, version_lt: Optional[int] = None, version_gt: Optional[int] = None, @@ -93,9 +93,9 @@ async def _select( # noinspection DuplicatedCode def _fn_filter(entry: EventEntry) -> bool: - if aggregate_uuid is not None and aggregate_uuid != entry.aggregate_uuid: + if uuid is not None and uuid != entry.uuid: return False - if aggregate_name is not None and aggregate_name != entry.aggregate_name: + if name is not None and name != entry.name: return False if version is not None and version != entry.version: return False diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/pg.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/pg.py index 834c6a2fd..c70bcac64 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/pg.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/pg.py @@ -58,8 +58,8 @@ async def _setup(self): async def _submit(self, entry: EventEntry, **kwargs) -> EventEntry: lock = None - if entry.aggregate_uuid != NULL_UUID: - lock = entry.aggregate_uuid.int & (1 << 32) - 1 + if entry.uuid != NULL_UUID: + lock = entry.uuid.int & (1 << 32) - 1 query, params = await self._build_query(entry) @@ -71,7 +71,7 @@ async def _submit(self, entry: EventEntry, **kwargs) -> EventEntry: await self.offset, ) - entry.id, entry.aggregate_uuid, entry.version, entry.created_at = response + entry.id, entry.uuid, entry.version, entry.created_at = response return entry async def _build_query(self, entry: EventEntry) -> tuple[Composable, dict[str, UUID]]: @@ -105,8 +105,8 @@ async def _select(self, **kwargs) -> AsyncIterator[EventEntry]: # noinspection PyUnusedLocal @staticmethod def _build_select_query( - aggregate_uuid: Optional[UUID] = None, - aggregate_name: Optional[str] = None, + uuid: Optional[UUID] = None, + name: Optional[str] = None, version: Optional[int] = None, version_lt: Optional[int] = None, version_gt: Optional[int] = None, @@ -124,10 +124,10 @@ def _build_select_query( ) -> str: conditions = list() - if aggregate_uuid is not None: - conditions.append("aggregate_uuid = %(aggregate_uuid)s") - if aggregate_name is not None: - conditions.append("aggregate_name = %(aggregate_name)s") + if uuid is not None: + conditions.append("uuid = %(uuid)s") + if name is not None: + conditions.append("name = %(name)s") if version is not None: conditions.append("version = %(version)s") if version_lt is not None: @@ -186,51 +186,51 @@ async def _offset(self) -> int: CREATE TABLE IF NOT EXISTS aggregate_event ( id BIGSERIAL PRIMARY KEY, action ACTION_TYPE NOT NULL, - aggregate_uuid UUID NOT NULL, - aggregate_name TEXT NOT NULL, + uuid UUID NOT NULL, + name TEXT NOT NULL, version INT NOT NULL, data BYTEA NOT NULL, created_at TIMESTAMPTZ NOT NULL, transaction_uuid UUID NOT NULL DEFAULT uuid_nil(), - UNIQUE (aggregate_uuid, version, transaction_uuid) + UNIQUE (uuid, version, transaction_uuid) ); """.strip() _INSERT_VALUES_QUERY = SQL( """ -INSERT INTO aggregate_event (id, action, aggregate_uuid, aggregate_name, version, data, created_at, transaction_uuid) +INSERT INTO aggregate_event (id, action, uuid, name, version, data, created_at, transaction_uuid) VALUES ( default, %(action)s, - CASE %(aggregate_uuid)s WHEN uuid_nil() THEN uuid_generate_v4() ELSE %(aggregate_uuid)s END, - %(aggregate_name)s, + CASE %(uuid)s WHEN uuid_nil() THEN uuid_generate_v4() ELSE %(uuid)s END, + %(name)s, ( SELECT (CASE WHEN %(version)s IS NULL THEN 1 + COALESCE(MAX(t2.version), 0) ELSE %(version)s END) FROM ( - SELECT DISTINCT ON (t1.aggregate_uuid) t1.version + SELECT DISTINCT ON (t1.uuid) t1.version FROM ( {from_parts} ) AS t1 - ORDER BY t1.aggregate_uuid, t1.transaction_index DESC + ORDER BY t1.uuid, t1.transaction_index DESC ) AS t2 ), %(data)s, (CASE WHEN %(created_at)s IS NULL THEN NOW() ELSE %(created_at)s END), %(transaction_uuid)s ) -RETURNING id, aggregate_uuid, version, created_at; +RETURNING id, uuid, version, created_at; """ ) _SELECT_TRANSACTION_CHUNK = SQL( """ -SELECT {index} AS transaction_index, aggregate_uuid, MAX(version) AS version +SELECT {index} AS transaction_index, uuid, MAX(version) AS version FROM aggregate_event -WHERE aggregate_uuid = %(aggregate_uuid)s AND transaction_uuid = {transaction_uuid} -GROUP BY aggregate_uuid +WHERE uuid = %(uuid)s AND transaction_uuid = {transaction_uuid} +GROUP BY uuid """ ) _SELECT_ALL_ENTRIES_QUERY = """ -SELECT aggregate_uuid, aggregate_name, version, data, id, action, created_at, transaction_uuid +SELECT uuid, name, version, data, id, action, created_at, transaction_uuid FROM aggregate_event """.strip() diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py index f78edf06b..120f43b01 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py @@ -52,12 +52,12 @@ class SnapshotRepositoryException(AggregateException): class SnapshotRepositoryConflictException(SnapshotRepositoryException): """Exception to be raised when current version is newer than the one to be processed.""" - def __init__(self, previous: RootEntity, aggregate_diff: Event): + def __init__(self, previous: RootEntity, event: Event): self.previous = previous - self.aggregate_diff = aggregate_diff + self.event = event super().__init__( f"Version for {repr(previous.classname)} root entity must be " - f"greater than {previous.version}. Obtained: {aggregate_diff.version}" + f"greater than {previous.version}. Obtained: {event.version}" ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py index 7e6680f45..0b9100292 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py @@ -53,7 +53,7 @@ class RootEntity(Entity): - """Base aggregate class.""" + """Base Root Entity class.""" version: int created_at: datetime @@ -90,7 +90,7 @@ async def get( """Get one instance from the database based on its identifier. :param uuid: The identifier of the instance. - :param _snapshot: Snapshot to be set to the aggregate. + :param _snapshot: Snapshot to be set to the root entity. :return: A list of aggregate instances. """ if _snapshot is None or isinstance(_snapshot, Provide): @@ -155,8 +155,8 @@ async def create(cls: Type[T], *args, **kwargs) -> T: instance: T = cls(*args, **kwargs) - aggregate_diff = Event.from_aggregate(instance) - entry = await instance._repository.submit(aggregate_diff) + event = Event.from_root_entity(instance) + entry = await instance._repository.submit(event) instance._update_from_repository_entry(entry) @@ -187,11 +187,11 @@ async def update(self: T, **kwargs) -> T: setattr(self, key, value) previous = await self.get(self.uuid, _repository=self._repository, _snapshot=self._snapshot) - aggregate_diff = self.diff(previous) - if not len(aggregate_diff.fields_diff): + event = self.diff(previous) + if not len(event.fields_diff): return self - entry = await self._repository.submit(aggregate_diff) + entry = await self._repository.submit(event) self._update_from_repository_entry(entry) @@ -233,17 +233,17 @@ async def refresh(self) -> None: self._fields |= new.fields async def delete(self) -> None: - """Delete the given aggregate instance. + """Delete the given root entity instance. :return: This method does not return anything. """ - aggregate_diff = Event.from_deleted_aggregate(self) - entry = await self._repository.submit(aggregate_diff) + event = Event.from_deleted_root_entity(self) + entry = await self._repository.submit(event) self._update_from_repository_entry(entry) def _update_from_repository_entry(self, entry: EventEntry) -> None: - self.uuid = entry.aggregate_uuid + self.uuid = entry.uuid self.version = entry.version if entry.action.is_create: self.created_at = entry.created_at @@ -259,20 +259,19 @@ def diff(self, another: RootEntity) -> Event: """ return Event.from_difference(self, another) - def apply_diff(self, aggregate_diff: Event) -> None: + def apply_diff(self, event: Event) -> None: """Apply the differences over the instance. - :param aggregate_diff: The ``FieldDiffContainer`` containing the values to be set. + :param event: The ``FieldDiffContainer`` containing the values to be set. :return: This method does not return anything. """ - if self.uuid != aggregate_diff.uuid: + if self.uuid != event.uuid: raise ValueError( - f"To apply the difference, it must have same uuid. " - f"Expected: {self.uuid!r} Obtained: {aggregate_diff.uuid!r}" + f"To apply the difference, it must have same uuid. " f"Expected: {self.uuid!r} Obtained: {event.uuid!r}" ) - logger.debug(f"Applying {aggregate_diff!r} to {self!r}...") - for diff in aggregate_diff.fields_diff.flatten_values(): + logger.debug(f"Applying {event!r} to {self!r}...") + for diff in event.fields_diff.flatten_values(): if isinstance(diff, IncrementalFieldDiff): container = getattr(self, diff.name) if diff.action.is_delete: @@ -281,25 +280,25 @@ def apply_diff(self, aggregate_diff: Event) -> None: container.add(diff.value) else: setattr(self, diff.name, diff.value) - self.version = aggregate_diff.version - self.updated_at = aggregate_diff.created_at + self.version = event.version + self.updated_at = event.created_at @classmethod - def from_diff(cls: Type[T], aggregate_diff: Event, *args, **kwargs) -> T: + def from_diff(cls: Type[T], event: Event, *args, **kwargs) -> T: """Build a new instance from an ``Event``. - :param aggregate_diff: The difference that contains the data. + :param event: The difference that contains the data. :param args: Additional positional arguments. :param kwargs: Additional named arguments. :return: A new ``RootEntity`` instance. """ return cls( *args, - uuid=aggregate_diff.uuid, - version=aggregate_diff.version, - created_at=aggregate_diff.created_at, - updated_at=aggregate_diff.created_at, - **aggregate_diff.get_all(), + uuid=event.uuid, + version=event.version, + created_at=event.created_at, + updated_at=event.created_at, + **event.get_all(), **kwargs, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py index cb211ae1b..e27da13bc 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py @@ -125,38 +125,38 @@ def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.U ) @classmethod - def from_aggregate(cls, aggregate: RootEntity, action: Action = Action.CREATE) -> Event: + def from_root_entity(cls, root_entity: RootEntity, action: Action = Action.CREATE) -> Event: """Build an ``Event`` from a ``RootEntity`` (considering all fields as differences). - :param aggregate: A ``RootEntity`` instance. + :param root_entity: A ``RootEntity`` instance. :param action: The action to that generates the aggregate difference. :return: An ``Event`` instance. """ - fields_diff = FieldDiffContainer.from_model(aggregate, ignore={"uuid", "version", "created_at", "updated_at"}) + fields_diff = FieldDiffContainer.from_model(root_entity, ignore={"uuid", "version", "created_at", "updated_at"}) return cls( - uuid=aggregate.uuid, - name=aggregate.classname, - version=aggregate.version, + uuid=root_entity.uuid, + name=root_entity.classname, + version=root_entity.version, action=action, - created_at=aggregate.updated_at, + created_at=root_entity.updated_at, fields_diff=fields_diff, ) @classmethod - def from_deleted_aggregate(cls, aggregate: RootEntity, action: Action = Action.DELETE) -> Event: + def from_deleted_root_entity(cls, root_entity: RootEntity, action: Action = Action.DELETE) -> Event: """Build an ``Event`` from a ``RootEntity`` (considering all fields as differences). - :param aggregate: A ``RootEntity`` instance. + :param root_entity: A ``RootEntity`` instance. :param action: The action to that generates the aggregate difference. :return: An ``Event`` instance. """ return cls( - uuid=aggregate.uuid, - name=aggregate.classname, - version=aggregate.version, + uuid=root_entity.uuid, + name=root_entity.classname, + version=root_entity.version, action=action, - created_at=aggregate.updated_at, + created_at=root_entity.updated_at, fields_diff=FieldDiffContainer.empty(), ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py index abe5c937b..2847e5d73 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py @@ -41,12 +41,10 @@ class SnapshotRepository(ABC, MinosSetup): The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. """ - async def get( - self, aggregate_name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs - ) -> RootEntity: + async def get(self, name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs) -> RootEntity: """Get an aggregate instance from its identifier. - :param aggregate_name: Class name of the ``RootEntity``. + :param name: Class name of the ``RootEntity``. :param uuid: Identifier of the ``RootEntity``. :param transaction: The transaction within the operation is performed. If not any value is provided, then the transaction is extracted from the context var. If not any transaction is being scoped then the query is @@ -59,7 +57,7 @@ async def get( await self.synchronize(**kwargs) - return await self._get(aggregate_name=aggregate_name, uuid=uuid, transaction=transaction, **kwargs) + return await self._get(name=name, uuid=uuid, transaction=transaction, **kwargs) @abstractmethod async def _get(self, *args, **kwargs) -> RootEntity: @@ -67,7 +65,7 @@ async def _get(self, *args, **kwargs) -> RootEntity: async def find( self, - aggregate_name: str, + name: str, condition: _Condition, ordering: Optional[_Ordering] = None, limit: Optional[int] = None, @@ -77,7 +75,7 @@ async def find( ) -> AsyncIterator[RootEntity]: """Find a collection of ``RootEntity`` instances based on a ``Condition``. - :param aggregate_name: Class name of the ``RootEntity``. + :param name: Class name of the ``RootEntity``. :param condition: The condition that must be satisfied by the ``RootEntity`` instances. :param ordering: Optional argument to return the instance with specific ordering strategy. The default behaviour is to retrieve them without any order pattern. @@ -97,7 +95,7 @@ async def find( await self.synchronize(**kwargs) iterable = self._find( - aggregate_name=aggregate_name, + name=name, condition=condition, ordering=ordering, limit=limit, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py index 6df7f4bce..716e979f4 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py @@ -11,7 +11,6 @@ Any, Iterable, Optional, - Type, Union, ) from uuid import ( @@ -44,8 +43,8 @@ class SnapshotEntry: """ __slots__ = ( - "aggregate_uuid", - "aggregate_name", + "uuid", + "name", "version", "schema", "data", @@ -57,8 +56,8 @@ class SnapshotEntry: # noinspection PyShadowingBuiltins def __init__( self, - aggregate_uuid: UUID, - aggregate_name: str, + uuid: UUID, + name: str, version: int, schema: Optional[Union[list[dict[str, Any]], dict[str, Any]]] = None, data: Optional[dict[str, Any]] = None, @@ -71,8 +70,8 @@ def __init__( if isinstance(schema, bytes): schema = MinosJsonBinaryProtocol.decode(schema) - self.aggregate_uuid = aggregate_uuid - self.aggregate_name = aggregate_name + self.uuid = uuid + self.name = name self.version = version self.schema = schema @@ -84,25 +83,25 @@ def __init__( self.transaction_uuid = transaction_uuid @classmethod - def from_aggregate(cls, aggregate: RootEntity, **kwargs) -> SnapshotEntry: + def from_root_entity(cls, root_entity: RootEntity, **kwargs) -> SnapshotEntry: """Build a new instance from a ``RootEntity``. - :param aggregate: The aggregate instance. + :param root_entity: The aggregate instance. :return: A new ``MinosSnapshotEntry`` instance. """ data = { - k: v for k, v in aggregate.avro_data.items() if k not in {"uuid", "version", "created_at", "updated_at"} + k: v for k, v in root_entity.avro_data.items() if k not in {"uuid", "version", "created_at", "updated_at"} } # noinspection PyTypeChecker return cls( - aggregate_uuid=aggregate.uuid, - aggregate_name=aggregate.classname, - version=aggregate.version, - schema=aggregate.avro_schema, + uuid=root_entity.uuid, + name=root_entity.classname, + version=root_entity.version, + schema=root_entity.avro_schema, data=data, - created_at=aggregate.created_at, - updated_at=aggregate.updated_at, + created_at=root_entity.created_at, + updated_at=root_entity.updated_at, **kwargs, ) @@ -114,8 +113,8 @@ def from_event_entry(cls, entry: EventEntry) -> SnapshotEntry: :return: A new ``SnapshotEntry`` instance. """ return cls( - aggregate_uuid=entry.aggregate_uuid, - aggregate_name=entry.aggregate_name, + uuid=entry.uuid, + name=entry.name, version=entry.version, created_at=entry.created_at, updated_at=entry.created_at, @@ -128,8 +127,8 @@ def as_raw(self) -> dict[str, Any]: :return: A dictionary in which the keys are attribute names and values the attribute contents. """ return { - "aggregate_uuid": self.aggregate_uuid, - "aggregate_name": self.aggregate_name, + "uuid": self.uuid, + "name": self.name, "version": self.version, "schema": self.encoded_schema, "data": self.encoded_data, @@ -160,7 +159,7 @@ def encoded_data(self) -> Optional[str]: return json.dumps(self.data) - def build_aggregate(self, **kwargs) -> RootEntity: + def build(self, **kwargs) -> RootEntity: """Rebuild the stored ``RootEntity`` object instance from the internal state. :param kwargs: Additional named arguments. @@ -171,10 +170,10 @@ def build_aggregate(self, **kwargs) -> RootEntity: ) if self.data is None: - raise AlreadyDeletedException(f"The {self.aggregate_uuid!r} id points to an already deleted aggregate.") + raise AlreadyDeletedException(f"The {self.uuid!r} id points to an already deleted aggregate.") data = dict(self.data) data |= { - "uuid": self.aggregate_uuid, + "uuid": self.uuid, "version": self.version, "created_at": self.created_at, "updated_at": self.updated_at, @@ -184,13 +183,13 @@ def build_aggregate(self, **kwargs) -> RootEntity: return instance @property - def aggregate_cls(self) -> Type[RootEntity]: + def type_(self) -> type[RootEntity]: """Load the concrete ``RootEntity`` class. :return: A ``Type`` object. """ # noinspection PyTypeChecker - return import_module(self.aggregate_name) + return import_module(self.name) def __eq__(self, other: SnapshotEntry) -> bool: return type(self) == type(other) and tuple(self) == tuple(other) @@ -198,7 +197,7 @@ def __eq__(self, other: SnapshotEntry) -> bool: def __iter__(self) -> Iterable: # noinspection PyRedundantParentheses yield from ( - self.aggregate_name, + self.name, self.version, self.schema, self.data, @@ -210,7 +209,7 @@ def __iter__(self) -> Iterable: def __repr__(self): name = type(self).__name__ return ( - f"{name}(aggregate_uuid={self.aggregate_uuid!r}, aggregate_name={self.aggregate_name!r}, " + f"{name}(uuid={self.uuid!r}, name={self.name!r}, " f"version={self.version!r}, schema={self.schema!r}, data={self.data!r}, " f"created_at={self.created_at!r}, updated_at={self.updated_at!r}, " f"transaction_uuid={self.transaction_uuid!r})" diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py index 7eb957a53..dcfc25f63 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py @@ -78,18 +78,18 @@ def __init__( async def _find( self, - aggregate_name: str, + name: str, condition: _Condition, ordering: Optional[_Ordering] = None, limit: Optional[int] = None, **kwargs, ) -> AsyncIterator[RootEntity]: - uuids = {v.aggregate_uuid async for v in self._event_repository.select(aggregate_name=aggregate_name)} + uuids = {v.uuid async for v in self._event_repository.select(name=name)} aggregates = list() for uuid in uuids: try: - aggregate = await self.get(aggregate_name, uuid, **kwargs) + aggregate = await self.get(name, uuid, **kwargs) except AlreadyDeletedException: continue @@ -106,11 +106,9 @@ async def _find( yield aggregate # noinspection PyMethodOverriding - async def _get( - self, aggregate_name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs - ) -> RootEntity: + async def _get(self, name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs) -> RootEntity: transaction_uuids = await self._get_transaction_uuids(transaction) - entries = await self._get_event_entries(aggregate_name, uuid, transaction_uuids) + entries = await self._get_event_entries(name, uuid, transaction_uuids) if not len(entries): raise NotFoundException(f"Not found any entries for the {uuid!r} id.") @@ -134,12 +132,10 @@ async def _get_transaction_uuids(self, transaction: Optional[TransactionEntry]) return transaction_uuids - async def _get_event_entries( - self, aggregate_name: str, uuid: UUID, transaction_uuids: tuple[UUID, ...] - ) -> list[EventEntry]: + async def _get_event_entries(self, name: str, uuid: UUID, transaction_uuids: tuple[UUID, ...]) -> list[EventEntry]: entries = [ v - async for v in self._event_repository.select(aggregate_name=aggregate_name, aggregate_uuid=uuid) + async for v in self._event_repository.select(name=name, uuid=uuid) if v.transaction_uuid in transaction_uuids ] @@ -155,10 +151,10 @@ async def _get_event_entries( @staticmethod def _build_aggregate(entries: list[EventEntry], **kwargs) -> RootEntity: - cls = entries[0].aggregate_cls - aggregate = cls.from_diff(entries[0].aggregate_diff, **kwargs) + cls = entries[0].type_ + aggregate = cls.from_diff(entries[0].event, **kwargs) for entry in entries[1:]: - aggregate.apply_diff(entry.aggregate_diff) + aggregate.apply_diff(entry.event) return aggregate async def _synchronize(self, **kwargs) -> None: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/abc.py index 8ace62d08..36fcb5f42 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/abc.py @@ -30,15 +30,15 @@ async def _setup(self) -> None: _CREATE_TABLE_QUERY = """ CREATE TABLE IF NOT EXISTS snapshot ( - aggregate_uuid UUID NOT NULL, - aggregate_name TEXT NOT NULL, + uuid UUID NOT NULL, + name TEXT NOT NULL, version INT NOT NULL, schema BYTEA, data JSONB, created_at TIMESTAMPTZ NOT NULL, updated_at TIMESTAMPTZ NOT NULL, transaction_uuid UUID NOT NULL DEFAULT uuid_nil(), - PRIMARY KEY (aggregate_uuid, transaction_uuid) + PRIMARY KEY (uuid, transaction_uuid) ); """.strip() diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/queries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/queries.py index 48bc4a118..8dc95af38 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/queries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/queries.py @@ -59,14 +59,14 @@ class PostgreSqlSnapshotQueryBuilder: def __init__( self, - aggregate_name: str, + name: str, condition: _Condition, ordering: Optional[_Ordering] = None, limit: Optional[int] = None, transaction_uuids: tuple[UUID, ...] = (NULL_UUID,), exclude_deleted: bool = False, ): - self.aggregate_name = aggregate_name + self.name = name self.condition = condition self.ordering = ordering self.limit = limit @@ -93,7 +93,7 @@ def build(self) -> tuple[Composable, dict[str, Any]]: return query, parameters def _build(self) -> Composable: - self._parameters["aggregate_name"] = self.aggregate_name + self._parameters["name"] = self.name query = SQL(" WHERE ").join([self._build_select_from(), self._build_condition(self.condition)]) @@ -213,7 +213,7 @@ def generate_random_str() -> str: } _FIXED_FIELDS_MAPPER = { - "uuid": Identifier("aggregate_uuid"), + "uuid": Identifier("uuid"), "version": Identifier("version"), "created_at": Identifier("created_at"), "updated_at": Identifier("updated_at"), @@ -226,8 +226,8 @@ def generate_random_str() -> str: _SELECT_ENTRIES_QUERY = SQL( "SELECT " - " t2.aggregate_uuid, " - " t2.aggregate_name, " + " t2.uuid, " + " t2.name, " " t2.version, " " t2.schema, " " t2.data, " @@ -235,16 +235,16 @@ def generate_random_str() -> str: " t2.updated_at, " " t2.transaction_uuid " "FROM (" - " SELECT DISTINCT ON (aggregate_uuid) t1.* " + " SELECT DISTINCT ON (uuid) t1.* " " FROM ( {from_parts} ) AS t1 " - " ORDER BY aggregate_uuid, transaction_index DESC " + " ORDER BY uuid, transaction_index DESC " ") AS t2" ) _SELECT_TRANSACTION_CHUNK = SQL( "SELECT {index} AS transaction_index, * " "FROM snapshot " - "WHERE aggregate_name = %(aggregate_name)s AND transaction_uuid = {transaction_uuid} " + "WHERE name = %(name)s AND transaction_uuid = {transaction_uuid} " ) _EXCLUDE_DELETED_CONDITION = SQL("(data IS NOT NULL)") diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py index 260e3b440..46ce6b681 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py @@ -51,23 +51,23 @@ class PostgreSqlSnapshotReader(PostgreSqlSnapshotSetup): The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. """ - async def get(self, aggregate_name: str, uuid: UUID, **kwargs) -> RootEntity: + async def get(self, name: str, uuid: UUID, **kwargs) -> RootEntity: """Get an aggregate instance from its identifier. - :param aggregate_name: Class name of the ``RootEntity``. + :param name: Class name of the ``RootEntity``. :param uuid: Identifier of the ``RootEntity``. :param kwargs: Additional named arguments. :return: The ``RootEntity`` instance. """ - snapshot_entry = await self.get_entry(aggregate_name, uuid, **kwargs) - aggregate = snapshot_entry.build_aggregate(**kwargs) + snapshot_entry = await self.get_entry(name, uuid, **kwargs) + aggregate = snapshot_entry.build(**kwargs) return aggregate # noinspection PyUnusedLocal - async def get_entry(self, aggregate_name: str, uuid: UUID, **kwargs) -> SnapshotEntry: + async def get_entry(self, name: str, uuid: UUID, **kwargs) -> SnapshotEntry: """Get a ``SnapshotEntry`` from its identifier. - :param aggregate_name: Class name of the ``RootEntity``. + :param name: Class name of the ``RootEntity``. :param uuid: Identifier of the ``RootEntity``. :param kwargs: Additional named arguments. :return: The ``SnapshotEntry`` instance. @@ -75,7 +75,7 @@ async def get_entry(self, aggregate_name: str, uuid: UUID, **kwargs) -> Snapshot try: return await self.find_entries( - aggregate_name, _EqualCondition("uuid", uuid), **kwargs | {"exclude_deleted": False} + name, _EqualCondition("uuid", uuid), **kwargs | {"exclude_deleted": False} ).__anext__() except StopAsyncIteration: raise NotFoundException(f"Some aggregates could not be found: {uuid!s}") @@ -88,11 +88,11 @@ async def find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: :return: An asynchronous iterator that containing the ``RootEntity`` instances. """ async for snapshot_entry in self.find_entries(*args, **kwargs): - yield snapshot_entry.build_aggregate(**kwargs) + yield snapshot_entry.build(**kwargs) async def find_entries( self, - aggregate_name: str, + name: str, condition: _Condition, ordering: Optional[_Ordering] = None, limit: Optional[int] = None, @@ -103,7 +103,7 @@ async def find_entries( ) -> AsyncIterator[SnapshotEntry]: """Find a collection of ``SnapshotEntry`` instances based on a ``Condition``. - :param aggregate_name: Class name of the ``RootEntity``. + :param name: Class name of the ``RootEntity``. :param condition: The condition that must be satisfied by the ``RootEntity`` instances. :param ordering: Optional argument to return the instance with specific ordering strategy. The default behaviour is to retrieve them without any order pattern. @@ -124,9 +124,7 @@ async def find_entries( else: transaction_uuids = await transaction.uuids - qb = PostgreSqlSnapshotQueryBuilder( - aggregate_name, condition, ordering, limit, transaction_uuids, exclude_deleted - ) + qb = PostgreSqlSnapshotQueryBuilder(name, condition, ordering, limit, transaction_uuids, exclude_deleted) query, parameters = qb.build() async with self.cursor() as cursor: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index d80058586..52204baac 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -74,14 +74,14 @@ def __init__( self._event_repository = event_repository self._transaction_repository = transaction_repository - async def is_synced(self, aggregate_name: str, **kwargs) -> bool: + async def is_synced(self, name: str, **kwargs) -> bool: """Check if the snapshot has the latest version of a ``RootEntity`` instance. - :param aggregate_name: Class name of the ``RootEntity`` to be checked. + :param name: Class name of the ``RootEntity`` to be checked. :return: ``True`` if it has the latest version for the identifier or ``False`` otherwise. """ offset = await self._load_offset(**kwargs) - iterable = self._event_repository.select(id_gt=offset, aggregate_name=aggregate_name, **kwargs) + iterable = self._event_repository.select(id_gt=offset, name=name, **kwargs) try: await iterable.__anext__() return False @@ -133,12 +133,12 @@ async def _submit_delete(self, event_entry: EventEntry, **kwargs) -> SnapshotEnt async def _submit_update_or_create(self, event_entry: EventEntry, **kwargs) -> SnapshotEntry: aggregate = await self._build_aggregate(event_entry, **kwargs) - snapshot_entry = SnapshotEntry.from_aggregate(aggregate, transaction_uuid=event_entry.transaction_uuid) + snapshot_entry = SnapshotEntry.from_root_entity(aggregate, transaction_uuid=event_entry.transaction_uuid) snapshot_entry = await self._submit_entry(snapshot_entry, **kwargs) return snapshot_entry async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> RootEntity: - diff = event_entry.aggregate_diff + diff = event_entry.event try: transaction = await self._transaction_repository.get(uuid=event_entry.transaction_uuid) @@ -148,25 +148,25 @@ async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> RootEntit aggregate = await self._update_if_exists(diff, transaction=transaction, **kwargs) return aggregate - async def _update_if_exists(self, aggregate_diff: Event, **kwargs) -> RootEntity: + async def _update_if_exists(self, event: Event, **kwargs) -> RootEntity: # noinspection PyBroadException try: # noinspection PyTypeChecker - previous = await self._select_one_aggregate(aggregate_diff.uuid, aggregate_diff.name, **kwargs) + previous = await self._select_one_aggregate(event.name, event.uuid, **kwargs) except NotFoundException: # noinspection PyTypeChecker - aggregate_cls: Type[RootEntity] = import_module(aggregate_diff.name) - return aggregate_cls.from_diff(aggregate_diff, **kwargs) + cls: Type[RootEntity] = import_module(event.name) + return cls.from_diff(event, **kwargs) - if previous.version >= aggregate_diff.version: - raise SnapshotRepositoryConflictException(previous, aggregate_diff) + if previous.version >= event.version: + raise SnapshotRepositoryConflictException(previous, event) - previous.apply_diff(aggregate_diff) + previous.apply_diff(event) return previous - async def _select_one_aggregate(self, aggregate_uuid: UUID, aggregate_name: str, **kwargs) -> RootEntity: - snapshot_entry = await self._reader.get_entry(aggregate_name, aggregate_uuid, **kwargs) - return snapshot_entry.build_aggregate(**kwargs) + async def _select_one_aggregate(self, name: str, uuid: UUID, **kwargs) -> RootEntity: + snapshot_entry = await self._reader.get_entry(name, uuid, **kwargs) + return snapshot_entry.build(**kwargs) async def _submit_entry(self, snapshot_entry: SnapshotEntry, **kwargs) -> SnapshotEntry: params = snapshot_entry.as_raw() @@ -186,10 +186,10 @@ async def _clean_transactions(self, offset: int, **kwargs) -> None: _INSERT_ONE_SNAPSHOT_ENTRY_QUERY = """ -INSERT INTO snapshot (aggregate_uuid, aggregate_name, version, schema, data, created_at, updated_at, transaction_uuid) +INSERT INTO snapshot (uuid, name, version, schema, data, created_at, updated_at, transaction_uuid) VALUES ( - %(aggregate_uuid)s, - %(aggregate_name)s, + %(uuid)s, + %(name)s, %(version)s, %(schema)s, %(data)s, @@ -197,7 +197,7 @@ async def _clean_transactions(self, offset: int, **kwargs) -> None: %(updated_at)s, %(transaction_uuid)s ) -ON CONFLICT (aggregate_uuid, transaction_uuid) +ON CONFLICT (uuid, transaction_uuid) DO UPDATE SET version = %(version)s, schema = %(schema)s, data = %(data)s, updated_at = %(updated_at)s RETURNING created_at, updated_at; diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py index 4b682406f..35c817207 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py @@ -8,7 +8,6 @@ ) from typing import ( TYPE_CHECKING, - Type, ) from uuid import ( UUID, @@ -64,10 +63,10 @@ def __init__( @classmethod def __get_enroute__(cls, config: MinosConfig) -> dict[str, set[EnrouteDecorator]]: - aggregate_name = config.service.aggregate.rsplit(".", 1)[-1] + name = config.service.aggregate.rsplit(".", 1)[-1] return { - cls.__get_one__.__name__: {enroute.broker.command(f"Get{aggregate_name}")}, - cls.__get_many__.__name__: {enroute.broker.command(f"Get{aggregate_name}s")}, + cls.__get_one__.__name__: {enroute.broker.command(f"Get{name}")}, + cls.__get_many__.__name__: {enroute.broker.command(f"Get{name}s")}, cls.__synchronize__.__name__: {enroute.periodic.event("* * * * *")}, } @@ -83,7 +82,7 @@ async def __get_one__(self, request: Request) -> Response: raise ResponseException(f"There was a problem while parsing the given request: {exc!r}") try: - aggregate = await self.__aggregate_cls__.get(content["uuid"]) + aggregate = await self.type_.get(content["uuid"]) except Exception as exc: raise ResponseException(f"There was a problem while getting the aggregate: {exc!r}") @@ -101,14 +100,18 @@ async def __get_many__(self, request: Request) -> Response: raise ResponseException(f"There was a problem while parsing the given request: {exc!r}") try: - aggregates = await gather(*(self.__aggregate_cls__.get(uuid) for uuid in content["uuids"])) + aggregates = await gather(*(self.type_.get(uuid) for uuid in content["uuids"])) except Exception as exc: raise ResponseException(f"There was a problem while getting aggregates: {exc!r}") return Response(aggregates) @cached_property - def __aggregate_cls__(self) -> Type[RootEntity]: + def type_(self) -> type[RootEntity]: + """Load the concrete ``RootEntity`` class. + + :return: A ``Type`` object. + """ # noinspection PyTypeChecker return import_module(self.config.service.aggregate) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/entries.py index 66d4df90d..e8aeb9528 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/entries.py @@ -192,13 +192,13 @@ async def validate(self) -> bool: entries = dict() async for entry in self._event_repository.select(transaction_uuid=self.uuid): - if entry.aggregate_uuid in entries and entry.version < entries[entry.aggregate_uuid]: + if entry.uuid in entries and entry.version < entries[entry.uuid]: continue - entries[entry.aggregate_uuid] = entry.version + entries[entry.uuid] = entry.version transaction_uuids = set() - for aggregate_uuid, version in entries.items(): - async for entry in self._event_repository.select(aggregate_uuid=aggregate_uuid, version=version): + for uuid, version in entries.items(): + async for entry in self._event_repository.select(uuid=uuid, version=version): if entry.transaction_uuid == self.destination_uuid: return False if entry.transaction_uuid != self.uuid: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py index c7c22225d..bdeffee3b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/transactions/repositories/abc.py @@ -140,7 +140,7 @@ async def _select(self, **kwargs) -> AsyncIterator[TransactionEntry]: raise NotImplementedError def write_lock(self) -> Lock: - """Get a write lock. + """Get write lock. :return: An asynchronous context manager. """ diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py index 24f3592c1..a2941bdfc 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_entries.py @@ -30,8 +30,8 @@ def setUp(self) -> None: def test_constructor(self): entry = EventEntry(self.uuid, "example.Car", 0, bytes("car", "utf-8")) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("example.Car", entry.aggregate_name) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("example.Car", entry.name) self.assertEqual(0, entry.version) self.assertEqual(bytes("car", "utf-8"), entry.data) self.assertEqual(None, entry.id) @@ -41,8 +41,8 @@ def test_constructor(self): def test_constructor_extended(self): entry = EventEntry( - aggregate_uuid=self.uuid, - aggregate_name="example.Car", + uuid=self.uuid, + name="example.Car", version=0, data=bytes("car", "utf-8"), id=5678, @@ -50,8 +50,8 @@ def test_constructor_extended(self): created_at=datetime(2020, 10, 13, 8, 45, 32), transaction_uuid=self.transaction_uuid, ) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("example.Car", entry.aggregate_name) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("example.Car", entry.name) self.assertEqual(0, entry.version) self.assertEqual(bytes("car", "utf-8"), entry.data) self.assertEqual(5678, entry.id) @@ -59,14 +59,14 @@ def test_constructor_extended(self): self.assertEqual(datetime(2020, 10, 13, 8, 45, 32), entry.created_at) self.assertEqual(self.transaction_uuid, entry.transaction_uuid) - async def test_from_aggregate_diff(self): + async def test_from_event(self): fields_diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) created_at = current_datetime() - aggregate_diff = Event(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) + event = Event(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) - entry = EventEntry.from_aggregate_diff(aggregate_diff) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("tests.utils.Car", entry.aggregate_name) + entry = EventEntry.from_event(event) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("tests.utils.Car", entry.name) self.assertEqual(None, entry.version) self.assertEqual(fields_diff, FieldDiffContainer.from_avro_bytes(entry.data)) self.assertEqual(None, entry.id) @@ -74,15 +74,15 @@ async def test_from_aggregate_diff(self): self.assertEqual(None, entry.created_at) self.assertEqual(NULL_UUID, entry.transaction_uuid) - async def test_from_aggregate_diff_with_transaction(self): + async def test_from_event_with_transaction(self): transaction = TransactionEntry(self.transaction_uuid) fields_diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) created_at = current_datetime() - aggregate_diff = Event(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) + event = Event(self.uuid, Car.classname, 1, Action.CREATE, created_at, fields_diff) - entry = EventEntry.from_aggregate_diff(aggregate_diff, transaction=transaction) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("tests.utils.Car", entry.aggregate_name) + entry = EventEntry.from_event(event, transaction=transaction) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("tests.utils.Car", entry.name) self.assertEqual(None, entry.version) self.assertEqual(fields_diff, FieldDiffContainer.from_avro_bytes(entry.data)) self.assertEqual(None, entry.id) @@ -93,8 +93,8 @@ async def test_from_aggregate_diff_with_transaction(self): async def test_from_another(self): created_at = datetime(2020, 10, 13, 8, 45, 32) another = EventEntry( - aggregate_uuid=self.uuid, - aggregate_name="example.Car", + uuid=self.uuid, + name="example.Car", version=0, data=bytes("car", "utf-8"), id=5678, @@ -105,8 +105,8 @@ async def test_from_another(self): transaction_uuid = uuid4() entry = EventEntry.from_another(another, transaction_uuid=transaction_uuid) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("example.Car", entry.aggregate_name) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("example.Car", entry.name) self.assertEqual(0, entry.version) self.assertEqual(bytes("car", "utf-8"), entry.data) self.assertEqual(None, entry.id) @@ -114,19 +114,19 @@ async def test_from_another(self): self.assertEqual(created_at, entry.created_at) self.assertEqual(transaction_uuid, entry.transaction_uuid) - def test_aggregate_diff(self): + def test_event(self): field_diff_container = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) version = 1 now = current_datetime() - aggregate_diff = Event(self.uuid, Car.classname, version, Action.CREATE, now, field_diff_container) + event = Event(self.uuid, Car.classname, version, Action.CREATE, now, field_diff_container) - entry = EventEntry.from_aggregate_diff(aggregate_diff) + entry = EventEntry.from_event(event) entry.version = version entry.created_at = now - self.assertEqual(aggregate_diff, entry.aggregate_diff) + self.assertEqual(event, entry.event) def test_field_diff_container(self): field_diff_container = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) @@ -163,14 +163,14 @@ def test_hash(self): def test_repr(self): id_ = 5678 version = 0 - aggregate_name = "example.Car" + name = "example.Car" data = bytes("car", "utf-8") action = Action.CREATE created_at = datetime(2020, 10, 13, 8, 45, 32) transaction_uuid = uuid4() entry = EventEntry( - aggregate_uuid=self.uuid, - aggregate_name=aggregate_name, + uuid=self.uuid, + name=name, version=version, data=data, id=id_, @@ -179,7 +179,7 @@ def test_repr(self): transaction_uuid=transaction_uuid, ) expected = ( - f"EventEntry(aggregate_uuid={self.uuid!r}, aggregate_name={aggregate_name!r}, " + f"EventEntry(uuid={self.uuid!r}, name={name!r}, " f"version={version!r}, len(data)={len(data)!r}, id={id_!r}, action={action!r}, created_at={created_at!r}, " f"transaction_uuid={transaction_uuid!r})" ) @@ -188,14 +188,14 @@ def test_repr(self): def test_as_raw(self): id_ = 5678 version = 0 - aggregate_name = "example.Car" + name = "example.Car" data = bytes("car", "utf-8") action = Action.CREATE created_at = datetime(2020, 10, 13, 8, 45, 32) transaction_uuid = uuid4() entry = EventEntry( - aggregate_uuid=self.uuid, - aggregate_name=aggregate_name, + uuid=self.uuid, + name=name, version=version, data=data, id=id_, @@ -204,8 +204,8 @@ def test_as_raw(self): transaction_uuid=transaction_uuid, ) expected = { - "aggregate_uuid": self.uuid, - "aggregate_name": aggregate_name, + "uuid": self.uuid, + "name": name, "version": version, "data": data, "id": id_, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py index 26bfef0d2..004072357 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_repositories/test_abc.py @@ -151,7 +151,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._send_events = send_events_mock uuid = uuid4() - aggregate_diff = Event( + event = Event( uuid=uuid, name="example.Car", version=2, @@ -163,13 +163,13 @@ async def _fn(e: EventEntry) -> EventEntry: validate_mock = AsyncMock(return_value=True) self.event_repository.validate = validate_mock - observed = await self.event_repository.submit(aggregate_diff) + observed = await self.event_repository.submit(event) self.assertEqual(1, send_events_mock.call_count) self.assertIsInstance(observed, EventEntry) - self.assertEqual(uuid, observed.aggregate_uuid) - self.assertEqual("example.Car", observed.aggregate_name) + self.assertEqual(uuid, observed.uuid) + self.assertEqual("example.Car", observed.name) self.assertEqual(56, observed.version) self.assertEqual(field_diff_container, FieldDiffContainer.from_avro_bytes(observed.data)) self.assertEqual(12, observed.id) @@ -197,7 +197,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._send_events = send_events_mock uuid = uuid4() - aggregate_diff = Event( + event = Event( uuid=uuid, name="example.Car", version=2, @@ -209,13 +209,13 @@ async def _fn(e: EventEntry) -> EventEntry: validate_mock = AsyncMock(return_value=True) self.event_repository.validate = validate_mock - observed = await self.event_repository.submit(aggregate_diff) + observed = await self.event_repository.submit(event) self.assertEqual(0, send_events_mock.call_count) self.assertIsInstance(observed, EventEntry) - self.assertEqual(uuid, observed.aggregate_uuid) - self.assertEqual("example.Car", observed.aggregate_name) + self.assertEqual(uuid, observed.uuid) + self.assertEqual("example.Car", observed.name) self.assertEqual(56, observed.version) self.assertEqual(field_diff_container, FieldDiffContainer.from_avro_bytes(observed.data)) self.assertEqual(12, observed.id) @@ -238,7 +238,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._submit = submit_mock uuid = uuid4() - aggregate_diff = Event( + event = Event( uuid=uuid, name="example.Car", version=2, @@ -250,7 +250,7 @@ async def _fn(e: EventEntry) -> EventEntry: validate_mock = AsyncMock(return_value=True) self.event_repository.validate = validate_mock - await self.event_repository.submit(aggregate_diff) + await self.event_repository.submit(event) observed = self.broker_publisher.messages @@ -297,7 +297,7 @@ async def _fn(e: EventEntry) -> EventEntry: self.event_repository._submit = submit_mock uuid = uuid4() - aggregate_diff = EventEntry.from_aggregate_diff( + event = EventEntry.from_event( Event( uuid=uuid, name="example.Car", @@ -312,7 +312,7 @@ async def _fn(e: EventEntry) -> EventEntry: validate_mock = AsyncMock(return_value=True) self.event_repository.validate = validate_mock - await self.event_repository.submit(aggregate_diff) + await self.event_repository.submit(event) observed = self.broker_publisher.messages @@ -333,8 +333,8 @@ async def test_submit_raises_conflict(self): await self.event_repository.submit(entry) async def test_submit_context_var(self): - mocked_aggregate_diff = AsyncMock() - mocked_aggregate_diff.action = Action.CREATE + mocked_event = AsyncMock() + mocked_event.action = Action.CREATE async def _fn(entry): self.assertEqual(True, IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.get()) @@ -344,13 +344,13 @@ async def _fn(entry): self.event_repository._submit = mocked_submit self.assertEqual(False, IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.get()) - await self.event_repository.submit(mocked_aggregate_diff) + await self.event_repository.submit(mocked_event) self.assertEqual(False, IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.get()) self.assertEqual(1, mocked_submit.call_count) async def test_validate_true(self): - aggregate_uuid = uuid4() + uuid = uuid4() transaction_uuid = uuid4() events = [] @@ -362,12 +362,12 @@ async def test_validate_true(self): select_transaction_mock = MagicMock(return_value=FakeAsyncIterator(transactions)) self.transaction_repository.select = select_transaction_mock - entry = EventEntry(aggregate_uuid, "example.Car") + entry = EventEntry(uuid, "example.Car") self.assertTrue(await self.event_repository.validate(entry)) self.assertEqual( - [call(aggregate_uuid=aggregate_uuid, transaction_uuid_in=(transaction_uuid,))], + [call(uuid=uuid, transaction_uuid_in=(transaction_uuid,))], select_event_mock.call_args_list, ) @@ -383,7 +383,7 @@ async def test_validate_true(self): ) async def test_validate_with_skip(self): - aggregate_uuid = uuid4() + uuid = uuid4() transaction_uuid = uuid4() another_transaction_uuid = uuid4() @@ -396,7 +396,7 @@ async def test_validate_with_skip(self): select_transaction_mock = MagicMock(return_value=FakeAsyncIterator(transactions)) self.transaction_repository.select = select_transaction_mock - entry = EventEntry(aggregate_uuid, "example.Car") + entry = EventEntry(uuid, "example.Car") self.assertTrue(await self.event_repository.validate(entry, transaction_uuid_ne=transaction_uuid)) self.assertEqual( @@ -411,17 +411,17 @@ async def test_validate_with_skip(self): ) self.assertEqual( - [call(aggregate_uuid=aggregate_uuid, transaction_uuid_in=(another_transaction_uuid,))], + [call(uuid=uuid, transaction_uuid_in=(another_transaction_uuid,))], select_event_mock.call_args_list, ) async def test_validate_false(self): - aggregate_uuid = uuid4() + uuid = uuid4() transaction_uuid = uuid4() events = [ - EventEntry(aggregate_uuid, "example.Car", 1), - EventEntry(aggregate_uuid, "example.Car", 2, transaction_uuid=transaction_uuid), + EventEntry(uuid, "example.Car", 1), + EventEntry(uuid, "example.Car", 2, transaction_uuid=transaction_uuid), ] transactions = [TransactionEntry(transaction_uuid, TransactionStatus.RESERVED)] @@ -431,12 +431,12 @@ async def test_validate_false(self): select_transaction_mock = MagicMock(return_value=FakeAsyncIterator(transactions)) self.transaction_repository.select = select_transaction_mock - entry = EventEntry(aggregate_uuid, "example.Car") + entry = EventEntry(uuid, "example.Car") self.assertFalse(await self.event_repository.validate(entry)) self.assertEqual( - [call(aggregate_uuid=aggregate_uuid, transaction_uuid_in=(transaction_uuid,))], + [call(uuid=uuid, transaction_uuid_in=(transaction_uuid,))], select_event_mock.call_args_list, ) @@ -464,20 +464,18 @@ async def test_select(self): mock = MagicMock(return_value=FakeAsyncIterator(range(5))) self.event_repository._select = mock - aggregate_uuid = uuid4() - aggregate_name = "path.to.Product" + uuid = uuid4() + name = "path.to.Product" transaction_uuid = uuid4() - iterable = self.event_repository.select( - aggregate_uuid=aggregate_uuid, aggregate_name=aggregate_name, id_gt=56, transaction_uuid=transaction_uuid - ) + iterable = self.event_repository.select(uuid=uuid, name=name, id_gt=56, transaction_uuid=transaction_uuid) observed = [a async for a in iterable] self.assertEqual(list(range(5)), observed) self.assertEqual(1, mock.call_count) args = call( - aggregate_uuid=aggregate_uuid, - aggregate_name=aggregate_name, + uuid=uuid, + name=name, version=None, version_lt=None, version_gt=None, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py index b949f15d1..d41042910 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_exceptions.py @@ -22,10 +22,10 @@ def test_repository(self): def test_snapshot(self): self.assertTrue(issubclass(SnapshotRepositoryException, AggregateException)) - def test_snapshot_aggregate_not_found(self): + def test_snapshot_not_found(self): self.assertTrue(issubclass(NotFoundException, SnapshotRepositoryException)) - def test_snapshot_deleted_aggregate(self): + def test_snapshot_already_deleted(self): self.assertTrue(issubclass(AlreadyDeletedException, SnapshotRepositoryException)) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py index 8e71ad5ed..1a8583bad 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py @@ -55,26 +55,26 @@ def test_simplified_name(self): def test_total_ordering(self): observed = [ - Event.from_aggregate(Car(3, "blue", version=4)), - Event.from_aggregate(Car(3, "blue", version=1)), - Event.from_aggregate(Car(3, "blue", version=3)), - Event.from_aggregate(Car(3, "blue", version=2)), + Event.from_root_entity(Car(3, "blue", version=4)), + Event.from_root_entity(Car(3, "blue", version=1)), + Event.from_root_entity(Car(3, "blue", version=3)), + Event.from_root_entity(Car(3, "blue", version=2)), ] observed.sort() expected = [ - Event.from_aggregate(Car(3, "blue", version=1)), - Event.from_aggregate(Car(3, "blue", version=2)), - Event.from_aggregate(Car(3, "blue", version=3)), - Event.from_aggregate(Car(3, "blue", version=4)), + Event.from_root_entity(Car(3, "blue", version=1)), + Event.from_root_entity(Car(3, "blue", version=2)), + Event.from_root_entity(Car(3, "blue", version=3)), + Event.from_root_entity(Car(3, "blue", version=4)), ] self.assertEqual(expected, observed) - def test_from_aggregate(self): - observed = Event.from_aggregate(self.initial) + def test_from_root_entity(self): + observed = Event.from_root_entity(self.initial) self.assertEqual(self.diff, observed) - def test_from_deleted_aggregate(self): + def test_from_deleted_root_entity(self): expected = Event( uuid=self.uuid, name=Car.classname, @@ -83,7 +83,7 @@ def test_from_deleted_aggregate(self): created_at=self.initial.updated_at, fields_diff=FieldDiffContainer.empty(), ) - observed = Event.from_deleted_aggregate(self.initial) + observed = Event.from_deleted_root_entity(self.initial) self.assertEqual(expected, observed) def test_from_difference(self): diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py index 3a05ca530..c3501d154 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_abc.py @@ -76,7 +76,7 @@ async def test_get(self): self.assertEqual(call(), self.synchronize_mock.call_args) self.assertEqual(1, self.get_mock.call_count) - args = call(aggregate_name=self.classname, uuid=uuid, transaction=transaction) + args = call(name=self.classname, uuid=uuid, transaction=transaction) self.assertEqual(args, self.get_mock.call_args) async def test_get_transaction_null(self): @@ -106,7 +106,7 @@ async def test_find(self): self.assertEqual(1, self.find_mock.call_count) args = call( - aggregate_name=self.classname, + name=self.classname, condition=Condition.TRUE, ordering=Ordering.ASC("name"), limit=10, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_entries.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_entries.py index 2224ee51b..8e2ee0367 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_entries.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_entries.py @@ -36,8 +36,8 @@ def tearDown(self) -> None: def test_constructor(self): entry = SnapshotEntry(self.uuid, "example.Car", 0, self.schema, self.data) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("example.Car", entry.aggregate_name) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("example.Car", entry.name) self.assertEqual(0, entry.version) self.assertEqual(self.schema, entry.schema) self.assertEqual(self.data, entry.data) @@ -54,20 +54,20 @@ def test_constructor_extended(self): datetime(2020, 1, 10, 4, 23), datetime(2020, 1, 10, 4, 25), ) - self.assertEqual(self.uuid, entry.aggregate_uuid) - self.assertEqual("example.Car", entry.aggregate_name) + self.assertEqual(self.uuid, entry.uuid) + self.assertEqual("example.Car", entry.name) self.assertEqual(0, entry.version) self.assertEqual(self.schema, entry.schema) self.assertEqual(self.data, entry.data) self.assertEqual(datetime(2020, 1, 10, 4, 23), entry.created_at) self.assertEqual(datetime(2020, 1, 10, 4, 25), entry.updated_at) - def test_from_aggregate(self): + def test_from_root_entity(self): car = Car(3, "blue", uuid=self.uuid, version=1) with patch("minos.common.AvroSchemaEncoder.generate_random_str", return_value="hello"): - entry = SnapshotEntry.from_aggregate(car) - self.assertEqual(car.uuid, entry.aggregate_uuid) - self.assertEqual(car.classname, entry.aggregate_name) + entry = SnapshotEntry.from_root_entity(car) + self.assertEqual(car.uuid, entry.uuid) + self.assertEqual(car.classname, entry.name) self.assertEqual(car.version, entry.version) self.assertEqual(car.avro_schema, entry.schema) self.assertEqual({"color": "blue", "doors": 3, "owner": None}, entry.data) @@ -79,26 +79,26 @@ def test_equals(self): b = SnapshotEntry(self.uuid, "example.Car", 0, self.schema, self.data) self.assertEqual(a, b) - def test_aggregate_cls(self): + def test_type_(self): car = Car(3, "blue", uuid=self.uuid, version=1) - entry = SnapshotEntry.from_aggregate(car) - self.assertEqual(Car, entry.aggregate_cls) + entry = SnapshotEntry.from_root_entity(car) + self.assertEqual(Car, entry.type_) - def test_aggregate(self): + def test_build(self): car = Car(3, "blue", uuid=self.uuid, version=1) - entry = SnapshotEntry.from_aggregate(car) - self.assertEqual(car, entry.build_aggregate()) + entry = SnapshotEntry.from_root_entity(car) + self.assertEqual(car, entry.build()) def test_repr(self): - aggregate_name = "example.Car" + name = "example.Car" version = 0 created_at = datetime(2020, 1, 10, 4, 23) updated_at = datetime(2020, 1, 10, 4, 25) transaction_uuid = uuid4() entry = SnapshotEntry( - aggregate_uuid=self.uuid, - aggregate_name=aggregate_name, + uuid=self.uuid, + name=name, version=version, schema=self.schema, data=self.data, @@ -108,7 +108,7 @@ def test_repr(self): ) expected = ( - f"SnapshotEntry(aggregate_uuid={self.uuid!r}, aggregate_name={aggregate_name!r}, version={version!r}, " + f"SnapshotEntry(uuid={self.uuid!r}, name={name!r}, version={version!r}, " f"schema={self.schema!r}, data={self.data!r}, created_at={created_at!r}, updated_at={updated_at!r}, " f"transaction_uuid={transaction_uuid!r})" ) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py index 5abb33e8e..c37257891 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_memory.py @@ -49,25 +49,25 @@ async def asyncSetUp(self): async def _populate(self): diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) # noinspection PyTypeChecker - aggregate_name: str = Car.classname - await self.event_repository.create(EventEntry(self.uuid_1, aggregate_name, 1, diff.avro_bytes)) - await self.event_repository.update(EventEntry(self.uuid_1, aggregate_name, 2, diff.avro_bytes)) - await self.event_repository.create(EventEntry(self.uuid_2, aggregate_name, 1, diff.avro_bytes)) - await self.event_repository.update(EventEntry(self.uuid_1, aggregate_name, 3, diff.avro_bytes)) - await self.event_repository.delete(EventEntry(self.uuid_1, aggregate_name, 4)) - await self.event_repository.update(EventEntry(self.uuid_2, aggregate_name, 2, diff.avro_bytes)) + name: str = Car.classname + await self.event_repository.create(EventEntry(self.uuid_1, name, 1, diff.avro_bytes)) + await self.event_repository.update(EventEntry(self.uuid_1, name, 2, diff.avro_bytes)) + await self.event_repository.create(EventEntry(self.uuid_2, name, 1, diff.avro_bytes)) + await self.event_repository.update(EventEntry(self.uuid_1, name, 3, diff.avro_bytes)) + await self.event_repository.delete(EventEntry(self.uuid_1, name, 4)) + await self.event_repository.update(EventEntry(self.uuid_2, name, 2, diff.avro_bytes)) await self.event_repository.update( - EventEntry(self.uuid_2, aggregate_name, 3, diff.avro_bytes, transaction_uuid=self.transaction_1) + EventEntry(self.uuid_2, name, 3, diff.avro_bytes, transaction_uuid=self.transaction_1) ) await self.event_repository.delete( - EventEntry(self.uuid_2, aggregate_name, 3, bytes(), transaction_uuid=self.transaction_2) + EventEntry(self.uuid_2, name, 3, bytes(), transaction_uuid=self.transaction_2) ) await self.event_repository.update( - EventEntry(self.uuid_2, aggregate_name, 4, diff.avro_bytes, transaction_uuid=self.transaction_1) + EventEntry(self.uuid_2, name, 4, diff.avro_bytes, transaction_uuid=self.transaction_1) ) - await self.event_repository.create(EventEntry(self.uuid_3, aggregate_name, 1, diff.avro_bytes)) + await self.event_repository.create(EventEntry(self.uuid_3, name, 1, diff.avro_bytes)) await self.event_repository.delete( - EventEntry(self.uuid_2, aggregate_name, 3, bytes(), transaction_uuid=self.transaction_3) + EventEntry(self.uuid_2, name, 3, bytes(), transaction_uuid=self.transaction_3) ) await self.transaction_repository.submit( TransactionEntry(self.transaction_1, TransactionStatus.PENDING, await self.event_repository.offset) @@ -348,9 +348,9 @@ def _assert_equal_snapshot_entries(self, expected: list[SnapshotEntry], observed if exp.data is None: with self.assertRaises(AlreadyDeletedException): # noinspection PyStatementEffect - obs.build_aggregate() + obs.build() else: - self.assertEqual(exp.build_aggregate(), obs.build_aggregate()) + self.assertEqual(exp.build(), obs.build()) self.assertIsInstance(obs.created_at, datetime) self.assertIsInstance(obs.updated_at, datetime) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py index 549fdaf55..3e6bcb4bc 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_api.py @@ -57,7 +57,7 @@ async def test_get(self): self.assertEqual(call(), self.dispatch_mock.call_args) self.assertEqual(1, self.get_mock.call_count) - args = call(aggregate_name=self.classname, uuid=uuid, transaction=transaction) + args = call(name=self.classname, uuid=uuid, transaction=transaction) self.assertEqual(args, self.get_mock.call_args) async def test_find(self): @@ -73,7 +73,7 @@ async def test_find(self): self.assertEqual(1, self.find_mock.call_count) args = call( - aggregate_name=self.classname, + name=self.classname, condition=Condition.TRUE, ordering=Ordering.ASC("name"), limit=10, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py index e66f4c63e..b9afa3ef8 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_queries.py @@ -45,7 +45,7 @@ def setUp(self) -> None: super().setUp() self.classname = "path.to.Product" self.base_parameters = { - "aggregate_name": self.classname, + "name": self.classname, "transaction_uuid_1": NULL_UUID, } self.base_select = _SELECT_ENTRIES_QUERY.format( @@ -56,7 +56,7 @@ def setUp(self) -> None: def test_constructor(self): qb = PostgreSqlSnapshotQueryBuilder(self.classname, Condition.TRUE) - self.assertEqual(self.classname, qb.aggregate_name) + self.assertEqual(self.classname, qb.name) self.assertEqual(Condition.TRUE, qb.condition) self.assertEqual(None, qb.ordering) self.assertEqual(None, qb.limit) @@ -67,7 +67,7 @@ def test_constructor_full(self): qb = PostgreSqlSnapshotQueryBuilder( self.classname, Condition.TRUE, Ordering.ASC("name"), 10, transaction_uuids, True ) - self.assertEqual(self.classname, qb.aggregate_name) + self.assertEqual(self.classname, qb.name) self.assertEqual(Condition.TRUE, qb.condition) self.assertEqual(Ordering.ASC("name"), qb.ordering) self.assertEqual(10, qb.limit) @@ -146,7 +146,7 @@ async def test_build_fixed_uuid(self): with patch("minos.aggregate.PostgreSqlSnapshotQueryBuilder.generate_random_str", side_effect=["hello"]): observed = PostgreSqlSnapshotQueryBuilder(self.classname, condition).build() - expected_query = SQL(" WHERE ").join([self.base_select, SQL('("aggregate_uuid" = %(hello)s)')]) + expected_query = SQL(" WHERE ").join([self.base_select, SQL('("uuid" = %(hello)s)')]) expected_parameters = {"hello": str(uuid)} | self.base_parameters self.assertEqual(await self._flatten_query(expected_query), await self._flatten_query(observed[0])) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py index 2427bb7ce..032536e7b 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_readers.py @@ -59,26 +59,26 @@ async def asyncTearDown(self): async def _populate(self): diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) # noinspection PyTypeChecker - aggregate_name: str = Car.classname - - await self.event_repository.create(EventEntry(self.uuid_1, aggregate_name, 1, diff.avro_bytes)) - await self.event_repository.update(EventEntry(self.uuid_1, aggregate_name, 2, diff.avro_bytes)) - await self.event_repository.create(EventEntry(self.uuid_2, aggregate_name, 1, diff.avro_bytes)) - await self.event_repository.update(EventEntry(self.uuid_1, aggregate_name, 3, diff.avro_bytes)) - await self.event_repository.delete(EventEntry(self.uuid_1, aggregate_name, 4)) - await self.event_repository.update(EventEntry(self.uuid_2, aggregate_name, 2, diff.avro_bytes)) + name: str = Car.classname + + await self.event_repository.create(EventEntry(self.uuid_1, name, 1, diff.avro_bytes)) + await self.event_repository.update(EventEntry(self.uuid_1, name, 2, diff.avro_bytes)) + await self.event_repository.create(EventEntry(self.uuid_2, name, 1, diff.avro_bytes)) + await self.event_repository.update(EventEntry(self.uuid_1, name, 3, diff.avro_bytes)) + await self.event_repository.delete(EventEntry(self.uuid_1, name, 4)) + await self.event_repository.update(EventEntry(self.uuid_2, name, 2, diff.avro_bytes)) await self.event_repository.update( - EventEntry(self.uuid_2, aggregate_name, 3, diff.avro_bytes, transaction_uuid=self.transaction_1) + EventEntry(self.uuid_2, name, 3, diff.avro_bytes, transaction_uuid=self.transaction_1) ) await self.event_repository.delete( - EventEntry(self.uuid_2, aggregate_name, 3, bytes(), transaction_uuid=self.transaction_2) + EventEntry(self.uuid_2, name, 3, bytes(), transaction_uuid=self.transaction_2) ) await self.event_repository.update( - EventEntry(self.uuid_2, aggregate_name, 4, diff.avro_bytes, transaction_uuid=self.transaction_1) + EventEntry(self.uuid_2, name, 4, diff.avro_bytes, transaction_uuid=self.transaction_1) ) - await self.event_repository.create(EventEntry(self.uuid_3, aggregate_name, 1, diff.avro_bytes)) + await self.event_repository.create(EventEntry(self.uuid_3, name, 1, diff.avro_bytes)) await self.event_repository.delete( - EventEntry(self.uuid_2, aggregate_name, 3, bytes(), transaction_uuid=self.transaction_3) + EventEntry(self.uuid_2, name, 3, bytes(), transaction_uuid=self.transaction_3) ) await self.transaction_repository.submit( TransactionEntry(self.transaction_1, TransactionStatus.PENDING, await self.event_repository.offset) @@ -362,9 +362,9 @@ def _assert_equal_snapshot_entries(self, expected: list[SnapshotEntry], observed if exp.data is None: with self.assertRaises(AlreadyDeletedException): # noinspection PyStatementEffect - obs.build_aggregate() + obs.build() else: - self.assertEqual(exp.build_aggregate(), obs.build_aggregate()) + self.assertEqual(exp.build(), obs.build()) self.assertIsInstance(obs.created_at, datetime) self.assertIsInstance(obs.updated_at, datetime) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py index 4039b54f9..ffebe4e14 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_pg/test_writers.py @@ -69,26 +69,26 @@ async def asyncTearDown(self): async def _populate(self): diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) # noinspection PyTypeChecker - aggregate_name: str = Car.classname - - await self.event_repository.create(EventEntry(self.uuid_1, aggregate_name, 1, diff.avro_bytes)) - await self.event_repository.update(EventEntry(self.uuid_1, aggregate_name, 2, diff.avro_bytes)) - await self.event_repository.create(EventEntry(self.uuid_2, aggregate_name, 1, diff.avro_bytes)) - await self.event_repository.update(EventEntry(self.uuid_1, aggregate_name, 3, diff.avro_bytes)) - await self.event_repository.delete(EventEntry(self.uuid_1, aggregate_name, 4)) - await self.event_repository.update(EventEntry(self.uuid_2, aggregate_name, 2, diff.avro_bytes)) + name: str = Car.classname + + await self.event_repository.create(EventEntry(self.uuid_1, name, 1, diff.avro_bytes)) + await self.event_repository.update(EventEntry(self.uuid_1, name, 2, diff.avro_bytes)) + await self.event_repository.create(EventEntry(self.uuid_2, name, 1, diff.avro_bytes)) + await self.event_repository.update(EventEntry(self.uuid_1, name, 3, diff.avro_bytes)) + await self.event_repository.delete(EventEntry(self.uuid_1, name, 4)) + await self.event_repository.update(EventEntry(self.uuid_2, name, 2, diff.avro_bytes)) await self.event_repository.update( - EventEntry(self.uuid_2, aggregate_name, 3, diff.avro_bytes, transaction_uuid=self.transaction_1) + EventEntry(self.uuid_2, name, 3, diff.avro_bytes, transaction_uuid=self.transaction_1) ) await self.event_repository.delete( - EventEntry(self.uuid_2, aggregate_name, 3, bytes(), transaction_uuid=self.transaction_2) + EventEntry(self.uuid_2, name, 3, bytes(), transaction_uuid=self.transaction_2) ) await self.event_repository.update( - EventEntry(self.uuid_2, aggregate_name, 4, diff.avro_bytes, transaction_uuid=self.transaction_1) + EventEntry(self.uuid_2, name, 4, diff.avro_bytes, transaction_uuid=self.transaction_1) ) - await self.event_repository.create(EventEntry(self.uuid_3, aggregate_name, 1, diff.avro_bytes)) + await self.event_repository.create(EventEntry(self.uuid_3, name, 1, diff.avro_bytes)) await self.event_repository.delete( - EventEntry(self.uuid_2, aggregate_name, 3, bytes(), transaction_uuid=self.transaction_3) + EventEntry(self.uuid_2, name, 3, bytes(), transaction_uuid=self.transaction_3) ) await self.transaction_repository.submit( TransactionEntry(self.transaction_1, TransactionStatus.PENDING, await self.event_repository.offset) @@ -129,7 +129,7 @@ async def test_dispatch(self): # noinspection PyTypeChecker expected = [ SnapshotEntry(self.uuid_1, Car.classname, 4), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -139,7 +139,7 @@ async def test_dispatch(self): updated_at=observed[1].updated_at, ) ), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -168,7 +168,7 @@ async def test_dispatch_first_transaction(self): # noinspection PyTypeChecker expected = [ SnapshotEntry(self.uuid_1, Car.classname, 4), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -178,7 +178,7 @@ async def test_dispatch_first_transaction(self): updated_at=observed[1].updated_at, ) ), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -208,7 +208,7 @@ async def test_dispatch_second_transaction(self): expected = [ SnapshotEntry(self.uuid_1, Car.classname, 4), SnapshotEntry(self.uuid_2, Car.classname, 4), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -237,7 +237,7 @@ async def test_dispatch_third_transaction(self): # noinspection PyTypeChecker expected = [ SnapshotEntry(self.uuid_1, Car.classname, 4), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -247,7 +247,7 @@ async def test_dispatch_third_transaction(self): updated_at=observed[1].updated_at, ) ), - SnapshotEntry.from_aggregate( + SnapshotEntry.from_root_entity( Car( 3, "blue", @@ -268,24 +268,24 @@ async def test_is_synced(self): async def test_dispatch_ignore_previous_version(self): diff = FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]) # noinspection PyTypeChecker - aggregate_name: str = Car.classname + name: str = Car.classname condition = Condition.EQUAL("uuid", self.uuid_1) async def _fn(*args, **kwargs): - yield EventEntry(self.uuid_1, aggregate_name, 1, diff.avro_bytes, 1, Action.CREATE, current_datetime()) - yield EventEntry(self.uuid_1, aggregate_name, 3, diff.avro_bytes, 2, Action.CREATE, current_datetime()) - yield EventEntry(self.uuid_1, aggregate_name, 2, diff.avro_bytes, 3, Action.CREATE, current_datetime()) + yield EventEntry(self.uuid_1, name, 1, diff.avro_bytes, 1, Action.CREATE, current_datetime()) + yield EventEntry(self.uuid_1, name, 3, diff.avro_bytes, 2, Action.CREATE, current_datetime()) + yield EventEntry(self.uuid_1, name, 2, diff.avro_bytes, 3, Action.CREATE, current_datetime()) self.event_repository.select = MagicMock(side_effect=_fn) await self.writer.dispatch() - observed = [v async for v in self.reader.find_entries(aggregate_name, condition)] + observed = [v async for v in self.reader.find_entries(name, condition)] # noinspection PyTypeChecker expected = [ SnapshotEntry( - aggregate_uuid=self.uuid_1, - aggregate_name=aggregate_name, + uuid=self.uuid_1, + name=name, version=3, schema=Car.avro_schema, data=Car(3, "blue", uuid=self.uuid_1, version=1).avro_data, @@ -301,9 +301,9 @@ def _assert_equal_snapshot_entries(self, expected: list[SnapshotEntry], observed if exp.data is None: with self.assertRaises(AlreadyDeletedException): # noinspection PyStatementEffect - obs.build_aggregate() + obs.build() else: - self.assertEqual(exp.build_aggregate(), obs.build_aggregate()) + self.assertEqual(exp.build(), obs.build()) self.assertIsInstance(obs.created_at, datetime) self.assertIsInstance(obs.updated_at, datetime) @@ -318,8 +318,8 @@ async def test_dispatch_with_offset(self): # noinspection PyTypeChecker entry = EventEntry( - aggregate_uuid=self.uuid_3, - aggregate_name=Car.classname, + uuid=self.uuid_3, + name=Car.classname, data=FieldDiffContainer([FieldDiff("doors", int, 3), FieldDiff("color", str, "blue")]).avro_bytes, ) await self.event_repository.create(entry) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py index 09df749a5..e3c98eeb9 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_snapshots/test_services.py @@ -50,21 +50,21 @@ def test_get_enroute(self): observed = SnapshotService.__get_enroute__(self.config) self.assertEqual(expected, observed) - async def test_get_aggregate(self): + async def test_get(self): uuid = uuid4() expected = Agg(uuid) with patch.object(RootEntity, "get", return_value=expected): response = await self.service.__get_one__(InMemoryRequest({"uuid": uuid})) self.assertEqual(expected, await response.content()) - async def test_get_aggregate_raises(self): + async def test_get_raises(self): with self.assertRaises(ResponseException): await self.service.__get_one__(InMemoryRequest()) with patch.object(RootEntity, "get", side_effect=ValueError): with self.assertRaises(ResponseException): await self.service.__get_one__(InMemoryRequest({"uuid": uuid4()})) - async def test_get_aggregates(self): + async def test_get_many(self): uuids = [uuid4(), uuid4()] expected = [Agg(u) for u in uuids] @@ -72,15 +72,15 @@ async def test_get_aggregates(self): response = await self.service.__get_many__(InMemoryRequest({"uuids": uuids})) self.assertEqual(expected, await response.content()) - async def test_get_aggregates_raises(self): + async def test_get_many_raises(self): with self.assertRaises(ResponseException): await self.service.__get_many__(InMemoryRequest()) with patch.object(RootEntity, "get", side_effect=ValueError): with self.assertRaises(ResponseException): await self.service.__get_many__(InMemoryRequest({"uuids": [uuid4()]})) - def test_aggregate_cls(self): - self.assertEqual(Order, self.service.__aggregate_cls__) + def test_type(self): + self.assertEqual(Order, self.service.type_) async def test_synchronize(self): mock = AsyncMock() diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_transactions/test_entries.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_transactions/test_entries.py index 7af58bb05..e6d387c6f 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_transactions/test_entries.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_transactions/test_entries.py @@ -186,7 +186,7 @@ async def test_validate_true(self): self.assertTrue(await transaction.validate()) self.assertEqual( - [call(transaction_uuid=uuid), call(aggregate_uuid=agg_uuid, version=3)], select_event_mock.call_args_list + [call(transaction_uuid=uuid), call(uuid=agg_uuid, version=3)], select_event_mock.call_args_list ) self.assertEqual( [ @@ -295,7 +295,7 @@ async def test_validate_false_already_committed(self): self.assertFalse(await transaction.validate()) self.assertEqual( - [call(transaction_uuid=uuid), call(aggregate_uuid=agg_uuid, version=3)], select_event_mock.call_args_list + [call(transaction_uuid=uuid), call(uuid=agg_uuid, version=3)], select_event_mock.call_args_list ) self.assertEqual( [ @@ -347,7 +347,7 @@ async def test_validate_false_already_reserved(self): self.assertFalse(await transaction.validate()) self.assertEqual( - [call(transaction_uuid=uuid), call(aggregate_uuid=agg_uuid, version=3)], select_event_mock.call_args_list + [call(transaction_uuid=uuid), call(uuid=agg_uuid, version=3)], select_event_mock.call_args_list ) self.assertEqual( [ diff --git a/packages/core/minos-microservice-aggregate/tests/testcases/event_repository.py b/packages/core/minos-microservice-aggregate/tests/testcases/event_repository.py index 89dd611d6..c97c85b42 100644 --- a/packages/core/minos-microservice-aggregate/tests/testcases/event_repository.py +++ b/packages/core/minos-microservice-aggregate/tests/testcases/event_repository.py @@ -60,8 +60,8 @@ def assert_equal_repository_entries(self, expected: list[EventEntry], observed: for e, o in zip(expected, observed): self.assertEqual(type(e), type(o)) - self.assertEqual(e.aggregate_uuid, o.aggregate_uuid) - self.assertEqual(e.aggregate_name, o.aggregate_name) + self.assertEqual(e.uuid, o.uuid) + self.assertEqual(e.name, o.name) self.assertEqual(e.version, o.version) self.assertEqual(e.data, o.data) self.assertEqual(e.id, o.id) @@ -76,8 +76,8 @@ async def test_generate_uuid(self): await self.event_repository.create(EventEntry(NULL_UUID, "example.Car", 1, bytes("foo", "utf-8"))) observed = [v async for v in self.event_repository.select()] self.assertEqual(1, len(observed)) - self.assertIsInstance(observed[0].aggregate_uuid, UUID) - self.assertNotEqual(NULL_UUID, observed[0].aggregate_uuid) + self.assertIsInstance(observed[0].uuid, UUID) + self.assertNotEqual(NULL_UUID, observed[0].uuid) async def test_submit(self): await self.event_repository.submit(EventEntry(self.uuid, "example.Car", action=Action.CREATE)) @@ -223,14 +223,14 @@ async def test_select_id_ge(self): observed = [v async for v in self.event_repository.select(id_ge=5)] self.assert_equal_repository_entries(expected, observed) - async def test_select_aggregate_uuid(self): + async def test_select_uuid(self): expected = [self.entries[2], self.entries[5], self.entries[7], self.entries[8], self.entries[9]] - observed = [v async for v in self.event_repository.select(aggregate_uuid=self.uuid_2)] + observed = [v async for v in self.event_repository.select(uuid=self.uuid_2)] self.assert_equal_repository_entries(expected, observed) - async def test_select_aggregate_name(self): + async def test_select_name(self): expected = [self.entries[6]] - observed = [v async for v in self.event_repository.select(aggregate_name="example.MotorCycle")] + observed = [v async for v in self.event_repository.select(name="example.MotorCycle")] self.assert_equal_repository_entries(expected, observed) async def test_select_version(self): @@ -301,7 +301,5 @@ async def test_select_transaction_uuid_in(self): async def test_select_combined(self): expected = [self.entries[2], self.entries[5], self.entries[7], self.entries[8], self.entries[9]] - observed = [ - v async for v in self.event_repository.select(aggregate_name="example.Car", aggregate_uuid=self.uuid_2) - ] + observed = [v async for v in self.event_repository.select(name="example.Car", uuid=self.uuid_2)] self.assert_equal_repository_entries(expected, observed) diff --git a/packages/core/minos-microservice-cqrs/tests/utils.py b/packages/core/minos-microservice-cqrs/tests/utils.py index dc34e3cae..a70c6b4cf 100644 --- a/packages/core/minos-microservice-cqrs/tests/utils.py +++ b/packages/core/minos-microservice-cqrs/tests/utils.py @@ -7,9 +7,9 @@ ) from minos.aggregate import ( - RootEntity, ExternalEntity, Ref, + RootEntity, ) from minos.cqrs import ( CommandService, From a01c57987ccbfcd06468adab296ce5579372561c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 08:56:15 +0100 Subject: [PATCH 41/97] ISSUE #121 * Rename variables (2). --- .../minos/aggregate/models/aggregates.py | 13 +++---- .../aggregate/models/diffs/aggregates.py | 37 +++++++++---------- .../minos/aggregate/snapshots/abc.py | 9 +++-- .../minos/aggregate/snapshots/entries.py | 24 ++++++------ .../minos/aggregate/snapshots/memory.py | 31 ++++++++-------- .../minos/aggregate/snapshots/pg/api.py | 3 +- .../minos/aggregate/snapshots/pg/readers.py | 11 +++--- .../minos/aggregate/snapshots/pg/writers.py | 16 ++++---- .../minos/aggregate/snapshots/services.py | 24 ++++++------ 9 files changed, 84 insertions(+), 84 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py index 0b9100292..ff9cd9282 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py @@ -91,7 +91,7 @@ async def get( :param uuid: The identifier of the instance. :param _snapshot: Snapshot to be set to the root entity. - :return: A list of aggregate instances. + :return: A ``RootEntity`` instance. """ if _snapshot is None or isinstance(_snapshot, Provide): raise NotProvidedException("A snapshot instance is required.") @@ -116,17 +116,16 @@ async def find( is to retrieve them without any order pattern. :param limit: Optional argument to return only a subset of instances. The default behaviour is to return all the instances that meet the given condition. - :param _snapshot: Snapshot to be set to the aggregate. - :return: A list of aggregate instances. - :return: An aggregate instance. + :param _snapshot: Snapshot to be set to the instances. + :return: An asynchronous iterator of ``RootEntity`` instances. """ if _snapshot is None or isinstance(_snapshot, Provide): raise NotProvidedException("A snapshot instance is required.") # noinspection PyTypeChecker iterable = _snapshot.find(cls.classname, condition, ordering, limit, _snapshot=_snapshot, **kwargs) # noinspection PyTypeChecker - async for aggregate in iterable: - yield aggregate + async for instance in iterable: + yield instance @classmethod async def create(cls: Type[T], *args, **kwargs) -> T: @@ -250,7 +249,7 @@ def _update_from_repository_entry(self, entry: EventEntry) -> None: self.updated_at = entry.created_at def diff(self, another: RootEntity) -> Event: - """Compute the difference with another aggregate. + """Compute the difference with another instance. Both ``RootEntity`` instances (``self`` and ``another``) must share the same ``uuid`` value. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py index e27da13bc..0b0351786 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py @@ -96,19 +96,18 @@ def get_all(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, @classmethod def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.UPDATE) -> Event: - """Build an ``Event`` instance from the difference of two aggregates. + """Build an ``Event`` instance from the difference of two instances. :param a: One ``RootEntity`` instance. :param b: Another ``RootEntity`` instance. - :param action: The action to that generates the aggregate difference. + :param action: The action that generates the ``RootEntity`` difference. :return: An ``Event`` instance. """ logger.debug(f"Computing the {cls!r} between {a!r} and {b!r}...") if a.uuid != b.uuid: raise ValueError( - f"To compute aggregate differences, both arguments must have same identifier. " - f"Obtained: {a.uuid!r} vs {b.uuid!r}" + f"To compute differences, both arguments must have same identifier. Obtained: {a.uuid!r} vs {b.uuid!r}" ) old, new = sorted([a, b], key=attrgetter("version")) @@ -125,38 +124,38 @@ def from_difference(cls, a: RootEntity, b: RootEntity, action: Action = Action.U ) @classmethod - def from_root_entity(cls, root_entity: RootEntity, action: Action = Action.CREATE) -> Event: + def from_root_entity(cls, instance: RootEntity, action: Action = Action.CREATE) -> Event: """Build an ``Event`` from a ``RootEntity`` (considering all fields as differences). - :param root_entity: A ``RootEntity`` instance. - :param action: The action to that generates the aggregate difference. + :param instance: A ``RootEntity`` instance. + :param action: The action that generates the event. :return: An ``Event`` instance. """ - fields_diff = FieldDiffContainer.from_model(root_entity, ignore={"uuid", "version", "created_at", "updated_at"}) + fields_diff = FieldDiffContainer.from_model(instance, ignore={"uuid", "version", "created_at", "updated_at"}) return cls( - uuid=root_entity.uuid, - name=root_entity.classname, - version=root_entity.version, + uuid=instance.uuid, + name=instance.classname, + version=instance.version, action=action, - created_at=root_entity.updated_at, + created_at=instance.updated_at, fields_diff=fields_diff, ) @classmethod - def from_deleted_root_entity(cls, root_entity: RootEntity, action: Action = Action.DELETE) -> Event: + def from_deleted_root_entity(cls, instance: RootEntity, action: Action = Action.DELETE) -> Event: """Build an ``Event`` from a ``RootEntity`` (considering all fields as differences). - :param root_entity: A ``RootEntity`` instance. - :param action: The action to that generates the aggregate difference. + :param instance: A ``RootEntity`` instance. + :param action: The action that generates the event. :return: An ``Event`` instance. """ return cls( - uuid=root_entity.uuid, - name=root_entity.classname, - version=root_entity.version, + uuid=instance.uuid, + name=instance.classname, + version=instance.version, action=action, - created_at=root_entity.updated_at, + created_at=instance.updated_at, fields_diff=FieldDiffContainer.empty(), ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py index 2847e5d73..4a13f3f83 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py @@ -38,11 +38,12 @@ class SnapshotRepository(ABC, MinosSetup): """Base Snapshot class. - The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. + The snapshot provides a direct accessor to the ``RootEntity`` instances stored as events by the event repository + class. """ async def get(self, name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs) -> RootEntity: - """Get an aggregate instance from its identifier. + """Get a ``RootEntity`` instance from its identifier. :param name: Class name of the ``RootEntity``. :param uuid: Identifier of the ``RootEntity``. @@ -104,8 +105,8 @@ async def find( **kwargs, ) - async for aggregate in iterable: - yield aggregate + async for instance in iterable: + yield instance @abstractmethod def _find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py index 716e979f4..851e27c1e 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py @@ -83,25 +83,23 @@ def __init__( self.transaction_uuid = transaction_uuid @classmethod - def from_root_entity(cls, root_entity: RootEntity, **kwargs) -> SnapshotEntry: + def from_root_entity(cls, instance: RootEntity, **kwargs) -> SnapshotEntry: """Build a new instance from a ``RootEntity``. - :param root_entity: The aggregate instance. - :return: A new ``MinosSnapshotEntry`` instance. + :param instance: The ``RootEntity`` instance. + :return: A new ``SnapshotEntry`` instance. """ - data = { - k: v for k, v in root_entity.avro_data.items() if k not in {"uuid", "version", "created_at", "updated_at"} - } + data = {k: v for k, v in instance.avro_data.items() if k not in {"uuid", "version", "created_at", "updated_at"}} # noinspection PyTypeChecker return cls( - uuid=root_entity.uuid, - name=root_entity.classname, - version=root_entity.version, - schema=root_entity.avro_schema, + uuid=instance.uuid, + name=instance.classname, + version=instance.version, + schema=instance.avro_schema, data=data, - created_at=root_entity.created_at, - updated_at=root_entity.updated_at, + created_at=instance.created_at, + updated_at=instance.updated_at, **kwargs, ) @@ -170,7 +168,7 @@ def build(self, **kwargs) -> RootEntity: ) if self.data is None: - raise AlreadyDeletedException(f"The {self.uuid!r} id points to an already deleted aggregate.") + raise AlreadyDeletedException(f"The {self.uuid!r} identifier belongs to an already deleted instance.") data = dict(self.data) data |= { "uuid": self.uuid, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py index dcfc25f63..dbea2ffcd 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py @@ -54,7 +54,8 @@ class InMemorySnapshotRepository(SnapshotRepository): """InMemory Snapshot class. - The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. + The snapshot provides a direct accessor to the ``RootEntity`` instances stored as events by the event repository + class. """ @inject @@ -86,24 +87,24 @@ async def _find( ) -> AsyncIterator[RootEntity]: uuids = {v.uuid async for v in self._event_repository.select(name=name)} - aggregates = list() + instances = list() for uuid in uuids: try: - aggregate = await self.get(name, uuid, **kwargs) + instance = await self.get(name, uuid, **kwargs) except AlreadyDeletedException: continue - if condition.evaluate(aggregate): - aggregates.append(aggregate) + if condition.evaluate(instance): + instances.append(instance) if ordering is not None: - aggregates.sort(key=attrgetter(ordering.by), reverse=ordering.reverse) + instances.sort(key=attrgetter(ordering.by), reverse=ordering.reverse) if limit is not None: - aggregates = aggregates[:limit] + instances = instances[:limit] - for aggregate in aggregates: - yield aggregate + for instance in instances: + yield instance # noinspection PyMethodOverriding async def _get(self, name: str, uuid: UUID, transaction: Optional[TransactionEntry] = None, **kwargs) -> RootEntity: @@ -114,9 +115,9 @@ async def _get(self, name: str, uuid: UUID, transaction: Optional[TransactionEnt raise NotFoundException(f"Not found any entries for the {uuid!r} id.") if entries[-1].action.is_delete: - raise AlreadyDeletedException(f"The {uuid!r} id points to an already deleted aggregate.") + raise AlreadyDeletedException(f"The {uuid!r} identifier belongs to an already deleted instance.") - return self._build_aggregate(entries, **kwargs) + return self._build_instance(entries, **kwargs) async def _get_transaction_uuids(self, transaction: Optional[TransactionEntry]) -> tuple[UUID, ...]: if transaction is None: @@ -150,12 +151,12 @@ async def _get_event_entries(self, name: str, uuid: UUID, transaction_uuids: tup return entries @staticmethod - def _build_aggregate(entries: list[EventEntry], **kwargs) -> RootEntity: + def _build_instance(entries: list[EventEntry], **kwargs) -> RootEntity: cls = entries[0].type_ - aggregate = cls.from_diff(entries[0].event, **kwargs) + instance = cls.from_diff(entries[0].event, **kwargs) for entry in entries[1:]: - aggregate.apply_diff(entry.event) - return aggregate + instance.apply_diff(entry.event) + return instance async def _synchronize(self, **kwargs) -> None: pass diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py index 8e0dd7561..39f591691 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py @@ -31,7 +31,8 @@ class PostgreSqlSnapshotRepository(SnapshotRepository): """PostgreSQL Snapshot class. - The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. + The snapshot provides a direct accessor to the ``RootEntity`` instances stored as events by the event repository + class. """ reader: PostgreSqlSnapshotReader diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py index 46ce6b681..25a5cbcb6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py @@ -48,11 +48,12 @@ class PostgreSqlSnapshotReader(PostgreSqlSnapshotSetup): """PostgreSQL Snapshot class. - The snapshot provides a direct accessor to the aggregate instances stored as events by the event repository class. + The snapshot provides a direct accessor to the ``RootEntity`` instances stored as events by the event repository + class. """ async def get(self, name: str, uuid: UUID, **kwargs) -> RootEntity: - """Get an aggregate instance from its identifier. + """Get a ``RootEntity`` instance from its identifier. :param name: Class name of the ``RootEntity``. :param uuid: Identifier of the ``RootEntity``. @@ -60,8 +61,8 @@ async def get(self, name: str, uuid: UUID, **kwargs) -> RootEntity: :return: The ``RootEntity`` instance. """ snapshot_entry = await self.get_entry(name, uuid, **kwargs) - aggregate = snapshot_entry.build(**kwargs) - return aggregate + instance = snapshot_entry.build(**kwargs) + return instance # noinspection PyUnusedLocal async def get_entry(self, name: str, uuid: UUID, **kwargs) -> SnapshotEntry: @@ -78,7 +79,7 @@ async def get_entry(self, name: str, uuid: UUID, **kwargs) -> SnapshotEntry: name, _EqualCondition("uuid", uuid), **kwargs | {"exclude_deleted": False} ).__anext__() except StopAsyncIteration: - raise NotFoundException(f"Some aggregates could not be found: {uuid!s}") + raise NotFoundException(f"The instance could not be found: {uuid!s}") async def find(self, *args, **kwargs) -> AsyncIterator[RootEntity]: """Find a collection of ``RootEntity`` instances based on a ``Condition``. diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index 52204baac..2e607f419 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -131,13 +131,13 @@ async def _submit_delete(self, event_entry: EventEntry, **kwargs) -> SnapshotEnt return snapshot_entry async def _submit_update_or_create(self, event_entry: EventEntry, **kwargs) -> SnapshotEntry: - aggregate = await self._build_aggregate(event_entry, **kwargs) + instance = await self._build_instance(event_entry, **kwargs) - snapshot_entry = SnapshotEntry.from_root_entity(aggregate, transaction_uuid=event_entry.transaction_uuid) + snapshot_entry = SnapshotEntry.from_root_entity(instance, transaction_uuid=event_entry.transaction_uuid) snapshot_entry = await self._submit_entry(snapshot_entry, **kwargs) return snapshot_entry - async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> RootEntity: + async def _build_instance(self, event_entry: EventEntry, **kwargs) -> RootEntity: diff = event_entry.event try: @@ -145,14 +145,14 @@ async def _build_aggregate(self, event_entry: EventEntry, **kwargs) -> RootEntit except TransactionNotFoundException: transaction = None - aggregate = await self._update_if_exists(diff, transaction=transaction, **kwargs) - return aggregate + instance = await self._update_instance_if_exists(diff, transaction=transaction, **kwargs) + return instance - async def _update_if_exists(self, event: Event, **kwargs) -> RootEntity: + async def _update_instance_if_exists(self, event: Event, **kwargs) -> RootEntity: # noinspection PyBroadException try: # noinspection PyTypeChecker - previous = await self._select_one_aggregate(event.name, event.uuid, **kwargs) + previous = await self._select_one_instance(event.name, event.uuid, **kwargs) except NotFoundException: # noinspection PyTypeChecker cls: Type[RootEntity] = import_module(event.name) @@ -164,7 +164,7 @@ async def _update_if_exists(self, event: Event, **kwargs) -> RootEntity: previous.apply_diff(event) return previous - async def _select_one_aggregate(self, name: str, uuid: UUID, **kwargs) -> RootEntity: + async def _select_one_instance(self, name: str, uuid: UUID, **kwargs) -> RootEntity: snapshot_entry = await self._reader.get_entry(name, uuid, **kwargs) return snapshot_entry.build(**kwargs) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py index 35c817207..836ca6241 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py @@ -71,10 +71,10 @@ def __get_enroute__(cls, config: MinosConfig) -> dict[str, set[EnrouteDecorator] } async def __get_one__(self, request: Request) -> Response: - """Get aggregate. + """Get one ``RootEntity`` instance. - :param request: The ``Request`` instance that contains the aggregate identifier. - :return: A ``Response`` instance containing the requested aggregate. + :param request: The ``Request`` instance that contains the instance identifier. + :return: A ``Response`` instance containing the requested instances. """ try: content = await request.content(model_type=ModelType.build("Query", {"uuid": UUID})) @@ -82,17 +82,17 @@ async def __get_one__(self, request: Request) -> Response: raise ResponseException(f"There was a problem while parsing the given request: {exc!r}") try: - aggregate = await self.type_.get(content["uuid"]) + instance = await self.type_.get(content["uuid"]) except Exception as exc: - raise ResponseException(f"There was a problem while getting the aggregate: {exc!r}") + raise ResponseException(f"There was a problem while getting the instance: {exc!r}") - return Response(aggregate) + return Response(instance) async def __get_many__(self, request: Request) -> Response: - """Get aggregates. + """Get many ``RootEntity`` instances. - :param request: The ``Request`` instance that contains the product identifiers. - :return: A ``Response`` instance containing the requested aggregates. + :param request: The ``Request`` instance that contains the instance identifiers. + :return: A ``Response`` instance containing the requested instances. """ try: content = await request.content(model_type=ModelType.build("Query", {"uuids": list[UUID]})) @@ -100,11 +100,11 @@ async def __get_many__(self, request: Request) -> Response: raise ResponseException(f"There was a problem while parsing the given request: {exc!r}") try: - aggregates = await gather(*(self.type_.get(uuid) for uuid in content["uuids"])) + instances = await gather(*(self.type_.get(uuid) for uuid in content["uuids"])) except Exception as exc: - raise ResponseException(f"There was a problem while getting aggregates: {exc!r}") + raise ResponseException(f"There was a problem while getting the instances: {exc!r}") - return Response(aggregates) + return Response(instances) @cached_property def type_(self) -> type[RootEntity]: From c5cd1a36f55bba1624c1d97d6d7632b57ebd6454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:01:34 +0100 Subject: [PATCH 42/97] ISSUE #121 * Minor change. --- .../minos/aggregate/snapshots/services.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py index 836ca6241..9603bb02e 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py @@ -63,10 +63,10 @@ def __init__( @classmethod def __get_enroute__(cls, config: MinosConfig) -> dict[str, set[EnrouteDecorator]]: - name = config.service.aggregate.rsplit(".", 1)[-1] + simplified_name = config.service.aggregate.rsplit(".", 1)[-1] return { - cls.__get_one__.__name__: {enroute.broker.command(f"Get{name}")}, - cls.__get_many__.__name__: {enroute.broker.command(f"Get{name}s")}, + cls.__get_one__.__name__: {enroute.broker.command(f"Get{simplified_name}")}, + cls.__get_many__.__name__: {enroute.broker.command(f"Get{simplified_name}s")}, cls.__synchronize__.__name__: {enroute.periodic.event("* * * * *")}, } From 7d02fa8c924f4fc1f2016479e7dbbde3acf31c52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:04:42 +0100 Subject: [PATCH 43/97] ISSUE #121 * Rename `aggregates.py` as `events.py`. --- .../minos/aggregate/models/diffs/__init__.py | 2 +- .../minos/aggregate/models/diffs/{aggregates.py => events.py} | 0 .../test_diffs/{test_aggregates.py => test_events.py} | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/{aggregates.py => events.py} (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/{test_aggregates.py => test_events.py} (100%) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py index de1186494..9159a0efb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py @@ -1,4 +1,4 @@ -from .aggregates import ( +from .events import ( Event, ) from .fields import ( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/events.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/aggregates.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/events.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_events.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_aggregates.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_events.py From 98de9911413abe1769839f30ac3659d66983a396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:29:03 +0100 Subject: [PATCH 44/97] ISSUE #121 * Improve module hierarchy for `entities`. --- .../minos/aggregate/models/__init__.py | 16 ++-- .../aggregate/models/entities/__init__.py | 8 ++ .../{entities.py => entities/collections.py} | 15 +--- .../{aggregates.py => entities/models.py} | 35 ++++++-- .../models/{diffs => events}/__init__.py | 6 +- .../models/{diffs => events}/fields.py | 0 .../{diffs/events.py => events/models.py} | 0 .../minos/aggregate/models/refs/__init__.py | 1 - .../minos/aggregate/models/refs/models.py | 12 --- .../{test_diffs => test_entities}/__init__.py | 0 .../test_collections.py} | 81 +++++++------------ .../test_entities/test_models/__init__.py | 0 .../test_entities/test_models/test_base.py | 40 +++++++++ .../test_models/test_external.py | 23 ++++++ .../test_models/test_root}/__init__.py | 0 .../test_models/test_root}/test_base.py | 0 .../test_models/test_root}/test_broker.py | 0 .../test_root}/test_differences.py | 0 .../test_root}/test_not_provided.py | 0 .../test_root}/test_with_postgresql.py | 4 +- .../test_models/test_events/__init__.py | 0 .../test_fields.py | 6 +- .../test_models.py} | 0 .../test_models/test_refs/test_models.py | 20 ----- .../tests/utils.py | 9 ++- 25 files changed, 150 insertions(+), 126 deletions(-) create mode 100644 packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{entities.py => entities/collections.py} (93%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{aggregates.py => entities/models.py} (94%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{diffs => events}/__init__.py (82%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{diffs => events}/fields.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{diffs/events.py => events/models.py} (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_diffs => test_entities}/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_entities.py => test_entities/test_collections.py} (73%) create mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/__init__.py create mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_base.py create mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_external.py rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_aggregates => test_entities/test_models/test_root}/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_aggregates => test_entities/test_models/test_root}/test_base.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_aggregates => test_entities/test_models/test_root}/test_broker.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_aggregates => test_entities/test_models/test_root}/test_differences.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_aggregates => test_entities/test_models/test_root}/test_not_provided.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_aggregates => test_entities/test_models/test_root}/test_with_postgresql.py (98%) create mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/__init__.py rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_diffs => test_events}/test_fields.py (98%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{test_diffs/test_events.py => test_events/test_models.py} (100%) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index 149f23624..2feda4269 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -1,26 +1,24 @@ from .actions import ( Action, ) -from .aggregates import ( - RootEntity, -) from .collections import ( IncrementalSet, IncrementalSetDiff, IncrementalSetDiffEntry, ) -from .diffs import ( +from .entities import ( + Entity, + EntitySet, + ExternalEntity, + RootEntity, +) +from .events import ( Event, FieldDiff, FieldDiffContainer, IncrementalFieldDiff, ) -from .entities import ( - Entity, - EntitySet, -) from .refs import ( - ExternalEntity, Ref, RefExtractor, RefInjector, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py new file mode 100644 index 000000000..38e1f2376 --- /dev/null +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py @@ -0,0 +1,8 @@ +from .collections import ( + EntitySet, +) +from .models import ( + Entity, + ExternalEntity, + RootEntity, +) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py similarity index 93% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py index ed77886eb..3925a7784 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py @@ -16,7 +16,6 @@ ) from uuid import ( UUID, - uuid4, ) from minos.common import ( @@ -28,23 +27,11 @@ SchemaEncoder, ) -from .collections import ( +from ..collections import ( IncrementalSet, IncrementalSetDiff, ) - -class Entity(DeclarativeModel): - """Entity class .""" - - uuid: UUID - - def __init__(self, *args, uuid: Optional[UUID] = None, **kwargs): - if uuid is None: - uuid = uuid4() - super().__init__(uuid, *args, **kwargs) - - T = TypeVar("T", bound=Model) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/models.py similarity index 94% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/models.py index ff9cd9282..53d1a77a4 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/aggregates.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/models.py @@ -14,6 +14,7 @@ ) from uuid import ( UUID, + uuid4, ) from dependency_injector.wiring import ( @@ -24,34 +25,52 @@ from minos.common import ( NULL_DATETIME, NULL_UUID, + DeclarativeModel, NotProvidedException, ) -from ..events import ( +from ...events import ( EventEntry, EventRepository, ) -from ..exceptions import ( +from ...exceptions import ( EventRepositoryException, ) -from ..queries import ( +from ...queries import ( _Condition, _Ordering, ) -from ..snapshots import ( +from ...snapshots import ( SnapshotRepository, ) -from .diffs import ( +from ..events import ( Event, IncrementalFieldDiff, ) -from .entities import ( - Entity, -) logger = logging.getLogger(__name__) +class Entity(DeclarativeModel): + """Entity class.""" + + uuid: UUID + + def __init__(self, *args, uuid: Optional[UUID] = None, **kwargs): + if uuid is None: + uuid = uuid4() + super().__init__(uuid, *args, **kwargs) + + +class ExternalEntity(Entity): + """External Entity class.""" + + version: int + + def __init__(self, uuid: UUID, *args, **kwargs): + super().__init__(uuid=uuid, *args, **kwargs) + + class RootEntity(Entity): """Base Root Entity class.""" diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py similarity index 82% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py index 9159a0efb..4653d4f02 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py @@ -1,8 +1,8 @@ -from .events import ( - Event, -) from .fields import ( FieldDiff, FieldDiffContainer, IncrementalFieldDiff, ) +from .models import ( + Event, +) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/fields.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/fields.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/events.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/diffs/events.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py index 4a64c0223..2d0d3bffa 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py @@ -5,7 +5,6 @@ RefInjector, ) from .models import ( - ExternalEntity, Ref, ) from .resolvers import ( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py index 8b48e6556..e2d60147c 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py @@ -39,22 +39,10 @@ from ...contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, ) -from ..entities import ( - Entity, -) MT = TypeVar("MT", bound=Model) -class ExternalEntity(Entity): - """External Entity class.""" - - version: int - - def __init__(self, uuid: UUID, *args, **kwargs): - super().__init__(uuid=uuid, *args, **kwargs) - - class Ref(DeclarativeModel, UUID, Generic[MT]): """Model Reference.""" diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_collections.py similarity index 73% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_collections.py index d1d627e44..86d2af0bc 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_collections.py @@ -5,92 +5,67 @@ from unittest.mock import ( patch, ) -from uuid import ( - UUID, - uuid4, -) from minos.aggregate import ( Action, - Entity, EntitySet, IncrementalSetDiff, IncrementalSetDiffEntry, ) from minos.common import ( - NULL_UUID, - DeclarativeModel, Model, ) - - -class _Entity(Entity): - """For testing purposes.""" - - name: str - - -class TestEntity(unittest.TestCase): - def test_default(self): - entity = Entity() - self.assertIsInstance(entity, DeclarativeModel) - self.assertIsNot(entity.uuid, NULL_UUID) - self.assertIsInstance(entity.uuid, UUID) - - def test_uuid(self): - uuid = uuid4() - entity = Entity(uuid=uuid) - self.assertIsInstance(entity, DeclarativeModel) - self.assertIsNot(entity.uuid, NULL_UUID) - self.assertEqual(uuid, entity.uuid) +from tests.utils import ( + OrderItem, +) class TestEntitySet(unittest.TestCase): def test_data(self): - raw = {_Entity("John"), _Entity("Michael")} + raw = {OrderItem("John"), OrderItem("Michael")} entities = EntitySet(raw) self.assertEqual({str(v.uuid): v for v in raw}, entities.data) def test_eq_true(self): - raw = {_Entity("John"), _Entity("Michael")} + raw = {OrderItem("John"), OrderItem("Michael")} observed = EntitySet(raw) self.assertEqual(EntitySet(raw), observed) self.assertEqual(raw, observed) self.assertEqual({str(v.uuid): v for v in raw}, observed) def test_eq_false(self): - raw = {_Entity("John"), _Entity("Michael")} + raw = {OrderItem("John"), OrderItem("Michael")} observed = EntitySet(raw) - other = {_Entity("Charlie")} + other = {OrderItem("Charlie")} self.assertNotEqual(EntitySet(other), observed) self.assertNotEqual(other, observed) self.assertNotEqual({str(v.uuid): v for v in other}, observed) self.assertNotEqual(list(raw), observed) def test_len(self): - raw = {_Entity("John"), _Entity("Michael")} + raw = {OrderItem("John"), OrderItem("Michael")} entities = EntitySet(raw) self.assertEqual(2, len(entities)) def test_iter(self): - raw = {_Entity("John"), _Entity("Michael")} + raw = {OrderItem("John"), OrderItem("Michael")} entities = EntitySet(raw) self.assertEqual(raw, set(entities)) def test_contains(self): - raw = [_Entity("John")] + raw = [OrderItem("John")] entities = EntitySet(raw) self.assertIn(raw[0], entities) - self.assertNotIn(_Entity("Charlie"), entities) + self.assertNotIn(OrderItem("Charlie"), entities) self.assertNotIn(1234, entities) def test_add(self): - raw = _Entity("John") + raw = OrderItem("John") entities = EntitySet() entities.add(raw) @@ -98,14 +73,14 @@ def test_add(self): self.assertEqual({raw}, entities) def test_get(self): - raw = _Entity("John") + raw = OrderItem("John") entities = EntitySet() entities.add(raw) self.assertEqual(raw, entities.get(raw.uuid)) def test_remove(self): - raw = [_Entity("John"), _Entity("Michael")] + raw = [OrderItem("John"), OrderItem("Michael")] entities = EntitySet(raw) entities.remove(raw[1]) @@ -113,7 +88,7 @@ def test_remove(self): self.assertEqual({raw[0]}, entities) def test_diff(self): - raw = [_Entity("John"), _Entity("Michael")] + raw = [OrderItem("John"), OrderItem("Michael")] entities = EntitySet(raw) observed = entities.diff(EntitySet([raw[0]])) @@ -122,18 +97,18 @@ def test_diff(self): self.assertEqual(observed, expected) def test_data_cls(self): - raw = [_Entity("John"), _Entity("Michael")] + raw = [OrderItem("John"), OrderItem("Michael")] entities = EntitySet(raw) - self.assertEqual(_Entity, entities.data_cls) + self.assertEqual(OrderItem, entities.data_cls) def test_from_avro(self): - values = {_Entity("John"), _Entity("Michael")} + values = {OrderItem("John"), OrderItem("Michael")} expected = EntitySet(values) schema = [ { "logicalType": "minos.aggregate.models.entities.EntitySet", "type": "array", - "items": _Entity.avro_schema[0], + "items": OrderItem.avro_schema[0], }, ] data = [v.avro_data for v in values] @@ -145,36 +120,36 @@ def test_avro_schema(self): with patch("minos.common.AvroSchemaEncoder.generate_random_str", return_value="hello"): expected = [ { - "logicalType": "minos.aggregate.models.entities.EntitySet", + "logicalType": "minos.aggregate.models.entities.collections.EntitySet", "type": "array", - "items": _Entity.avro_schema[0], + "items": OrderItem.avro_schema[0], }, ] - observed = EntitySet({_Entity("John"), _Entity("Michael")}).avro_schema + observed = EntitySet({OrderItem("John"), OrderItem("Michael")}).avro_schema self.assertEqual(expected, observed) def test_avro_data(self): - values = {_Entity("John"), _Entity("Michael")} + values = {OrderItem("John"), OrderItem("Michael")} expected = sorted([v.avro_data for v in values], key=lambda v: v["uuid"]) observed = EntitySet(values).avro_data self.assertIsInstance(observed, list) self.assertEqual(expected, sorted([v.avro_data for v in values], key=lambda v: v["uuid"])) def test_avro_bytes(self): - expected = EntitySet({_Entity("John"), _Entity("Michael")}) + expected = EntitySet({OrderItem("John"), OrderItem("Michael")}) self.assertEqual(expected, Model.from_avro_bytes(expected.avro_bytes)) class TestEntitySetDiff(unittest.TestCase): def setUp(self) -> None: - self.raw = [_Entity("John"), _Entity("Michael")] + self.raw = [OrderItem("John"), OrderItem("Michael")] self.old = EntitySet(self.raw) - self.clone = [_Entity(name=entity.name, uuid=entity.uuid) for entity in self.raw] + self.clone = [OrderItem(name=entity.name, uuid=entity.uuid) for entity in self.raw] def test_from_difference_create(self): entities = EntitySet(self.clone) - new = _Entity("Charlie") + new = OrderItem("Charlie") entities.add(new) observed = IncrementalSetDiff.from_difference(entities, self.old, get_fn=attrgetter("uuid")) @@ -201,7 +176,7 @@ def test_from_difference_update(self): def test_from_difference_combined(self): entities = EntitySet(self.clone) - new = _Entity("Charlie") + new = OrderItem("Charlie") entities.add(new) removed = self.clone[1] diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_base.py new file mode 100644 index 000000000..69dafbb8b --- /dev/null +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_base.py @@ -0,0 +1,40 @@ +import unittest +from uuid import ( + UUID, + uuid4, +) + +from minos.aggregate import ( + Entity, +) +from minos.common import ( + NULL_UUID, + DeclarativeModel, +) +from tests.utils import ( + OrderItem, +) + + +class TestEntity(unittest.TestCase): + def test_subclass(self): + self.assertTrue(issubclass(Entity, DeclarativeModel)) + + def test_default(self): + entity = OrderItem("foo") + self.assertIsInstance(entity, DeclarativeModel) + self.assertIsNot(entity.uuid, NULL_UUID) + self.assertIsInstance(entity.uuid, UUID) + self.assertEqual("foo", entity.name) + + def test_uuid(self): + uuid = uuid4() + entity = OrderItem("foo", uuid=uuid) + self.assertIsInstance(entity, DeclarativeModel) + self.assertIsNot(entity.uuid, NULL_UUID) + self.assertEqual(uuid, entity.uuid) + self.assertEqual("foo", entity.name) + + +if __name__ == "__main__": + unittest.main() diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_external.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_external.py new file mode 100644 index 000000000..74eb0180d --- /dev/null +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_external.py @@ -0,0 +1,23 @@ +import unittest +from uuid import ( + uuid4, +) + +from tests.utils import ( + Product, +) + + +class TestExternalEntity(unittest.TestCase): + def test_values(self): + uuid = uuid4() + product = Product(uuid, 3, "apple", 3028) + + self.assertEqual(uuid, product.uuid) + self.assertEqual(3, product.version) + self.assertEqual("apple", product.title) + self.assertEqual(3028, product.quantity) + + +if __name__ == "__main__": + unittest.main() diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_base.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_base.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_base.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_broker.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_broker.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_broker.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_differences.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_differences.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_differences.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_not_provided.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_not_provided.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_not_provided.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_not_provided.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_with_postgresql.py similarity index 98% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_with_postgresql.py index d09f07547..726e7cae2 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_aggregates/test_with_postgresql.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_with_postgresql.py @@ -67,7 +67,7 @@ async def test_create_update_delete(self): async def test_entity_set_value_object_set(self): order = await Order.create(products=EntitySet(), reviews=ValueObjectSet()) - item = OrderItem(24) + item = OrderItem("foo") order.products.add(item) await order.save() @@ -75,7 +75,7 @@ async def test_entity_set_value_object_set(self): recovered = await Order.get(order.uuid) self.assertEqual(order, recovered) - item.amount = 36 + item.name = "bar" order.products.add(item) await order.save() diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_fields.py similarity index 98% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_fields.py index e3dcfc6a0..b3371490d 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_fields.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_fields.py @@ -102,7 +102,7 @@ def test_avro_schema(self): "type": { "fields": [{"name": "name", "type": "string"}, {"name": "value", "type": "int"}], "name": "FieldDiff", - "namespace": "minos.aggregate.models.diffs.fields.hola", + "namespace": "minos.aggregate.models.events.fields.hola", "type": "record", }, }, @@ -111,13 +111,13 @@ def test_avro_schema(self): "type": { "fields": [{"name": "name", "type": "string"}, {"name": "value", "type": "string"}], "name": "FieldDiff", - "namespace": "minos.aggregate.models.diffs.fields.adios", + "namespace": "minos.aggregate.models.events.fields.adios", "type": "record", }, }, ], "name": "FieldDiffContainer", - "namespace": "minos.aggregate.models.diffs.fields.uno", + "namespace": "minos.aggregate.models.events.fields.uno", "type": "record", } ] diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_events.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_models.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_diffs/test_events.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_models.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py index 2b1b6f486..ee4cd7d8c 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py @@ -11,7 +11,6 @@ from minos.aggregate import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, - ExternalEntity, Ref, ) from minos.common import ( @@ -28,25 +27,6 @@ MinosTestCase, ) - -class Product(ExternalEntity): - """For testing purposes.""" - - title: str - quantity: int - - -class TestExternalEntity(unittest.TestCase): - def test_values(self): - uuid = uuid4() - product = Product(uuid, 3, "apple", 3028) - - self.assertEqual(uuid, product.uuid) - self.assertEqual(3, product.version) - self.assertEqual("apple", product.title) - self.assertEqual(3028, product.quantity) - - FakeMessage = ModelType.build("FakeMessage", {"content": Any}) Bar = ModelType.build("Bar", {"uuid": UUID, "age": int}) diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index a1b0a3441..d9c692b8d 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -162,10 +162,17 @@ class Order(RootEntity): class OrderItem(Entity): """For testing purposes""" - amount: int + name: str class Review(ValueObject): """For testing purposes.""" message: str + + +class Product(ExternalEntity): + """For testing purposes.""" + + title: str + quantity: int From 1f8b7f8512cdbc227920b73f1390843af4922180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:32:01 +0100 Subject: [PATCH 45/97] ISSUE #121 * Move `refs` module to `entities.refs` --- .../minos/aggregate/models/__init__.py | 10 ++++------ .../minos/aggregate/models/entities/__init__.py | 6 ++++++ .../models/{ => entities}/refs/__init__.py | 0 .../models/{ => entities}/refs/extractors.py | 0 .../models/{ => entities}/refs/injectors.py | 0 .../models/{ => entities}/refs/models.py | 2 +- .../models/{ => entities}/refs/resolvers.py | 0 .../{ => test_entities}/test_refs/__init__.py | 0 .../test_refs/test_extractors.py | 0 .../test_refs/test_injectors.py | 0 .../{ => test_entities}/test_refs/test_models.py | 16 ++++++++-------- .../test_refs/test_resolvers.py | 0 12 files changed, 19 insertions(+), 15 deletions(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{ => entities}/refs/__init__.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{ => entities}/refs/extractors.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{ => entities}/refs/injectors.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{ => entities}/refs/models.py (99%) rename packages/core/minos-microservice-aggregate/minos/aggregate/models/{ => entities}/refs/resolvers.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{ => test_entities}/test_refs/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{ => test_entities}/test_refs/test_extractors.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{ => test_entities}/test_refs/test_injectors.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{ => test_entities}/test_refs/test_models.py (90%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/{ => test_entities}/test_refs/test_resolvers.py (100%) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index 2feda4269..c055df3b2 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -10,6 +10,10 @@ Entity, EntitySet, ExternalEntity, + Ref, + RefExtractor, + RefInjector, + RefResolver, RootEntity, ) from .events import ( @@ -18,12 +22,6 @@ FieldDiffContainer, IncrementalFieldDiff, ) -from .refs import ( - Ref, - RefExtractor, - RefInjector, - RefResolver, -) from .value_objects import ( ValueObject, ValueObjectSet, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py index 38e1f2376..7be22cdf7 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py @@ -6,3 +6,9 @@ ExternalEntity, RootEntity, ) +from .refs import ( + Ref, + RefExtractor, + RefInjector, + RefResolver, +) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/__init__.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/__init__.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/extractors.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/extractors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/extractors.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/extractors.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/injectors.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/injectors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/injectors.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/injectors.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/models.py similarity index 99% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/models.py index e2d60147c..0e63ce1e3 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/models.py @@ -36,7 +36,7 @@ BrokerMessageV1Payload, ) -from ...contextvars import ( +from ....contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/resolvers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/resolvers.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/refs/resolvers.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/resolvers.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_extractors.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_extractors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_extractors.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_extractors.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_injectors.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_injectors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_injectors.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_injectors.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_models.py similarity index 90% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_models.py index ee4cd7d8c..96173b14f 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_models.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_models.py @@ -123,9 +123,9 @@ def test_model_avro_schema(self): "name": "Bar", "namespace": "", "type": "record", - "logicalType": "minos.aggregate.models.refs.models.Ref", + "logicalType": "minos.aggregate.models.entities.refs.models.Ref", }, - {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, ] ] @@ -142,12 +142,12 @@ def test_uuid_avro_schema(self): {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.refs.models.Ref", + "logicalType": "minos.aggregate.models.entities.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", }, - {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, ] ] self.assertEqual(expected, ref.avro_schema) @@ -157,13 +157,13 @@ def test_model_from_avro(self): expected = Foo(another).another # FIXME: This should not be needed to set the type hint properly schema = [ - {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, { "fields": [ {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.refs.models.Ref", + "logicalType": "minos.aggregate.models.entities.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", @@ -184,12 +184,12 @@ def test_uuid_from_avro(self): {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.refs.models.Ref", + "logicalType": "minos.aggregate.models.entities.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", }, - {"logicalType": "minos.aggregate.models.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, ] data = str(another) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_resolvers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_resolvers.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_refs/test_resolvers.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_resolvers.py From 634fcbb51e215972dded43bd5fb1c6f2fcb148cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:33:01 +0100 Subject: [PATCH 46/97] ISSUE #121 * Fix type hint bug. --- .../minos/aggregate/models/events/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py index 0b0351786..9da950cdb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py @@ -34,7 +34,7 @@ ) if TYPE_CHECKING: - from ..aggregates import ( + from ..entities import ( RootEntity, ) From cdfbcf9e971a54976b0503a0d65cb35d2e7a5da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:42:04 +0100 Subject: [PATCH 47/97] ISSUE #121 * Move `actions` module one level up. --- .../minos/aggregate/__init__.py | 4 +++- .../minos/aggregate/{models => }/actions.py | 0 .../minos/aggregate/events/entries.py | 9 ++++----- .../minos/aggregate/events/repositories/abc.py | 17 +++-------------- .../minos/aggregate/models/__init__.py | 3 --- .../minos/aggregate/models/collections.py | 2 +- .../minos/aggregate/models/events/fields.py | 2 +- .../minos/aggregate/models/events/models.py | 2 +- .../{test_models => }/test_actions.py | 0 9 files changed, 13 insertions(+), 26 deletions(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/actions.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_actions.py (100%) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 1528518c6..6ceb46969 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -2,6 +2,9 @@ __email__ = "hey@minos.run" __version__ = "0.4.1" +from .actions import ( + Action, +) from .contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, ) @@ -25,7 +28,6 @@ ValueObjectException, ) from .models import ( - Action, Entity, EntitySet, Event, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/actions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/actions.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/actions.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/actions.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index e6a1e14bb..0e4048321 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -21,9 +21,12 @@ import_module, ) +from ..actions import ( + Action, +) + if TYPE_CHECKING: from ..models import ( - Action, Event, FieldDiffContainer, RootEntity, @@ -62,10 +65,6 @@ def __init__( if isinstance(data, memoryview): data = data.tobytes() if action is not None and isinstance(action, str): - from ..models import ( - Action, - ) - action = Action.value_of(action) self.uuid = uuid diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py index 7bdfe569b..19d2d3e77 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py @@ -42,6 +42,9 @@ BrokerPublisher, ) +from ...actions import ( + Action, +) from ...contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, ) @@ -106,9 +109,6 @@ async def create(self, entry: Union[Event, EventEntry]) -> EventEntry: :param entry: Entry to be stored. :return: The repository entry containing the stored information. """ - from ...models import ( - Action, - ) entry.action = Action.CREATE return await self.submit(entry) @@ -119,9 +119,6 @@ async def update(self, entry: Union[Event, EventEntry]) -> EventEntry: :param entry: Entry to be stored. :return: The repository entry containing the stored information. """ - from ...models import ( - Action, - ) entry.action = Action.UPDATE return await self.submit(entry) @@ -132,9 +129,6 @@ async def delete(self, entry: Union[Event, EventEntry]) -> EventEntry: :param entry: Entry to be stored. :return: The repository entry containing the stored information. """ - from ...models import ( - Action, - ) entry.action = Action.DELETE return await self.submit(entry) @@ -147,7 +141,6 @@ async def submit(self, entry: Union[Event, EventEntry], **kwargs) -> EventEntry: :return: The repository entry containing the stored information. """ from ...models import ( - Action, Event, ) @@ -207,10 +200,6 @@ async def _submit(self, entry: EventEntry, **kwargs) -> EventEntry: raise NotImplementedError async def _send_events(self, event: Event): - from ...models import ( - Action, - ) - suffix_mapper = { Action.CREATE: "Created", Action.UPDATE: "Updated", diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index c055df3b2..a25b4fbf3 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -1,6 +1,3 @@ -from .actions import ( - Action, -) from .collections import ( IncrementalSet, IncrementalSetDiff, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py index 672c8561a..2e6e9e96a 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py @@ -25,7 +25,7 @@ SchemaEncoder, ) -from .actions import ( +from ..actions import ( Action, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py index c55af6a21..a1a646c03 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py @@ -29,7 +29,7 @@ ModelType, ) -from ..actions import ( +from ...actions import ( Action, ) from ..collections import ( diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py index 9da950cdb..e96b0a6c1 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py @@ -25,7 +25,7 @@ DeclarativeModel, ) -from ..actions import ( +from ...actions import ( Action, ) from .fields import ( diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_actions.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_actions.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_actions.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_actions.py From a97ff30b4fd2cc2e46ac94123a4ba898e0ee0ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:48:58 +0100 Subject: [PATCH 48/97] ISSUE #121 * Move `collections` module one level up. * Remove `test_something.py`. --- .../minos/aggregate/__init__.py | 8 +++++--- .../minos/aggregate/{models => }/collections.py | 2 +- .../minos/aggregate/models/__init__.py | 5 ----- .../minos/aggregate/models/entities/collections.py | 2 +- .../minos/aggregate/models/events/fields.py | 2 +- .../minos/aggregate/models/value_objects.py | 6 +++--- .../{test_models => }/test_collections.py | 8 ++------ .../tests/test_aggregate/test_something.py | 10 ---------- 8 files changed, 13 insertions(+), 30 deletions(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/collections.py (99%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_collections.py (93%) delete mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_something.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 6ceb46969..644d47298 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -5,6 +5,11 @@ from .actions import ( Action, ) +from .collections import ( + IncrementalSet, + IncrementalSetDiff, + IncrementalSetDiffEntry, +) from .contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, ) @@ -35,9 +40,6 @@ FieldDiff, FieldDiffContainer, IncrementalFieldDiff, - IncrementalSet, - IncrementalSetDiff, - IncrementalSetDiffEntry, Ref, RefExtractor, RefInjector, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py b/packages/core/minos-microservice-aggregate/minos/aggregate/collections.py similarity index 99% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/collections.py index 2e6e9e96a..672c8561a 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/collections.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/collections.py @@ -25,7 +25,7 @@ SchemaEncoder, ) -from ..actions import ( +from .actions import ( Action, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index a25b4fbf3..76af2974c 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -1,8 +1,3 @@ -from .collections import ( - IncrementalSet, - IncrementalSetDiff, - IncrementalSetDiffEntry, -) from .entities import ( Entity, EntitySet, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py index 3925a7784..2b13ca235 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py @@ -27,7 +27,7 @@ SchemaEncoder, ) -from ..collections import ( +from ...collections import ( IncrementalSet, IncrementalSetDiff, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py index a1a646c03..4dc092f9f 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py @@ -32,7 +32,7 @@ from ...actions import ( Action, ) -from ..collections import ( +from ...collections import ( IncrementalSet, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py index d204d497f..57373e4f6 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py @@ -12,12 +12,12 @@ Model, ) +from ..collections import ( + IncrementalSet, +) from ..exceptions import ( ValueObjectException, ) -from .collections import ( - IncrementalSet, -) class ValueObject(DeclarativeModel): diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_collections.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_collections.py similarity index 93% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_collections.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_collections.py index fb368b8f8..c475c4a3d 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_collections.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_collections.py @@ -82,18 +82,14 @@ def test_data_cls(self): def test_from_avro(self): expected = IncrementalSet([1, 2]) - schema = [ - {"items": "int", "logicalType": "minos.aggregate.models.collections.IncrementalSet", "type": "array"}, - ] + schema = [{"items": "int", "logicalType": "minos.aggregate.collections.IncrementalSet", "type": "array"}] data = [1, 2] observed = Model.from_avro(schema, data) self.assertEqual(expected, observed) def test_avro_schema(self): - expected = [ - {"items": "int", "logicalType": "minos.aggregate.models.collections.IncrementalSet", "type": "array"}, - ] + expected = [{"items": "int", "logicalType": "minos.aggregate.collections.IncrementalSet", "type": "array"}] observed = IncrementalSet([1, 2]).avro_schema self.assertEqual(expected, observed) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_something.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_something.py deleted file mode 100644 index b21589a59..000000000 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_something.py +++ /dev/null @@ -1,10 +0,0 @@ -import unittest - - -class TestSomething(unittest.TestCase): - def test_something(self): - self.assertEqual(True, True) - - -if __name__ == "__main__": - unittest.main() From 50887a341cf004e6992a0389e413d6ff35e83fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 09:51:24 +0100 Subject: [PATCH 49/97] ISSUE #121 * Move `value_objects` module one level up. --- .../minos/aggregate/__init__.py | 6 ++++-- .../minos/aggregate/models/__init__.py | 4 ---- .../minos/aggregate/{models => }/value_objects.py | 13 ++++++------- .../{test_models => }/test_value_objects.py | 0 4 files changed, 10 insertions(+), 13 deletions(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/value_objects.py (88%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_value_objects.py (100%) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 644d47298..51c3cc9fb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -45,8 +45,6 @@ RefInjector, RefResolver, RootEntity, - ValueObject, - ValueObjectSet, ) from .queries import ( Condition, @@ -72,3 +70,7 @@ TransactionService, TransactionStatus, ) +from .value_objects import ( + ValueObject, + ValueObjectSet, +) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index 76af2974c..5e8b9c33b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -14,7 +14,3 @@ FieldDiffContainer, IncrementalFieldDiff, ) -from .value_objects import ( - ValueObject, - ValueObjectSet, -) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py b/packages/core/minos-microservice-aggregate/minos/aggregate/value_objects.py similarity index 88% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/value_objects.py index 57373e4f6..1ab7ca389 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/value_objects.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/value_objects.py @@ -7,17 +7,16 @@ TypeVar, ) -from minos.common import ( - DeclarativeModel, - Model, -) - -from ..collections import ( +from minos.aggregate.collections import ( IncrementalSet, ) -from ..exceptions import ( +from minos.aggregate.exceptions import ( ValueObjectException, ) +from minos.common import ( + DeclarativeModel, + Model, +) class ValueObject(DeclarativeModel): diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_value_objects.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_value_objects.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_value_objects.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_value_objects.py From fe3800536f197d55480fc35597332350207c3656 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 10:00:10 +0100 Subject: [PATCH 50/97] ISSUE #121 * Move `entities` module one level up. --- .../minos/aggregate/__init__.py | 18 +++++++------ .../{models => }/entities/__init__.py | 0 .../{models => }/entities/collections.py | 9 +++---- .../aggregate/{models => }/entities/models.py | 27 +++++++++---------- .../{models => }/entities/refs/__init__.py | 0 .../{models => }/entities/refs/extractors.py | 0 .../{models => }/entities/refs/injectors.py | 0 .../{models => }/entities/refs/models.py | 7 +++-- .../{models => }/entities/refs/resolvers.py | 0 .../minos/aggregate/events/entries.py | 4 ++- .../minos/aggregate/exceptions.py | 4 ++- .../minos/aggregate/models/__init__.py | 10 ------- .../minos/aggregate/models/events/models.py | 2 +- .../minos/aggregate/snapshots/abc.py | 2 +- .../minos/aggregate/snapshots/entries.py | 4 +-- .../minos/aggregate/snapshots/memory.py | 2 +- .../minos/aggregate/snapshots/pg/api.py | 2 +- .../minos/aggregate/snapshots/pg/readers.py | 2 +- .../minos/aggregate/snapshots/pg/writers.py | 4 ++- .../minos/aggregate/snapshots/services.py | 2 +- .../test_entities/__init__.py | 0 .../test_entities/test_collections.py | 4 +-- .../test_entities/test_models/__init__.py | 0 .../test_entities/test_models/test_base.py | 0 .../test_models/test_external.py | 0 .../test_models/test_root/__init__.py | 0 .../test_models/test_root/test_base.py | 0 .../test_models/test_root/test_broker.py | 0 .../test_models/test_root/test_differences.py | 0 .../test_root/test_not_provided.py | 0 .../test_root/test_with_postgresql.py | 0 .../test_entities/test_refs/__init__.py | 0 .../test_refs/test_extractors.py | 0 .../test_entities/test_refs/test_injectors.py | 0 .../test_entities/test_refs/test_models.py | 16 +++++------ .../test_entities/test_refs/test_resolvers.py | 0 36 files changed, 57 insertions(+), 62 deletions(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/__init__.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/collections.py (98%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/models.py (98%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/refs/__init__.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/refs/extractors.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/refs/injectors.py (100%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/refs/models.py (99%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/entities/refs/resolvers.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_collections.py (97%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_base.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_external.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_root/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_root/test_base.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_root/test_broker.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_root/test_differences.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_root/test_not_provided.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_models/test_root/test_with_postgresql.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_refs/__init__.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_refs/test_extractors.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_refs/test_injectors.py (100%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_refs/test_models.py (90%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_entities/test_refs/test_resolvers.py (100%) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 51c3cc9fb..5bbf2b040 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -13,6 +13,16 @@ from .contextvars import ( IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, ) +from .entities import ( + Entity, + EntitySet, + ExternalEntity, + Ref, + RefExtractor, + RefInjector, + RefResolver, + RootEntity, +) from .events import ( EventEntry, EventRepository, @@ -33,18 +43,10 @@ ValueObjectException, ) from .models import ( - Entity, - EntitySet, Event, - ExternalEntity, FieldDiff, FieldDiffContainer, IncrementalFieldDiff, - Ref, - RefExtractor, - RefInjector, - RefResolver, - RootEntity, ) from .queries import ( Condition, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/__init__.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/__init__.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/collections.py similarity index 98% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/collections.py index 2b13ca235..f68273ced 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/collections.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/collections.py @@ -18,6 +18,10 @@ UUID, ) +from minos.aggregate.collections import ( + IncrementalSet, + IncrementalSetDiff, +) from minos.common import ( DataDecoder, DataEncoder, @@ -27,11 +31,6 @@ SchemaEncoder, ) -from ...collections import ( - IncrementalSet, - IncrementalSetDiff, -) - T = TypeVar("T", bound=Model) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py similarity index 98% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/models.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py index 53d1a77a4..bc6f90da7 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py @@ -22,30 +22,29 @@ inject, ) -from minos.common import ( - NULL_DATETIME, - NULL_UUID, - DeclarativeModel, - NotProvidedException, -) - -from ...events import ( +from minos.aggregate.events import ( EventEntry, EventRepository, ) -from ...exceptions import ( +from minos.aggregate.exceptions import ( EventRepositoryException, ) -from ...queries import ( +from minos.aggregate.models.events import ( + Event, + IncrementalFieldDiff, +) +from minos.aggregate.queries import ( _Condition, _Ordering, ) -from ...snapshots import ( +from minos.aggregate.snapshots import ( SnapshotRepository, ) -from ..events import ( - Event, - IncrementalFieldDiff, +from minos.common import ( + NULL_DATETIME, + NULL_UUID, + DeclarativeModel, + NotProvidedException, ) logger = logging.getLogger(__name__) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/__init__.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/__init__.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/extractors.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/extractors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/extractors.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/extractors.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/injectors.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/injectors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/injectors.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/injectors.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/models.py similarity index 99% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/models.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/models.py index 0e63ce1e3..6f3bb1f6b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/models.py @@ -20,6 +20,9 @@ inject, ) +from minos.aggregate.contextvars import ( + IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, +) from minos.common import ( DataDecoder, DataEncoder, @@ -36,10 +39,6 @@ BrokerMessageV1Payload, ) -from ....contextvars import ( - IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR, -) - MT = TypeVar("MT", bound=Model) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/resolvers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/resolvers.py similarity index 100% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/entities/refs/resolvers.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/entities/refs/resolvers.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index 0e4048321..7f8052519 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -26,10 +26,12 @@ ) if TYPE_CHECKING: + from ..entities import ( + RootEntity, + ) from ..models import ( Event, FieldDiffContainer, - RootEntity, ) from ..transactions import ( TransactionEntry, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py index 120f43b01..0b39bab65 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/exceptions.py @@ -11,9 +11,11 @@ ) if TYPE_CHECKING: + from .entities import ( + RootEntity, + ) from .models import ( Event, - RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py index 5e8b9c33b..078414c4b 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py @@ -1,13 +1,3 @@ -from .entities import ( - Entity, - EntitySet, - ExternalEntity, - Ref, - RefExtractor, - RefInjector, - RefResolver, - RootEntity, -) from .events import ( Event, FieldDiff, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py index e96b0a6c1..f3b1b64ed 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py @@ -34,7 +34,7 @@ ) if TYPE_CHECKING: - from ..entities import ( + from ...entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py index 4a13f3f83..ec090eb03 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/abc.py @@ -30,7 +30,7 @@ ) if TYPE_CHECKING: - from ..models import ( + from ..entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py index 851e27c1e..73b8afab1 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/entries.py @@ -31,7 +31,7 @@ ) if TYPE_CHECKING: - from ..models import ( + from ..entities import ( RootEntity, ) @@ -163,7 +163,7 @@ def build(self, **kwargs) -> RootEntity: :param kwargs: Additional named arguments. :return: A ``RootEntity`` instance. """ - from ..models import ( + from ..entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py index dbea2ffcd..174cc9372 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/memory.py @@ -46,7 +46,7 @@ ) if TYPE_CHECKING: - from ..models import ( + from ..entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py index 39f591691..9b5aec9f7 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/api.py @@ -23,7 +23,7 @@ ) if TYPE_CHECKING: - from ...models import ( + from ...entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py index 25a5cbcb6..9793b7ddc 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/readers.py @@ -38,7 +38,7 @@ ) if TYPE_CHECKING: - from ...models import ( + from ...entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index 2e607f419..c01a611e7 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -41,9 +41,11 @@ ) if TYPE_CHECKING: + from ...entities import ( + RootEntity, + ) from ...models import ( Event, - RootEntity, ) from .readers import ( PostgreSqlSnapshotReader, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py index 9603bb02e..c36c2774d 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/services.py @@ -39,7 +39,7 @@ ) if TYPE_CHECKING: - from ..models import ( + from ..entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_collections.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_collections.py similarity index 97% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_collections.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_collections.py index 86d2af0bc..9a655318f 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_collections.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_collections.py @@ -106,7 +106,7 @@ def test_from_avro(self): expected = EntitySet(values) schema = [ { - "logicalType": "minos.aggregate.models.entities.EntitySet", + "logicalType": "minos.aggregate.entities.EntitySet", "type": "array", "items": OrderItem.avro_schema[0], }, @@ -120,7 +120,7 @@ def test_avro_schema(self): with patch("minos.common.AvroSchemaEncoder.generate_random_str", return_value="hello"): expected = [ { - "logicalType": "minos.aggregate.models.entities.collections.EntitySet", + "logicalType": "minos.aggregate.entities.collections.EntitySet", "type": "array", "items": OrderItem.avro_schema[0], }, diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_base.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_base.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_base.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_external.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_external.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_external.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_external.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_base.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_base.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_base.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_base.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_broker.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_broker.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_broker.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_broker.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_differences.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_differences.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_differences.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_differences.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_not_provided.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_not_provided.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_not_provided.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_not_provided.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_with_postgresql.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_with_postgresql.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_models/test_root/test_with_postgresql.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_models/test_root/test_with_postgresql.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/__init__.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/__init__.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/__init__.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_extractors.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_extractors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_extractors.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_extractors.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_injectors.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_injectors.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_injectors.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_injectors.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_models.py similarity index 90% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_models.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_models.py index 96173b14f..50215e863 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_models.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_models.py @@ -123,9 +123,9 @@ def test_model_avro_schema(self): "name": "Bar", "namespace": "", "type": "record", - "logicalType": "minos.aggregate.models.entities.refs.models.Ref", + "logicalType": "minos.aggregate.entities.refs.models.Ref", }, - {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.entities.refs.models.Ref", "type": "string"}, ] ] @@ -142,12 +142,12 @@ def test_uuid_avro_schema(self): {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.entities.refs.models.Ref", + "logicalType": "minos.aggregate.entities.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", }, - {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.entities.refs.models.Ref", "type": "string"}, ] ] self.assertEqual(expected, ref.avro_schema) @@ -157,13 +157,13 @@ def test_model_from_avro(self): expected = Foo(another).another # FIXME: This should not be needed to set the type hint properly schema = [ - {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.entities.refs.models.Ref", "type": "string"}, { "fields": [ {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.entities.refs.models.Ref", + "logicalType": "minos.aggregate.entities.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", @@ -184,12 +184,12 @@ def test_uuid_from_avro(self): {"name": "uuid", "type": {"logicalType": "uuid", "type": "string"}}, {"name": "age", "type": "int"}, ], - "logicalType": "minos.aggregate.models.entities.refs.models.Ref", + "logicalType": "minos.aggregate.entities.refs.models.Ref", "name": "Bar", "namespace": "", "type": "record", }, - {"logicalType": "minos.aggregate.models.entities.refs.models.Ref", "type": "string"}, + {"logicalType": "minos.aggregate.entities.refs.models.Ref", "type": "string"}, ] data = str(another) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_resolvers.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_resolvers.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_entities/test_refs/test_resolvers.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_entities/test_refs/test_resolvers.py From 582b95a1b529434533aaeb64f909bc921c8839b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 10:36:48 +0100 Subject: [PATCH 51/97] Update README.md --- README.md | 30 +++++------------------------- 1 file changed, 5 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 1bd15f33e..435b90fa6 100644 --- a/README.md +++ b/README.md @@ -19,43 +19,19 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanif ## Foundational Patterns The `minos` framework is built strongly following the following set of patterns: - -### Application architecture - * [Microservice architecture](https://microservices.io/patterns/microservices.html): Architect an application as a collection of loosely coupled services. - -### Decomposition - * [Decompose by subdomain](https://microservices.io/patterns/decomposition/decompose-by-subdomain.html): Define services corresponding to Domain-Driven Design (DDD) subdomains * [Self-contained Service](https://microservices.io/patterns/decomposition/self-contained-service.html): Microservices can respond to a synchronous request without waiting for the response from any other service. - -### Data management - * [Database per service](https://microservices.io/patterns/data/database-per-service.html): Keep each microservice's persistent data private to that service and accessible only via its API. A service's transactions only involve its database. * [Saga](https://microservices.io/patterns/data/saga.html): Transaction that spans multiple services. * [CQRS](https://microservices.io/patterns/data/cqrs.html): view database, which is a read-only replica that is designed to support queries that retrieves data from microservice. The application keeps the replica up to date by subscribing to Domain events published by the service that own the data. * [Domain event](https://microservices.io/patterns/data/domain-event.html): A service often needs to publish events when it updates its data. These events might be needed, for example, to update a CQRS view. * [Event Sourcing](https://microservices.io/patterns/data/event-sourcing.html): Event sourcing persists the state of a business entity such an Order or a Customer as a sequence of state-changing events. Whenever the state of a business entity changes, a new event is appended to the list of events. Since saving an event is a single operation, it is inherently atomic. The application reconstructs an entity's current state by replaying the events. - -### Communication style - * [Messaging](https://microservices.io/patterns/communication-style/messaging.html): Services communicating by exchanging messages over messaging channels. (Apache Kafka is used in this case) - -### External APIs - * [API gateway](https://microservices.io/patterns/apigateway.html): Single entry point for all clients. The API gateway proxy/route to the appropriate service. - -### Service discovery - * [Service registry](https://microservices.io/patterns/service-registry.html): Database of services. A service registry might invoke a service instance's health check API to verify that it is able to handle requests * [Self Registration](https://microservices.io/patterns/self-registration.html): Each service instance register on startup and unregister on stop. - -### Security - * [Access token](https://microservices.io/patterns/security/access-token.html): The API Gateway authenticates the request and passes an access token (e.g. JSON Web Token) that securely identifies the requestor in each request to the services. A service can include the access token in requests it makes to other services. - -### Observability - * [Health Check API](https://microservices.io/patterns/observability/health-check-api.html): A service has a health check API endpoint (e.g. HTTP `/health`) that returns the health of the service. ## Installation @@ -77,10 +53,14 @@ pip install \ minos-microservice-saga ``` -## Usage +## QuickStart This section includes a set of minimal examples of how-to-work with `minos`, so that anyone can get the gist of the framework. +### Create a Project + +[TODO] + ### Create an Aggregate Here is an example of the creation the `Foo` aggregate. In this case, it has two attributes, a `bar` being a `str`, and a `foobar` being an optional reference to the external `FooBar` aggregate, which it is assumed that it has a `something` attribute. From 4d78644a365fae01a0939d2a221efcba0572b38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 10:50:15 +0100 Subject: [PATCH 52/97] ISSUE #121 * Merge `models` module into `events`. --- .../minos/aggregate/__init__.py | 10 ++++------ .../minos/aggregate/entities/models.py | 6 ++---- .../minos/aggregate/events/__init__.py | 8 ++++++++ .../minos/aggregate/events/entries.py | 18 ++++++------------ .../aggregate/{models => }/events/fields.py | 13 ++++++------- .../aggregate/{models => }/events/models.py | 8 ++++---- .../aggregate/events/repositories/abc.py | 19 ++++++------------- .../minos/aggregate/models/__init__.py | 6 ------ .../minos/aggregate/models/events/__init__.py | 8 -------- .../minos/aggregate/snapshots/pg/writers.py | 4 +--- .../test_events/test_fields.py | 6 +++--- .../test_events/test_models.py | 0 .../test_aggregate/test_models/__init__.py | 1 - .../test_models/test_events/__init__.py | 0 14 files changed, 40 insertions(+), 67 deletions(-) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/events/fields.py (98%) rename packages/core/minos-microservice-aggregate/minos/aggregate/{models => }/events/models.py (98%) delete mode 100644 packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py delete mode 100644 packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_events/test_fields.py (97%) rename packages/core/minos-microservice-aggregate/tests/test_aggregate/{test_models => }/test_events/test_models.py (100%) delete mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/__init__.py delete mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/__init__.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 5bbf2b040..2c13c4ceb 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -24,8 +24,12 @@ RootEntity, ) from .events import ( + Event, EventEntry, EventRepository, + FieldDiff, + FieldDiffContainer, + IncrementalFieldDiff, InMemoryEventRepository, PostgreSqlEventRepository, ) @@ -42,12 +46,6 @@ TransactionRepositoryException, ValueObjectException, ) -from .models import ( - Event, - FieldDiff, - FieldDiffContainer, - IncrementalFieldDiff, -) from .queries import ( Condition, Ordering, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py index bc6f90da7..0cd08fb34 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/entities/models.py @@ -23,16 +23,14 @@ ) from minos.aggregate.events import ( + Event, EventEntry, EventRepository, + IncrementalFieldDiff, ) from minos.aggregate.exceptions import ( EventRepositoryException, ) -from minos.aggregate.models.events import ( - Event, - IncrementalFieldDiff, -) from minos.aggregate.queries import ( _Condition, _Ordering, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/__init__.py index 641eb9679..7dcf102ef 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/__init__.py @@ -1,6 +1,14 @@ from .entries import ( EventEntry, ) +from .fields import ( + FieldDiff, + FieldDiffContainer, + IncrementalFieldDiff, +) +from .models import ( + Event, +) from .repositories import ( EventRepository, InMemoryEventRepository, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py index 7f8052519..2d33a57f7 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/entries.py @@ -24,15 +24,17 @@ from ..actions import ( Action, ) +from .fields import ( + FieldDiffContainer, +) +from .models import ( + Event, +) if TYPE_CHECKING: from ..entities import ( RootEntity, ) - from ..models import ( - Event, - FieldDiffContainer, - ) from ..transactions import ( TransactionEntry, ) @@ -141,10 +143,6 @@ def event(self) -> Event: :return: An ``Event`` instance. """ - from ..models import ( - Event, - ) - return Event( self.uuid, self.name, @@ -160,10 +158,6 @@ def field_diff_container(self) -> FieldDiffContainer: :return: A ``FieldDiffContainer`` instance. """ - from ..models import ( - FieldDiffContainer, - ) - if not self.data: return FieldDiffContainer.empty() diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/fields.py similarity index 98% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/events/fields.py index 4dc092f9f..14eb43938 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/fields.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/fields.py @@ -22,6 +22,12 @@ uuid4, ) +from minos.aggregate.actions import ( + Action, +) +from minos.aggregate.collections import ( + IncrementalSet, +) from minos.common import ( BucketModel, Field, @@ -29,13 +35,6 @@ ModelType, ) -from ...actions import ( - Action, -) -from ...collections import ( - IncrementalSet, -) - logger = logging.getLogger(__name__) T = TypeVar("T") diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/models.py similarity index 98% rename from packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py rename to packages/core/minos-microservice-aggregate/minos/aggregate/events/models.py index f3b1b64ed..ecf7afd30 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/models.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/models.py @@ -21,20 +21,20 @@ UUID, ) +from minos.aggregate.actions import ( + Action, +) from minos.common import ( DeclarativeModel, ) -from ...actions import ( - Action, -) from .fields import ( FieldDiff, FieldDiffContainer, ) if TYPE_CHECKING: - from ...entities import ( + from minos.aggregate.entities import ( RootEntity, ) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py index 19d2d3e77..b42c67b88 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/events/repositories/abc.py @@ -13,7 +13,6 @@ suppress, ) from typing import ( - TYPE_CHECKING, AsyncIterator, Awaitable, Optional, @@ -61,11 +60,12 @@ from ..entries import ( EventEntry, ) - -if TYPE_CHECKING: - from ...models import ( - Event, - ) +from ..fields import ( + IncrementalFieldDiff, +) +from ..models import ( + Event, +) class EventRepository(ABC, MinosSetup): @@ -140,9 +140,6 @@ async def submit(self, entry: Union[Event, EventEntry], **kwargs) -> EventEntry: :param kwargs: Additional named arguments. :return: The repository entry containing the stored information. """ - from ...models import ( - Event, - ) token = IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR.set(True) try: @@ -214,10 +211,6 @@ async def _send_events(self, event: Event): futures = [self._broker_publisher.send(message)] if event.action == Action.UPDATE: - from ...models import ( - IncrementalFieldDiff, - ) - for decomposed_event in event.decompose(): diff = next(iter(decomposed_event.fields_diff.flatten_values())) composed_topic = f"{topic}.{diff.name}" diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py deleted file mode 100644 index 078414c4b..000000000 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from .events import ( - Event, - FieldDiff, - FieldDiffContainer, - IncrementalFieldDiff, -) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py deleted file mode 100644 index 4653d4f02..000000000 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/models/events/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from .fields import ( - FieldDiff, - FieldDiffContainer, - IncrementalFieldDiff, -) -from .models import ( - Event, -) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index c01a611e7..ee2839091 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -21,6 +21,7 @@ ) from ...events import ( + Event, EventEntry, EventRepository, ) @@ -44,9 +45,6 @@ from ...entities import ( RootEntity, ) - from ...models import ( - Event, - ) from .readers import ( PostgreSqlSnapshotReader, ) diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_fields.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_fields.py similarity index 97% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_fields.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_fields.py index b3371490d..6a878096f 100644 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_fields.py +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_fields.py @@ -102,7 +102,7 @@ def test_avro_schema(self): "type": { "fields": [{"name": "name", "type": "string"}, {"name": "value", "type": "int"}], "name": "FieldDiff", - "namespace": "minos.aggregate.models.events.fields.hola", + "namespace": "minos.aggregate.events.fields.hola", "type": "record", }, }, @@ -111,13 +111,13 @@ def test_avro_schema(self): "type": { "fields": [{"name": "name", "type": "string"}, {"name": "value", "type": "string"}], "name": "FieldDiff", - "namespace": "minos.aggregate.models.events.fields.adios", + "namespace": "minos.aggregate.events.fields.adios", "type": "record", }, }, ], "name": "FieldDiffContainer", - "namespace": "minos.aggregate.models.events.fields.uno", + "namespace": "minos.aggregate.events.fields.uno", "type": "record", } ] diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_models.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_models.py similarity index 100% rename from packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/test_models.py rename to packages/core/minos-microservice-aggregate/tests/test_aggregate/test_events/test_models.py diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/__init__.py deleted file mode 100644 index 8b1378917..000000000 --- a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/__init__.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_models/test_events/__init__.py deleted file mode 100644 index e69de29bb..000000000 From bc111cf9d3658d34d40ea1c0681c70668b667936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 12:21:19 +0100 Subject: [PATCH 53/97] ISSUE #121 * Add `Aggregate` class. --- .../minos/aggregate/__init__.py | 3 + .../minos/aggregate/aggregate.py | 111 ++++++++++++++++++ .../tests/test_aggregate/test_aggregate.py | 50 ++++++++ .../tests/utils.py | 15 +++ 4 files changed, 179 insertions(+) create mode 100644 packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py create mode 100644 packages/core/minos-microservice-aggregate/tests/test_aggregate/test_aggregate.py diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index 2c13c4ceb..ed120234a 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -5,6 +5,9 @@ from .actions import ( Action, ) +from .aggregate import ( + Aggregate, +) from .collections import ( IncrementalSet, IncrementalSetDiff, diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py b/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py new file mode 100644 index 000000000..9635f1873 --- /dev/null +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py @@ -0,0 +1,111 @@ +from __future__ import ( + annotations, +) + +from typing import ( + Generic, + TypeVar, + get_args, +) + +from dependency_injector.wiring import ( + Provide, + inject, +) + +from minos.common import ( + MinosConfig, + MinosSetup, + NotProvidedException, +) + +from .entities import ( + RootEntity, +) +from .events import ( + EventRepository, +) +from .snapshots import ( + SnapshotRepository, +) +from .transactions import ( + TransactionRepository, +) + +RT = TypeVar("RT", bound=type[RootEntity]) + + +class Aggregate(Generic[RT], MinosSetup): + """Base Service class""" + + transaction_repository: TransactionRepository + event_repository: EventRepository + snapshot_repository: SnapshotRepository + + def __init__( + self, + transaction_repository: TransactionRepository, + event_repository: EventRepository, + snapshot_repository: SnapshotRepository, + *args, + **kwargs, + ): + super().__init__(*args, **kwargs) + self._check_root() + + self.transaction_repository = transaction_repository + self.event_repository = event_repository + self.snapshot_repository = snapshot_repository + + @classmethod + def _from_config(cls, config: MinosConfig, **kwargs) -> Aggregate: + kwargs["transaction_repository"] = cls._get_transaction_repository(**kwargs) + kwargs["event_repository"] = cls._get_event_repository(**kwargs) + kwargs["snapshot_repository"] = cls._get_snapshot_repository(**kwargs) + return cls(**kwargs) + + # noinspection PyUnusedLocal + @staticmethod + @inject + def _get_transaction_repository( + transaction_repository: TransactionRepository = Provide["transaction_repository"], **kwargs + ) -> TransactionRepository: + if transaction_repository is None or isinstance(transaction_repository, Provide): + raise NotProvidedException(f"A {TransactionRepository!r} object must be provided.") + return transaction_repository + + # noinspection PyUnusedLocal + @staticmethod + @inject + def _get_event_repository( + event_repository: EventRepository = Provide["event_repository"], **kwargs + ) -> EventRepository: + if event_repository is None or isinstance(event_repository, Provide): + raise NotProvidedException(f"A {EventRepository!r} object must be provided.") + return event_repository + + # noinspection PyUnusedLocal + @staticmethod + @inject + def _get_snapshot_repository( + snapshot_repository: SnapshotRepository = Provide["snapshot_repository"], **kwargs + ) -> SnapshotRepository: + if snapshot_repository is None or isinstance(snapshot_repository, Provide): + raise NotProvidedException(f"A {SnapshotRepository!r} object must be provided.") + return snapshot_repository + + def _check_root(self): + self.root # If root is not valid it will raise an exception. + + @property + def root(self) -> type[RootEntity]: + """Get the root entity of the aggregate. + + :return: A ``RootEntity`` type. + """ + # noinspection PyUnresolvedReferences + bases = self.__orig_bases__ + root = get_args(bases[0])[0] + if not isinstance(root, type) or not issubclass(root, RootEntity): + raise TypeError(f"The {type(self)!r} class must set the {RootEntity!r} type.") + return root diff --git a/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_aggregate.py b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_aggregate.py new file mode 100644 index 000000000..89e6fd82a --- /dev/null +++ b/packages/core/minos-microservice-aggregate/tests/test_aggregate/test_aggregate.py @@ -0,0 +1,50 @@ +import unittest +from uuid import ( + UUID, +) + +from minos.aggregate import ( + Aggregate, +) +from minos.common import ( + NotProvidedException, +) +from tests.utils import ( + CONFIG_FILE_PATH, + MinosTestCase, + Order, + OrderAggregate, +) + + +class TestAggregate(MinosTestCase): + async def test_root(self): + async with OrderAggregate.from_config(CONFIG_FILE_PATH) as aggregate: + self.assertEqual(Order, aggregate.root) + + def test_root_raises(self): + with self.assertRaises(TypeError): + Aggregate.from_config(CONFIG_FILE_PATH) + + async def test_from_config(self): + async with OrderAggregate.from_config(CONFIG_FILE_PATH) as aggregate: + self.assertTrue(self.transaction_repository, aggregate.transaction_repository) + self.assertTrue(self.event_repository, aggregate.event_repository) + self.assertTrue(self.snapshot_repository, aggregate.snapshot_repository) + + def test_from_config_raises(self): + with self.assertRaises(NotProvidedException): + OrderAggregate.from_config(CONFIG_FILE_PATH, transaction_repository=None) + with self.assertRaises(NotProvidedException): + OrderAggregate.from_config(CONFIG_FILE_PATH, event_repository=None) + with self.assertRaises(NotProvidedException): + OrderAggregate.from_config(CONFIG_FILE_PATH, snapshot_repository=None) + + async def test_call(self): + async with OrderAggregate.from_config(CONFIG_FILE_PATH) as aggregate: + uuid = await aggregate.create_order() + self.assertIsInstance(uuid, UUID) + + +if __name__ == "__main__": + unittest.main() diff --git a/packages/core/minos-microservice-aggregate/tests/utils.py b/packages/core/minos-microservice-aggregate/tests/utils.py index d9c692b8d..6c5ee14ea 100644 --- a/packages/core/minos-microservice-aggregate/tests/utils.py +++ b/packages/core/minos-microservice-aggregate/tests/utils.py @@ -13,6 +13,9 @@ from typing import ( Optional, ) +from uuid import ( + UUID, +) from dependency_injector import ( containers, @@ -20,6 +23,7 @@ ) from minos.aggregate import ( + Aggregate, Entity, EntitySet, ExternalEntity, @@ -176,3 +180,14 @@ class Product(ExternalEntity): title: str quantity: int + + +class OrderAggregate(Aggregate[Order]): + """For testing purposes.""" + + @staticmethod + async def create_order() -> UUID: + """For testing purposes.""" + + order = await Order.create(products=EntitySet(), reviews=ValueObjectSet()) + return order.uuid From 18b7a54d8dea99930dc4e3dbdb1af782c47fb035 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 13:13:16 +0100 Subject: [PATCH 54/97] ISSUE #121 * Update `README.md`. --- README.md | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 02f71e3e4..fe199e85c 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,8 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanif ## Foundational Patterns -The `minos` framework is built strongly following the following set of patterns: +The `minos` framework is built strongly inspired by the following set of patterns: + * [Microservice architecture](https://microservices.io/patterns/microservices.html): Architect an application as a collection of loosely coupled services. * [Decompose by subdomain](https://microservices.io/patterns/decomposition/decompose-by-subdomain.html): Define services corresponding to Domain-Driven Design (DDD) subdomains * [Self-contained Service](https://microservices.io/patterns/decomposition/self-contained-service.html): Microservices can respond to a synchronous request without waiting for the response from any other service. @@ -63,23 +64,34 @@ This section includes a set of minimal examples of how-to-work with `minos`, so ### Create an Aggregate +The way to model data in `minos` is highly inspired by the [Event Sourcing](https://microservices.io/patterns/data/event-sourcing.html) ideas. For this reason, the classes to be used to model data are: +* `minos.aggregate.Entity`: A model that has an identifier that gives it a unique identity, in the sense that some values from which it is composed could change, but its identity will continue being the same. +* `minos.aggregate.ExternalEntity`: A model that belongs to another microservice (or aggregate boundary) but needs to be used for some reason inside this microservice (or aggregate boundary). +* `minos.aggregate.RootEntity`: Is an `Entity` superset that provides global identity across the project compared to standard `Entity` models, that has only local identity (the `RootEntity` can be accessed from another microservices as `ExternalEntity` models, but standard `Entity` models can only be accessed within the microservice that define them). The `RootEntity` is also the one that interacts with the persistence layer (the `EventRepository` and `SnapshotRepository` instances). +* `minos.aggregate.Ref`: A wrapper class that provides the functionality to store a reference of other `RootEntity` or `ExternalEntity` instances. +* `minos.aggregate.EntitySet`: A container of `Entity` instances that takes advantage of the incremental behaviour of the `EventRepository`. +* `minos.aggregate.ValueObject`: A model that is only identified by the values that compose it, so that if some of them changes, then the model becomes completely different (for that reason, these models are immutable). +* `minos.aggregate.ValueObjectSet`: A container of `ValueObject` instances that takes advantage of the incremental behaviour of the `EventRepository. +* `minos.aggregate.Aggregate`: A collection of `Entity` and/or `ValueObject` models that are related to each other through a `RootEntity`. +* `minos.aggregate.Event`: A model that contains the difference between the a `RootEntity` instance and its previous version (if any). + Here is an example of the creation the `Foo` aggregate. In this case, it has two attributes, a `bar` being a `str`, and a `foobar` being an optional reference to the external `FooBar` aggregate, which it is assumed that it has a `something` attribute. ```python from __future__ import annotations from typing import Optional -from minos.aggregate import RootEntity, AggregateRef, ModelRef +from minos.aggregate import RootEntity, ExternalEntity, Ref class Foo(RootEntity): - """Foo Aggregate class.""" + """Foo Root Entity class.""" bar: str - foobar: Optional[ModelRef[FooBar]] + foobar: Optional[Ref[FooBar]] -class FooBar(AggregateRef): - """FooBar AggregateRef clas.""" +class FooBar(ExternalEntity): + """FooBar External Entity clas.""" something: str ``` From 5e59caf8b663b282fd6dc153c4f646a8fdef4bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 13:29:22 +0100 Subject: [PATCH 55/97] ISSUE #121 * Add `Python` version config for `SonarCloud`. --- .sonarcloud.properties | 1 + 1 file changed, 1 insertion(+) create mode 100644 .sonarcloud.properties diff --git a/.sonarcloud.properties b/.sonarcloud.properties new file mode 100644 index 000000000..f1bc3af52 --- /dev/null +++ b/.sonarcloud.properties @@ -0,0 +1 @@ +sonar.python.version=3.9 From ffb83dd729fbb317e3857c05f1d3b5437f3b45d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 13:35:24 +0100 Subject: [PATCH 56/97] ISSUE #121 * Minor changes. --- .../minos-microservice-aggregate/minos/aggregate/aggregate.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py b/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py index 9635f1873..3fbce9609 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/aggregate.py @@ -32,7 +32,7 @@ TransactionRepository, ) -RT = TypeVar("RT", bound=type[RootEntity]) +RT = TypeVar("RT", bound=RootEntity) class Aggregate(Generic[RT], MinosSetup): @@ -107,5 +107,5 @@ def root(self) -> type[RootEntity]: bases = self.__orig_bases__ root = get_args(bases[0])[0] if not isinstance(root, type) or not issubclass(root, RootEntity): - raise TypeError(f"The {type(self)!r} class must set the {RootEntity!r} type.") + raise TypeError(f"{type(self)!r} must contain a {RootEntity!r} as generic value.") return root From 3f256f43d9ab6a79ee1c0dec8e3eeac75c7499a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 14:01:30 +0100 Subject: [PATCH 57/97] ISSUE #139 * Exec code formatting. --- .../minos/aggregate/snapshots/pg/writers.py | 2 +- .../core/minos-microservice-common/minos/common/launchers.py | 2 +- .../minos/saga/definitions/steps/conditional.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py index 0c3197ed4..adbb84258 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/snapshots/pg/writers.py @@ -60,7 +60,7 @@ def __init__( reader: PostgreSqlSnapshotReader, event_repository: EventRepository = Provide["event_repository"], transaction_repository: TransactionRepository = Provide["transaction_repository"], - **kwargs + **kwargs, ): super().__init__(*args, **kwargs) diff --git a/packages/core/minos-microservice-common/minos/common/launchers.py b/packages/core/minos-microservice-common/minos/common/launchers.py index 620b03378..14e7c3e5c 100644 --- a/packages/core/minos-microservice-common/minos/common/launchers.py +++ b/packages/core/minos-microservice-common/minos/common/launchers.py @@ -79,7 +79,7 @@ def __init__( log_date_format: Union[str, DateFormat] = DateFormat["color"], external_modules: Optional[list[ModuleType]] = None, *args, - **kwargs + **kwargs, ): if external_modules is None: external_modules = list() diff --git a/packages/core/minos-microservice-saga/minos/saga/definitions/steps/conditional.py b/packages/core/minos-microservice-saga/minos/saga/definitions/steps/conditional.py index fcfd86e61..be407d895 100644 --- a/packages/core/minos-microservice-saga/minos/saga/definitions/steps/conditional.py +++ b/packages/core/minos-microservice-saga/minos/saga/definitions/steps/conditional.py @@ -43,7 +43,7 @@ def __init__( self, if_then: Optional[Union[IfThenAlternative, Iterable[IfThenAlternative]]] = None, else_then: Optional[ElseThenAlternative] = None, - **kwargs + **kwargs, ): super().__init__(**kwargs) From efc7cc9159ffbe0b7a2f086c69e0fa05af6c6136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:10:32 +0100 Subject: [PATCH 58/97] ISSUE #140 * Improve code example from `README.md`. --- README.md | 581 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 577 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 53230d380..a076b380c 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanif ## Foundational Patterns The `minos` framework is built strongly following the following set of patterns: + * [Microservice architecture](https://microservices.io/patterns/microservices.html): Architect an application as a collection of loosely coupled services. * [Decompose by subdomain](https://microservices.io/patterns/decomposition/decompose-by-subdomain.html): Define services corresponding to Domain-Driven Design (DDD) subdomains * [Self-contained Service](https://microservices.io/patterns/decomposition/self-contained-service.html): Microservices can respond to a synchronous request without waiting for the response from any other service. @@ -55,17 +56,129 @@ pip install \ ## QuickStart -This section includes a set of minimal examples of how-to-work with `minos`, so that anyone can get the gist of the framework. +This section includes a quickstart guide to create your first `minos` microservice, so that anyone can get the gist of the framework. + +#### Setting up the environment + +The required environment to run this quickstart is the following: + +* A `python>=3.9` interpreter with version equal or greater to . +* A `kafka` instance available at `localhost:9092` +* A `postgres` instance available at `localhost:5432` with a `foo_db` database accessible with `minos:min0s` credentials. +* A `socket` available to use at `localhost:4545`. + +Note that these parameters can be configured on the `foo.yml` file. + +### Configure a Microservice + +To keep things simpler, this quickstart will create a microservice assuming all the source code is stored on a single `foo.py` file. In addition to the source file, a `foo.yml` will contain all the configuration stuff. + +Create a `foo.yml` file and add the following lines: +
+ Click to show the foo.yml + +```yaml +# foo.yml + +service: + name: foo + aggregate: foo.Foo + injections: + lock_pool: minos.common.PostgreSqlLockPool + postgresql_pool: minos.common.PostgreSqlPool + broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher + broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder + broker_pool: minos.networks.BrokerClientPool + transaction_repository: minos.aggregate.PostgreSqlTransactionRepository + event_repository: minos.aggregate.PostgreSqlEventRepository + snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository + saga_manager: minos.saga.SagaManager + services: + - minos.networks.BrokerHandlerService + - minos.networks.RestService + - minos.networks.PeriodicTaskSchedulerService +middleware: + - minos.saga.transactional_command +services: + - minos.aggregate.TransactionService + - minos.aggregate.SnapshotService + - minos.saga.SagaService + - foo.FooCommandService + - foo.FooQueryService +rest: + host: 0.0.0.0 + port: 4545 +broker: + host: localhost + port: 9092 + queue: + database: foo_db + user: minos + password: min0s + host: localhost + port: 5432 + records: 1000 + retry: 2 +repository: + database: foo_db + user: minos + password: min0s + host: localhost + port: 5432 +snapshot: + database: foo_db + user: minos + password: min0s + host: localhost + port: 5432 +saga: + storage: + path: "./foo.lmdb" +``` + +
+ +Create a `foo.py` file and add the following content: + +```python +# foo.py + +from pathlib import Path +from minos.aggregate import Aggregate +from minos.common import EntrypointLauncher +from minos.cqrs import CommandService, QueryService + + +class Foo(Aggregate): + """Foo Aggregate class.""" + + +class FooCommandService(CommandService): + """Foo Command Service class.""" -### Create a Project -[TODO] +class FooQueryService(QueryService): + """Foo Query Service class.""" + + +if __name__ == '__main__': + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher.launch() +``` + +Execute the following command to start the microservice: + +```shell +python foo.py +``` ### Create an Aggregate Here is an example of the creation the `Foo` aggregate. In this case, it has two attributes, a `bar` being a `str`, and a `foobar` being an optional reference to the external `FooBar` aggregate, which it is assumed that it has a `something` attribute. ```python +# foo.py + from __future__ import annotations from typing import Optional from minos.aggregate import Aggregate, AggregateRef, ModelRef @@ -83,12 +196,58 @@ class FooBar(AggregateRef): something: str ``` +
+ Click to show the full foo.py + +```python +# foo.py + +from __future__ import annotations + +from pathlib import Path +from typing import Optional + +from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.common import EntrypointLauncher +from minos.cqrs import CommandService, QueryService + + +class Foo(Aggregate): + """Foo Aggregate class.""" + + bar: str + foobar: Optional[ModelRef[FooBar]] + + +class FooBar(AggregateRef): + """FooBar AggregateRef clas.""" + + something: str + + +class FooCommandService(CommandService): + """Foo Command Service class.""" + + +class FooQueryService(QueryService): + """Foo Query Service class.""" + + +if __name__ == '__main__': + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher.launch() + +``` + +
### Expose a Command Here is an example of the definition of a command to create `Foo` instances. To do that, it is necessary to define a `CommandService` that contains the handling function. It will handle both the broker messages sent to the `"CreateFoo"` topic and the rest calls to the `"/foos"` path with the `"POST"` method. In this case, the handling function unpacks the `Request`'s content and then calls the `create` method from the `Aggregate`, which stores the `Foo` instance following an event-driven strategy (it also publishes the `"FooCreated"` event). Finally, a `Response` is returned to be handled by the external caller (another microservice or the API-gateway). ```python +# foo.py + from minos.cqrs import CommandService from minos.networks import enroute, Request, Response @@ -112,6 +271,73 @@ class FooCommandService(CommandService): return Response({"uuid": foo.uuid}) ``` +
+ Click to show the full foo.py + +```python +# foo.py + +from __future__ import annotations + +from pathlib import Path +from typing import Optional + +from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.common import EntrypointLauncher +from minos.cqrs import CommandService, QueryService +from minos.networks import Request, Response, enroute + + +class Foo(Aggregate): + """Foo Aggregate class.""" + + bar: str + foobar: Optional[ModelRef[FooBar]] + + +class FooBar(AggregateRef): + """FooBar AggregateRef clas.""" + + something: str + + +class FooCommandService(CommandService): + """Foo Command Service class.""" + + @enroute.broker.command("CreateFoo") + @enroute.rest.command("/foos", "POST") + async def create_foo(self, request: Request) -> Response: + """Create a new Foo. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: A ``Response`` containing identifier of the already created instance. + """ + content = await request.content() + bar = content["bar"] + + foo = await Foo.create(bar) + + return Response({"uuid": foo.uuid}) + + +class FooQueryService(QueryService): + """Foo Query Service class.""" + + +if __name__ == '__main__': + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher.launch() + +``` + +
+ +Execute the following command to start the microservice: + +```shell +python foo.py +``` + ### Subscribe to an Event and Expose a Query Here is an example of the event and query handling. In this case, it must be defined on a `QueryService` class. In this case a `"FooCreated"` event is handled (and only a `print` of the content is performed). The event contents typically contains instances of `AggregateDiff` type, which is referred to the difference respect to the previously stored instance. The exposed query is connected to the calls that come from the `"/foos/example"` path and `"GET"` method and a naive string is returned. @@ -119,6 +345,8 @@ Here is an example of the event and query handling. In this case, it must be def *Disclaimer*: A real `QueryService` implementation must populate a query-oriented database based on the events to which is subscribed to, and expose queries performed over that query-oriented database. ```python +# foo.py + from minos.cqrs import QueryService from minos.networks import enroute, Request, Response @@ -146,16 +374,122 @@ class FooQueryService(QueryService): return Response("This is an example response!") ``` +
+ Click to show the full foo.py + +```python +# foo.py + +from __future__ import annotations + +from pathlib import Path +from typing import Optional + +from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.common import EntrypointLauncher +from minos.cqrs import CommandService, QueryService +from minos.networks import Request, Response, enroute + + +class Foo(Aggregate): + """Foo Aggregate class.""" + + bar: str + foobar: Optional[ModelRef[FooBar]] + + +class FooBar(AggregateRef): + """FooBar AggregateRef clas.""" + + something: str + + +class FooCommandService(CommandService): + """Foo Command Service class.""" + + @enroute.broker.command("CreateFoo") + @enroute.rest.command("/foos", "POST") + async def create_foo(self, request: Request) -> Response: + """Create a new Foo. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: A ``Response`` containing identifier of the already created instance. + """ + content = await request.content() + bar = content["bar"] + + foo = await Foo.create(bar) + + return Response({"uuid": foo.uuid}) + + +class FooQueryService(QueryService): + """Foo Query Service class.""" + + @enroute.broker.event("FooCreated") + async def foo_created(self, request: Request) -> None: + """Handle the "FooCreated" event. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: This method does not return anything. + """ + diff = await request.content() + print(f"A Foo was created: {diff}") + + @enroute.rest.query("/foos/example", "GET") + async def example(self, request: Request) -> Response: + """Handle the example query. + + :param request: The ``Request`` that contains the necessary information. + :return: A ``Response`` instance. + """ + return Response("This is an example response!") + + +if __name__ == '__main__': + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher.launch() + +``` + +
+ +Execute the following command to start the microservice: + +```shell +python foo.py +``` + ### Interact with another Microservice Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foo/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. ```python +# foo.py + from minos.common import ModelType from minos.cqrs import CommandService from minos.networks import enroute, Request from minos.saga import Saga, SagaContext, SagaRequest, SagaResponse + +class FooCommandService(CommandService): + """Foo Command Service class.""" + + @enroute.rest.command("/foo/add-foobar", "POST") + async def update_foo(self, request: Request) -> None: + """Run a saga example. + + :param request: The ``Request`` that contains the initial saga's context. + :return: This method does not return anything. + """ + content = await request.content() + + await self.saga_manager.run( + ADD_FOOBAR_SAGA, SagaContext(uuid=content["uuid"], something=content["something"]) + ) + + CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) @@ -186,11 +520,56 @@ ADD_FOOBAR_SAGA = ( .local_step().on_execute(_update_foo) .commit() ) +``` +
+ Click to show the full foo.py + +```python +# foo.py + +from __future__ import annotations + +from pathlib import Path +from typing import Optional + +from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.common import ModelType, EntrypointLauncher +from minos.cqrs import CommandService, QueryService +from minos.networks import Request, Response, enroute +from minos.saga import Saga, SagaContext, SagaRequest, SagaResponse + + +class Foo(Aggregate): + """Foo Aggregate class.""" + + bar: str + foobar: Optional[ModelRef[FooBar]] + + +class FooBar(AggregateRef): + """FooBar AggregateRef clas.""" + + something: str class FooCommandService(CommandService): """Foo Command Service class.""" + @enroute.broker.command("CreateFoo") + @enroute.rest.command("/foos", "POST") + async def create_foo(self, request: Request) -> Response: + """Create a new Foo. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: A ``Response`` containing identifier of the already created instance. + """ + content = await request.content() + bar = content["bar"] + + foo = await Foo.create(bar) + + return Response({"uuid": foo.uuid}) + @enroute.rest.command("/foo/add-foobar", "POST") async def update_foo(self, request: Request) -> None: """Run a saga example. @@ -201,11 +580,205 @@ class FooCommandService(CommandService): content = await request.content() await self.saga_manager.run( - ADD_FOOBAR_SAGA, {"uuid": content["uuid"], "something": content["something"]} + ADD_FOOBAR_SAGA, SagaContext(uuid=content["uuid"], something=content["something"]) ) + +CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) + + +def _create_foobar(context: SagaContext) -> SagaRequest: + something = context["something"] + content = CreateFooBarDTO(56, something) + return SagaRequest("CreateFooBar", content) + + +async def _success_foobar(context: SagaContext, response: SagaResponse) -> SagaContext: + context["foobar_uuid"] = await response.content() + return context + + +async def _error_foobar(context: SagaContext, response: SagaResponse) -> SagaContext: + raise ValueError("The foobar could not be created!") + + +async def _update_foo(context: SagaContext) -> None: + foo = await Foo.get(context["uuid"]) + foo.foobar = context["foobar_uuid"] + await foo.save() + + +ADD_FOOBAR_SAGA = ( + Saga() + .remote_step() + .on_execute(_create_foobar) + .on_success(_success_foobar) + .on_error(_error_foobar) + .local_step() + .on_execute(_update_foo) + .commit() +) + + +class FooQueryService(QueryService): + """Foo Query Service class.""" + + @enroute.broker.event("FooCreated") + async def foo_created(self, request: Request) -> None: + """Handle the "FooCreated" event. + + :param request: The ``Request`` that contains the ``bar`` attribute. + :return: This method does not return anything. + """ + diff = await request.content() + print(f"A Foo was created: {diff}") + + @enroute.rest.query("/foos/example", "GET") + async def example(self, request: Request) -> Response: + """Handle the example query. + + :param request: The ``Request`` that contains the necessary information. + :return: A ``Response`` instance. + """ + return Response("This is an example response!") + + +if __name__ == '__main__': + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher.launch() + +``` + +
+ +Note that in this case another microservice is needed to complete the saga. + +Here is the `foobar.yml` config file: +
+ Click to show the foobar.yml + +```yaml +# foobar.yml + +service: + name: foobar + aggregate: foobar.FooBar + injections: + lock_pool: minos.common.PostgreSqlLockPool + postgresql_pool: minos.common.PostgreSqlPool + broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher + broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder + broker_pool: minos.networks.BrokerClientPool + transaction_repository: minos.aggregate.PostgreSqlTransactionRepository + event_repository: minos.aggregate.PostgreSqlEventRepository + snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository + saga_manager: minos.saga.SagaManager + services: + - minos.networks.BrokerHandlerService + - minos.networks.RestService + - minos.networks.PeriodicTaskSchedulerService +middleware: + - minos.saga.transactional_command +services: + - minos.aggregate.TransactionService + - minos.aggregate.SnapshotService + - minos.saga.SagaService + - foobar.FooBarCommandService +rest: + host: 0.0.0.0 + port: 4546 +broker: + host: localhost + port: 9092 + queue: + database: foobar_db + user: minos + password: min0s + host: localhost + port: 5432 + records: 1000 + retry: 2 +repository: + database: foobar_db + user: minos + password: min0s + host: localhost + port: 5432 +snapshot: + database: foobar_db + user: minos + password: min0s + host: localhost + port: 5432 +saga: + storage: + path: "./foobar.lmdb" +``` + +
+ +Here is the `foobar.py` config file: +
+ Click to show the foobar.py + +```python +from __future__ import annotations + +from pathlib import Path + +from minos.aggregate import Aggregate +from minos.common import EntrypointLauncher +from minos.cqrs import CommandService +from minos.networks import Request, Response, enroute + + +class FooBar(Aggregate): + """FooBar AggregateRef clas.""" + + something: str + + +class FooBarCommandService(CommandService): + """Foo Command Service class.""" + + @enroute.broker.command("CreateFooBar") + async def create_foobar(self, request: Request) -> Response: + """Create a new FooBar. + + :param request: The ``Request`` that contains the ``something`` attribute. + :return: A ``Response`` containing identifier of the already created instance. + """ + content = await request.content() + something = content["text"] + + foobar = await FooBar.create(something) + + return Response(foobar.uuid) + + +if __name__ == '__main__': + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foobar.yml") + launcher.launch() + ``` +
+ +Execute the following command to start the `foobar` microservice: + +```shell +python foobar.py +``` + + + +Execute the following command to start the `foo` microservice: + +```shell +python foo.py +``` + + ## Packages This project follows a modular structure based on python packages. From 8459fccce90f64eddda12463f36350af0fd12370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:16:23 +0100 Subject: [PATCH 59/97] ISSUE #140 * Minor improvements. --- README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a076b380c..bc964cf31 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ The required environment to run this quickstart is the following: * A `python>=3.9` interpreter with version equal or greater to . * A `kafka` instance available at `localhost:9092` -* A `postgres` instance available at `localhost:5432` with a `foo_db` database accessible with `minos:min0s` credentials. +* A `postgres` instance available at `localhost:5432` with `foo_db` and `foobar_db` databases accessible with the `minos:min0s` credentials. * A `socket` available to use at `localhost:4545`. Note that these parameters can be configured on the `foo.yml` file. @@ -651,7 +651,15 @@ if __name__ == '__main__': -Note that in this case another microservice is needed to complete the saga. +Execute the following command to start the `foo` microservice: + +```shell +python foo.py +``` + +**Disclaimer**: Note that in this case another microservice is needed to complete the saga. + +#### The `foobar` Microservice Here is the `foobar.yml` config file:
@@ -770,15 +778,6 @@ Execute the following command to start the `foobar` microservice: python foobar.py ``` - - -Execute the following command to start the `foo` microservice: - -```shell -python foo.py -``` - - ## Packages This project follows a modular structure based on python packages. From aed4148bdd36e31235a7eea7e4b9aa4fa8a1c565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:18:28 +0100 Subject: [PATCH 60/97] ISSUE #140 * Minor improvements (2). --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bc964cf31..0e5a7ff8a 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ The required environment to run this quickstart is the following: * A `python>=3.9` interpreter with version equal or greater to . * A `kafka` instance available at `localhost:9092` * A `postgres` instance available at `localhost:5432` with `foo_db` and `foobar_db` databases accessible with the `minos:min0s` credentials. -* A `socket` available to use at `localhost:4545`. +* A `socket` available to use at `localhost:4545` and `localhost:4546`. Note that these parameters can be configured on the `foo.yml` file. From 05199f82c14c130cbb4b1f795afbd619815c05b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:35:02 +0100 Subject: [PATCH 61/97] ISSUE #140 * Add links. --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 0e5a7ff8a..8d72c4531 100644 --- a/README.md +++ b/README.md @@ -523,7 +523,7 @@ ADD_FOOBAR_SAGA = ( ```
Click to show the full foo.py - + ```python # foo.py @@ -728,6 +728,7 @@ saga: Here is the `foobar.py` config file:
Click to show the foobar.py + ```python from __future__ import annotations From 7288a8a89c583750f27f54cae6663fbad3c644fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:35:58 +0100 Subject: [PATCH 62/97] Revert "ISSUE #140" This reverts commit 05199f82c14c130cbb4b1f795afbd619815c05b7. --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 8d72c4531..0e5a7ff8a 100644 --- a/README.md +++ b/README.md @@ -523,7 +523,7 @@ ADD_FOOBAR_SAGA = ( ```
Click to show the full foo.py - + ```python # foo.py @@ -728,7 +728,6 @@ saga: Here is the `foobar.py` config file:
Click to show the foobar.py - ```python from __future__ import annotations From fa3b3934721e5a9a51a92291d47e27e8e58328b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:38:05 +0100 Subject: [PATCH 63/97] ISSUE #140 * Reorder code. --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e5a7ff8a..2de306d28 100644 --- a/README.md +++ b/README.md @@ -490,9 +490,6 @@ class FooCommandService(CommandService): ) -CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) - - def _create_foobar(context: SagaContext) -> SagaRequest: something = context["something"] content = CreateFooBarDTO(56, something) @@ -514,6 +511,9 @@ async def _update_foo(context: SagaContext) -> None: await foo.save() +CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) + + ADD_FOOBAR_SAGA = ( Saga() .remote_step().on_execute(_create_foobar).on_success(_success_foobar).on_error(_error_foobar) @@ -584,9 +584,6 @@ class FooCommandService(CommandService): ) -CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) - - def _create_foobar(context: SagaContext) -> SagaRequest: something = context["something"] content = CreateFooBarDTO(56, something) @@ -608,6 +605,9 @@ async def _update_foo(context: SagaContext) -> None: await foo.save() +CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) + + ADD_FOOBAR_SAGA = ( Saga() .remote_step() From 6a5191a694dc5c6918825dc041f36eb5df177db8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:38:54 +0100 Subject: [PATCH 64/97] ISSUE #140 * Minor changes. --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 2de306d28..b2464128d 100644 --- a/README.md +++ b/README.md @@ -513,7 +513,6 @@ async def _update_foo(context: SagaContext) -> None: CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) - ADD_FOOBAR_SAGA = ( Saga() .remote_step().on_execute(_create_foobar).on_success(_success_foobar).on_error(_error_foobar) @@ -607,7 +606,6 @@ async def _update_foo(context: SagaContext) -> None: CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) - ADD_FOOBAR_SAGA = ( Saga() .remote_step() From 302b4cb9f0a2509a90ffae1472df986d47ff45f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Tue, 1 Feb 2022 17:45:18 +0100 Subject: [PATCH 65/97] ISSUE #140 * Minor improvement. --- README.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b2464128d..9be1865a9 100644 --- a/README.md +++ b/README.md @@ -515,8 +515,12 @@ CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) ADD_FOOBAR_SAGA = ( Saga() - .remote_step().on_execute(_create_foobar).on_success(_success_foobar).on_error(_error_foobar) - .local_step().on_execute(_update_foo) + .remote_step() + .on_execute(_create_foobar) + .on_success(_success_foobar) + .on_error(_error_foobar) + .local_step() + .on_execute(_update_foo) .commit() ) ``` @@ -609,11 +613,11 @@ CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) ADD_FOOBAR_SAGA = ( Saga() .remote_step() - .on_execute(_create_foobar) - .on_success(_success_foobar) - .on_error(_error_foobar) + .on_execute(_create_foobar) + .on_success(_success_foobar) + .on_error(_error_foobar) .local_step() - .on_execute(_update_foo) + .on_execute(_update_foo) .commit() ) From 0e1e6f954bf5bc1bae9d9bf3200fe348edf872c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 09:36:46 +0100 Subject: [PATCH 66/97] ISSUE #96 * Move kafka related logic to a plugin package. --- .../workflows/minos-broker-kafka-publish.yml | 33 + .../workflows/minos-broker-kafka-tests.yml | 49 + .pre-commit-config.yaml | 7 + Makefile | 3 + .../minos/networks/__init__.py | 7 - .../minos/networks/brokers/__init__.py | 7 - .../networks/brokers/publishers/__init__.py | 7 - .../brokers/publishers/compositions.py | 36 - .../networks/brokers/subscribers/__init__.py | 6 - .../minos-microservice-networks/poetry.lock | 161 +- .../pyproject.toml | 1 - .../test_publishers/test_compositions.py | 32 - .../plugins/minos-broker-kafka/AUTHORS.md | 15 + .../plugins/minos-broker-kafka/HISTORY.md | 1 + packages/plugins/minos-broker-kafka/LICENSE | 21 + packages/plugins/minos-broker-kafka/Makefile | 42 + packages/plugins/minos-broker-kafka/README.md | 36 + .../plugins/minos-broker-kafka/RUNTHETESTS.md | 21 + packages/plugins/minos-broker-kafka/SETUP.md | 11 + .../plugins/minos-broker-kafka/docs/Makefile | 20 + .../minos-broker-kafka/docs/_static/style.css | 3 + .../docs/_templates/layout.html | 4 + .../minos-broker-kafka/docs/authors.md | 1 + .../plugins/minos-broker-kafka/docs/conf.py | 196 ++ .../minos-broker-kafka/docs/history.md | 1 + .../plugins/minos-broker-kafka/docs/index.md | 16 + .../plugins/minos-broker-kafka/docs/readme.md | 3 + .../minos-broker-kafka/docs/runthetests.md | 1 + .../plugins/minos-broker-kafka/docs/usage.md | 1 + .../minos/kafka/__init__.py | 15 + .../minos/kafka/publisher.py} | 28 +- .../minos/kafka/subscriber.py} | 7 +- .../plugins/minos-broker-kafka/poetry.lock | 1847 +++++++++++++++++ .../plugins/minos-broker-kafka/poetry.toml | 2 + .../plugins/minos-broker-kafka/pyproject.toml | 55 + packages/plugins/minos-broker-kafka/setup.cfg | 28 + .../minos-broker-kafka/tests/__init__.py | 0 .../minos-broker-kafka/tests/test_config.yml | 39 + .../tests/test_kafka/__init__.py | 0 .../tests/test_kafka/test_publisher.py} | 24 +- .../tests/test_kafka/test_subscriber.py} | 10 +- .../plugins/minos-broker-kafka/tests/utils.py | 6 + pyproject.toml | 1 + 43 files changed, 2585 insertions(+), 219 deletions(-) create mode 100644 .github/workflows/minos-broker-kafka-publish.yml create mode 100644 .github/workflows/minos-broker-kafka-tests.yml delete mode 100644 packages/core/minos-microservice-networks/minos/networks/brokers/publishers/compositions.py delete mode 100644 packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_compositions.py create mode 100644 packages/plugins/minos-broker-kafka/AUTHORS.md create mode 100644 packages/plugins/minos-broker-kafka/HISTORY.md create mode 100644 packages/plugins/minos-broker-kafka/LICENSE create mode 100644 packages/plugins/minos-broker-kafka/Makefile create mode 100644 packages/plugins/minos-broker-kafka/README.md create mode 100644 packages/plugins/minos-broker-kafka/RUNTHETESTS.md create mode 100644 packages/plugins/minos-broker-kafka/SETUP.md create mode 100644 packages/plugins/minos-broker-kafka/docs/Makefile create mode 100644 packages/plugins/minos-broker-kafka/docs/_static/style.css create mode 100644 packages/plugins/minos-broker-kafka/docs/_templates/layout.html create mode 100644 packages/plugins/minos-broker-kafka/docs/authors.md create mode 100755 packages/plugins/minos-broker-kafka/docs/conf.py create mode 100644 packages/plugins/minos-broker-kafka/docs/history.md create mode 100644 packages/plugins/minos-broker-kafka/docs/index.md create mode 100644 packages/plugins/minos-broker-kafka/docs/readme.md create mode 100644 packages/plugins/minos-broker-kafka/docs/runthetests.md create mode 100644 packages/plugins/minos-broker-kafka/docs/usage.md create mode 100644 packages/plugins/minos-broker-kafka/minos/kafka/__init__.py rename packages/{core/minos-microservice-networks/minos/networks/brokers/publishers/kafka.py => plugins/minos-broker-kafka/minos/kafka/publisher.py} (62%) rename packages/{core/minos-microservice-networks/minos/networks/brokers/subscribers/kafka.py => plugins/minos-broker-kafka/minos/kafka/subscriber.py} (98%) create mode 100644 packages/plugins/minos-broker-kafka/poetry.lock create mode 100644 packages/plugins/minos-broker-kafka/poetry.toml create mode 100644 packages/plugins/minos-broker-kafka/pyproject.toml create mode 100644 packages/plugins/minos-broker-kafka/setup.cfg create mode 100644 packages/plugins/minos-broker-kafka/tests/__init__.py create mode 100644 packages/plugins/minos-broker-kafka/tests/test_config.yml create mode 100644 packages/plugins/minos-broker-kafka/tests/test_kafka/__init__.py rename packages/{core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_kafka.py => plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py} (68%) rename packages/{core/minos-microservice-networks/tests/test_networks/test_brokers/test_subscribers/test_kafka.py => plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py} (99%) create mode 100644 packages/plugins/minos-broker-kafka/tests/utils.py diff --git a/.github/workflows/minos-broker-kafka-publish.yml b/.github/workflows/minos-broker-kafka-publish.yml new file mode 100644 index 000000000..4fb44f45f --- /dev/null +++ b/.github/workflows/minos-broker-kafka-publish.yml @@ -0,0 +1,33 @@ +name: "Publish: minos-broker-kafka" + +on: + push: + branches: + - '*.*.x' + paths: + - 'packages/plugins/minos-broker-kafka/**' + +jobs: + deploy: + runs-on: ubuntu-latest + container: python:3.9-buster + defaults: + run: + working-directory: packages/plugins/minos-broker-kafka + + steps: + + - name: Check out repository code + uses: actions/checkout@v2 + + - name: Install Poetry + uses: snok/install-poetry@v1.1.4 + + - name: Install dependencies + run: make install + + - name: Publish package + run: make release + env: + POETRY_HTTP_BASIC_PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} + POETRY_HTTP_BASIC_PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/minos-broker-kafka-tests.yml b/.github/workflows/minos-broker-kafka-tests.yml new file mode 100644 index 000000000..d2797c021 --- /dev/null +++ b/.github/workflows/minos-broker-kafka-tests.yml @@ -0,0 +1,49 @@ +name: "Test: minos-microservice-saga" + +on: + push: + branches: + - main + - '*.*.x' + pull_request: + paths: + - 'packages/plugins/minos-broker-kafka/**' + - 'packages/core/minos-microservice-networks/**' + - 'packages/core/minos-microservice-common/**' + +jobs: + build: + runs-on: ubuntu-latest + container: python:3.9-buster + defaults: + run: + working-directory: packages/plugins/minos-broker-kafka + + steps: + - name: Check out repository code + uses: actions/checkout@v2 + + - name: Install Poetry + uses: snok/install-poetry@v1.1.4 + + - name: Install dependencies + run: make install + + - name: Lint package + run: make lint + + - name: Test package with coverage + run: make coverage + + - name: Publish coverage + uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./packages/core/minos-microservice-saga/coverage.xml + fail_ci_if_error: true + + - name: Generate documentation + run: make docs + + - name: Generate build + run: make dist diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index db0b46298..af1dfda3b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,3 +36,10 @@ repos: name: Check minos-microservice-saga files: ^packages/core/minos-microservice-saga/ language: system + + - id: minos-broker-kafka-check + pass_filenames: false + entry: make --directory=packages/plugins/minos-broker-kafka check + name: Check minos-broker-kafka + files: ^packages/plugins/minos-broker-kafka/ + language: system diff --git a/Makefile b/Makefile index f6bdc6cc1..17c87da25 100644 --- a/Makefile +++ b/Makefile @@ -23,4 +23,7 @@ docs: $(MAKE) --directory=packages/core/minos-microservice-saga install docs cp -R packages/core/minos-microservice-saga/docs/_build/html $(DOCS_TARGET)/core/minos-microservice-saga + $(MAKE) --directory=packages/plugins/minos-broker-kafka install docs + cp -R packages/plugins/minos-broker-kafka/docs/_build/html $(DOCS_TARGET)/plugins/minos-broker-kafka + poetry run $(MAKE) --directory=docs html diff --git a/packages/core/minos-microservice-networks/minos/networks/__init__.py b/packages/core/minos-microservice-networks/minos/networks/__init__.py index 9ecff3bcc..d3f53ced6 100644 --- a/packages/core/minos-microservice-networks/minos/networks/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/__init__.py @@ -32,19 +32,12 @@ InMemoryBrokerSubscriberBuilder, InMemoryBrokerSubscriberQueue, InMemoryBrokerSubscriberQueueBuilder, - InMemoryQueuedKafkaBrokerPublisher, - InMemoryQueuedKafkaBrokerSubscriberBuilder, - KafkaBrokerPublisher, - KafkaBrokerSubscriber, - KafkaBrokerSubscriberBuilder, PostgreSqlBrokerPublisherQueue, PostgreSqlBrokerPublisherQueueQueryFactory, PostgreSqlBrokerQueue, PostgreSqlBrokerSubscriberQueue, PostgreSqlBrokerSubscriberQueueBuilder, PostgreSqlBrokerSubscriberQueueQueryFactory, - PostgreSqlQueuedKafkaBrokerPublisher, - PostgreSqlQueuedKafkaBrokerSubscriberBuilder, QueuedBrokerPublisher, QueuedBrokerSubscriber, QueuedBrokerSubscriberBuilder, diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/__init__.py b/packages/core/minos-microservice-networks/minos/networks/brokers/__init__.py index 7adaad1e8..97931078e 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/__init__.py @@ -33,11 +33,8 @@ BrokerPublisherQueue, InMemoryBrokerPublisher, InMemoryBrokerPublisherQueue, - InMemoryQueuedKafkaBrokerPublisher, - KafkaBrokerPublisher, PostgreSqlBrokerPublisherQueue, PostgreSqlBrokerPublisherQueueQueryFactory, - PostgreSqlQueuedKafkaBrokerPublisher, QueuedBrokerPublisher, ) from .subscribers import ( @@ -49,13 +46,9 @@ InMemoryBrokerSubscriberBuilder, InMemoryBrokerSubscriberQueue, InMemoryBrokerSubscriberQueueBuilder, - InMemoryQueuedKafkaBrokerSubscriberBuilder, - KafkaBrokerSubscriber, - KafkaBrokerSubscriberBuilder, PostgreSqlBrokerSubscriberQueue, PostgreSqlBrokerSubscriberQueueBuilder, PostgreSqlBrokerSubscriberQueueQueryFactory, - PostgreSqlQueuedKafkaBrokerSubscriberBuilder, QueuedBrokerSubscriber, QueuedBrokerSubscriberBuilder, ) diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/__init__.py b/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/__init__.py index 6e0ee6db1..50253e07f 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/__init__.py @@ -1,13 +1,6 @@ from .abc import ( BrokerPublisher, ) -from .compositions import ( - InMemoryQueuedKafkaBrokerPublisher, - PostgreSqlQueuedKafkaBrokerPublisher, -) -from .kafka import ( - KafkaBrokerPublisher, -) from .memory import ( InMemoryBrokerPublisher, ) diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/compositions.py b/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/compositions.py deleted file mode 100644 index 5d654d206..000000000 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/compositions.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import ( - annotations, -) - -from minos.common import ( - MinosConfig, -) - -from .kafka import ( - KafkaBrokerPublisher, -) -from .queued import ( - InMemoryBrokerPublisherQueue, - PostgreSqlBrokerPublisherQueue, - QueuedBrokerPublisher, -) - - -class PostgreSqlQueuedKafkaBrokerPublisher(QueuedBrokerPublisher): - """PostgreSql Queued Kafka Broker Publisher class.""" - - @classmethod - def _from_config(cls, config: MinosConfig, **kwargs) -> PostgreSqlQueuedKafkaBrokerPublisher: - impl = KafkaBrokerPublisher.from_config(config, **kwargs) - queue = PostgreSqlBrokerPublisherQueue.from_config(config, **kwargs) - return cls(impl, queue, **kwargs) - - -class InMemoryQueuedKafkaBrokerPublisher(QueuedBrokerPublisher): - """In Memory Queued Kafka Broker Publisher class.""" - - @classmethod - def _from_config(cls, config: MinosConfig, **kwargs) -> InMemoryQueuedKafkaBrokerPublisher: - impl = KafkaBrokerPublisher.from_config(config, **kwargs) - queue = InMemoryBrokerPublisherQueue.from_config(config, **kwargs) - return cls(impl, queue, **kwargs) diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/__init__.py b/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/__init__.py index 169d2cad0..f5282ff3b 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/__init__.py @@ -2,12 +2,6 @@ BrokerSubscriber, BrokerSubscriberBuilder, ) -from .kafka import ( - InMemoryQueuedKafkaBrokerSubscriberBuilder, - KafkaBrokerSubscriber, - KafkaBrokerSubscriberBuilder, - PostgreSqlQueuedKafkaBrokerSubscriberBuilder, -) from .memory import ( InMemoryBrokerSubscriber, InMemoryBrokerSubscriberBuilder, diff --git a/packages/core/minos-microservice-networks/poetry.lock b/packages/core/minos-microservice-networks/poetry.lock index 3d5c4a10e..f38722511 100644 --- a/packages/core/minos-microservice-networks/poetry.lock +++ b/packages/core/minos-microservice-networks/poetry.lock @@ -18,20 +18,6 @@ yarl = ">=1.0,<2.0" [package.extras] speedups = ["aiodns", "brotli", "cchardet"] -[[package]] -name = "aiokafka" -version = "0.7.2" -description = "Kafka integration with asyncio." -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -kafka-python = ">=2.0.0" - -[package.extras] -snappy = ["python-snappy (>=0.5)"] - [[package]] name = "aiomisc" version = "14.4.6" @@ -176,7 +162,7 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.0.10" +version = "2.0.11" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -220,7 +206,7 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] [[package]] name = "coverage" -version = "6.3" +version = "6.3.1" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -319,7 +305,7 @@ python-versions = ">=3.7" [[package]] name = "identify" -version = "2.4.5" +version = "2.4.7" description = "File identification library for Python" category = "dev" optional = false @@ -396,17 +382,6 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[[package]] -name = "kafka-python" -version = "2.0.2" -description = "Pure Python client for Apache Kafka" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -crc32c = ["crc32c"] - [[package]] name = "lmdb" version = "1.3.0" @@ -850,11 +825,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.3" +version = "2.0.0" description = "A lil' TOML parser" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "typing-extensions" @@ -922,7 +897,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "144987b09ed9467f52a2503d416fbe1b2a347e4b786d9af12f55da2b92423024" +content-hash = "fd4692e13c90173fcc79291142fe4cd1c377296740652d8c14165897b3839c47" [metadata.files] aiohttp = [ @@ -999,29 +974,6 @@ aiohttp = [ {file = "aiohttp-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:1c182cb873bc91b411e184dab7a2b664d4fea2743df0e4d57402f7f3fa644bac"}, {file = "aiohttp-3.8.1.tar.gz", hash = "sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578"}, ] -aiokafka = [ - {file = "aiokafka-0.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b19f077e12fe23e359f7a7dca9baf8532c63f4c8149703ce4c56de372d17e26c"}, - {file = "aiokafka-0.7.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d801bb2f5a4ae726a433ae74a5d34e7e0d44128de53c9c7eea5cb4cdaaf80175"}, - {file = "aiokafka-0.7.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3b1f1e9ad66883ed809d737d57edfb13f1aeb9b08c6fd6b71afefce712c13dad"}, - {file = "aiokafka-0.7.2-cp36-cp36m-win32.whl", hash = "sha256:383cc7d45b47676fea60dbedee747c5c08dde5c10b1be0afc6598fb21a7891b4"}, - {file = "aiokafka-0.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ce23baeaacf501f619967067d2c0d4c2b2b761012f9f9c8a49593e96c7550aff"}, - {file = "aiokafka-0.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c96824cef1a480fd2ab4bbd9e9aa737c9191211bab5f7787ef401926d5fda95d"}, - {file = "aiokafka-0.7.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34eda0b6eb794c36f4100be772f3b120a3c00daaf342f593f32994a762aed7e8"}, - {file = "aiokafka-0.7.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e6e78206e5d031e6644d3a46153a146d2d2afff4cf9da9a81edb9f8714114b62"}, - {file = "aiokafka-0.7.2-cp37-cp37m-win32.whl", hash = "sha256:ebbb258840f134bad0e6ca8681a87cd292a1f4ed7253a821c16b4e9f2610a04a"}, - {file = "aiokafka-0.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:16731e8aa0fc70dc35c31041599c9a5237dd5d2c1a4d04af58f30a942191a281"}, - {file = "aiokafka-0.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a9b6ecb606062b3595bc5104b85b42b62621a86d179b75d708279041152f461"}, - {file = "aiokafka-0.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cda55f5cfb19ea7d2f55a51d320a57312f152dab3e333fa1fbfcdde7a9e25a53"}, - {file = "aiokafka-0.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7d56627c3250ba2359dfa90f2c8a3ab995795e0116038905b2f8a608cd1fd606"}, - {file = "aiokafka-0.7.2-cp38-cp38-win32.whl", hash = "sha256:be43d7ddd700d501a6f4c59c859baa9888c2d086b69882f542951bae41234f6a"}, - {file = "aiokafka-0.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:594d2a29875f78d56251141ff95a982c5be64844dc9ae619c285f36c57a08c6e"}, - {file = "aiokafka-0.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5371bd663f545ced555775e7e49f39a54b243435098a9699582bb3b32884e332"}, - {file = "aiokafka-0.7.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b1958277eaa702509591c0674790a8c9aced8fef7723dafae0f9aec6d2da71a5"}, - {file = "aiokafka-0.7.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7fe02a3868236d84356d5fa7c7625ed3a27e52699477c5ee8bd5dc9b5adb592f"}, - {file = "aiokafka-0.7.2-cp39-cp39-win32.whl", hash = "sha256:a3bfe4ad7d3829a98c8391a9a28f179b47df4f66e26ea5b1c665f872b6e21809"}, - {file = "aiokafka-0.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:6116b68ca975caafd7efd338ffdaec63789e1c334af6174e20edc1d16d14e463"}, - {file = "aiokafka-0.7.2.tar.gz", hash = "sha256:a8fc41d18731d8879483aecb93ae7ebf5457f63daf4c8923ddc046792c2c3096"}, -] aiomisc = [ {file = "aiomisc-14.4.6-py3-none-any.whl", hash = "sha256:beaa248f92acce53857f459499210643274cf06b33c7eb0c9d1f35feaad0d054"}, {file = "aiomisc-14.4.6.tar.gz", hash = "sha256:a547a94908db9213fd0acde2674973b4a7a986ad82989215f73488903b65746e"}, @@ -1092,8 +1044,8 @@ cfgv = [ {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, - {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, + {file = "charset-normalizer-2.0.11.tar.gz", hash = "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"}, + {file = "charset_normalizer-2.0.11-py3-none-any.whl", hash = "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -1108,50 +1060,47 @@ colorlog = [ {file = "colorlog-6.6.0.tar.gz", hash = "sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8"}, ] coverage = [ - {file = "coverage-6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8071e7d9ba9f457fc674afc3de054450be2c9b195c470147fbbc082468d8ff7"}, - {file = "coverage-6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86c91c511853dfda81c2cf2360502cb72783f4b7cebabef27869f00cbe1db07d"}, - {file = "coverage-6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4ce3b647bd1792d4394f5690d9df6dc035b00bcdbc5595099c01282a59ae01"}, - {file = "coverage-6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a491e159294d756e7fc8462f98175e2d2225e4dbe062cca7d3e0d5a75ba6260"}, - {file = "coverage-6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d008e0f67ac800b0ca04d7914b8501312c8c6c00ad8c7ba17754609fae1231a"}, - {file = "coverage-6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4578728c36de2801c1deb1c6b760d31883e62e33f33c7ba8f982e609dc95167d"}, - {file = "coverage-6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7ee317486593193e066fc5e98ac0ce712178c21529a85c07b7cb978171f25d53"}, - {file = "coverage-6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2bc85664b06ba42d14bb74d6ddf19d8bfc520cb660561d2d9ce5786ae72f71b5"}, - {file = "coverage-6.3-cp310-cp310-win32.whl", hash = "sha256:27a94db5dc098c25048b0aca155f5fac674f2cf1b1736c5272ba28ead2fc267e"}, - {file = "coverage-6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bde4aeabc0d1b2e52c4036c54440b1ad05beeca8113f47aceb4998bb7471e2c2"}, - {file = "coverage-6.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:509c68c3e2015022aeda03b003dd68fa19987cdcf64e9d4edc98db41cfc45d30"}, - {file = "coverage-6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e4ff163602c5c77e7bb4ea81ba5d3b793b4419f8acd296aae149370902cf4e92"}, - {file = "coverage-6.3-cp311-cp311-win_amd64.whl", hash = "sha256:d1675db48490e5fa0b300f6329ecb8a9a37c29b9ab64fa9c964d34111788ca2d"}, - {file = "coverage-6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7eed8459a2b81848cafb3280b39d7d49950d5f98e403677941c752e7e7ee47cb"}, - {file = "coverage-6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b4285fde5286b946835a1a53bba3ad41ef74285ba9e8013e14b5ea93deaeafc"}, - {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4748349734110fd32d46ff8897b561e6300d8989a494ad5a0a2e4f0ca974fc7"}, - {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:823f9325283dc9565ba0aa2d240471a93ca8999861779b2b6c7aded45b58ee0f"}, - {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fff16a30fdf57b214778eff86391301c4509e327a65b877862f7c929f10a4253"}, - {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1a428bdbe71f9a8c270c7baab29e9552ac9d0e0cba5e7e9a4c9ee6465d258d"}, - {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7d82c610a2e10372e128023c5baf9ce3d270f3029fe7274ff5bc2897c68f1318"}, - {file = "coverage-6.3-cp37-cp37m-win32.whl", hash = "sha256:11e61c5548ecf74ea1f8b059730b049871f0e32b74f88bd0d670c20c819ad749"}, - {file = "coverage-6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0c3525b1a182c8ffc9bca7e56b521e0c2b8b3e82f033c8e16d6d721f1b54d6"}, - {file = "coverage-6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a189036c50dcd56100746139a459f0d27540fef95b09aba03e786540b8feaa5f"}, - {file = "coverage-6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32168001f33025fd756884d56d01adebb34e6c8c0b3395ca8584cdcee9c7c9d2"}, - {file = "coverage-6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5d79c9af3f410a2b5acad91258b4ae179ee9c83897eb9de69151b179b0227f5"}, - {file = "coverage-6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85c5fc9029043cf8b07f73fbb0a7ab6d3b717510c3b5642b77058ea55d7cacde"}, - {file = "coverage-6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7596aa2f2b8fa5604129cfc9a27ad9beec0a96f18078cb424d029fdd707468d"}, - {file = "coverage-6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ce443a3e6df90d692c38762f108fc4c88314bf477689f04de76b3f252e7a351c"}, - {file = "coverage-6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:012157499ec4f135fc36cd2177e3d1a1840af9b236cbe80e9a5ccfc83d912a69"}, - {file = "coverage-6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a34d313105cdd0d3644c56df2d743fe467270d6ab93b5d4a347eb9fec8924d6"}, - {file = "coverage-6.3-cp38-cp38-win32.whl", hash = "sha256:6e78b1e25e5c5695dea012be473e442f7094d066925604be20b30713dbd47f89"}, - {file = "coverage-6.3-cp38-cp38-win_amd64.whl", hash = "sha256:433b99f7b0613bdcdc0b00cc3d39ed6d756797e3b078d2c43f8a38288520aec6"}, - {file = "coverage-6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ed3244b415725f08ca3bdf02ed681089fd95e9465099a21c8e2d9c5d6ca2606"}, - {file = "coverage-6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab4fc4b866b279740e0d917402f0e9a08683e002f43fa408e9655818ed392196"}, - {file = "coverage-6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8582e9280f8d0f38114fe95a92ae8d0790b56b099d728cc4f8a2e14b1c4a18c"}, - {file = "coverage-6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c72bb4679283c6737f452eeb9b2a0e570acaef2197ad255fb20162adc80bea76"}, - {file = "coverage-6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca29c352389ea27a24c79acd117abdd8a865c6eb01576b6f0990cd9a4e9c9f48"}, - {file = "coverage-6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:152cc2624381df4e4e604e21bd8e95eb8059535f7b768c1fb8b8ae0b26f47ab0"}, - {file = "coverage-6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:51372e24b1f7143ee2df6b45cff6a721f3abe93b1e506196f3ffa4155c2497f7"}, - {file = "coverage-6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:72d9d186508325a456475dd05b1756f9a204c7086b07fffb227ef8cee03b1dc2"}, - {file = "coverage-6.3-cp39-cp39-win32.whl", hash = "sha256:649df3641eb351cdfd0d5533c92fc9df507b6b2bf48a7ef8c71ab63cbc7b5c3c"}, - {file = "coverage-6.3-cp39-cp39-win_amd64.whl", hash = "sha256:e67ccd53da5958ea1ec833a160b96357f90859c220a00150de011b787c27b98d"}, - {file = "coverage-6.3-pp36.pp37.pp38-none-any.whl", hash = "sha256:27ac7cb84538e278e07569ceaaa6f807a029dc194b1c819a9820b9bb5dbf63ab"}, - {file = "coverage-6.3.tar.gz", hash = "sha256:987a84ff98a309994ca77ed3cc4b92424f824278e48e4bf7d1bb79a63cfe2099"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"}, + {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"}, + {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"}, + {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"}, + {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"}, + {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"}, + {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"}, + {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"}, + {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"}, + {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"}, + {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"}, + {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"}, ] crontab = [ {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, @@ -1290,8 +1239,8 @@ frozenlist = [ {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"}, ] identify = [ - {file = "identify-2.4.5-py2.py3-none-any.whl", hash = "sha256:d27d10099844741c277b45d809bd452db0d70a9b41ea3cd93799ebbbcc6dcb29"}, - {file = "identify-2.4.5.tar.gz", hash = "sha256:d11469ff952a4d7fd7f9be520d335dc450f585d474b39b5dfb86a500831ab6c7"}, + {file = "identify-2.4.7-py2.py3-none-any.whl", hash = "sha256:e64210654dfbca6ced33230eb1b137591a0981425e1a60b4c6c36309f787bbd5"}, + {file = "identify-2.4.7.tar.gz", hash = "sha256:8408f01e0be25492017346d7dffe7e7711b762b23375c775d24d3bc38618fabc"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1317,10 +1266,6 @@ jinja2 = [ {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, ] -kafka-python = [ - {file = "kafka-python-2.0.2.tar.gz", hash = "sha256:04dfe7fea2b63726cd6f3e79a2d86e709d608d74406638c5da33a01d45a9d7e3"}, - {file = "kafka_python-2.0.2-py2.py3-none-any.whl", hash = "sha256:2d92418c7cb1c298fa6c7f0fb3519b520d0d7526ac6cb7ae2a4fc65a51a94b6e"}, -] lmdb = [ {file = "lmdb-1.3.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:63cb73fe7ce9eb93d992d632c85a0476b4332670d9e6a2802b5062f603b7809f"}, {file = "lmdb-1.3.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:abbc439cd9fe60ffd6197009087ea885ac150017dc85384093b1d376f83f0ec4"}, @@ -1731,8 +1676,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, + {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, + {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, ] typing-extensions = [ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, diff --git a/packages/core/minos-microservice-networks/pyproject.toml b/packages/core/minos-microservice-networks/pyproject.toml index 8bf1ae6eb..8b54496f5 100644 --- a/packages/core/minos-microservice-networks/pyproject.toml +++ b/packages/core/minos-microservice-networks/pyproject.toml @@ -32,7 +32,6 @@ include = [ [tool.poetry.dependencies] python = "^3.9" minos-microservice-common = "^0.4.0" -aiokafka = "^0.7.0" aiomisc = "^14.0.3" aiopg = "^1.2.1" aiohttp = "^3.7.4" diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_compositions.py b/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_compositions.py deleted file mode 100644 index e86700ef8..000000000 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_compositions.py +++ /dev/null @@ -1,32 +0,0 @@ -import unittest - -from minos.networks import ( - InMemoryBrokerPublisherQueue, - InMemoryQueuedKafkaBrokerPublisher, - KafkaBrokerPublisher, - PostgreSqlBrokerPublisherQueue, - PostgreSqlQueuedKafkaBrokerPublisher, -) -from tests.utils import ( - CONFIG_FILE_PATH, -) - - -class TestPostgreSqlQueuedKafkaBrokerPublisher(unittest.IsolatedAsyncioTestCase): - def test_from_config(self): - publisher = PostgreSqlQueuedKafkaBrokerPublisher.from_config(CONFIG_FILE_PATH) - self.assertIsInstance(publisher, PostgreSqlQueuedKafkaBrokerPublisher) - self.assertIsInstance(publisher.impl, KafkaBrokerPublisher) - self.assertIsInstance(publisher.queue, PostgreSqlBrokerPublisherQueue) - - -class TestInMemoryQueuedKafkaBrokerPublisher(unittest.IsolatedAsyncioTestCase): - def test_from_config(self): - publisher = InMemoryQueuedKafkaBrokerPublisher.from_config(CONFIG_FILE_PATH) - self.assertIsInstance(publisher, InMemoryQueuedKafkaBrokerPublisher) - self.assertIsInstance(publisher.impl, KafkaBrokerPublisher) - self.assertIsInstance(publisher.queue, InMemoryBrokerPublisherQueue) - - -if __name__ == "__main__": - unittest.main() diff --git a/packages/plugins/minos-broker-kafka/AUTHORS.md b/packages/plugins/minos-broker-kafka/AUTHORS.md new file mode 100644 index 000000000..30ff94991 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/AUTHORS.md @@ -0,0 +1,15 @@ +# Credits + +## Development Lead + +* Andrea Mucci + +## Core Devs + +* Sergio Garcia Prado +* Vladyslav Fenchak +* Alberto Amigo Alonso + +## Contributors + +None yet. Why not be the first? diff --git a/packages/plugins/minos-broker-kafka/HISTORY.md b/packages/plugins/minos-broker-kafka/HISTORY.md new file mode 100644 index 000000000..e061a5372 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/HISTORY.md @@ -0,0 +1 @@ +# History diff --git a/packages/plugins/minos-broker-kafka/LICENSE b/packages/plugins/minos-broker-kafka/LICENSE new file mode 100644 index 000000000..4daf85bf2 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Clariteia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/plugins/minos-broker-kafka/Makefile b/packages/plugins/minos-broker-kafka/Makefile new file mode 100644 index 000000000..854bc90bc --- /dev/null +++ b/packages/plugins/minos-broker-kafka/Makefile @@ -0,0 +1,42 @@ +.PHONY: docs + +lint: + poetry run flake8 + +test: + poetry run pytest + +coverage: + poetry run coverage run -m pytest + poetry run coverage report -m + poetry run coverage xml + +reformat: + poetry run black --line-length 120 minos tests + poetry run isort minos tests + +docs: + rm -rf docs/api + poetry run $(MAKE) --directory=docs html + +release: + $(MAKE) dist + poetry publish + +dist: + poetry build + ls -l dist + +install: + poetry install + +update: + poetry update + +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist diff --git a/packages/plugins/minos-broker-kafka/README.md b/packages/plugins/minos-broker-kafka/README.md new file mode 100644 index 000000000..a632668b8 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/README.md @@ -0,0 +1,36 @@ +

+ Minos logo +

+ +## minos-broker-kafka + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-broker-kafka.svg)](https://pypi.org/project/minos-broker-kafka/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary + +Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. +Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an +asynchronous environment. + +## Documentation + +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). + +## Source Code + +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). + +## Getting Help + +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). + +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. + +## License + +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. diff --git a/packages/plugins/minos-broker-kafka/RUNTHETESTS.md b/packages/plugins/minos-broker-kafka/RUNTHETESTS.md new file mode 100644 index 000000000..8b5e95b1f --- /dev/null +++ b/packages/plugins/minos-broker-kafka/RUNTHETESTS.md @@ -0,0 +1,21 @@ +Run the tests +============== + +In order to run the tests, please make sure you have the `Docker Engine `_ +and `Docker Compose `_ installed. + +Move into tests/ directory + +`cd tests/` + +Run service dependencies: + +`docker-compose up -d` + +Install library dependencies: + +`make install` + +Run tests: + +`make test` diff --git a/packages/plugins/minos-broker-kafka/SETUP.md b/packages/plugins/minos-broker-kafka/SETUP.md new file mode 100644 index 000000000..8203965c7 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/SETUP.md @@ -0,0 +1,11 @@ +Set up a development environment +================================= + +Since we use `poetry` as the default package manager, it must be installed. Please refer to +`https://python-poetry.org/docs/#installation`. + +Run `poetry install` to get the dependencies. + +Run `pre-commit install` to set the git checks before commiting. + +Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. diff --git a/packages/plugins/minos-broker-kafka/docs/Makefile b/packages/plugins/minos-broker-kafka/docs/Makefile new file mode 100644 index 000000000..09dee594d --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = minos-broker-kafka +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/plugins/minos-broker-kafka/docs/_static/style.css b/packages/plugins/minos-broker-kafka/docs/_static/style.css new file mode 100644 index 000000000..8aa6c288f --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/_static/style.css @@ -0,0 +1,3 @@ +.wy-nav-content { + max-width: 1200px !important; +} diff --git a/packages/plugins/minos-broker-kafka/docs/_templates/layout.html b/packages/plugins/minos-broker-kafka/docs/_templates/layout.html new file mode 100644 index 000000000..b0a448060 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/_templates/layout.html @@ -0,0 +1,4 @@ +{% extends "!layout.html" %} +{% block extrahead %} + +{% endblock %} \ No newline at end of file diff --git a/packages/plugins/minos-broker-kafka/docs/authors.md b/packages/plugins/minos-broker-kafka/docs/authors.md new file mode 100644 index 000000000..cf16fc494 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/authors.md @@ -0,0 +1 @@ +.. mdinclude:: ../AUTHORS.md diff --git a/packages/plugins/minos-broker-kafka/docs/conf.py b/packages/plugins/minos-broker-kafka/docs/conf.py new file mode 100755 index 000000000..af22ac1a3 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/conf.py @@ -0,0 +1,196 @@ +#!/usr/bin/env python +# +# minos documentation build configuration file, created by +# sphinx-quickstart on Fri Jun 9 13:47:02 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another +# directory, add these directories to sys.path here. If the directory is +# relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("..")) + +import sphinx_rtd_theme + +from minos import ( + kafka, +) + +# -- General configuration --------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. + + +extensions = [ + "sphinxcontrib.apidoc", + "sphinx.ext.autodoc", + "sphinx_autodoc_typehints", + "sphinx.ext.viewcode", + "sphinx_rtd_theme", + "m2r2", +] +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = [".rst", ".md"] + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "Minos Broker Kafka" +copyright = "2021, Clariteia" +author = "Minos Framework Devs" + +# The version info for the project you're documenting, acts as replacement +# for |version| and |release|, also used in various other places throughout +# the built documents. +# +# The short X.Y version. +version = kafka.__version__ +# The full version, including alpha/beta/rc tags. +release = kafka.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +todo_include_todos = False + + +# -- Options for HTML output ------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# + +html_theme = "sphinx_rtd_theme" + +# Theme options are theme-specific and customize the look and feel of a +# theme further. For a list of options available for each theme, see the +# documentation. +# + +# html_theme_options = { +# "codecov_button": True, +# "description": "Reactive microservices for an asynchronous world", +# "github_button": True, +# "github_user": "Clariteia", +# "github_repo": "cqrs", +# "github_type": "star", +# } + +html_sidebars = {"**": ["about.html", "navigation.html", "searchbox.html"]} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + + +# -- Options for HTMLHelp output --------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "minosdoc" + + +# -- Options for LaTeX output ------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto, manual, or own class]). +latex_documents = [ + (master_doc, "minos.tex", "Minos Broker Kafka Documentation", "Minos Framework Devs", "manual"), +] + + +# -- Options for manual page output ------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [(master_doc, "minos", "Minos Broker Kafka Documentation", [author], 1)] + + +# -- Options for Texinfo output ---------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "minos", + "Minos Broker Kafka Documentation", + author, + "minos", + "One line description of project.", + "Miscellaneous", + ), +] + +# "apidoc" extension +apidoc_module_dir = "../minos" +apidoc_output_dir = "api" +apidoc_separate_modules = True +autodoc_default_options = { + "inherited-members": True, + "special-members": "__init__", + "undoc-members": True, +} + +apidoc_toc_file = False +apidoc_module_first = True +apidoc_extra_args = [ + "--force", + "--implicit-namespaces", +] +# "autodoc typehints" extension + +set_type_checking_flag = True +typehints_fully_qualified = True diff --git a/packages/plugins/minos-broker-kafka/docs/history.md b/packages/plugins/minos-broker-kafka/docs/history.md new file mode 100644 index 000000000..d26e5be83 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/history.md @@ -0,0 +1 @@ +.. mdinclude:: ../HISTORY.md diff --git a/packages/plugins/minos-broker-kafka/docs/index.md b/packages/plugins/minos-broker-kafka/docs/index.md new file mode 100644 index 000000000..7ddfe91be --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/index.md @@ -0,0 +1,16 @@ +# Welcome to Minos Broker Kafka's documentation! + +.. toctree:: + :maxdepth: 2 + + readme + runthetests + usage + api/minos + authors + history + +# Indices and tables +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/packages/plugins/minos-broker-kafka/docs/readme.md b/packages/plugins/minos-broker-kafka/docs/readme.md new file mode 100644 index 000000000..da72dbef1 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/readme.md @@ -0,0 +1,3 @@ +# Introduction + +.. mdinclude:: ../README.md diff --git a/packages/plugins/minos-broker-kafka/docs/runthetests.md b/packages/plugins/minos-broker-kafka/docs/runthetests.md new file mode 100644 index 000000000..309db1b96 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/runthetests.md @@ -0,0 +1 @@ +.. mdinclude:: ../RUNTHETESTS.md diff --git a/packages/plugins/minos-broker-kafka/docs/usage.md b/packages/plugins/minos-broker-kafka/docs/usage.md new file mode 100644 index 000000000..8f04b05ad --- /dev/null +++ b/packages/plugins/minos-broker-kafka/docs/usage.md @@ -0,0 +1 @@ +# Usage diff --git a/packages/plugins/minos-broker-kafka/minos/kafka/__init__.py b/packages/plugins/minos-broker-kafka/minos/kafka/__init__.py new file mode 100644 index 000000000..a41da4687 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/minos/kafka/__init__.py @@ -0,0 +1,15 @@ +__author__ = "Minos Framework Devs" +__email__ = "hey@minos.run" +__version__ = "0.4.1" + +from .publisher import ( + InMemoryQueuedKafkaBrokerPublisher, + KafkaBrokerPublisher, + PostgreSqlQueuedKafkaBrokerPublisher, +) +from .subscriber import ( + InMemoryQueuedKafkaBrokerSubscriberBuilder, + KafkaBrokerSubscriber, + KafkaBrokerSubscriberBuilder, + PostgreSqlQueuedKafkaBrokerSubscriberBuilder, +) diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/kafka.py b/packages/plugins/minos-broker-kafka/minos/kafka/publisher.py similarity index 62% rename from packages/core/minos-microservice-networks/minos/networks/brokers/publishers/kafka.py rename to packages/plugins/minos-broker-kafka/minos/kafka/publisher.py index 1f0169a98..06a28561f 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/kafka.py +++ b/packages/plugins/minos-broker-kafka/minos/kafka/publisher.py @@ -21,17 +21,37 @@ from minos.common import ( MinosConfig, ) - -from ..messages import ( +from minos.networks import ( BrokerMessage, -) -from .abc import ( BrokerPublisher, + InMemoryBrokerPublisherQueue, + PostgreSqlBrokerPublisherQueue, + QueuedBrokerPublisher, ) logger = logging.getLogger(__name__) +class PostgreSqlQueuedKafkaBrokerPublisher(QueuedBrokerPublisher): + """PostgreSql Queued Kafka Broker Publisher class.""" + + @classmethod + def _from_config(cls, config: MinosConfig, **kwargs) -> PostgreSqlQueuedKafkaBrokerPublisher: + impl = KafkaBrokerPublisher.from_config(config, **kwargs) + queue = PostgreSqlBrokerPublisherQueue.from_config(config, **kwargs) + return cls(impl, queue, **kwargs) + + +class InMemoryQueuedKafkaBrokerPublisher(QueuedBrokerPublisher): + """In Memory Queued Kafka Broker Publisher class.""" + + @classmethod + def _from_config(cls, config: MinosConfig, **kwargs) -> InMemoryQueuedKafkaBrokerPublisher: + impl = KafkaBrokerPublisher.from_config(config, **kwargs) + queue = InMemoryBrokerPublisherQueue.from_config(config, **kwargs) + return cls(impl, queue, **kwargs) + + class KafkaBrokerPublisher(BrokerPublisher): """Kafka Broker Publisher class.""" diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/kafka.py b/packages/plugins/minos-broker-kafka/minos/kafka/subscriber.py similarity index 98% rename from packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/kafka.py rename to packages/plugins/minos-broker-kafka/minos/kafka/subscriber.py index ea6ee6b0e..c1aac0ed7 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/kafka.py +++ b/packages/plugins/minos-broker-kafka/minos/kafka/subscriber.py @@ -36,15 +36,10 @@ from minos.common import ( MinosConfig, ) - -from ..messages import ( +from minos.networks import ( BrokerMessage, -) -from .abc import ( BrokerSubscriber, BrokerSubscriberBuilder, -) -from .queued import ( InMemoryBrokerSubscriberQueueBuilder, PostgreSqlBrokerSubscriberQueueBuilder, QueuedBrokerSubscriberBuilder, diff --git a/packages/plugins/minos-broker-kafka/poetry.lock b/packages/plugins/minos-broker-kafka/poetry.lock new file mode 100644 index 000000000..d5ebcbc13 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/poetry.lock @@ -0,0 +1,1847 @@ +[[package]] +name = "aiohttp" +version = "3.8.1" +description = "Async http client/server framework (asyncio)" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["aiodns", "brotli", "cchardet"] + +[[package]] +name = "aiokafka" +version = "0.7.2" +description = "Kafka integration with asyncio." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +kafka-python = ">=2.0.0" + +[package.extras] +snappy = ["python-snappy (>=0.5)"] + +[[package]] +name = "aiomisc" +version = "14.4.6" +description = "aiomisc - miscellaneous utils for asyncio" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +colorlog = "*" + +[package.extras] +aiohttp = ["aiohttp"] +asgi = ["aiohttp-asgi"] +carbon = ["aiocarbon (>=0.15,<1.0)"] +contextvars = ["contextvars (>=2.4,<3.0)"] +cron = ["croniter (>=0.3.34,<0.4.0)"] +develop = ["aiocontextvars (==0.2.2)", "aiohttp (<4)", "aiohttp-asgi", "async-timeout", "coverage (==4.5.1)", "coveralls", "croniter (>=0.3.34,<0.4.0)", "fastapi", "freezegun (<1.1)", "mypy (>=0.782,<1.0)", "pylava", "pytest", "pytest-cov (>=2.5.1,<2.6.0)", "pytest-freezegun (>=0.4.2,<0.5.0)", "sphinx (>=3.5.1)", "sphinx-autobuild", "sphinx-intl", "timeout-decorator", "types-croniter", "tox (>=2.4)"] +raven = ["raven-aiohttp"] +uvloop = ["uvloop (>=0.14,<1)"] + +[[package]] +name = "aiopg" +version = "1.3.3" +description = "Postgres integration with asyncio." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +async-timeout = ">=3.0,<5.0" +psycopg2-binary = ">=2.8.4" + +[package.extras] +sa = ["sqlalchemy[postgresql_psycopg2binary] (>=1.3,<1.5)"] + +[[package]] +name = "aiosignal" +version = "1.2.0" +description = "aiosignal: a list of registered asynchronous callbacks" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "async-timeout" +version = "4.0.2" +description = "Timeout context manager for asyncio programs" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "babel" +version = "2.9.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +name = "black" +version = "22.1.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[[package]] +name = "charset-normalizer" +version = "2.0.11" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.0.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "colorlog" +version = "6.6.0" +description = "Add colours to the output of Python's logging module." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +development = ["black", "flake8", "mypy", "pytest", "types-colorama"] + +[[package]] +name = "coverage" +version = "6.3.1" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "crontab" +version = "0.23.0" +description = "Parse and use crontab schedules in Python" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "dependency-injector" +version = "4.38.0" +description = "Dependency injection framework for Python" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.7.0,<=1.16.0" + +[package.extras] +aiohttp = ["aiohttp"] +flask = ["flask"] +pydantic = ["pydantic"] +yaml = ["pyyaml"] + +[[package]] +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "fastavro" +version = "1.4.9" +description = "Fast read/write of AVRO files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +codecs = ["python-snappy", "zstandard", "lz4"] +lz4 = ["lz4"] +snappy = ["python-snappy"] +zstandard = ["zstandard"] + +[[package]] +name = "filelock" +version = "3.4.2" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] + +[[package]] +name = "flake8" +version = "4.0.1" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.8.0,<2.9.0" +pyflakes = ">=2.4.0,<2.5.0" + +[[package]] +name = "frozenlist" +version = "1.3.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "identify" +version = "2.4.7" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.3.0" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "4.10.1" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "kafka-python" +version = "2.0.2" +description = "Pure Python client for Apache Kafka" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +crc32c = ["crc32c"] + +[[package]] +name = "lmdb" +version = "1.3.0" +description = "Universal Python binding for the LMDB 'Lightning' Database" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "m2r2" +version = "0.3.2" +description = "Markdown and reStructuredText in a single file." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +docutils = "*" +mistune = "0.8.4" + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "minos-microservice-common" +version = "0.4.1" +description = "Python Package with common Classes and Utilities used in Minos Microservices." +category = "main" +optional = false +python-versions = "^3.9" +develop = true + +[package.dependencies] +aiomisc = "^14.0.3" +aiopg = "^1.2.1" +cached-property = "^1.5.2" +dependency-injector = "^4.32.2" +fastavro = "^1.4.0" +lmdb = "^1.2.1" +orjson = "^3.5.2" +PyYAML = ">=5.4.1,<7.0.0" + +[package.source] +type = "directory" +url = "../../core/minos-microservice-common" + +[[package]] +name = "minos-microservice-networks" +version = "0.4.1" +description = "Python Package with the common network classes and utilities used in Minos Microservice." +category = "main" +optional = false +python-versions = "^3.9" +develop = true + +[package.dependencies] +aiohttp = "^3.7.4" +aiokafka = "^0.7.0" +aiomisc = "^14.0.3" +aiopg = "^1.2.1" +crontab = "^0.23.0" +dependency-injector = "^4.32.2" +minos-microservice-common = "^0.4.0" +orjson = "^3.6.5" + +[package.source] +type = "directory" +url = "../../core/minos-microservice-networks" + +[[package]] +name = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "multidict" +version = "6.0.2" +description = "multidict implementation" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "nodeenv" +version = "1.6.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "orjson" +version = "3.6.6" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "pbr" +version = "5.8.0" +description = "Python Build Reasonableness" +category = "dev" +optional = false +python-versions = ">=2.6" + +[[package]] +name = "platformdirs" +version = "2.4.1" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.17.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + +[[package]] +name = "psycopg2-binary" +version = "2.9.3" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pycodestyle" +version = "2.8.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pyflakes" +version = "2.4.0" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.11.2" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "pyparsing" +version = "3.0.7" +description = "Python parsing module" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "6.2.5" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "pytz" +version = "2021.3" +description = "World timezone definitions, modern and historical" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "4.4.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] + +[[package]] +name = "sphinx-autodoc-typehints" +version = "1.16.0" +description = "Type hints (PEP 484) support for the Sphinx autodoc extension" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Sphinx = ">=4" + +[package.extras] +testing = ["covdefaults (>=2)", "coverage (>=6)", "diff-cover (>=6.4)", "nptyping (>=1)", "pytest (>=6)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=3.5)"] +type_comments = ["typed-ast (>=1.4.0)"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.0.0" +description = "Read the Docs theme for Sphinx" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] + +[[package]] +name = "sphinxcontrib-apidoc" +version = "0.3.0" +description = "A Sphinx extension for running 'sphinx-apidoc' on each build" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pbr = "*" +Sphinx = ">=1.6.0" + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.0" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "typing-extensions" +version = "4.0.1" +description = "Backported and Experimental Type Hints for Python 3.6+" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "urllib3" +version = "1.26.8" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.13.0" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] + +[[package]] +name = "yarl" +version = "1.7.2" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.7.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.9" +content-hash = "eb405d50d73d2f9c30fcdb13ab2b1aeaa55dd25543c9ecbd93550484f437a0eb" + +[metadata.files] +aiohttp = [ + {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8"}, + {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8"}, + {file = "aiohttp-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a79004bb58748f31ae1cbe9fa891054baaa46fb106c2dc7af9f8e3304dc30316"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12de6add4038df8f72fac606dff775791a60f113a725c960f2bab01d8b8e6b15"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f0d5f33feb5f69ddd57a4a4bd3d56c719a141080b445cbf18f238973c5c9923"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eaba923151d9deea315be1f3e2b31cc39a6d1d2f682f942905951f4e40200922"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:099ebd2c37ac74cce10a3527d2b49af80243e2a4fa39e7bce41617fbc35fa3c1"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e5d962cf7e1d426aa0e528a7e198658cdc8aa4fe87f781d039ad75dcd52c516"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fa0ffcace9b3aa34d205d8130f7873fcfefcb6a4dd3dd705b0dab69af6712642"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61bfc23df345d8c9716d03717c2ed5e27374e0fe6f659ea64edcd27b4b044cf7"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:31560d268ff62143e92423ef183680b9829b1b482c011713ae941997921eebc8"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:01d7bdb774a9acc838e6b8f1d114f45303841b89b95984cbb7d80ea41172a9e3"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:97ef77eb6b044134c0b3a96e16abcb05ecce892965a2124c566af0fd60f717e2"}, + {file = "aiohttp-3.8.1-cp310-cp310-win32.whl", hash = "sha256:c2aef4703f1f2ddc6df17519885dbfa3514929149d3ff900b73f45998f2532fa"}, + {file = "aiohttp-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:713ac174a629d39b7c6a3aa757b337599798da4c1157114a314e4e391cd28e32"}, + {file = "aiohttp-3.8.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:473d93d4450880fe278696549f2e7aed8cd23708c3c1997981464475f32137db"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b5eeae8e019e7aad8af8bb314fb908dd2e028b3cdaad87ec05095394cce632"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af642b43ce56c24d063325dd2cf20ee012d2b9ba4c3c008755a301aaea720ad"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3630c3ef435c0a7c549ba170a0633a56e92629aeed0e707fec832dee313fb7a"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4a4a4e30bf1edcad13fb0804300557aedd07a92cabc74382fdd0ba6ca2661091"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f8b01295e26c68b3a1b90efb7a89029110d3a4139270b24fda961893216c440"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a25fa703a527158aaf10dafd956f7d42ac6d30ec80e9a70846253dd13e2f067b"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5bfde62d1d2641a1f5173b8c8c2d96ceb4854f54a44c23102e2ccc7e02f003ec"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:51467000f3647d519272392f484126aa716f747859794ac9924a7aafa86cd411"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:03a6d5349c9ee8f79ab3ff3694d6ce1cfc3ced1c9d36200cb8f08ba06bd3b782"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:102e487eeb82afac440581e5d7f8f44560b36cf0bdd11abc51a46c1cd88914d4"}, + {file = "aiohttp-3.8.1-cp36-cp36m-win32.whl", hash = "sha256:4aed991a28ea3ce320dc8ce655875e1e00a11bdd29fe9444dd4f88c30d558602"}, + {file = "aiohttp-3.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b0e20cddbd676ab8a64c774fefa0ad787cc506afd844de95da56060348021e96"}, + {file = "aiohttp-3.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37951ad2f4a6df6506750a23f7cbabad24c73c65f23f72e95897bb2cecbae676"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c23b1ad869653bc818e972b7a3a79852d0e494e9ab7e1a701a3decc49c20d51"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15b09b06dae900777833fe7fc4b4aa426556ce95847a3e8d7548e2d19e34edb8"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:477c3ea0ba410b2b56b7efb072c36fa91b1e6fc331761798fa3f28bb224830dd"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2f2f69dca064926e79997f45b2f34e202b320fd3782f17a91941f7eb85502ee2"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef9612483cb35171d51d9173647eed5d0069eaa2ee812793a75373447d487aa4"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6d69f36d445c45cda7b3b26afef2fc34ef5ac0cdc75584a87ef307ee3c8c6d00"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:55c3d1072704d27401c92339144d199d9de7b52627f724a949fc7d5fc56d8b93"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d00268fcb9f66fbcc7cd9fe423741d90c75ee029a1d15c09b22d23253c0a44"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:07b05cd3305e8a73112103c834e91cd27ce5b4bd07850c4b4dbd1877d3f45be7"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c34dc4958b232ef6188c4318cb7b2c2d80521c9a56c52449f8f93ab7bc2a8a1c"}, + {file = "aiohttp-3.8.1-cp37-cp37m-win32.whl", hash = "sha256:d2f9b69293c33aaa53d923032fe227feac867f81682f002ce33ffae978f0a9a9"}, + {file = "aiohttp-3.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6ae828d3a003f03ae31915c31fa684b9890ea44c9c989056fea96e3d12a9fa17"}, + {file = "aiohttp-3.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0c7ebbbde809ff4e970824b2b6cb7e4222be6b95a296e46c03cf050878fc1785"}, + {file = "aiohttp-3.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b7ef7cbd4fec9a1e811a5de813311ed4f7ac7d93e0fda233c9b3e1428f7dd7b"}, + {file = "aiohttp-3.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c3d6a4d0619e09dcd61021debf7059955c2004fa29f48788a3dfaf9c9901a7cd"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:718626a174e7e467f0558954f94af117b7d4695d48eb980146016afa4b580b2e"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:589c72667a5febd36f1315aa6e5f56dd4aa4862df295cb51c769d16142ddd7cd"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ed076098b171573161eb146afcb9129b5ff63308960aeca4b676d9d3c35e700"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:086f92daf51a032d062ec5f58af5ca6a44d082c35299c96376a41cbb33034675"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:11691cf4dc5b94236ccc609b70fec991234e7ef8d4c02dd0c9668d1e486f5abf"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:31d1e1c0dbf19ebccbfd62eff461518dcb1e307b195e93bba60c965a4dcf1ba0"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11a67c0d562e07067c4e86bffc1553f2cf5b664d6111c894671b2b8712f3aba5"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:bb01ba6b0d3f6c68b89fce7305080145d4877ad3acaed424bae4d4ee75faa950"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:44db35a9e15d6fe5c40d74952e803b1d96e964f683b5a78c3cc64eb177878155"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:844a9b460871ee0a0b0b68a64890dae9c415e513db0f4a7e3cab41a0f2fedf33"}, + {file = "aiohttp-3.8.1-cp38-cp38-win32.whl", hash = "sha256:7d08744e9bae2ca9c382581f7dce1273fe3c9bae94ff572c3626e8da5b193c6a"}, + {file = "aiohttp-3.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:04d48b8ce6ab3cf2097b1855e1505181bdd05586ca275f2505514a6e274e8e75"}, + {file = "aiohttp-3.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5315a2eb0239185af1bddb1abf472d877fede3cc8d143c6cddad37678293237"}, + {file = "aiohttp-3.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a996d01ca39b8dfe77440f3cd600825d05841088fd6bc0144cc6c2ec14cc5f74"}, + {file = "aiohttp-3.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:13487abd2f761d4be7c8ff9080de2671e53fff69711d46de703c310c4c9317ca"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea302f34477fda3f85560a06d9ebdc7fa41e82420e892fc50b577e35fc6a50b2"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2f635ce61a89c5732537a7896b6319a8fcfa23ba09bec36e1b1ac0ab31270d2"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e999f2d0e12eea01caeecb17b653f3713d758f6dcc770417cf29ef08d3931421"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0770e2806a30e744b4e21c9d73b7bee18a1cfa3c47991ee2e5a65b887c49d5cf"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d15367ce87c8e9e09b0f989bfd72dc641bcd04ba091c68cd305312d00962addd"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c7cefb4b0640703eb1069835c02486669312bf2f12b48a748e0a7756d0de33d"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:71927042ed6365a09a98a6377501af5c9f0a4d38083652bcd2281a06a5976724"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:28d490af82bc6b7ce53ff31337a18a10498303fe66f701ab65ef27e143c3b0ef"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b6613280ccedf24354406caf785db748bebbddcf31408b20c0b48cb86af76866"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81e3d8c34c623ca4e36c46524a3530e99c0bc95ed068fd6e9b55cb721d408fb2"}, + {file = "aiohttp-3.8.1-cp39-cp39-win32.whl", hash = "sha256:7187a76598bdb895af0adbd2fb7474d7f6025d170bc0a1130242da817ce9e7d1"}, + {file = "aiohttp-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:1c182cb873bc91b411e184dab7a2b664d4fea2743df0e4d57402f7f3fa644bac"}, + {file = "aiohttp-3.8.1.tar.gz", hash = "sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578"}, +] +aiokafka = [ + {file = "aiokafka-0.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b19f077e12fe23e359f7a7dca9baf8532c63f4c8149703ce4c56de372d17e26c"}, + {file = "aiokafka-0.7.2-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d801bb2f5a4ae726a433ae74a5d34e7e0d44128de53c9c7eea5cb4cdaaf80175"}, + {file = "aiokafka-0.7.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3b1f1e9ad66883ed809d737d57edfb13f1aeb9b08c6fd6b71afefce712c13dad"}, + {file = "aiokafka-0.7.2-cp36-cp36m-win32.whl", hash = "sha256:383cc7d45b47676fea60dbedee747c5c08dde5c10b1be0afc6598fb21a7891b4"}, + {file = "aiokafka-0.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ce23baeaacf501f619967067d2c0d4c2b2b761012f9f9c8a49593e96c7550aff"}, + {file = "aiokafka-0.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c96824cef1a480fd2ab4bbd9e9aa737c9191211bab5f7787ef401926d5fda95d"}, + {file = "aiokafka-0.7.2-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34eda0b6eb794c36f4100be772f3b120a3c00daaf342f593f32994a762aed7e8"}, + {file = "aiokafka-0.7.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e6e78206e5d031e6644d3a46153a146d2d2afff4cf9da9a81edb9f8714114b62"}, + {file = "aiokafka-0.7.2-cp37-cp37m-win32.whl", hash = "sha256:ebbb258840f134bad0e6ca8681a87cd292a1f4ed7253a821c16b4e9f2610a04a"}, + {file = "aiokafka-0.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:16731e8aa0fc70dc35c31041599c9a5237dd5d2c1a4d04af58f30a942191a281"}, + {file = "aiokafka-0.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1a9b6ecb606062b3595bc5104b85b42b62621a86d179b75d708279041152f461"}, + {file = "aiokafka-0.7.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cda55f5cfb19ea7d2f55a51d320a57312f152dab3e333fa1fbfcdde7a9e25a53"}, + {file = "aiokafka-0.7.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7d56627c3250ba2359dfa90f2c8a3ab995795e0116038905b2f8a608cd1fd606"}, + {file = "aiokafka-0.7.2-cp38-cp38-win32.whl", hash = "sha256:be43d7ddd700d501a6f4c59c859baa9888c2d086b69882f542951bae41234f6a"}, + {file = "aiokafka-0.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:594d2a29875f78d56251141ff95a982c5be64844dc9ae619c285f36c57a08c6e"}, + {file = "aiokafka-0.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5371bd663f545ced555775e7e49f39a54b243435098a9699582bb3b32884e332"}, + {file = "aiokafka-0.7.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:b1958277eaa702509591c0674790a8c9aced8fef7723dafae0f9aec6d2da71a5"}, + {file = "aiokafka-0.7.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7fe02a3868236d84356d5fa7c7625ed3a27e52699477c5ee8bd5dc9b5adb592f"}, + {file = "aiokafka-0.7.2-cp39-cp39-win32.whl", hash = "sha256:a3bfe4ad7d3829a98c8391a9a28f179b47df4f66e26ea5b1c665f872b6e21809"}, + {file = "aiokafka-0.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:6116b68ca975caafd7efd338ffdaec63789e1c334af6174e20edc1d16d14e463"}, + {file = "aiokafka-0.7.2.tar.gz", hash = "sha256:a8fc41d18731d8879483aecb93ae7ebf5457f63daf4c8923ddc046792c2c3096"}, +] +aiomisc = [ + {file = "aiomisc-14.4.6-py3-none-any.whl", hash = "sha256:beaa248f92acce53857f459499210643274cf06b33c7eb0c9d1f35feaad0d054"}, + {file = "aiomisc-14.4.6.tar.gz", hash = "sha256:a547a94908db9213fd0acde2674973b4a7a986ad82989215f73488903b65746e"}, +] +aiopg = [ + {file = "aiopg-1.3.3-py3-none-any.whl", hash = "sha256:2842dd8741460eeef940032dcb577bfba4d4115205dd82a73ce13b3271f5bf0a"}, + {file = "aiopg-1.3.3.tar.gz", hash = "sha256:547c6ba4ea0d73c2a11a2f44387d7133cc01d3c6f3b8ed976c0ac1eff4f595d7"}, +] +aiosignal = [ + {file = "aiosignal-1.2.0-py3-none-any.whl", hash = "sha256:26e62109036cd181df6e6ad646f91f0dcfd05fe16d0cb924138ff2ab75d64e3a"}, + {file = "aiosignal-1.2.0.tar.gz", hash = "sha256:78ed67db6c7b7ced4f98e495e572106d5c432a93e1ddd1bf475e1dc05f5b7df2"}, +] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +async-timeout = [ + {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, + {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +babel = [ + {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, + {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, +] +black = [ + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.11.tar.gz", hash = "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"}, + {file = "charset_normalizer-2.0.11-py3-none-any.whl", hash = "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45"}, +] +click = [ + {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, + {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +colorlog = [ + {file = "colorlog-6.6.0-py2.py3-none-any.whl", hash = "sha256:351c51e866c86c3217f08e4b067a7974a678be78f07f85fc2d55b8babde6d94e"}, + {file = "colorlog-6.6.0.tar.gz", hash = "sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8"}, +] +coverage = [ + {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"}, + {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"}, + {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"}, + {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"}, + {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"}, + {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"}, + {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"}, + {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"}, + {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"}, + {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"}, + {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"}, + {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"}, +] +crontab = [ + {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, +] +dependency-injector = [ + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, +] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +fastavro = [ + {file = "fastavro-1.4.9-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:2e64a77c529b638e89a879ff0211debfab5b2d114c26a2af29c81f6b013f395a"}, + {file = "fastavro-1.4.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc9c95b7c1d59c5a2d29be21075870a122152cf927d84587dafc96da6b2ac3d"}, + {file = "fastavro-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:927fd6148a8dd9646c129c0a0e8571aea829abc3cba04a3d5a4010a866934f4c"}, + {file = "fastavro-1.4.9-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:000b70c5109a61bdbfddeb2821a506de8f5333f243c608cbced61d44657d6c2f"}, + {file = "fastavro-1.4.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a77a1b5347a06416e236c77027c750aaeda29ef8189aa456eb2a2571274b43"}, + {file = "fastavro-1.4.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce2c7747ce958115388872db0756d3eeb0d796084eea9b46dc3758ef32c4d952"}, + {file = "fastavro-1.4.9-cp37-cp37m-win_amd64.whl", hash = "sha256:d6ccb77604903a0308316e696bb65a8943361af5f757d10985689656c9bce6ed"}, + {file = "fastavro-1.4.9-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9a6ada2d6e133a2319438248c2e023b6735747b249c5a79d5f08f9d431e5d226"}, + {file = "fastavro-1.4.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7537e4df7782b03b9761e9338cef9fc7bfcc41100ab93c36c5c60fa568e724a"}, + {file = "fastavro-1.4.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a9cd6d8471beb4020b4126fd04150ed7295f74ae7234d0dc9205b55c193851e"}, + {file = "fastavro-1.4.9-cp38-cp38-win_amd64.whl", hash = "sha256:fa9d8b47e0533c84152332ad491bb63bbae76a8a7a0df1caa821e0cbebf0fb70"}, + {file = "fastavro-1.4.9-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:3759bdc77009ee1e2e76fc9f58b951c05c00a8600ef9ddbff59fee3cb0c9e235"}, + {file = "fastavro-1.4.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b98ef2bdb123b95945aa6d69d6a7d79f211df3274b2dd7786da7852ddec964d0"}, + {file = "fastavro-1.4.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32b804aa6920d80c0e94e1180d480f28f56c4b901849bd80ed180851752b5ce6"}, + {file = "fastavro-1.4.9-cp39-cp39-win_amd64.whl", hash = "sha256:f9b04acaf06b16218b47985e92d8daa98c1116d58f3cff81a5b3cf39cef9afc0"}, + {file = "fastavro-1.4.9.tar.gz", hash = "sha256:be3fec387eb2cdc9627060b5ae0690542c687dddc951b63fa11203553769ae5e"}, +] +filelock = [ + {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"}, + {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, +] +flake8 = [ + {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, + {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, +] +frozenlist = [ + {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45334234ec30fc4ea677f43171b18a27505bfb2dba9aca4398a62692c0ea8868"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47be22dc27ed933d55ee55845d34a3e4e9f6fee93039e7f8ebadb0c2f60d403f"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03a7dd1bfce30216a3f51a84e6dd0e4a573d23ca50f0346634916ff105ba6e6b"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:691ddf6dc50480ce49f68441f1d16a4c3325887453837036e0fb94736eae1e58"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bde99812f237f79eaf3f04ebffd74f6718bbd216101b35ac7955c2d47c17da02"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a202458d1298ced3768f5a7d44301e7c86defac162ace0ab7434c2e961166e8"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9e3e9e365991f8cc5f5edc1fd65b58b41d0514a6a7ad95ef5c7f34eb49b3d3e"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:04cb491c4b1c051734d41ea2552fde292f5f3a9c911363f74f39c23659c4af78"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:436496321dad302b8b27ca955364a439ed1f0999311c393dccb243e451ff66aa"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:754728d65f1acc61e0f4df784456106e35afb7bf39cfe37227ab00436fb38676"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb275c6385dd72594758cbe96c07cdb9bd6becf84235f4a594bdf21e3596c9d"}, + {file = "frozenlist-1.3.0-cp310-cp310-win32.whl", hash = "sha256:e30b2f9683812eb30cf3f0a8e9f79f8d590a7999f731cf39f9105a7c4a39489d"}, + {file = "frozenlist-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f7353ba3367473d1d616ee727945f439e027f0bb16ac1a750219a8344d1d5d3c"}, + {file = "frozenlist-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88aafd445a233dbbf8a65a62bc3249a0acd0d81ab18f6feb461cc5a938610d24"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4406cfabef8f07b3b3af0f50f70938ec06d9f0fc26cbdeaab431cbc3ca3caeaa"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf829bd2e2956066dd4de43fd8ec881d87842a06708c035b37ef632930505a2"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:603b9091bd70fae7be28bdb8aa5c9990f4241aa33abb673390a7f7329296695f"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25af28b560e0c76fa41f550eacb389905633e7ac02d6eb3c09017fa1c8cdfde1"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c7a8a9fc9383b52c410a2ec952521906d355d18fccc927fca52ab575ee8b93"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:65bc6e2fece04e2145ab6e3c47428d1bbc05aede61ae365b2c1bddd94906e478"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3f7c935c7b58b0d78c0beea0c7358e165f95f1fd8a7e98baa40d22a05b4a8141"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd89acd1b8bb4f31b47072615d72e7f53a948d302b7c1d1455e42622de180eae"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:6983a31698490825171be44ffbafeaa930ddf590d3f051e397143a5045513b01"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:adac9700675cf99e3615eb6a0eb5e9f5a4143c7d42c05cea2e7f71c27a3d0846"}, + {file = "frozenlist-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:0c36e78b9509e97042ef869c0e1e6ef6429e55817c12d78245eb915e1cca7468"}, + {file = "frozenlist-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:57f4d3f03a18facacb2a6bcd21bccd011e3b75d463dc49f838fd699d074fabd1"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8c905a5186d77111f02144fab5b849ab524f1e876a1e75205cd1386a9be4b00a"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5009062d78a8c6890d50b4e53b0ddda31841b3935c1937e2ed8c1bda1c7fb9d"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2fdc3cd845e5a1f71a0c3518528bfdbfe2efaf9886d6f49eacc5ee4fd9a10953"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e650bd09b5dda929523b9f8e7f99b24deac61240ecc1a32aeba487afcd970f"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40dff8962b8eba91fd3848d857203f0bd704b5f1fa2b3fc9af64901a190bba08"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:768efd082074bb203c934e83a61654ed4931ef02412c2fbdecea0cff7ecd0274"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:006d3595e7d4108a12025ddf415ae0f6c9e736e726a5db0183326fd191b14c5e"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:871d42623ae15eb0b0e9df65baeee6976b2e161d0ba93155411d58ff27483ad8"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aff388be97ef2677ae185e72dc500d19ecaf31b698986800d3fc4f399a5e30a5"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9f892d6a94ec5c7b785e548e42722e6f3a52f5f32a8461e82ac3e67a3bd073f1"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:e982878792c971cbd60ee510c4ee5bf089a8246226dea1f2138aa0bb67aff148"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c6c321dd013e8fc20735b92cb4892c115f5cdb82c817b1e5b07f6b95d952b2f0"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30530930410855c451bea83f7b272fb1c495ed9d5cc72895ac29e91279401db3"}, + {file = "frozenlist-1.3.0-cp38-cp38-win32.whl", hash = "sha256:40ec383bc194accba825fbb7d0ef3dda5736ceab2375462f1d8672d9f6b68d07"}, + {file = "frozenlist-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f20baa05eaa2bcd5404c445ec51aed1c268d62600362dc6cfe04fae34a424bd9"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0437fe763fb5d4adad1756050cbf855bbb2bf0d9385c7bb13d7a10b0dd550486"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b684c68077b84522b5c7eafc1dc735bfa5b341fb011d5552ebe0968e22ed641c"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93641a51f89473837333b2f8100f3f89795295b858cd4c7d4a1f18e299dc0a4f"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6d32ff213aef0fd0bcf803bffe15cfa2d4fde237d1d4838e62aec242a8362fa"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31977f84828b5bb856ca1eb07bf7e3a34f33a5cddce981d880240ba06639b94d"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c62964192a1c0c30b49f403495911298810bada64e4f03249ca35a33ca0417a"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4eda49bea3602812518765810af732229b4291d2695ed24a0a20e098c45a707b"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acb267b09a509c1df5a4ca04140da96016f40d2ed183cdc356d237286c971b51"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e1e26ac0a253a2907d654a37e390904426d5ae5483150ce3adedb35c8c06614a"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f96293d6f982c58ebebb428c50163d010c2f05de0cde99fd681bfdc18d4b2dc2"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e84cb61b0ac40a0c3e0e8b79c575161c5300d1d89e13c0e02f76193982f066ed"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:ff9310f05b9d9c5c4dd472983dc956901ee6cb2c3ec1ab116ecdde25f3ce4951"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d26b650b71fdc88065b7a21f8ace70175bcf3b5bdba5ea22df4bfd893e795a3b"}, + {file = "frozenlist-1.3.0-cp39-cp39-win32.whl", hash = "sha256:01a73627448b1f2145bddb6e6c2259988bb8aee0fb361776ff8604b99616cd08"}, + {file = "frozenlist-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:772965f773757a6026dea111a15e6e2678fbd6216180f82a48a40b27de1ee2ab"}, + {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"}, +] +identify = [ + {file = "identify-2.4.7-py2.py3-none-any.whl", hash = "sha256:e64210654dfbca6ced33230eb1b137591a0981425e1a60b4c6c36309f787bbd5"}, + {file = "identify-2.4.7.tar.gz", hash = "sha256:8408f01e0be25492017346d7dffe7e7711b762b23375c775d24d3bc38618fabc"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +imagesize = [ + {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, + {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"}, + {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] +jinja2 = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] +kafka-python = [ + {file = "kafka-python-2.0.2.tar.gz", hash = "sha256:04dfe7fea2b63726cd6f3e79a2d86e709d608d74406638c5da33a01d45a9d7e3"}, + {file = "kafka_python-2.0.2-py2.py3-none-any.whl", hash = "sha256:2d92418c7cb1c298fa6c7f0fb3519b520d0d7526ac6cb7ae2a4fc65a51a94b6e"}, +] +lmdb = [ + {file = "lmdb-1.3.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:63cb73fe7ce9eb93d992d632c85a0476b4332670d9e6a2802b5062f603b7809f"}, + {file = "lmdb-1.3.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:abbc439cd9fe60ffd6197009087ea885ac150017dc85384093b1d376f83f0ec4"}, + {file = "lmdb-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6260a526e4ad85b1f374a5ba9475bf369fb07e7728ea6ec57226b02c40d1976b"}, + {file = "lmdb-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e568ae0887ae196340947d9800136e90feaed6b86a261ef01f01b2ba65fc8106"}, + {file = "lmdb-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6a816954d212f40fd15007cd81ab7a6bebb77436d949a6a9ae04af57fc127f3"}, + {file = "lmdb-1.3.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:fa6439356e591d3249ab0e1778a6f8d8408e993f66dc911914c78208f5310309"}, + {file = "lmdb-1.3.0-cp35-cp35m-win_amd64.whl", hash = "sha256:c6adbd6f7f9048e97f31a069e652eb51020a81e80a0ce92dbb9810d21da2409a"}, + {file = "lmdb-1.3.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:eefb392f6b5cd43aada49258c5a79be11cb2c8cd3fc3e2d9319a1e0b9f906458"}, + {file = "lmdb-1.3.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a14aca2651c3af6f0d0a6b9168200eea0c8f2d27c40b01a442f33329a6e8dff"}, + {file = "lmdb-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfa4aa9c67f8aee89b23005e98d1f3f32490b6b905fd1cb604b207cbd5755ab"}, + {file = "lmdb-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7da05d70fcc6561ac6b09e9fb1bf64b7ca294652c64c8a2889273970cee796b9"}, + {file = "lmdb-1.3.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:008243762decf8f6c90430a9bced56290ebbcdb5e877d90e42343bb97033e494"}, + {file = "lmdb-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:17215a42a4b9814c383deabecb160581e4fb75d00198eef0e3cea54f230ffbea"}, + {file = "lmdb-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65334eafa5d430b18d81ebd5362559a41483c362e1931f6e1b15bab2ecb7d75d"}, + {file = "lmdb-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:18c69fabdaf04efaf246587739cc1062b3e57c6ef0743f5c418df89e5e7e7b9b"}, + {file = "lmdb-1.3.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:41318717ab5d15ad2d6d263d34fbf614a045210f64b25e59ce734bb2105e421f"}, + {file = "lmdb-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:df2724bad7820114a205472994091097d0fa65a3e5fff5a8e688d123fb8c6326"}, + {file = "lmdb-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddd590e1c7fcb395931aa3782fb89b9db4550ab2d81d006ecd239e0d462bc41"}, + {file = "lmdb-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:4172fba19417d7b29409beca7d73c067b54e5d8ab1fb9b51d7b4c1445d20a167"}, + {file = "lmdb-1.3.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2df38115dd9428a54d59ae7c712a4c7cce0d6b1d66056de4b1a8c38718066106"}, + {file = "lmdb-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d9103aa4908f0bca43c5911ca067d4e3d01f682dff0c0381a1239bd2bd757984"}, + {file = "lmdb-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:394df860c3f93cfd92b6f4caba785f38208cc9614c18b3803f83a2cc1695042f"}, + {file = "lmdb-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:62ab28e3593bdc318ea2f2fa1574e5fca3b6d1f264686d773ba54a637d4f563b"}, + {file = "lmdb-1.3.0-pp27-pypy_73-macosx_10_7_x86_64.whl", hash = "sha256:e6a704b3baced9182836c7f77b769f23856f3a8f62d0282b1bc1feaf81a86712"}, + {file = "lmdb-1.3.0-pp27-pypy_73-win_amd64.whl", hash = "sha256:08f4b5129f4683802569b02581142e415c8dcc0ff07605983ec1b07804cecbad"}, + {file = "lmdb-1.3.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:f291e3f561f58dddf63a92a5a6a4b8af3a0920b6705d35e2f80e52e86ee238a2"}, + {file = "lmdb-1.3.0.tar.gz", hash = "sha256:60a11efc21aaf009d06518996360eed346f6000bfc9de05114374230879f992e"}, +] +m2r2 = [ + {file = "m2r2-0.3.2-py3-none-any.whl", hash = "sha256:d3684086b61b4bebe2307f15189495360f05a123c9bda2a66462649b7ca236aa"}, + {file = "m2r2-0.3.2.tar.gz", hash = "sha256:ccd95b052dcd1ac7442ecb3111262b2001c10e4119b459c34c93ac7a5c2c7868"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] +mccabe = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] +minos-microservice-common = [] +minos-microservice-networks = [] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +multidict = [ + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, + {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, + {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, + {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, + {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, + {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, + {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, + {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, + {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, + {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, + {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +nodeenv = [ + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, +] +orjson = [ + {file = "orjson-3.6.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:e4a7cad6c63306318453980d302c7c0b74c0cc290dd1f433bbd7d31a5af90cf1"}, + {file = "orjson-3.6.6-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e533941dca4a0530a876de32e54bf2fd3269cdec3751aebde7bfb5b5eba98e74"}, + {file = "orjson-3.6.6-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:9adf63be386eaa34278967512b83ff8fc4bed036a246391ae236f68d23c47452"}, + {file = "orjson-3.6.6-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:3b636753ae34d4619b11ea7d664a2f1e87e55e9738e5123e12bcce22acae9d13"}, + {file = "orjson-3.6.6-cp310-none-win_amd64.whl", hash = "sha256:78a10295ed048fd916c6584d6d27c232eae805a43e7c14be56e3745f784f0eb6"}, + {file = "orjson-3.6.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:82b4f9fb2af7799b52932a62eac484083f930d5519560d6f64b24d66a368d03f"}, + {file = "orjson-3.6.6-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a0033d07309cc7d8b8c4bc5d42f0dd4422b53ceb91dee9f4086bb2afa70b7772"}, + {file = "orjson-3.6.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b321f99473116ab7c7c028377372f7b4adba4029aaca19cd567e83898f55579"}, + {file = "orjson-3.6.6-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:b9c98ed94f1688cc11b5c61b8eea39d854a1a2f09f71d8a5af005461b14994ed"}, + {file = "orjson-3.6.6-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:00b333a41392bd07a8603c42670547dbedf9b291485d773f90c6470eff435608"}, + {file = "orjson-3.6.6-cp37-none-win_amd64.whl", hash = "sha256:8d4fd3bdee65a81f2b79c50937d4b3c054e1e6bfa3fc72ed018a97c0c7c3d521"}, + {file = "orjson-3.6.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:954c9f8547247cd7a8c91094ff39c9fe314b5eaeaec90b7bfb7384a4108f416f"}, + {file = "orjson-3.6.6-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:74e5aed657ed0b91ef05d44d6a26d3e3e12ce4d2d71f75df41a477b05878c4a9"}, + {file = "orjson-3.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4008a5130e6e9c33abaa95e939e0e755175da10745740aa6968461b2f16830e2"}, + {file = "orjson-3.6.6-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:012761d5f3d186deb4f6238f15e9ea7c1aac6deebc8f5b741ba3b4fafe017460"}, + {file = "orjson-3.6.6-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:b464546718a940b48d095a98df4c04808bfa6c8706fe751fc3f9390bc2f82643"}, + {file = "orjson-3.6.6-cp38-none-win_amd64.whl", hash = "sha256:f10a800f4e5a4aab52076d4628e9e4dab9370bdd9d8ea254ebfde846b653ab25"}, + {file = "orjson-3.6.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:8010d2610cfab721725ef14d578c7071e946bbdae63322d8f7b49061cf3fde8d"}, + {file = "orjson-3.6.6-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8dca67a4855e1e0f9a2ea0386e8db892708522e1171dc0ddf456932288fbae63"}, + {file = "orjson-3.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af065d60523139b99bd35b839c7a2d8c5da55df8a8c4402d2eb6cdc07fa7a624"}, + {file = "orjson-3.6.6-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:fa1f389cc9f766ae0cf7ba3533d5089836b01a5ccb3f8d904297f1fcf3d9dc34"}, + {file = "orjson-3.6.6-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:ec1221ad78f94d27b162a1d35672b62ef86f27f0e4c2b65051edb480cc86b286"}, + {file = "orjson-3.6.6-cp39-none-win_amd64.whl", hash = "sha256:afed2af55eeda1de6b3f1cbc93431981b19d380fcc04f6ed86e74c1913070304"}, + {file = "orjson-3.6.6.tar.gz", hash = "sha256:55dd988400fa7fbe0e31407c683f5aaab013b5bd967167b8fe058186773c4d6c"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +pbr = [ + {file = "pbr-5.8.0-py2.py3-none-any.whl", hash = "sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a"}, + {file = "pbr-5.8.0.tar.gz", hash = "sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf"}, +] +platformdirs = [ + {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, + {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +pre-commit = [ + {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"}, + {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, +] +psycopg2-binary = [ + {file = "psycopg2-binary-2.9.3.tar.gz", hash = "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-win32.whl", hash = "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-win32.whl", hash = "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pycodestyle = [ + {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, + {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, +] +pyflakes = [ + {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, + {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, +] +pygments = [ + {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, + {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, +] +pyparsing = [ + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, +] +pytest = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] +pytz = [ + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-4.4.0-py3-none-any.whl", hash = "sha256:5da895959511473857b6d0200f56865ed62c31e8f82dd338063b84ec022701fe"}, + {file = "Sphinx-4.4.0.tar.gz", hash = "sha256:6caad9786055cb1fa22b4a365c1775816b876f91966481765d7d50e9f0dd35cc"}, +] +sphinx-autodoc-typehints = [ + {file = "sphinx_autodoc_typehints-1.16.0-py3-none-any.whl", hash = "sha256:b5efe1fb5754349f849ca09b1f5c9b4bb37f1e360f00fbde003b12c60d67cc3a"}, + {file = "sphinx_autodoc_typehints-1.16.0.tar.gz", hash = "sha256:21df6ee692c2c8366f6df13b13e4d4ab8af25cc0dfb65e2d182351528b6eb704"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, + {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, +] +sphinxcontrib-apidoc = [ + {file = "sphinxcontrib-apidoc-0.3.0.tar.gz", hash = "sha256:729bf592cf7b7dd57c4c05794f732dc026127275d785c2a5494521fdde773fb9"}, + {file = "sphinxcontrib_apidoc-0.3.0-py2.py3-none-any.whl", hash = "sha256:6671a46b2c6c5b0dca3d8a147849d159065e50443df79614f921b42fbd15cb09"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, + {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, +] +typing-extensions = [ + {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, + {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, +] +urllib3 = [ + {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, + {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, +] +virtualenv = [ + {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"}, + {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"}, +] +yarl = [ + {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"}, + {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"}, + {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"}, + {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"}, + {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"}, + {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"}, + {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"}, + {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"}, + {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"}, + {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"}, + {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"}, + {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"}, + {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"}, + {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"}, + {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"}, + {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"}, +] +zipp = [ + {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, + {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, +] diff --git a/packages/plugins/minos-broker-kafka/poetry.toml b/packages/plugins/minos-broker-kafka/poetry.toml new file mode 100644 index 000000000..ab1033bd3 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true diff --git a/packages/plugins/minos-broker-kafka/pyproject.toml b/packages/plugins/minos-broker-kafka/pyproject.toml new file mode 100644 index 000000000..95f10ccf7 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/pyproject.toml @@ -0,0 +1,55 @@ +[tool.poetry] +name = "minos-broker-kafka" +version = "0.4.1" +description = "Minos Broker Kafka package" +readme = "README.md" +repository = "https://github.com/minos-framework/minos-python" +homepage = "http://www.minos.run/" +authors = ["Minos Framework Devs "] +license = "MIT" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", +] +keywords = [ + "clariteia", + "minos", + "microservice", + "saga", +] +packages = [ + { include = "minos" } +] +include = [ + "AUTHORS.md", + "HISTORY.md", + "LICENSE", +] + +[tool.poetry.dependencies] +python = "^3.9" +minos-microservice-common = "^0.4.0" +minos-microservice-networks = "^0.4.0" +aiokafka = "^0.7.0" + +[tool.poetry.dev-dependencies] +minos-microservice-common = { path = "../../core/minos-microservice-common", develop = true } +minos-microservice-networks = { path = "../../core/minos-microservice-networks", develop = true } +black = "^22.1" +isort = "^5.8.0" +pytest = "^6.2.4" +coverage = "^6.3" +flake8 = "^4.0.1" +Sphinx = "^4.0.1" +pre-commit = "^2.12.1" +sphinx-autodoc-typehints = "^1.12.0" +sphinxcontrib-apidoc = "^0.3.0" +sphinx-rtd-theme = "^1.0.0" +m2r2 = "^0.3.2" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/packages/plugins/minos-broker-kafka/setup.cfg b/packages/plugins/minos-broker-kafka/setup.cfg new file mode 100644 index 000000000..dbb9ac849 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/setup.cfg @@ -0,0 +1,28 @@ +[coverage:run] +source = + minos + +[coverage:report] +exclude_lines = + pragma: no cover + raise NotImplementedError + if TYPE_CHECKING: + pass +precision = 2 + +[flake8] +filename = + ./minos/**/*.py, + ./tests/**/*.py, + ./examples/**/*.py +max-line-length = 120 +per-file-ignores = + ./**/__init__.py:F401,W391 + +[isort] +known_first_party=minos +multi_line_output = 3 +include_trailing_comma = True +force_grid_wrap = 1 +use_parentheses = True +line_length = 120 diff --git a/packages/plugins/minos-broker-kafka/tests/__init__.py b/packages/plugins/minos-broker-kafka/tests/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/plugins/minos-broker-kafka/tests/test_config.yml b/packages/plugins/minos-broker-kafka/tests/test_config.yml new file mode 100644 index 000000000..167e46a0c --- /dev/null +++ b/packages/plugins/minos-broker-kafka/tests/test_config.yml @@ -0,0 +1,39 @@ +service: + name: Order + aggregate: tests.utils.Order +services: + - tests.services.commands.CommandService + - tests.services.queries.QueryService +rest: + host: localhost + port: 8080 +repository: + database: order_db + user: minos + password: min0s + host: localhost + port: 5432 +snapshot: + database: order_db + user: minos + password: min0s + host: localhost + port: 5432 +broker: + host: localhost + port: 9092 + queue: + database: order_db + user: minos + password: min0s + host: localhost + port: 5432 + records: 10 + retry: 2 +saga: + storage: + path: "./order.lmdb" +discovery: + client: minos.networks.MinosDiscoveryClient + host: discovery-service + port: 8080 diff --git a/packages/plugins/minos-broker-kafka/tests/test_kafka/__init__.py b/packages/plugins/minos-broker-kafka/tests/test_kafka/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_kafka.py b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py similarity index 68% rename from packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_kafka.py rename to packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py index 0de33b9e6..69c384831 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_publishers/test_kafka.py +++ b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py @@ -10,12 +10,18 @@ from minos.common import ( MinosConfig, ) +from minos.kafka import ( + InMemoryQueuedKafkaBrokerPublisher, + KafkaBrokerPublisher, + PostgreSqlQueuedKafkaBrokerPublisher, +) from minos.networks import ( BrokerMessage, BrokerMessageV1, BrokerMessageV1Payload, BrokerPublisher, - KafkaBrokerPublisher, + InMemoryBrokerPublisherQueue, + PostgreSqlBrokerPublisherQueue, ) from tests.utils import ( CONFIG_FILE_PATH, @@ -69,5 +75,21 @@ async def test_setup_destroy(self): self.assertEqual(1, stop_mock.call_count) +class TestPostgreSqlQueuedKafkaBrokerPublisher(unittest.IsolatedAsyncioTestCase): + def test_from_config(self): + publisher = PostgreSqlQueuedKafkaBrokerPublisher.from_config(CONFIG_FILE_PATH) + self.assertIsInstance(publisher, PostgreSqlQueuedKafkaBrokerPublisher) + self.assertIsInstance(publisher.impl, KafkaBrokerPublisher) + self.assertIsInstance(publisher.queue, PostgreSqlBrokerPublisherQueue) + + +class TestInMemoryQueuedKafkaBrokerPublisher(unittest.IsolatedAsyncioTestCase): + def test_from_config(self): + publisher = InMemoryQueuedKafkaBrokerPublisher.from_config(CONFIG_FILE_PATH) + self.assertIsInstance(publisher, InMemoryQueuedKafkaBrokerPublisher) + self.assertIsInstance(publisher.impl, KafkaBrokerPublisher) + self.assertIsInstance(publisher.queue, InMemoryBrokerPublisherQueue) + + if __name__ == "__main__": unittest.main() diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_subscribers/test_kafka.py b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py similarity index 99% rename from packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_subscribers/test_kafka.py rename to packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py index 7d8f066d0..dd868f398 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_brokers/test_subscribers/test_kafka.py +++ b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py @@ -17,16 +17,18 @@ from minos.common import ( MinosConfig, ) +from minos.kafka import ( + InMemoryQueuedKafkaBrokerSubscriberBuilder, + KafkaBrokerSubscriber, + KafkaBrokerSubscriberBuilder, + PostgreSqlQueuedKafkaBrokerSubscriberBuilder, +) from minos.networks import ( BrokerMessageV1, BrokerMessageV1Payload, BrokerSubscriber, InMemoryBrokerSubscriberQueue, - InMemoryQueuedKafkaBrokerSubscriberBuilder, - KafkaBrokerSubscriber, - KafkaBrokerSubscriberBuilder, PostgreSqlBrokerSubscriberQueue, - PostgreSqlQueuedKafkaBrokerSubscriberBuilder, QueuedBrokerSubscriber, ) from tests.utils import ( diff --git a/packages/plugins/minos-broker-kafka/tests/utils.py b/packages/plugins/minos-broker-kafka/tests/utils.py new file mode 100644 index 000000000..c816e645f --- /dev/null +++ b/packages/plugins/minos-broker-kafka/tests/utils.py @@ -0,0 +1,6 @@ +from pathlib import ( + Path, +) + +BASE_PATH = Path(__file__).parent +CONFIG_FILE_PATH = BASE_PATH / "test_config.yml" diff --git a/pyproject.toml b/pyproject.toml index 74779ee80..097281422 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ minos-microservice-networks = { path = "packages/core/minos-microservice-network minos-microservice-aggregate = { path = "packages/core/minos-microservice-aggregate", develop = true } minos-microservice-saga = { path = "packages/core/minos-microservice-saga", develop = true } minos-microservice-cqrs = { path = "packages/core/minos-microservice-cqrs", develop = true } +minos-broker-kafka = { path = "packages/plugins/minos-broker-kafka", develop = true } [tool.poetry.dev-dependencies] black = "^22.1" From cfe89ce9559a35931149345da24d6a8943a2b6d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 09:42:27 +0100 Subject: [PATCH 67/97] ISSUE #96 * Fix bug on workflow. --- .../workflows/minos-broker-kafka-tests.yml | 4 +- poetry.lock | 203 ++++++++++-------- 2 files changed, 111 insertions(+), 96 deletions(-) diff --git a/.github/workflows/minos-broker-kafka-tests.yml b/.github/workflows/minos-broker-kafka-tests.yml index d2797c021..514dba284 100644 --- a/.github/workflows/minos-broker-kafka-tests.yml +++ b/.github/workflows/minos-broker-kafka-tests.yml @@ -1,4 +1,4 @@ -name: "Test: minos-microservice-saga" +name: "Test: minos-broker-kafka" on: push: @@ -39,7 +39,7 @@ jobs: uses: codecov/codecov-action@v2 with: token: ${{ secrets.CODECOV_TOKEN }} - files: ./packages/core/minos-microservice-saga/coverage.xml + files: ./packages/plugins/minos-broker-kafka/coverage.xml fail_ci_if_error: true - name: Generate documentation diff --git a/poetry.lock b/poetry.lock index f1b7be8db..6d14c11f4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -176,7 +176,7 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.0.10" +version = "2.0.11" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -220,7 +220,7 @@ development = ["black", "flake8", "mypy", "pytest", "types-colorama"] [[package]] name = "coverage" -version = "6.3" +version = "6.3.1" description = "Code coverage measurement for Python" category = "dev" optional = false @@ -239,7 +239,7 @@ python-versions = "*" [[package]] name = "dependency-injector" -version = "4.37.0" +version = "4.38.0" description = "Dependency injection framework for Python" category = "main" optional = false @@ -319,7 +319,7 @@ python-versions = ">=3.7" [[package]] name = "identify" -version = "2.4.5" +version = "2.4.7" description = "File identification library for Python" category = "dev" optional = false @@ -443,6 +443,24 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "minos-broker-kafka" +version = "0.4.1" +description = "Minos Broker Kafka package" +category = "main" +optional = false +python-versions = "^3.9" +develop = true + +[package.dependencies] +aiokafka = "^0.7.0" +minos-microservice-common = "^0.4.0" +minos-microservice-networks = "^0.4.0" + +[package.source] +type = "directory" +url = "packages/plugins/minos-broker-kafka" + [[package]] name = "minos-microservice-aggregate" version = "0.4.1" @@ -513,7 +531,6 @@ develop = true [package.dependencies] aiohttp = "^3.7.4" -aiokafka = "^0.7.0" aiomisc = "^14.0.3" aiopg = "^1.2.1" crontab = "^0.23.0" @@ -928,11 +945,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "tomli" -version = "1.2.3" +version = "2.0.0" description = "A lil' TOML parser" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "typing-extensions" @@ -1000,7 +1017,7 @@ testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest- [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "c9a5212d1726c058d89839572061d9c54dda1d2044e82ded35122c0fee5eb4a5" +content-hash = "791434a286b5460c30e700201c900312b2a941951430e346c51000033f1f65b9" [metadata.files] aiohttp = [ @@ -1170,8 +1187,8 @@ cfgv = [ {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, - {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, + {file = "charset-normalizer-2.0.11.tar.gz", hash = "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"}, + {file = "charset_normalizer-2.0.11-py3-none-any.whl", hash = "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45"}, ] click = [ {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, @@ -1186,91 +1203,88 @@ colorlog = [ {file = "colorlog-6.6.0.tar.gz", hash = "sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8"}, ] coverage = [ - {file = "coverage-6.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e8071e7d9ba9f457fc674afc3de054450be2c9b195c470147fbbc082468d8ff7"}, - {file = "coverage-6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:86c91c511853dfda81c2cf2360502cb72783f4b7cebabef27869f00cbe1db07d"}, - {file = "coverage-6.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4ce3b647bd1792d4394f5690d9df6dc035b00bcdbc5595099c01282a59ae01"}, - {file = "coverage-6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a491e159294d756e7fc8462f98175e2d2225e4dbe062cca7d3e0d5a75ba6260"}, - {file = "coverage-6.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d008e0f67ac800b0ca04d7914b8501312c8c6c00ad8c7ba17754609fae1231a"}, - {file = "coverage-6.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4578728c36de2801c1deb1c6b760d31883e62e33f33c7ba8f982e609dc95167d"}, - {file = "coverage-6.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7ee317486593193e066fc5e98ac0ce712178c21529a85c07b7cb978171f25d53"}, - {file = "coverage-6.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2bc85664b06ba42d14bb74d6ddf19d8bfc520cb660561d2d9ce5786ae72f71b5"}, - {file = "coverage-6.3-cp310-cp310-win32.whl", hash = "sha256:27a94db5dc098c25048b0aca155f5fac674f2cf1b1736c5272ba28ead2fc267e"}, - {file = "coverage-6.3-cp310-cp310-win_amd64.whl", hash = "sha256:bde4aeabc0d1b2e52c4036c54440b1ad05beeca8113f47aceb4998bb7471e2c2"}, - {file = "coverage-6.3-cp311-cp311-macosx_10_14_x86_64.whl", hash = "sha256:509c68c3e2015022aeda03b003dd68fa19987cdcf64e9d4edc98db41cfc45d30"}, - {file = "coverage-6.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e4ff163602c5c77e7bb4ea81ba5d3b793b4419f8acd296aae149370902cf4e92"}, - {file = "coverage-6.3-cp311-cp311-win_amd64.whl", hash = "sha256:d1675db48490e5fa0b300f6329ecb8a9a37c29b9ab64fa9c964d34111788ca2d"}, - {file = "coverage-6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7eed8459a2b81848cafb3280b39d7d49950d5f98e403677941c752e7e7ee47cb"}, - {file = "coverage-6.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b4285fde5286b946835a1a53bba3ad41ef74285ba9e8013e14b5ea93deaeafc"}, - {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4748349734110fd32d46ff8897b561e6300d8989a494ad5a0a2e4f0ca974fc7"}, - {file = "coverage-6.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:823f9325283dc9565ba0aa2d240471a93ca8999861779b2b6c7aded45b58ee0f"}, - {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fff16a30fdf57b214778eff86391301c4509e327a65b877862f7c929f10a4253"}, - {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:da1a428bdbe71f9a8c270c7baab29e9552ac9d0e0cba5e7e9a4c9ee6465d258d"}, - {file = "coverage-6.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7d82c610a2e10372e128023c5baf9ce3d270f3029fe7274ff5bc2897c68f1318"}, - {file = "coverage-6.3-cp37-cp37m-win32.whl", hash = "sha256:11e61c5548ecf74ea1f8b059730b049871f0e32b74f88bd0d670c20c819ad749"}, - {file = "coverage-6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:8e0c3525b1a182c8ffc9bca7e56b521e0c2b8b3e82f033c8e16d6d721f1b54d6"}, - {file = "coverage-6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a189036c50dcd56100746139a459f0d27540fef95b09aba03e786540b8feaa5f"}, - {file = "coverage-6.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32168001f33025fd756884d56d01adebb34e6c8c0b3395ca8584cdcee9c7c9d2"}, - {file = "coverage-6.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5d79c9af3f410a2b5acad91258b4ae179ee9c83897eb9de69151b179b0227f5"}, - {file = "coverage-6.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:85c5fc9029043cf8b07f73fbb0a7ab6d3b717510c3b5642b77058ea55d7cacde"}, - {file = "coverage-6.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7596aa2f2b8fa5604129cfc9a27ad9beec0a96f18078cb424d029fdd707468d"}, - {file = "coverage-6.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ce443a3e6df90d692c38762f108fc4c88314bf477689f04de76b3f252e7a351c"}, - {file = "coverage-6.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:012157499ec4f135fc36cd2177e3d1a1840af9b236cbe80e9a5ccfc83d912a69"}, - {file = "coverage-6.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0a34d313105cdd0d3644c56df2d743fe467270d6ab93b5d4a347eb9fec8924d6"}, - {file = "coverage-6.3-cp38-cp38-win32.whl", hash = "sha256:6e78b1e25e5c5695dea012be473e442f7094d066925604be20b30713dbd47f89"}, - {file = "coverage-6.3-cp38-cp38-win_amd64.whl", hash = "sha256:433b99f7b0613bdcdc0b00cc3d39ed6d756797e3b078d2c43f8a38288520aec6"}, - {file = "coverage-6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ed3244b415725f08ca3bdf02ed681089fd95e9465099a21c8e2d9c5d6ca2606"}, - {file = "coverage-6.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab4fc4b866b279740e0d917402f0e9a08683e002f43fa408e9655818ed392196"}, - {file = "coverage-6.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8582e9280f8d0f38114fe95a92ae8d0790b56b099d728cc4f8a2e14b1c4a18c"}, - {file = "coverage-6.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c72bb4679283c6737f452eeb9b2a0e570acaef2197ad255fb20162adc80bea76"}, - {file = "coverage-6.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca29c352389ea27a24c79acd117abdd8a865c6eb01576b6f0990cd9a4e9c9f48"}, - {file = "coverage-6.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:152cc2624381df4e4e604e21bd8e95eb8059535f7b768c1fb8b8ae0b26f47ab0"}, - {file = "coverage-6.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:51372e24b1f7143ee2df6b45cff6a721f3abe93b1e506196f3ffa4155c2497f7"}, - {file = "coverage-6.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:72d9d186508325a456475dd05b1756f9a204c7086b07fffb227ef8cee03b1dc2"}, - {file = "coverage-6.3-cp39-cp39-win32.whl", hash = "sha256:649df3641eb351cdfd0d5533c92fc9df507b6b2bf48a7ef8c71ab63cbc7b5c3c"}, - {file = "coverage-6.3-cp39-cp39-win_amd64.whl", hash = "sha256:e67ccd53da5958ea1ec833a160b96357f90859c220a00150de011b787c27b98d"}, - {file = "coverage-6.3-pp36.pp37.pp38-none-any.whl", hash = "sha256:27ac7cb84538e278e07569ceaaa6f807a029dc194b1c819a9820b9bb5dbf63ab"}, - {file = "coverage-6.3.tar.gz", hash = "sha256:987a84ff98a309994ca77ed3cc4b92424f824278e48e4bf7d1bb79a63cfe2099"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"}, + {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"}, + {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"}, + {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"}, + {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"}, + {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"}, + {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"}, + {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"}, + {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"}, + {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"}, + {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"}, + {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"}, ] crontab = [ {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, ] dependency-injector = [ - {file = "dependency-injector-4.37.0.tar.gz", hash = "sha256:8881c65ecc133d4b0af1cf35215a7bfab8d907e10ee1452d2dfef27cc3ca23d3"}, - {file = "dependency_injector-4.37.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6fdabe9dd14259fe14eb4c65f5bf244524a5cc43a474cb448528daeda4453573"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a184b71e8aa2fffd6c3d3828c2db045a14c3bc1ac9ca7945db76b9ac93efca81"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0cc2cb5b85a587f9b95505391ab4f1ef02432a590807f2230f445666d0bd3984"}, - {file = "dependency_injector-4.37.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:985570539c2703c6c009077026042a05b05474e75bec585607a556c1970bdeee"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win32.whl", hash = "sha256:b73bd0dd82b42950fb78baae68750ecb5c943d39cbfacea8dbee9d6df6535427"}, - {file = "dependency_injector-4.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:a944c1bbbb81dbeca8c30001bc8b7e061ca52cf291bf0dd35005863484e6ea8a"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d15b6fe1be06bffecf9b5f28fd972596f1ef6b7553d884c317b6d472ca0fb040"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf05aefcb3cd856624e2203f69a61ad54ffa0541a23a8e6d136c178b7a37153"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ededd0f6f7abe153030f3f50959abf5cb65bf7e5215a59b9333e027d6262d161"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3c5312fa1854eb45ed78a720ac5e1e354769e55a2fb42ca142b5dd612e8f0da"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win32.whl", hash = "sha256:6446bd95a80a487893e162eeb8aa2f3029ab47bb4641a9e5d431f3c024b459c9"}, - {file = "dependency_injector-4.37.0-cp36-cp36m-win_amd64.whl", hash = "sha256:fb29620e8249d66e8328d30c44d2f788d773132cdb6d0d62be4f1dd4343fc748"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c9fad82e44a34c83a0b522692aace49f3149d44b3ff826197a131a27a8df51df"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bfbcaa71ea2fd3a54e46d5038e6cedbb66d7c1319ac638f935f6cbba348ffc9"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d550f4e9e81e87ae23c5086e5b3b08f2331a02e9dc7a2553ce16275ba9921817"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a5242bca4f404c4918ba00b48fa1780c42903a9ff850956e04134bfc8b423d04"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win32.whl", hash = "sha256:59f557f1f1f7fe856759fdc59b5f2c012e4caaf05b4f848cbb1f250bdf4d8541"}, - {file = "dependency_injector-4.37.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c69196827505288a8f94f9d36d4b4829fb23d5a62f0898e0aa7d5ad1fce0505e"}, - {file = "dependency_injector-4.37.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7639c601288417352af3318d683e96f034ffb685de2cfb8d79a75f982c262302"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b607090446e697b77d36be523ed845021d2379d62fcaf152998127066b70d80"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c9f31a7b3806098476767531b40f8a59dac726ce7602158a6e093f9e2be46f1a"}, - {file = "dependency_injector-4.37.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:86c4e918064de9e300152233da096797c4de7bb8e33ce86a7c6a398daf760c57"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win32.whl", hash = "sha256:9756873290abd53111f9a7edc055c62a7968ac67d0fc3f49e7dba5bdda5c78a3"}, - {file = "dependency_injector-4.37.0-cp38-cp38-win_amd64.whl", hash = "sha256:35ac330fc1ed6ba0751f3eaa6a6f068c4e88cb1069bbe0c10568847db00dc62d"}, - {file = "dependency_injector-4.37.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dc75b54da62da105ea5d4541bc5f1d0d1edb1be3763d2e9e1184fd0f249f23b"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9f9572021c4ed1ae59d22437ba60c4d92d1a1ec1e5fee1f81ef0c58096b9ee8"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2c796ec1de86c5bd34ba6a96ea95409582ebc8e54d9a62f263c7c7852d593ae6"}, - {file = "dependency_injector-4.37.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b7fda0bd48b8b3d6f9e7227d872b7d0cc95b8d54f296213369867f7490e38d06"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win32.whl", hash = "sha256:c80521fc43f2812fec10ab4b92e7168659e25b5b13e0e3d45da0260e959da24a"}, - {file = "dependency_injector-4.37.0-cp39-cp39-win_amd64.whl", hash = "sha256:8930da0c2a0bdc3d96863e9f9522abeeb106ee7bb5c670805e97e42838191998"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6001f91e67700479088763babe976354538344ca347abe2d4405f6f4bc40b803"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14ccce9356f161c42664b73085c7ead179186e6cb8434bf885fa64b213e32712"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:58be030a8b0f4a856523ce3799cecfcf686a545b79f1f897262cec43090a7fd3"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a3bc779fe3f1331299032c51ec66c01dfd49e1a052c7ac3ac96aef30313c2e80"}, - {file = "dependency_injector-4.37.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7c781db928a6f02f5f373773dc1a263e1e9dfcce2a854b42c9c261db2eb0042f"}, + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, ] distlib = [ {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, @@ -1368,8 +1382,8 @@ frozenlist = [ {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"}, ] identify = [ - {file = "identify-2.4.5-py2.py3-none-any.whl", hash = "sha256:d27d10099844741c277b45d809bd452db0d70a9b41ea3cd93799ebbbcc6dcb29"}, - {file = "identify-2.4.5.tar.gz", hash = "sha256:d11469ff952a4d7fd7f9be520d335dc450f585d474b39b5dfb86a500831ab6c7"}, + {file = "identify-2.4.7-py2.py3-none-any.whl", hash = "sha256:e64210654dfbca6ced33230eb1b137591a0981425e1a60b4c6c36309f787bbd5"}, + {file = "identify-2.4.7.tar.gz", hash = "sha256:8408f01e0be25492017346d7dffe7e7711b762b23375c775d24d3bc38618fabc"}, ] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, @@ -1507,6 +1521,7 @@ mccabe = [ {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, ] +minos-broker-kafka = [] minos-microservice-aggregate = [] minos-microservice-common = [] minos-microservice-cqrs = [] @@ -1813,8 +1828,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] tomli = [ - {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, - {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, + {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, + {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, ] typing-extensions = [ {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, From e39f8e8502787e6933cf9f54230501b04a7f8947 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 10:07:14 +0100 Subject: [PATCH 68/97] ISSUE #96 * Fix deployment environments. --- .../workflows/minos-broker-kafka-tests.yml | 30 +++++++++++++++++++ .../minos-microservice-networks-tests.yml | 13 -------- .../tests/docker-compose.yml | 21 +------------ .../tests/docker-compose.yml | 28 +++++++++++++++++ 4 files changed, 59 insertions(+), 33 deletions(-) create mode 100644 packages/plugins/minos-broker-kafka/tests/docker-compose.yml diff --git a/.github/workflows/minos-broker-kafka-tests.yml b/.github/workflows/minos-broker-kafka-tests.yml index 514dba284..c35a8a639 100644 --- a/.github/workflows/minos-broker-kafka-tests.yml +++ b/.github/workflows/minos-broker-kafka-tests.yml @@ -19,6 +19,36 @@ jobs: run: working-directory: packages/plugins/minos-broker-kafka + services: + postgres: + image: postgres + env: + POSTGRES_USER: minos + POSTGRES_PASSWORD: min0s + POSTGRES_DB: order_db + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + zookeeper: + image: wurstmeister/zookeeper:latest + ports: + - 2181:2181 + + kafka: + image: wurstmeister/kafka:latest + ports: + - 9092:9092 + env: + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_ADVERTISED_HOST_NAME: kafka + KAFKA_DELETE_TOPIC_ENABLE: "true" + env: + MINOS_BROKER_QUEUE_HOST: postgres + MINOS_BROKER_HOST: kafka + MINOS_REPOSITORY_HOST: postgres + MINOS_SNAPSHOT_HOST: postgres + steps: - name: Check out repository code uses: actions/checkout@v2 diff --git a/.github/workflows/minos-microservice-networks-tests.yml b/.github/workflows/minos-microservice-networks-tests.yml index b8e73c48b..5483287b5 100644 --- a/.github/workflows/minos-microservice-networks-tests.yml +++ b/.github/workflows/minos-microservice-networks-tests.yml @@ -29,19 +29,6 @@ jobs: - 5432:5432 options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 - zookeeper: - image: wurstmeister/zookeeper:latest - ports: - - 2181:2181 - - kafka: - image: wurstmeister/kafka:latest - ports: - - 9092:9092 - env: - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_ADVERTISED_HOST_NAME: kafka - KAFKA_DELETE_TOPIC_ENABLE: "true" env: MINOS_BROKER_QUEUE_HOST: postgres MINOS_BROKER_HOST: kafka diff --git a/packages/core/minos-microservice-networks/tests/docker-compose.yml b/packages/core/minos-microservice-networks/tests/docker-compose.yml index 6a38c18c8..ed51df977 100644 --- a/packages/core/minos-microservice-networks/tests/docker-compose.yml +++ b/packages/core/minos-microservice-networks/tests/docker-compose.yml @@ -6,23 +6,4 @@ services: environment: POSTGRES_USER: minos POSTGRES_PASSWORD: min0s - POSTGRES_DB: order_db - - zookeeper: - image: wurstmeister/zookeeper:latest - ports: - - "2181:2181" - - kafka: - image: wurstmeister/kafka:latest - ports: - - "9092:9092" - depends_on: - - zookeeper - environment: - KAFKA_ADVERTISED_HOST_NAME: kafka - KAFKA_ADVERTISED_PORT: 9092 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_DELETE_TOPIC_ENABLE: "true" - volumes: - - /var/run/docker.sock:/var/run/docker.sock + POSTGRES_DB: order_db \ No newline at end of file diff --git a/packages/plugins/minos-broker-kafka/tests/docker-compose.yml b/packages/plugins/minos-broker-kafka/tests/docker-compose.yml new file mode 100644 index 000000000..6a38c18c8 --- /dev/null +++ b/packages/plugins/minos-broker-kafka/tests/docker-compose.yml @@ -0,0 +1,28 @@ +version: '2' +services: + postgres: + image: postgres:alpine + network_mode: host + environment: + POSTGRES_USER: minos + POSTGRES_PASSWORD: min0s + POSTGRES_DB: order_db + + zookeeper: + image: wurstmeister/zookeeper:latest + ports: + - "2181:2181" + + kafka: + image: wurstmeister/kafka:latest + ports: + - "9092:9092" + depends_on: + - zookeeper + environment: + KAFKA_ADVERTISED_HOST_NAME: kafka + KAFKA_ADVERTISED_PORT: 9092 + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_DELETE_TOPIC_ENABLE: "true" + volumes: + - /var/run/docker.sock:/var/run/docker.sock From 7221bc712c963b6efbad8a98956bf53eefe826de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 12:34:11 +0100 Subject: [PATCH 69/97] ISSUE #97 * Create `minos-discovery-minos` plugin. --- .../minos-discovery-minos-publish.yml | 33 + .../workflows/minos-discovery-minos-tests.yml | 79 + Makefile | 3 + .../minos/networks/__init__.py | 1 - .../minos/networks/discovery/__init__.py | 1 - .../networks/discovery/clients/__init__.py | 3 - .../plugins/minos-discovery-minos/AUTHORS.md | 15 + .../plugins/minos-discovery-minos/HISTORY.md | 1 + .../plugins/minos-discovery-minos/LICENSE | 21 + .../plugins/minos-discovery-minos/Makefile | 42 + .../plugins/minos-discovery-minos/README.md | 36 + .../minos-discovery-minos/RUNTHETESTS.md | 21 + .../plugins/minos-discovery-minos/SETUP.md | 11 + .../minos-discovery-minos/docs/Makefile | 20 + .../docs/_static/style.css | 3 + .../docs/_templates/layout.html | 4 + .../minos-discovery-minos/docs/authors.md | 1 + .../minos-discovery-minos/docs/conf.py | 192 ++ .../minos-discovery-minos/docs/history.md | 1 + .../minos-discovery-minos/docs/index.md | 16 + .../minos-discovery-minos/docs/readme.md | 3 + .../minos-discovery-minos/docs/runthetests.md | 1 + .../minos-discovery-minos/docs/usage.md | 1 + .../minos/plugins/minos_discovery/__init__.py | 7 + .../minos/plugins/minos_discovery/client.py} | 6 +- .../plugins/minos-discovery-minos/poetry.lock | 1794 +++++++++++++++++ .../plugins/minos-discovery-minos/poetry.toml | 2 + .../minos-discovery-minos/pyproject.toml | 54 + .../plugins/minos-discovery-minos/setup.cfg | 28 + .../tests/test_minos_discovery/__init__.py | 0 .../test_minos_discovery/test_client.py} | 4 +- pyproject.toml | 1 + 32 files changed, 2396 insertions(+), 9 deletions(-) create mode 100644 .github/workflows/minos-discovery-minos-publish.yml create mode 100644 .github/workflows/minos-discovery-minos-tests.yml create mode 100644 packages/plugins/minos-discovery-minos/AUTHORS.md create mode 100644 packages/plugins/minos-discovery-minos/HISTORY.md create mode 100644 packages/plugins/minos-discovery-minos/LICENSE create mode 100644 packages/plugins/minos-discovery-minos/Makefile create mode 100644 packages/plugins/minos-discovery-minos/README.md create mode 100644 packages/plugins/minos-discovery-minos/RUNTHETESTS.md create mode 100644 packages/plugins/minos-discovery-minos/SETUP.md create mode 100644 packages/plugins/minos-discovery-minos/docs/Makefile create mode 100644 packages/plugins/minos-discovery-minos/docs/_static/style.css create mode 100644 packages/plugins/minos-discovery-minos/docs/_templates/layout.html create mode 100644 packages/plugins/minos-discovery-minos/docs/authors.md create mode 100755 packages/plugins/minos-discovery-minos/docs/conf.py create mode 100644 packages/plugins/minos-discovery-minos/docs/history.md create mode 100644 packages/plugins/minos-discovery-minos/docs/index.md create mode 100644 packages/plugins/minos-discovery-minos/docs/readme.md create mode 100644 packages/plugins/minos-discovery-minos/docs/runthetests.md create mode 100644 packages/plugins/minos-discovery-minos/docs/usage.md create mode 100644 packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py rename packages/{core/minos-microservice-networks/minos/networks/discovery/clients/minos.py => plugins/minos-discovery-minos/minos/plugins/minos_discovery/client.py} (93%) create mode 100644 packages/plugins/minos-discovery-minos/poetry.lock create mode 100644 packages/plugins/minos-discovery-minos/poetry.toml create mode 100644 packages/plugins/minos-discovery-minos/pyproject.toml create mode 100644 packages/plugins/minos-discovery-minos/setup.cfg create mode 100644 packages/plugins/minos-discovery-minos/tests/test_minos_discovery/__init__.py rename packages/{core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_minos_discovery.py => plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py} (98%) diff --git a/.github/workflows/minos-discovery-minos-publish.yml b/.github/workflows/minos-discovery-minos-publish.yml new file mode 100644 index 000000000..3b8a196f4 --- /dev/null +++ b/.github/workflows/minos-discovery-minos-publish.yml @@ -0,0 +1,33 @@ +name: "Publish: minos-discovery-minos" + +on: + push: + branches: + - '*.*.x' + paths: + - 'packages/plugins/minos-discovery-minos/**' + +jobs: + deploy: + runs-on: ubuntu-latest + container: python:3.9-buster + defaults: + run: + working-directory: packages/plugins/minos-discovery-minos + + steps: + + - name: Check out repository code + uses: actions/checkout@v2 + + - name: Install Poetry + uses: snok/install-poetry@v1.1.4 + + - name: Install dependencies + run: make install + + - name: Publish package + run: make release + env: + POETRY_HTTP_BASIC_PYPI_USERNAME: ${{ secrets.PYPI_USERNAME }} + POETRY_HTTP_BASIC_PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} diff --git a/.github/workflows/minos-discovery-minos-tests.yml b/.github/workflows/minos-discovery-minos-tests.yml new file mode 100644 index 000000000..d2b466b03 --- /dev/null +++ b/.github/workflows/minos-discovery-minos-tests.yml @@ -0,0 +1,79 @@ +name: "Test: minos-discovery-minos" + +on: + push: + branches: + - main + - '*.*.x' + pull_request: + paths: + - 'packages/plugins/minos-discovery-minos/**' + - 'packages/core/minos-microservice-networks/**' + - 'packages/core/minos-microservice-common/**' + +jobs: + build: + runs-on: ubuntu-latest + container: python:3.9-buster + defaults: + run: + working-directory: packages/plugins/minos-discovery-minos + + services: + postgres: + image: postgres + env: + POSTGRES_USER: minos + POSTGRES_PASSWORD: min0s + POSTGRES_DB: order_db + ports: + - 5432:5432 + options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 + + zookeeper: + image: wurstmeister/zookeeper:latest + ports: + - 2181:2181 + + kafka: + image: wurstmeister/kafka:latest + ports: + - 9092:9092 + env: + KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 + KAFKA_ADVERTISED_HOST_NAME: kafka + KAFKA_DELETE_TOPIC_ENABLE: "true" + env: + MINOS_BROKER_QUEUE_HOST: postgres + MINOS_BROKER_HOST: kafka + MINOS_REPOSITORY_HOST: postgres + MINOS_SNAPSHOT_HOST: postgres + + steps: + - name: Check out repository code + uses: actions/checkout@v2 + + - name: Install Poetry + uses: snok/install-poetry@v1.1.4 + + - name: Install dependencies + run: make install + + - name: Lint package + run: make lint + + - name: Test package with coverage + run: make coverage + + - name: Publish coverage + uses: codecov/codecov-action@v2 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./packages/plugins/minos-discovery-minos/coverage.xml + fail_ci_if_error: true + + - name: Generate documentation + run: make docs + + - name: Generate build + run: make dist diff --git a/Makefile b/Makefile index 17c87da25..31536e72d 100644 --- a/Makefile +++ b/Makefile @@ -26,4 +26,7 @@ docs: $(MAKE) --directory=packages/plugins/minos-broker-kafka install docs cp -R packages/plugins/minos-broker-kafka/docs/_build/html $(DOCS_TARGET)/plugins/minos-broker-kafka + $(MAKE) --directory=packages/plugins/minos-discovery-minos install docs + cp -R packages/plugins/minos-discovery-minos/docs/_build/html $(DOCS_TARGET)/plugins/minos-discovery-minos + poetry run $(MAKE) --directory=docs html diff --git a/packages/core/minos-microservice-networks/minos/networks/__init__.py b/packages/core/minos-microservice-networks/minos/networks/__init__.py index d3f53ced6..75e8c6efa 100644 --- a/packages/core/minos-microservice-networks/minos/networks/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/__init__.py @@ -69,7 +69,6 @@ DiscoveryClient, DiscoveryConnector, KongDiscoveryClient, - MinosDiscoveryClient, ) from .exceptions import ( MinosActionNotFoundException, diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py b/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py index 983c9ec6d..79e69a490 100644 --- a/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py @@ -1,7 +1,6 @@ from .clients import ( DiscoveryClient, KongDiscoveryClient, - MinosDiscoveryClient, ) from .connectors import ( DiscoveryConnector, diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py index 4f0e51270..0176937b0 100644 --- a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py @@ -4,6 +4,3 @@ from .kong import ( KongDiscoveryClient, ) -from .minos import ( - MinosDiscoveryClient, -) diff --git a/packages/plugins/minos-discovery-minos/AUTHORS.md b/packages/plugins/minos-discovery-minos/AUTHORS.md new file mode 100644 index 000000000..30ff94991 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/AUTHORS.md @@ -0,0 +1,15 @@ +# Credits + +## Development Lead + +* Andrea Mucci + +## Core Devs + +* Sergio Garcia Prado +* Vladyslav Fenchak +* Alberto Amigo Alonso + +## Contributors + +None yet. Why not be the first? diff --git a/packages/plugins/minos-discovery-minos/HISTORY.md b/packages/plugins/minos-discovery-minos/HISTORY.md new file mode 100644 index 000000000..e061a5372 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/HISTORY.md @@ -0,0 +1 @@ +# History diff --git a/packages/plugins/minos-discovery-minos/LICENSE b/packages/plugins/minos-discovery-minos/LICENSE new file mode 100644 index 000000000..4daf85bf2 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Clariteia + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/plugins/minos-discovery-minos/Makefile b/packages/plugins/minos-discovery-minos/Makefile new file mode 100644 index 000000000..854bc90bc --- /dev/null +++ b/packages/plugins/minos-discovery-minos/Makefile @@ -0,0 +1,42 @@ +.PHONY: docs + +lint: + poetry run flake8 + +test: + poetry run pytest + +coverage: + poetry run coverage run -m pytest + poetry run coverage report -m + poetry run coverage xml + +reformat: + poetry run black --line-length 120 minos tests + poetry run isort minos tests + +docs: + rm -rf docs/api + poetry run $(MAKE) --directory=docs html + +release: + $(MAKE) dist + poetry publish + +dist: + poetry build + ls -l dist + +install: + poetry install + +update: + poetry update + +check: + $(MAKE) install + $(MAKE) reformat + $(MAKE) lint + $(MAKE) test + $(MAKE) docs + $(MAKE) dist diff --git a/packages/plugins/minos-discovery-minos/README.md b/packages/plugins/minos-discovery-minos/README.md new file mode 100644 index 000000000..5b4b511ac --- /dev/null +++ b/packages/plugins/minos-discovery-minos/README.md @@ -0,0 +1,36 @@ +

+ Minos logo +

+ +## minos-discovery-minos + +[![PyPI Latest Release](https://img.shields.io/pypi/v/minos-discovery-minos.svg)](https://pypi.org/project/minos-discovery-minos/) +[![GitHub Workflow Status](https://img.shields.io/github/workflow/status/minos-framework/minos-python/pages%20build%20and%20deployment?label=docs)](https://minos-framework.github.io/minos-python) +[![License](https://img.shields.io/github/license/minos-framework/minos-python.svg)](https://github.com/minos-framework/minos-python/blob/main/LICENSE) +[![Coverage](https://codecov.io/github/minos-framework/minos-python/coverage.svg?branch=main)](https://codecov.io/gh/minos-framework/minos-python) +[![Stack Overflow](https://img.shields.io/badge/Stack%20Overflow-Ask%20a%20question-green)](https://stackoverflow.com/questions/tagged/minos) + +## Summary + +Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. +Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an +asynchronous environment. + +## Documentation + +The official API Reference is publicly available at the [GitHub Pages](https://minos-framework.github.io/minos-python). + +## Source Code + +The source code of this project is hosted at the [GitHub Repository](https://github.com/minos-framework/minos-python). + +## Getting Help + +For usage questions, the best place to go to is [StackOverflow](https://stackoverflow.com/questions/tagged/minos). + +## Discussion and Development +Most development discussions take place over the [GitHub Issues](https://github.com/minos-framework/minos-python/issues). In addition, a [Gitter channel](https://gitter.im/minos-framework/community) is available for development-related questions. + +## License + +This project is distributed under the [MIT](https://raw.githubusercontent.com/minos-framework/minos-python/main/LICENSE) license. diff --git a/packages/plugins/minos-discovery-minos/RUNTHETESTS.md b/packages/plugins/minos-discovery-minos/RUNTHETESTS.md new file mode 100644 index 000000000..8b5e95b1f --- /dev/null +++ b/packages/plugins/minos-discovery-minos/RUNTHETESTS.md @@ -0,0 +1,21 @@ +Run the tests +============== + +In order to run the tests, please make sure you have the `Docker Engine `_ +and `Docker Compose `_ installed. + +Move into tests/ directory + +`cd tests/` + +Run service dependencies: + +`docker-compose up -d` + +Install library dependencies: + +`make install` + +Run tests: + +`make test` diff --git a/packages/plugins/minos-discovery-minos/SETUP.md b/packages/plugins/minos-discovery-minos/SETUP.md new file mode 100644 index 000000000..8203965c7 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/SETUP.md @@ -0,0 +1,11 @@ +Set up a development environment +================================= + +Since we use `poetry` as the default package manager, it must be installed. Please refer to +`https://python-poetry.org/docs/#installation`. + +Run `poetry install` to get the dependencies. + +Run `pre-commit install` to set the git checks before commiting. + +Make yourself sure you are able to run the tests. Refer to the appropriate section in this guide. diff --git a/packages/plugins/minos-discovery-minos/docs/Makefile b/packages/plugins/minos-discovery-minos/docs/Makefile new file mode 100644 index 000000000..95592d15f --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +SPHINXPROJ = minos-discovery-minos +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/packages/plugins/minos-discovery-minos/docs/_static/style.css b/packages/plugins/minos-discovery-minos/docs/_static/style.css new file mode 100644 index 000000000..8aa6c288f --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/_static/style.css @@ -0,0 +1,3 @@ +.wy-nav-content { + max-width: 1200px !important; +} diff --git a/packages/plugins/minos-discovery-minos/docs/_templates/layout.html b/packages/plugins/minos-discovery-minos/docs/_templates/layout.html new file mode 100644 index 000000000..b0a448060 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/_templates/layout.html @@ -0,0 +1,4 @@ +{% extends "!layout.html" %} +{% block extrahead %} + +{% endblock %} \ No newline at end of file diff --git a/packages/plugins/minos-discovery-minos/docs/authors.md b/packages/plugins/minos-discovery-minos/docs/authors.md new file mode 100644 index 000000000..cf16fc494 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/authors.md @@ -0,0 +1 @@ +.. mdinclude:: ../AUTHORS.md diff --git a/packages/plugins/minos-discovery-minos/docs/conf.py b/packages/plugins/minos-discovery-minos/docs/conf.py new file mode 100755 index 000000000..9dd507ec7 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/conf.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python +# +# minos documentation build configuration file, created by +# sphinx-quickstart on Fri Jun 9 13:47:02 2017. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +# If extensions (or modules to document with autodoc) are in another +# directory, add these directories to sys.path here. If the directory is +# relative to the documentation root, use os.path.abspath to make it +# absolute, like shown here. +# +import os +import sys + +sys.path.insert(0, os.path.abspath("..")) + +from minos.plugins import minos_discovery + +# -- General configuration --------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. + + +extensions = [ + "sphinxcontrib.apidoc", + "sphinx.ext.autodoc", + "sphinx_autodoc_typehints", + "sphinx.ext.viewcode", + "sphinx_rtd_theme", + "m2r2", +] +# Add any paths that contain templates here, relative to this directory. +templates_path = ["_templates"] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +source_suffix = [".rst", ".md"] + +# The master toctree document. +master_doc = "index" + +# General information about the project. +project = "Minos Discovery Minos" +copyright = "2021, Clariteia" +author = "Minos Framework Devs" + +# The version info for the project you're documenting, acts as replacement +# for |version| and |release|, also used in various other places throughout +# the built documents. +# +# The short X.Y version. +version = minos_discovery.__version__ +# The full version, including alpha/beta/rc tags. +release = minos_discovery.__version__ + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This patterns also effect to html_static_path and html_extra_path +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = "sphinx" + +todo_include_todos = False + + +# -- Options for HTML output ------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# + +html_theme = "sphinx_rtd_theme" + +# Theme options are theme-specific and customize the look and feel of a +# theme further. For a list of options available for each theme, see the +# documentation. +# + +# html_theme_options = { +# "codecov_button": True, +# "description": "Reactive microservices for an asynchronous world", +# "github_button": True, +# "github_user": "Clariteia", +# "github_repo": "cqrs", +# "github_type": "star", +# } + +html_sidebars = {"**": ["about.html", "navigation.html", "searchbox.html"]} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ["_static"] + + +# -- Options for HTMLHelp output --------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = "minosdoc" + + +# -- Options for LaTeX output ------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, author, documentclass +# [howto, manual, or own class]). +latex_documents = [ + (master_doc, "minos.tex", "Minos Discovery Minos Documentation", "Minos Framework Devs", "manual"), +] + + +# -- Options for manual page output ------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [(master_doc, "minos", "Minos Discovery Minos Documentation", [author], 1)] + + +# -- Options for Texinfo output ---------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + ( + master_doc, + "minos", + "Minos Discovery Minos Documentation", + author, + "minos", + "One line description of project.", + "Miscellaneous", + ), +] + +# "apidoc" extension +apidoc_module_dir = "../minos" +apidoc_output_dir = "api" +apidoc_separate_modules = True +autodoc_default_options = { + "inherited-members": True, + "special-members": "__init__", + "undoc-members": True, +} + +apidoc_toc_file = False +apidoc_module_first = True +apidoc_extra_args = [ + "--force", + "--implicit-namespaces", +] +# "autodoc typehints" extension + +set_type_checking_flag = True +typehints_fully_qualified = True diff --git a/packages/plugins/minos-discovery-minos/docs/history.md b/packages/plugins/minos-discovery-minos/docs/history.md new file mode 100644 index 000000000..d26e5be83 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/history.md @@ -0,0 +1 @@ +.. mdinclude:: ../HISTORY.md diff --git a/packages/plugins/minos-discovery-minos/docs/index.md b/packages/plugins/minos-discovery-minos/docs/index.md new file mode 100644 index 000000000..d851df4d8 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/index.md @@ -0,0 +1,16 @@ +# Welcome to Minos Discovery Minos's documentation! + +.. toctree:: + :maxdepth: 2 + + readme + runthetests + usage + api/minos + authors + history + +# Indices and tables +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/packages/plugins/minos-discovery-minos/docs/readme.md b/packages/plugins/minos-discovery-minos/docs/readme.md new file mode 100644 index 000000000..da72dbef1 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/readme.md @@ -0,0 +1,3 @@ +# Introduction + +.. mdinclude:: ../README.md diff --git a/packages/plugins/minos-discovery-minos/docs/runthetests.md b/packages/plugins/minos-discovery-minos/docs/runthetests.md new file mode 100644 index 000000000..309db1b96 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/runthetests.md @@ -0,0 +1 @@ +.. mdinclude:: ../RUNTHETESTS.md diff --git a/packages/plugins/minos-discovery-minos/docs/usage.md b/packages/plugins/minos-discovery-minos/docs/usage.md new file mode 100644 index 000000000..8f04b05ad --- /dev/null +++ b/packages/plugins/minos-discovery-minos/docs/usage.md @@ -0,0 +1 @@ +# Usage diff --git a/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py b/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py new file mode 100644 index 000000000..a1d32d422 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py @@ -0,0 +1,7 @@ +__author__ = "Minos Framework Devs" +__email__ = "hey@minos.run" +__version__ = "0.4.1" + +from .client import ( + MinosDiscoveryClient, +) diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/minos.py b/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/client.py similarity index 93% rename from packages/core/minos-microservice-networks/minos/networks/discovery/clients/minos.py rename to packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/client.py index 0c4ad5cf8..0c0bcc2cd 100644 --- a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/minos.py +++ b/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/client.py @@ -1,6 +1,6 @@ import logging -from .abc import ( +from minos.networks import ( DiscoveryClient, ) @@ -19,7 +19,7 @@ async def subscribe( retry_tries: int = 3, retry_delay: float = 5, ) -> None: - """Perform a subscription query. + """Perform the subscription query. :param host: The ip of the microservice to be subscribed. :param port: The port of the microservice to be subscribed. @@ -39,7 +39,7 @@ async def subscribe( await self._rest_subscribe(endpoint, service_metadata, host, port, name, endpoints, retry_tries, retry_delay) async def unsubscribe(self, name: str, retry_tries: int = 3, retry_delay: float = 5) -> None: - """Perform an unsubscribe query. + """Perform the unsubscription query. :param name: The name of the microservice to be unsubscribed. :param retry_tries: Number of attempts before raising a failure exception. diff --git a/packages/plugins/minos-discovery-minos/poetry.lock b/packages/plugins/minos-discovery-minos/poetry.lock new file mode 100644 index 000000000..68ff21ff8 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/poetry.lock @@ -0,0 +1,1794 @@ +[[package]] +name = "aiohttp" +version = "3.8.1" +description = "Async http client/server framework (asyncio)" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = ">=4.0.0a3,<5.0" +attrs = ">=17.3.0" +charset-normalizer = ">=2.0,<3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["aiodns", "brotli", "cchardet"] + +[[package]] +name = "aiomisc" +version = "14.4.6" +description = "aiomisc - miscellaneous utils for asyncio" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +colorlog = "*" + +[package.extras] +aiohttp = ["aiohttp"] +asgi = ["aiohttp-asgi"] +carbon = ["aiocarbon (>=0.15,<1.0)"] +contextvars = ["contextvars (>=2.4,<3.0)"] +cron = ["croniter (>=0.3.34,<0.4.0)"] +develop = ["aiocontextvars (==0.2.2)", "aiohttp (<4)", "aiohttp-asgi", "async-timeout", "coverage (==4.5.1)", "coveralls", "croniter (>=0.3.34,<0.4.0)", "fastapi", "freezegun (<1.1)", "mypy (>=0.782,<1.0)", "pylava", "pytest", "pytest-cov (>=2.5.1,<2.6.0)", "pytest-freezegun (>=0.4.2,<0.5.0)", "sphinx (>=3.5.1)", "sphinx-autobuild", "sphinx-intl", "timeout-decorator", "types-croniter", "tox (>=2.4)"] +raven = ["raven-aiohttp"] +uvloop = ["uvloop (>=0.14,<1)"] + +[[package]] +name = "aiopg" +version = "1.3.3" +description = "Postgres integration with asyncio." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +async-timeout = ">=3.0,<5.0" +psycopg2-binary = ">=2.8.4" + +[package.extras] +sa = ["sqlalchemy[postgresql_psycopg2binary] (>=1.3,<1.5)"] + +[[package]] +name = "aiosignal" +version = "1.2.0" +description = "aiosignal: a list of registered asynchronous callbacks" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "alabaster" +version = "0.7.12" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "async-timeout" +version = "4.0.2" +description = "Timeout context manager for asyncio programs" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.4.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] + +[[package]] +name = "babel" +version = "2.9.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +pytz = ">=2015.7" + +[[package]] +name = "black" +version = "22.1.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = ">=1.1.0" +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "cached-property" +version = "1.5.2" +description = "A decorator for caching properties in classes." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[[package]] +name = "charset-normalizer" +version = "2.0.11" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.0.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "colorlog" +version = "6.6.0" +description = "Add colours to the output of Python's logging module." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} + +[package.extras] +development = ["black", "flake8", "mypy", "pytest", "types-colorama"] + +[[package]] +name = "coverage" +version = "6.3.1" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "crontab" +version = "0.23.0" +description = "Parse and use crontab schedules in Python" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "dependency-injector" +version = "4.38.0" +description = "Dependency injection framework for Python" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +six = ">=1.7.0,<=1.16.0" + +[package.extras] +aiohttp = ["aiohttp"] +flask = ["flask"] +pydantic = ["pydantic"] +yaml = ["pyyaml"] + +[[package]] +name = "distlib" +version = "0.3.4" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "fastavro" +version = "1.4.9" +description = "Fast read/write of AVRO files" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +codecs = ["python-snappy", "zstandard", "lz4"] +lz4 = ["lz4"] +snappy = ["python-snappy"] +zstandard = ["zstandard"] + +[[package]] +name = "filelock" +version = "3.4.2" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] +testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] + +[[package]] +name = "flake8" +version = "4.0.1" +description = "the modular source code checker: pep8 pyflakes and co" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +mccabe = ">=0.6.0,<0.7.0" +pycodestyle = ">=2.8.0,<2.9.0" +pyflakes = ">=2.4.0,<2.5.0" + +[[package]] +name = "frozenlist" +version = "1.3.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "identify" +version = "2.4.7" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.3.0" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "4.10.1" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "isort" +version = "5.10.1" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.6.1,<4.0" + +[package.extras] +pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] +plugins = ["setuptools"] + +[[package]] +name = "jinja2" +version = "3.0.3" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "lmdb" +version = "1.3.0" +description = "Universal Python binding for the LMDB 'Lightning' Database" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "m2r2" +version = "0.3.2" +description = "Markdown and reStructuredText in a single file." +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +docutils = "*" +mistune = "0.8.4" + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mccabe" +version = "0.6.1" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "minos-microservice-common" +version = "0.4.1" +description = "Python Package with common Classes and Utilities used in Minos Microservices." +category = "main" +optional = false +python-versions = "^3.9" +develop = true + +[package.dependencies] +aiomisc = "^14.0.3" +aiopg = "^1.2.1" +cached-property = "^1.5.2" +dependency-injector = "^4.32.2" +fastavro = "^1.4.0" +lmdb = "^1.2.1" +orjson = "^3.5.2" +PyYAML = ">=5.4.1,<7.0.0" + +[package.source] +type = "directory" +url = "../../core/minos-microservice-common" + +[[package]] +name = "minos-microservice-networks" +version = "0.4.1" +description = "Python Package with the common network classes and utilities used in Minos Microservice." +category = "main" +optional = false +python-versions = "^3.9" +develop = true + +[package.dependencies] +aiohttp = "^3.7.4" +aiomisc = "^14.0.3" +aiopg = "^1.2.1" +crontab = "^0.23.0" +dependency-injector = "^4.32.2" +minos-microservice-common = "^0.4.0" +orjson = "^3.6.5" + +[package.source] +type = "directory" +url = "../../core/minos-microservice-networks" + +[[package]] +name = "mistune" +version = "0.8.4" +description = "The fastest markdown parser in pure Python" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "multidict" +version = "6.0.2" +description = "multidict implementation" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "nodeenv" +version = "1.6.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "orjson" +version = "3.6.6" +description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "pbr" +version = "5.8.0" +description = "Python Build Reasonableness" +category = "dev" +optional = false +python-versions = ">=2.6" + +[[package]] +name = "platformdirs" +version = "2.4.1" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pre-commit" +version = "2.17.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.6.1" + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +toml = "*" +virtualenv = ">=20.0.8" + +[[package]] +name = "psycopg2-binary" +version = "2.9.3" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pycodestyle" +version = "2.8.0" +description = "Python style guide checker" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "pyflakes" +version = "2.4.0" +description = "passive checker of Python programs" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.11.2" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "pyparsing" +version = "3.0.7" +description = "Python parsing module" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pytest" +version = "6.2.5" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "pytz" +version = "2021.3" +description = "World timezone definitions, modern and historical" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "4.4.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] + +[[package]] +name = "sphinx-autodoc-typehints" +version = "1.16.0" +description = "Type hints (PEP 484) support for the Sphinx autodoc extension" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +Sphinx = ">=4" + +[package.extras] +testing = ["covdefaults (>=2)", "coverage (>=6)", "diff-cover (>=6.4)", "nptyping (>=1)", "pytest (>=6)", "pytest-cov (>=3)", "sphobjinv (>=2)", "typing-extensions (>=3.5)"] +type_comments = ["typed-ast (>=1.4.0)"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.0.0" +description = "Read the Docs theme for Sphinx" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" + +[package.dependencies] +docutils = "<0.18" +sphinx = ">=1.6" + +[package.extras] +dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"] + +[[package]] +name = "sphinxcontrib-apidoc" +version = "0.3.0" +description = "A Sphinx extension for running 'sphinx-apidoc' on each build" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pbr = "*" +Sphinx = ">=1.6.0" + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest", "html5lib"] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["pytest", "flake8", "mypy"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["flake8", "mypy", "docutils-stubs"] +test = ["pytest"] + +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "2.0.0" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "typing-extensions" +version = "4.0.1" +description = "Backported and Experimental Type Hints for Python 3.6+" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "urllib3" +version = "1.26.8" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "virtualenv" +version = "20.13.0" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[package.dependencies] +distlib = ">=0.3.1,<1" +filelock = ">=3.2,<4" +platformdirs = ">=2,<3" +six = ">=1.9.0,<2" + +[package.extras] +docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] +testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] + +[[package]] +name = "yarl" +version = "1.7.2" +description = "Yet another URL library" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.7.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[metadata] +lock-version = "1.1" +python-versions = "^3.9" +content-hash = "004dc19cb8bb94e893ba8e3b095c5ad99efe0e70d97e925819b01636667493ab" + +[metadata.files] +aiohttp = [ + {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1ed0b6477896559f17b9eaeb6d38e07f7f9ffe40b9f0f9627ae8b9926ae260a8"}, + {file = "aiohttp-3.8.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7dadf3c307b31e0e61689cbf9e06be7a867c563d5a63ce9dca578f956609abf8"}, + {file = "aiohttp-3.8.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a79004bb58748f31ae1cbe9fa891054baaa46fb106c2dc7af9f8e3304dc30316"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12de6add4038df8f72fac606dff775791a60f113a725c960f2bab01d8b8e6b15"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f0d5f33feb5f69ddd57a4a4bd3d56c719a141080b445cbf18f238973c5c9923"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eaba923151d9deea315be1f3e2b31cc39a6d1d2f682f942905951f4e40200922"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:099ebd2c37ac74cce10a3527d2b49af80243e2a4fa39e7bce41617fbc35fa3c1"}, + {file = "aiohttp-3.8.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2e5d962cf7e1d426aa0e528a7e198658cdc8aa4fe87f781d039ad75dcd52c516"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fa0ffcace9b3aa34d205d8130f7873fcfefcb6a4dd3dd705b0dab69af6712642"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:61bfc23df345d8c9716d03717c2ed5e27374e0fe6f659ea64edcd27b4b044cf7"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:31560d268ff62143e92423ef183680b9829b1b482c011713ae941997921eebc8"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:01d7bdb774a9acc838e6b8f1d114f45303841b89b95984cbb7d80ea41172a9e3"}, + {file = "aiohttp-3.8.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:97ef77eb6b044134c0b3a96e16abcb05ecce892965a2124c566af0fd60f717e2"}, + {file = "aiohttp-3.8.1-cp310-cp310-win32.whl", hash = "sha256:c2aef4703f1f2ddc6df17519885dbfa3514929149d3ff900b73f45998f2532fa"}, + {file = "aiohttp-3.8.1-cp310-cp310-win_amd64.whl", hash = "sha256:713ac174a629d39b7c6a3aa757b337599798da4c1157114a314e4e391cd28e32"}, + {file = "aiohttp-3.8.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:473d93d4450880fe278696549f2e7aed8cd23708c3c1997981464475f32137db"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b5eeae8e019e7aad8af8bb314fb908dd2e028b3cdaad87ec05095394cce632"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3af642b43ce56c24d063325dd2cf20ee012d2b9ba4c3c008755a301aaea720ad"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3630c3ef435c0a7c549ba170a0633a56e92629aeed0e707fec832dee313fb7a"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4a4a4e30bf1edcad13fb0804300557aedd07a92cabc74382fdd0ba6ca2661091"}, + {file = "aiohttp-3.8.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6f8b01295e26c68b3a1b90efb7a89029110d3a4139270b24fda961893216c440"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a25fa703a527158aaf10dafd956f7d42ac6d30ec80e9a70846253dd13e2f067b"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:5bfde62d1d2641a1f5173b8c8c2d96ceb4854f54a44c23102e2ccc7e02f003ec"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:51467000f3647d519272392f484126aa716f747859794ac9924a7aafa86cd411"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:03a6d5349c9ee8f79ab3ff3694d6ce1cfc3ced1c9d36200cb8f08ba06bd3b782"}, + {file = "aiohttp-3.8.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:102e487eeb82afac440581e5d7f8f44560b36cf0bdd11abc51a46c1cd88914d4"}, + {file = "aiohttp-3.8.1-cp36-cp36m-win32.whl", hash = "sha256:4aed991a28ea3ce320dc8ce655875e1e00a11bdd29fe9444dd4f88c30d558602"}, + {file = "aiohttp-3.8.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b0e20cddbd676ab8a64c774fefa0ad787cc506afd844de95da56060348021e96"}, + {file = "aiohttp-3.8.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:37951ad2f4a6df6506750a23f7cbabad24c73c65f23f72e95897bb2cecbae676"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c23b1ad869653bc818e972b7a3a79852d0e494e9ab7e1a701a3decc49c20d51"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:15b09b06dae900777833fe7fc4b4aa426556ce95847a3e8d7548e2d19e34edb8"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:477c3ea0ba410b2b56b7efb072c36fa91b1e6fc331761798fa3f28bb224830dd"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2f2f69dca064926e79997f45b2f34e202b320fd3782f17a91941f7eb85502ee2"}, + {file = "aiohttp-3.8.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ef9612483cb35171d51d9173647eed5d0069eaa2ee812793a75373447d487aa4"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:6d69f36d445c45cda7b3b26afef2fc34ef5ac0cdc75584a87ef307ee3c8c6d00"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:55c3d1072704d27401c92339144d199d9de7b52627f724a949fc7d5fc56d8b93"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d00268fcb9f66fbcc7cd9fe423741d90c75ee029a1d15c09b22d23253c0a44"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:07b05cd3305e8a73112103c834e91cd27ce5b4bd07850c4b4dbd1877d3f45be7"}, + {file = "aiohttp-3.8.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c34dc4958b232ef6188c4318cb7b2c2d80521c9a56c52449f8f93ab7bc2a8a1c"}, + {file = "aiohttp-3.8.1-cp37-cp37m-win32.whl", hash = "sha256:d2f9b69293c33aaa53d923032fe227feac867f81682f002ce33ffae978f0a9a9"}, + {file = "aiohttp-3.8.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6ae828d3a003f03ae31915c31fa684b9890ea44c9c989056fea96e3d12a9fa17"}, + {file = "aiohttp-3.8.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0c7ebbbde809ff4e970824b2b6cb7e4222be6b95a296e46c03cf050878fc1785"}, + {file = "aiohttp-3.8.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8b7ef7cbd4fec9a1e811a5de813311ed4f7ac7d93e0fda233c9b3e1428f7dd7b"}, + {file = "aiohttp-3.8.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c3d6a4d0619e09dcd61021debf7059955c2004fa29f48788a3dfaf9c9901a7cd"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:718626a174e7e467f0558954f94af117b7d4695d48eb980146016afa4b580b2e"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:589c72667a5febd36f1315aa6e5f56dd4aa4862df295cb51c769d16142ddd7cd"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2ed076098b171573161eb146afcb9129b5ff63308960aeca4b676d9d3c35e700"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:086f92daf51a032d062ec5f58af5ca6a44d082c35299c96376a41cbb33034675"}, + {file = "aiohttp-3.8.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:11691cf4dc5b94236ccc609b70fec991234e7ef8d4c02dd0c9668d1e486f5abf"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:31d1e1c0dbf19ebccbfd62eff461518dcb1e307b195e93bba60c965a4dcf1ba0"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:11a67c0d562e07067c4e86bffc1553f2cf5b664d6111c894671b2b8712f3aba5"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:bb01ba6b0d3f6c68b89fce7305080145d4877ad3acaed424bae4d4ee75faa950"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:44db35a9e15d6fe5c40d74952e803b1d96e964f683b5a78c3cc64eb177878155"}, + {file = "aiohttp-3.8.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:844a9b460871ee0a0b0b68a64890dae9c415e513db0f4a7e3cab41a0f2fedf33"}, + {file = "aiohttp-3.8.1-cp38-cp38-win32.whl", hash = "sha256:7d08744e9bae2ca9c382581f7dce1273fe3c9bae94ff572c3626e8da5b193c6a"}, + {file = "aiohttp-3.8.1-cp38-cp38-win_amd64.whl", hash = "sha256:04d48b8ce6ab3cf2097b1855e1505181bdd05586ca275f2505514a6e274e8e75"}, + {file = "aiohttp-3.8.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:f5315a2eb0239185af1bddb1abf472d877fede3cc8d143c6cddad37678293237"}, + {file = "aiohttp-3.8.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a996d01ca39b8dfe77440f3cd600825d05841088fd6bc0144cc6c2ec14cc5f74"}, + {file = "aiohttp-3.8.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:13487abd2f761d4be7c8ff9080de2671e53fff69711d46de703c310c4c9317ca"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea302f34477fda3f85560a06d9ebdc7fa41e82420e892fc50b577e35fc6a50b2"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a2f635ce61a89c5732537a7896b6319a8fcfa23ba09bec36e1b1ac0ab31270d2"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e999f2d0e12eea01caeecb17b653f3713d758f6dcc770417cf29ef08d3931421"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0770e2806a30e744b4e21c9d73b7bee18a1cfa3c47991ee2e5a65b887c49d5cf"}, + {file = "aiohttp-3.8.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d15367ce87c8e9e09b0f989bfd72dc641bcd04ba091c68cd305312d00962addd"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6c7cefb4b0640703eb1069835c02486669312bf2f12b48a748e0a7756d0de33d"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:71927042ed6365a09a98a6377501af5c9f0a4d38083652bcd2281a06a5976724"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:28d490af82bc6b7ce53ff31337a18a10498303fe66f701ab65ef27e143c3b0ef"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b6613280ccedf24354406caf785db748bebbddcf31408b20c0b48cb86af76866"}, + {file = "aiohttp-3.8.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81e3d8c34c623ca4e36c46524a3530e99c0bc95ed068fd6e9b55cb721d408fb2"}, + {file = "aiohttp-3.8.1-cp39-cp39-win32.whl", hash = "sha256:7187a76598bdb895af0adbd2fb7474d7f6025d170bc0a1130242da817ce9e7d1"}, + {file = "aiohttp-3.8.1-cp39-cp39-win_amd64.whl", hash = "sha256:1c182cb873bc91b411e184dab7a2b664d4fea2743df0e4d57402f7f3fa644bac"}, + {file = "aiohttp-3.8.1.tar.gz", hash = "sha256:fc5471e1a54de15ef71c1bc6ebe80d4dc681ea600e68bfd1cbce40427f0b7578"}, +] +aiomisc = [ + {file = "aiomisc-14.4.6-py3-none-any.whl", hash = "sha256:beaa248f92acce53857f459499210643274cf06b33c7eb0c9d1f35feaad0d054"}, + {file = "aiomisc-14.4.6.tar.gz", hash = "sha256:a547a94908db9213fd0acde2674973b4a7a986ad82989215f73488903b65746e"}, +] +aiopg = [ + {file = "aiopg-1.3.3-py3-none-any.whl", hash = "sha256:2842dd8741460eeef940032dcb577bfba4d4115205dd82a73ce13b3271f5bf0a"}, + {file = "aiopg-1.3.3.tar.gz", hash = "sha256:547c6ba4ea0d73c2a11a2f44387d7133cc01d3c6f3b8ed976c0ac1eff4f595d7"}, +] +aiosignal = [ + {file = "aiosignal-1.2.0-py3-none-any.whl", hash = "sha256:26e62109036cd181df6e6ad646f91f0dcfd05fe16d0cb924138ff2ab75d64e3a"}, + {file = "aiosignal-1.2.0.tar.gz", hash = "sha256:78ed67db6c7b7ced4f98e495e572106d5c432a93e1ddd1bf475e1dc05f5b7df2"}, +] +alabaster = [ + {file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"}, + {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, +] +async-timeout = [ + {file = "async-timeout-4.0.2.tar.gz", hash = "sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15"}, + {file = "async_timeout-4.0.2-py3-none-any.whl", hash = "sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c"}, +] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, +] +babel = [ + {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, + {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, +] +black = [ + {file = "black-22.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1297c63b9e1b96a3d0da2d85d11cd9bf8664251fd69ddac068b98dc4f34f73b6"}, + {file = "black-22.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2ff96450d3ad9ea499fc4c60e425a1439c2120cbbc1ab959ff20f7c76ec7e866"}, + {file = "black-22.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e21e1f1efa65a50e3960edd068b6ae6d64ad6235bd8bfea116a03b21836af71"}, + {file = "black-22.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f69158a7d120fd641d1fa9a921d898e20d52e44a74a6fbbcc570a62a6bc8ab"}, + {file = "black-22.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:228b5ae2c8e3d6227e4bde5920d2fc66cc3400fde7bcc74f480cb07ef0b570d5"}, + {file = "black-22.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b1a5ed73ab4c482208d20434f700d514f66ffe2840f63a6252ecc43a9bc77e8a"}, + {file = "black-22.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35944b7100af4a985abfcaa860b06af15590deb1f392f06c8683b4381e8eeaf0"}, + {file = "black-22.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7835fee5238fc0a0baf6c9268fb816b5f5cd9b8793423a75e8cd663c48d073ba"}, + {file = "black-22.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:dae63f2dbf82882fa3b2a3c49c32bffe144970a573cd68d247af6560fc493ae1"}, + {file = "black-22.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fa1db02410b1924b6749c245ab38d30621564e658297484952f3d8a39fce7e8"}, + {file = "black-22.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:c8226f50b8c34a14608b848dc23a46e5d08397d009446353dad45e04af0c8e28"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2d6f331c02f0f40aa51a22e479c8209d37fcd520c77721c034517d44eecf5912"}, + {file = "black-22.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:742ce9af3086e5bd07e58c8feb09dbb2b047b7f566eb5f5bc63fd455814979f3"}, + {file = "black-22.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:fdb8754b453fb15fad3f72cd9cad3e16776f0964d67cf30ebcbf10327a3777a3"}, + {file = "black-22.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5660feab44c2e3cb24b2419b998846cbb01c23c7fe645fee45087efa3da2d61"}, + {file = "black-22.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:6f2f01381f91c1efb1451998bd65a129b3ed6f64f79663a55fe0e9b74a5f81fd"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:efbadd9b52c060a8fc3b9658744091cb33c31f830b3f074422ed27bad2b18e8f"}, + {file = "black-22.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8871fcb4b447206904932b54b567923e5be802b9b19b744fdff092bd2f3118d0"}, + {file = "black-22.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccad888050f5393f0d6029deea2a33e5ae371fd182a697313bdbd835d3edaf9c"}, + {file = "black-22.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e5c049442d7ca1a2fc273c79d1aecbbf1bc858f62e8184abe1ad175c4f7cc2"}, + {file = "black-22.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:373922fc66676133ddc3e754e4509196a8c392fec3f5ca4486673e685a421321"}, + {file = "black-22.1.0-py3-none-any.whl", hash = "sha256:3524739d76b6b3ed1132422bf9d82123cd1705086723bc3e235ca39fd21c667d"}, + {file = "black-22.1.0.tar.gz", hash = "sha256:a7c0192d35635f6fc1174be575cb7915e92e5dd629ee79fdaf0dcfa41a80afb5"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +cfgv = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.11.tar.gz", hash = "sha256:98398a9d69ee80548c762ba991a4728bfc3836768ed226b3945908d1a688371c"}, + {file = "charset_normalizer-2.0.11-py3-none-any.whl", hash = "sha256:2842d8f5e82a1f6aa437380934d5e1cd4fcf2003b06fed6940769c164a480a45"}, +] +click = [ + {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, + {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +colorlog = [ + {file = "colorlog-6.6.0-py2.py3-none-any.whl", hash = "sha256:351c51e866c86c3217f08e4b067a7974a678be78f07f85fc2d55b8babde6d94e"}, + {file = "colorlog-6.6.0.tar.gz", hash = "sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8"}, +] +coverage = [ + {file = "coverage-6.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeffd96882d8c06d31b65dddcf51db7c612547babc1c4c5db6a011abe9798525"}, + {file = "coverage-6.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:621f6ea7260ea2ffdaec64fe5cb521669984f567b66f62f81445221d4754df4c"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84f2436d6742c01136dd940ee158bfc7cf5ced3da7e4c949662b8703b5cd8145"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de73fca6fb403dd72d4da517cfc49fcf791f74eee697d3219f6be29adf5af6ce"}, + {file = "coverage-6.3.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78fbb2be068a13a5d99dce9e1e7d168db880870f7bc73f876152130575bd6167"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f5a4551dfd09c3bd12fca8144d47fe7745275adf3229b7223c2f9e29a975ebda"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7bff3a98f63b47464480de1b5bdd80c8fade0ba2832c9381253c9b74c4153c27"}, + {file = "coverage-6.3.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a06c358f4aed05fa1099c39decc8022261bb07dfadc127c08cfbd1391b09689e"}, + {file = "coverage-6.3.1-cp310-cp310-win32.whl", hash = "sha256:9fff3ff052922cb99f9e52f63f985d4f7a54f6b94287463bc66b7cdf3eb41217"}, + {file = "coverage-6.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:276b13cc085474e482566c477c25ed66a097b44c6e77132f3304ac0b039f83eb"}, + {file = "coverage-6.3.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:56c4a409381ddd7bbff134e9756077860d4e8a583d310a6f38a2315b9ce301d0"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9eb494070aa060ceba6e4bbf44c1bc5fa97bfb883a0d9b0c9049415f9e944793"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e15d424b8153756b7c903bde6d4610be0c3daca3986173c18dd5c1a1625e4cd"}, + {file = "coverage-6.3.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d47a897c1e91f33f177c21de897267b38fbb45f2cd8e22a710bcef1df09ac1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:25e73d4c81efa8ea3785274a2f7f3bfbbeccb6fcba2a0bdd3be9223371c37554"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fac0bcc5b7e8169bffa87f0dcc24435446d329cbc2b5486d155c2e0f3b493ae1"}, + {file = "coverage-6.3.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:72128176fea72012063200b7b395ed8a57849282b207321124d7ff14e26988e8"}, + {file = "coverage-6.3.1-cp37-cp37m-win32.whl", hash = "sha256:1bc6d709939ff262fd1432f03f080c5042dc6508b6e0d3d20e61dd045456a1a0"}, + {file = "coverage-6.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:618eeba986cea7f621d8607ee378ecc8c2504b98b3fdc4952b30fe3578304687"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d5ed164af5c9078596cfc40b078c3b337911190d3faeac830c3f1274f26b8320"}, + {file = "coverage-6.3.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:352c68e233409c31048a3725c446a9e48bbff36e39db92774d4f2380d630d8f8"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:448d7bde7ceb6c69e08474c2ddbc5b4cd13c9e4aa4a717467f716b5fc938a734"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9fde6b90889522c220dd56a670102ceef24955d994ff7af2cb786b4ba8fe11e4"}, + {file = "coverage-6.3.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e647a0be741edbb529a72644e999acb09f2ad60465f80757da183528941ff975"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a5cdc3adb4f8bb8d8f5e64c2e9e282bc12980ef055ec6da59db562ee9bdfefa"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:2dd70a167843b4b4b2630c0c56f1b586fe965b4f8ac5da05b6690344fd065c6b"}, + {file = "coverage-6.3.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9ad0a117b8dc2061ce9461ea4c1b4799e55edceb236522c5b8f958ce9ed8fa9a"}, + {file = "coverage-6.3.1-cp38-cp38-win32.whl", hash = "sha256:e92c7a5f7d62edff50f60a045dc9542bf939758c95b2fcd686175dd10ce0ed10"}, + {file = "coverage-6.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:482fb42eea6164894ff82abbcf33d526362de5d1a7ed25af7ecbdddd28fc124f"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c5b81fb37db76ebea79aa963b76d96ff854e7662921ce742293463635a87a78d"}, + {file = "coverage-6.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a4f923b9ab265136e57cc14794a15b9dcea07a9c578609cd5dbbfff28a0d15e6"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d296cbc8254a7dffdd7bcc2eb70be5a233aae7c01856d2d936f5ac4e8ac1f1"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1245ab82e8554fa88c4b2ab1e098ae051faac5af829efdcf2ce6b34dccd5567c"}, + {file = "coverage-6.3.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f2b05757c92ad96b33dbf8e8ec8d4ccb9af6ae3c9e9bd141c7cc44d20c6bcba"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9e3dd806f34de38d4c01416344e98eab2437ac450b3ae39c62a0ede2f8b5e4ed"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d651fde74a4d3122e5562705824507e2f5b2d3d57557f1916c4b27635f8fbe3f"}, + {file = "coverage-6.3.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:704f89b87c4f4737da2860695a18c852b78ec7279b24eedacab10b29067d3a38"}, + {file = "coverage-6.3.1-cp39-cp39-win32.whl", hash = "sha256:2aed4761809640f02e44e16b8b32c1a5dee5e80ea30a0ff0912158bde9c501f2"}, + {file = "coverage-6.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:9976fb0a5709988778ac9bc44f3d50fccd989987876dfd7716dee28beed0a9fa"}, + {file = "coverage-6.3.1-pp36.pp37.pp38-none-any.whl", hash = "sha256:463e52616ea687fd323888e86bf25e864a3cc6335a043fad6bbb037dbf49bbe2"}, + {file = "coverage-6.3.1.tar.gz", hash = "sha256:6c3f6158b02ac403868eea390930ae64e9a9a2a5bbfafefbb920d29258d9f2f8"}, +] +crontab = [ + {file = "crontab-0.23.0.tar.gz", hash = "sha256:ca79dede9c2f572bb32f38703e8fddcf3427e86edc838f2ffe7ae4b9ee2b0733"}, +] +dependency-injector = [ + {file = "dependency-injector-4.38.0.tar.gz", hash = "sha256:bab4c323d822d3fc9936e8eb3c2f5553d75e9efdadac11d5b293a016e31a1477"}, + {file = "dependency_injector-4.38.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:025eb5f97021663715bff8e01feb83d5b2f66fc17ece1042a194f1aae88c0d85"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3c61334b196ab767eae43af207764349287d5eb0283d8ed1ab24608121aea35"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bf4bfc52015e81c4f17647b7bbbe4e4549f041b3c6635b44a9ecede7594932c"}, + {file = "dependency_injector-4.38.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7aeba5882b06baf78978f33228e4c44133dada9173e330da68fbccca98520848"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win32.whl", hash = "sha256:445dbf5324eee215a465d7f3b1965b05e199c31caa09e63abf0f02d982791306"}, + {file = "dependency_injector-4.38.0-cp310-cp310-win_amd64.whl", hash = "sha256:880edbcb5d810faa0623112e2e652a7bec73d20ce0708d9db998a0a40b62cbb9"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cd6f1c130462e7461a43f82fdc0d2ba25b5ef594db823dbd0e57f3d1b7c44f86"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be75905f7513886699d3ff5ed9aca233175c03808fc888da2a53b83af0a5d65"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d7f1a7d27de6295ce8b7ca69d1177817bf36c7cbaf73819e4bab04f87c5e962"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e9c1ff387d7b7d814e9d29a531c6804acc67b1cca578c09abd3590fa7ec6bf06"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win32.whl", hash = "sha256:7770efcbc6915dabbb31ea0bdeee1105dabf76e1c8e31a454cb1983dcf19ecf1"}, + {file = "dependency_injector-4.38.0-cp36-cp36m-win_amd64.whl", hash = "sha256:9e89a9c88317ad237abfb374c410e1466476ffefe6c44f3caeca3dce747a635c"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb75cd29c132bfaf03a11a6ac4f459dddb7a6526669543de57d2bb5fddf78def"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d116c56e7fc3b59b3afa6078163b5f6ff4680ebf27800dd4032de7a04f7ef777"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9df330ef9e24b6f94e6764d23180350c2fb99785257233ee4738e066b876fa7f"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7a46639038313f64eca2dc858ac4cd9e0aca5ea21bb005f5d754aadd6446ba4b"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win32.whl", hash = "sha256:d0d983b269b657744058b5858afc3c59443db53afe9c3e709e316daa9f9b9454"}, + {file = "dependency_injector-4.38.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1446df58169c166a5a2d5644ba9eeb3b7f2f679f260596f78d012c58ff140d92"}, + {file = "dependency_injector-4.38.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:307396f2d9d2f532fe92079a56d40af5fc60dacb1d766e3f9cd04c3802a1c251"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd96b6c454ab86648f57f37b895c1c976b1a82b76f835011f607ee8a78ebc0e"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fb44b17e649cabcfd1f370ecfd492ac7a93216776d91954b31598eecb36cdb13"}, + {file = "dependency_injector-4.38.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ab8ebe728dd9b3be23c40ca5a5dbe195050d9ad35d42d7e9fdaea816f7134584"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win32.whl", hash = "sha256:1da3bad1452212bab76e87fbf7a71d3675190a1a909f345aaf8bae2fa97b878f"}, + {file = "dependency_injector-4.38.0-cp38-cp38-win_amd64.whl", hash = "sha256:2918776e88de88be0e2be036261180ca0605c8f64ead43d835ce852f16a9efd2"}, + {file = "dependency_injector-4.38.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:493be62561218624380d4eca9243a46753444f677217db6292a7b715cf429172"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a70511db88f84ac4228b27e37e12ea0e04a9c2a32cae3602b9af9a27c0db992"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e3e1cfe41a5ada0ff71889563441f538caff0399e41d3ee377b60fa50a858bf"}, + {file = "dependency_injector-4.38.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:116cc679a2c6d40c6a4f968aefe68535e596e88e96315dbd0d0ad2ff76654e3d"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win32.whl", hash = "sha256:f703c2c161de067ba9893b56743d24fb4c9dbff92eb504bc082c2d2cfeab4c01"}, + {file = "dependency_injector-4.38.0-cp39-cp39-win_amd64.whl", hash = "sha256:6821a864d6405dc0d5f794ac1b10da4a8c7e8731c6a0651a9682a0b76f5a5b3e"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6c9e8dc91aa5831bd3a58fec1b94ed8c52f78f601f5ab91135b5ad44325beef7"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b4eedadef0c84295b70803a79a3ce5a10a59dddd8f306876f6fa6bfc4de8e00"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2e88b5d09c80e20d6b3d985cc360f39a81e748667c20f6bc7eee9f4b832176ed"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b1fcd71ff46e097f4e47917ccdf6aa388b6a6372557f7d9f83db1e879e95f8bb"}, + {file = "dependency_injector-4.38.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:9633d6366282e83a3f21543c5c78299787948333d9fe6649b020cfac93d8b7ca"}, +] +distlib = [ + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +fastavro = [ + {file = "fastavro-1.4.9-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:2e64a77c529b638e89a879ff0211debfab5b2d114c26a2af29c81f6b013f395a"}, + {file = "fastavro-1.4.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fc9c95b7c1d59c5a2d29be21075870a122152cf927d84587dafc96da6b2ac3d"}, + {file = "fastavro-1.4.9-cp310-cp310-win_amd64.whl", hash = "sha256:927fd6148a8dd9646c129c0a0e8571aea829abc3cba04a3d5a4010a866934f4c"}, + {file = "fastavro-1.4.9-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:000b70c5109a61bdbfddeb2821a506de8f5333f243c608cbced61d44657d6c2f"}, + {file = "fastavro-1.4.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37a77a1b5347a06416e236c77027c750aaeda29ef8189aa456eb2a2571274b43"}, + {file = "fastavro-1.4.9-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce2c7747ce958115388872db0756d3eeb0d796084eea9b46dc3758ef32c4d952"}, + {file = "fastavro-1.4.9-cp37-cp37m-win_amd64.whl", hash = "sha256:d6ccb77604903a0308316e696bb65a8943361af5f757d10985689656c9bce6ed"}, + {file = "fastavro-1.4.9-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9a6ada2d6e133a2319438248c2e023b6735747b249c5a79d5f08f9d431e5d226"}, + {file = "fastavro-1.4.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7537e4df7782b03b9761e9338cef9fc7bfcc41100ab93c36c5c60fa568e724a"}, + {file = "fastavro-1.4.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a9cd6d8471beb4020b4126fd04150ed7295f74ae7234d0dc9205b55c193851e"}, + {file = "fastavro-1.4.9-cp38-cp38-win_amd64.whl", hash = "sha256:fa9d8b47e0533c84152332ad491bb63bbae76a8a7a0df1caa821e0cbebf0fb70"}, + {file = "fastavro-1.4.9-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:3759bdc77009ee1e2e76fc9f58b951c05c00a8600ef9ddbff59fee3cb0c9e235"}, + {file = "fastavro-1.4.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b98ef2bdb123b95945aa6d69d6a7d79f211df3274b2dd7786da7852ddec964d0"}, + {file = "fastavro-1.4.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32b804aa6920d80c0e94e1180d480f28f56c4b901849bd80ed180851752b5ce6"}, + {file = "fastavro-1.4.9-cp39-cp39-win_amd64.whl", hash = "sha256:f9b04acaf06b16218b47985e92d8daa98c1116d58f3cff81a5b3cf39cef9afc0"}, + {file = "fastavro-1.4.9.tar.gz", hash = "sha256:be3fec387eb2cdc9627060b5ae0690542c687dddc951b63fa11203553769ae5e"}, +] +filelock = [ + {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"}, + {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, +] +flake8 = [ + {file = "flake8-4.0.1-py2.py3-none-any.whl", hash = "sha256:479b1304f72536a55948cb40a32dce8bb0ffe3501e26eaf292c7e60eb5e0428d"}, + {file = "flake8-4.0.1.tar.gz", hash = "sha256:806e034dda44114815e23c16ef92f95c91e4c71100ff52813adf7132a6ad870d"}, +] +frozenlist = [ + {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2257aaba9660f78c7b1d8fea963b68f3feffb1a9d5d05a18401ca9eb3e8d0a3"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4a44ebbf601d7bac77976d429e9bdb5a4614f9f4027777f9e54fd765196e9d3b"}, + {file = "frozenlist-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:45334234ec30fc4ea677f43171b18a27505bfb2dba9aca4398a62692c0ea8868"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47be22dc27ed933d55ee55845d34a3e4e9f6fee93039e7f8ebadb0c2f60d403f"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03a7dd1bfce30216a3f51a84e6dd0e4a573d23ca50f0346634916ff105ba6e6b"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:691ddf6dc50480ce49f68441f1d16a4c3325887453837036e0fb94736eae1e58"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bde99812f237f79eaf3f04ebffd74f6718bbd216101b35ac7955c2d47c17da02"}, + {file = "frozenlist-1.3.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a202458d1298ced3768f5a7d44301e7c86defac162ace0ab7434c2e961166e8"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9e3e9e365991f8cc5f5edc1fd65b58b41d0514a6a7ad95ef5c7f34eb49b3d3e"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:04cb491c4b1c051734d41ea2552fde292f5f3a9c911363f74f39c23659c4af78"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:436496321dad302b8b27ca955364a439ed1f0999311c393dccb243e451ff66aa"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:754728d65f1acc61e0f4df784456106e35afb7bf39cfe37227ab00436fb38676"}, + {file = "frozenlist-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb275c6385dd72594758cbe96c07cdb9bd6becf84235f4a594bdf21e3596c9d"}, + {file = "frozenlist-1.3.0-cp310-cp310-win32.whl", hash = "sha256:e30b2f9683812eb30cf3f0a8e9f79f8d590a7999f731cf39f9105a7c4a39489d"}, + {file = "frozenlist-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f7353ba3367473d1d616ee727945f439e027f0bb16ac1a750219a8344d1d5d3c"}, + {file = "frozenlist-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:88aafd445a233dbbf8a65a62bc3249a0acd0d81ab18f6feb461cc5a938610d24"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4406cfabef8f07b3b3af0f50f70938ec06d9f0fc26cbdeaab431cbc3ca3caeaa"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cf829bd2e2956066dd4de43fd8ec881d87842a06708c035b37ef632930505a2"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:603b9091bd70fae7be28bdb8aa5c9990f4241aa33abb673390a7f7329296695f"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25af28b560e0c76fa41f550eacb389905633e7ac02d6eb3c09017fa1c8cdfde1"}, + {file = "frozenlist-1.3.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94c7a8a9fc9383b52c410a2ec952521906d355d18fccc927fca52ab575ee8b93"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:65bc6e2fece04e2145ab6e3c47428d1bbc05aede61ae365b2c1bddd94906e478"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3f7c935c7b58b0d78c0beea0c7358e165f95f1fd8a7e98baa40d22a05b4a8141"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd89acd1b8bb4f31b47072615d72e7f53a948d302b7c1d1455e42622de180eae"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:6983a31698490825171be44ffbafeaa930ddf590d3f051e397143a5045513b01"}, + {file = "frozenlist-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:adac9700675cf99e3615eb6a0eb5e9f5a4143c7d42c05cea2e7f71c27a3d0846"}, + {file = "frozenlist-1.3.0-cp37-cp37m-win32.whl", hash = "sha256:0c36e78b9509e97042ef869c0e1e6ef6429e55817c12d78245eb915e1cca7468"}, + {file = "frozenlist-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:57f4d3f03a18facacb2a6bcd21bccd011e3b75d463dc49f838fd699d074fabd1"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8c905a5186d77111f02144fab5b849ab524f1e876a1e75205cd1386a9be4b00a"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b5009062d78a8c6890d50b4e53b0ddda31841b3935c1937e2ed8c1bda1c7fb9d"}, + {file = "frozenlist-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2fdc3cd845e5a1f71a0c3518528bfdbfe2efaf9886d6f49eacc5ee4fd9a10953"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e650bd09b5dda929523b9f8e7f99b24deac61240ecc1a32aeba487afcd970f"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:40dff8962b8eba91fd3848d857203f0bd704b5f1fa2b3fc9af64901a190bba08"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:768efd082074bb203c934e83a61654ed4931ef02412c2fbdecea0cff7ecd0274"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:006d3595e7d4108a12025ddf415ae0f6c9e736e726a5db0183326fd191b14c5e"}, + {file = "frozenlist-1.3.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:871d42623ae15eb0b0e9df65baeee6976b2e161d0ba93155411d58ff27483ad8"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aff388be97ef2677ae185e72dc500d19ecaf31b698986800d3fc4f399a5e30a5"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9f892d6a94ec5c7b785e548e42722e6f3a52f5f32a8461e82ac3e67a3bd073f1"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:e982878792c971cbd60ee510c4ee5bf089a8246226dea1f2138aa0bb67aff148"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c6c321dd013e8fc20735b92cb4892c115f5cdb82c817b1e5b07f6b95d952b2f0"}, + {file = "frozenlist-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:30530930410855c451bea83f7b272fb1c495ed9d5cc72895ac29e91279401db3"}, + {file = "frozenlist-1.3.0-cp38-cp38-win32.whl", hash = "sha256:40ec383bc194accba825fbb7d0ef3dda5736ceab2375462f1d8672d9f6b68d07"}, + {file = "frozenlist-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:f20baa05eaa2bcd5404c445ec51aed1c268d62600362dc6cfe04fae34a424bd9"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0437fe763fb5d4adad1756050cbf855bbb2bf0d9385c7bb13d7a10b0dd550486"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b684c68077b84522b5c7eafc1dc735bfa5b341fb011d5552ebe0968e22ed641c"}, + {file = "frozenlist-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93641a51f89473837333b2f8100f3f89795295b858cd4c7d4a1f18e299dc0a4f"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6d32ff213aef0fd0bcf803bffe15cfa2d4fde237d1d4838e62aec242a8362fa"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31977f84828b5bb856ca1eb07bf7e3a34f33a5cddce981d880240ba06639b94d"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c62964192a1c0c30b49f403495911298810bada64e4f03249ca35a33ca0417a"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4eda49bea3602812518765810af732229b4291d2695ed24a0a20e098c45a707b"}, + {file = "frozenlist-1.3.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acb267b09a509c1df5a4ca04140da96016f40d2ed183cdc356d237286c971b51"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e1e26ac0a253a2907d654a37e390904426d5ae5483150ce3adedb35c8c06614a"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f96293d6f982c58ebebb428c50163d010c2f05de0cde99fd681bfdc18d4b2dc2"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e84cb61b0ac40a0c3e0e8b79c575161c5300d1d89e13c0e02f76193982f066ed"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:ff9310f05b9d9c5c4dd472983dc956901ee6cb2c3ec1ab116ecdde25f3ce4951"}, + {file = "frozenlist-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d26b650b71fdc88065b7a21f8ace70175bcf3b5bdba5ea22df4bfd893e795a3b"}, + {file = "frozenlist-1.3.0-cp39-cp39-win32.whl", hash = "sha256:01a73627448b1f2145bddb6e6c2259988bb8aee0fb361776ff8604b99616cd08"}, + {file = "frozenlist-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:772965f773757a6026dea111a15e6e2678fbd6216180f82a48a40b27de1ee2ab"}, + {file = "frozenlist-1.3.0.tar.gz", hash = "sha256:ce6f2ba0edb7b0c1d8976565298ad2deba6f8064d2bebb6ffce2ca896eb35b0b"}, +] +identify = [ + {file = "identify-2.4.7-py2.py3-none-any.whl", hash = "sha256:e64210654dfbca6ced33230eb1b137591a0981425e1a60b4c6c36309f787bbd5"}, + {file = "identify-2.4.7.tar.gz", hash = "sha256:8408f01e0be25492017346d7dffe7e7711b762b23375c775d24d3bc38618fabc"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +imagesize = [ + {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, + {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.10.1-py3-none-any.whl", hash = "sha256:899e2a40a8c4a1aec681feef45733de8a6c58f3f6a0dbed2eb6574b4387a77b6"}, + {file = "importlib_metadata-4.10.1.tar.gz", hash = "sha256:951f0d8a5b7260e9db5e41d429285b5f451e928479f19d80818878527d36e95e"}, +] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] +isort = [ + {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, + {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, +] +jinja2 = [ + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, +] +lmdb = [ + {file = "lmdb-1.3.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:63cb73fe7ce9eb93d992d632c85a0476b4332670d9e6a2802b5062f603b7809f"}, + {file = "lmdb-1.3.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:abbc439cd9fe60ffd6197009087ea885ac150017dc85384093b1d376f83f0ec4"}, + {file = "lmdb-1.3.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6260a526e4ad85b1f374a5ba9475bf369fb07e7728ea6ec57226b02c40d1976b"}, + {file = "lmdb-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e568ae0887ae196340947d9800136e90feaed6b86a261ef01f01b2ba65fc8106"}, + {file = "lmdb-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:d6a816954d212f40fd15007cd81ab7a6bebb77436d949a6a9ae04af57fc127f3"}, + {file = "lmdb-1.3.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:fa6439356e591d3249ab0e1778a6f8d8408e993f66dc911914c78208f5310309"}, + {file = "lmdb-1.3.0-cp35-cp35m-win_amd64.whl", hash = "sha256:c6adbd6f7f9048e97f31a069e652eb51020a81e80a0ce92dbb9810d21da2409a"}, + {file = "lmdb-1.3.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:eefb392f6b5cd43aada49258c5a79be11cb2c8cd3fc3e2d9319a1e0b9f906458"}, + {file = "lmdb-1.3.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5a14aca2651c3af6f0d0a6b9168200eea0c8f2d27c40b01a442f33329a6e8dff"}, + {file = "lmdb-1.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfa4aa9c67f8aee89b23005e98d1f3f32490b6b905fd1cb604b207cbd5755ab"}, + {file = "lmdb-1.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7da05d70fcc6561ac6b09e9fb1bf64b7ca294652c64c8a2889273970cee796b9"}, + {file = "lmdb-1.3.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:008243762decf8f6c90430a9bced56290ebbcdb5e877d90e42343bb97033e494"}, + {file = "lmdb-1.3.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:17215a42a4b9814c383deabecb160581e4fb75d00198eef0e3cea54f230ffbea"}, + {file = "lmdb-1.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65334eafa5d430b18d81ebd5362559a41483c362e1931f6e1b15bab2ecb7d75d"}, + {file = "lmdb-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:18c69fabdaf04efaf246587739cc1062b3e57c6ef0743f5c418df89e5e7e7b9b"}, + {file = "lmdb-1.3.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:41318717ab5d15ad2d6d263d34fbf614a045210f64b25e59ce734bb2105e421f"}, + {file = "lmdb-1.3.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:df2724bad7820114a205472994091097d0fa65a3e5fff5a8e688d123fb8c6326"}, + {file = "lmdb-1.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ddd590e1c7fcb395931aa3782fb89b9db4550ab2d81d006ecd239e0d462bc41"}, + {file = "lmdb-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:4172fba19417d7b29409beca7d73c067b54e5d8ab1fb9b51d7b4c1445d20a167"}, + {file = "lmdb-1.3.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:2df38115dd9428a54d59ae7c712a4c7cce0d6b1d66056de4b1a8c38718066106"}, + {file = "lmdb-1.3.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d9103aa4908f0bca43c5911ca067d4e3d01f682dff0c0381a1239bd2bd757984"}, + {file = "lmdb-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:394df860c3f93cfd92b6f4caba785f38208cc9614c18b3803f83a2cc1695042f"}, + {file = "lmdb-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:62ab28e3593bdc318ea2f2fa1574e5fca3b6d1f264686d773ba54a637d4f563b"}, + {file = "lmdb-1.3.0-pp27-pypy_73-macosx_10_7_x86_64.whl", hash = "sha256:e6a704b3baced9182836c7f77b769f23856f3a8f62d0282b1bc1feaf81a86712"}, + {file = "lmdb-1.3.0-pp27-pypy_73-win_amd64.whl", hash = "sha256:08f4b5129f4683802569b02581142e415c8dcc0ff07605983ec1b07804cecbad"}, + {file = "lmdb-1.3.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:f291e3f561f58dddf63a92a5a6a4b8af3a0920b6705d35e2f80e52e86ee238a2"}, + {file = "lmdb-1.3.0.tar.gz", hash = "sha256:60a11efc21aaf009d06518996360eed346f6000bfc9de05114374230879f992e"}, +] +m2r2 = [ + {file = "m2r2-0.3.2-py3-none-any.whl", hash = "sha256:d3684086b61b4bebe2307f15189495360f05a123c9bda2a66462649b7ca236aa"}, + {file = "m2r2-0.3.2.tar.gz", hash = "sha256:ccd95b052dcd1ac7442ecb3111262b2001c10e4119b459c34c93ac7a5c2c7868"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] +mccabe = [ + {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, + {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, +] +minos-microservice-common = [] +minos-microservice-networks = [] +mistune = [ + {file = "mistune-0.8.4-py2.py3-none-any.whl", hash = "sha256:88a1051873018da288eee8538d476dffe1262495144b33ecb586c4ab266bb8d4"}, + {file = "mistune-0.8.4.tar.gz", hash = "sha256:59a3429db53c50b5c6bcc8a07f8848cb00d7dc8bdb431a4ab41920d201d4756e"}, +] +multidict = [ + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b9e95a740109c6047602f4db4da9949e6c5945cefbad34a1299775ddc9a62e2"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac0e27844758d7177989ce406acc6a83c16ed4524ebc363c1f748cba184d89d3"}, + {file = "multidict-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:041b81a5f6b38244b34dc18c7b6aba91f9cdaf854d9a39e5ff0b58e2b5773b9c"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdda29a3c7e76a064f2477c9aab1ba96fd94e02e386f1e665bca1807fc5386f"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3368bf2398b0e0fcbf46d85795adc4c259299fec50c1416d0f77c0a843a3eed9"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4f052ee022928d34fe1f4d2bc743f32609fb79ed9c49a1710a5ad6b2198db20"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:225383a6603c086e6cef0f2f05564acb4f4d5f019a4e3e983f572b8530f70c88"}, + {file = "multidict-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50bd442726e288e884f7be9071016c15a8742eb689a593a0cac49ea093eef0a7"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:47e6a7e923e9cada7c139531feac59448f1f47727a79076c0b1ee80274cd8eee"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0556a1d4ea2d949efe5fd76a09b4a82e3a4a30700553a6725535098d8d9fb672"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:626fe10ac87851f4cffecee161fc6f8f9853f0f6f1035b59337a51d29ff3b4f9"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8064b7c6f0af936a741ea1efd18690bacfbae4078c0c385d7c3f611d11f0cf87"}, + {file = "multidict-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2d36e929d7f6a16d4eb11b250719c39560dd70545356365b494249e2186bc389"}, + {file = "multidict-6.0.2-cp310-cp310-win32.whl", hash = "sha256:fcb91630817aa8b9bc4a74023e4198480587269c272c58b3279875ed7235c293"}, + {file = "multidict-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:8cbf0132f3de7cc6c6ce00147cc78e6439ea736cee6bca4f068bcf892b0fd658"}, + {file = "multidict-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:05f6949d6169878a03e607a21e3b862eaf8e356590e8bdae4227eedadacf6e51"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2c2e459f7050aeb7c1b1276763364884595d47000c1cddb51764c0d8976e608"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0509e469d48940147e1235d994cd849a8f8195e0bca65f8f5439c56e17872a3"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:514fe2b8d750d6cdb4712346a2c5084a80220821a3e91f3f71eec11cf8d28fd4"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19adcfc2a7197cdc3987044e3f415168fc5dc1f720c932eb1ef4f71a2067e08b"}, + {file = "multidict-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b9d153e7f1f9ba0b23ad1568b3b9e17301e23b042c23870f9ee0522dc5cc79e8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:aef9cc3d9c7d63d924adac329c33835e0243b5052a6dfcbf7732a921c6e918ba"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4571f1beddff25f3e925eea34268422622963cd8dc395bb8778eb28418248e43"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d48b8ee1d4068561ce8033d2c344cf5232cb29ee1a0206a7b828c79cbc5982b8"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:45183c96ddf61bf96d2684d9fbaf6f3564d86b34cb125761f9a0ef9e36c1d55b"}, + {file = "multidict-6.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:75bdf08716edde767b09e76829db8c1e5ca9d8bb0a8d4bd94ae1eafe3dac5e15"}, + {file = "multidict-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:a45e1135cb07086833ce969555df39149680e5471c04dfd6a915abd2fc3f6dbc"}, + {file = "multidict-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6f3cdef8a247d1eafa649085812f8a310e728bdf3900ff6c434eafb2d443b23a"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0327292e745a880459ef71be14e709aaea2f783f3537588fb4ed09b6c01bca60"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e875b6086e325bab7e680e4316d667fc0e5e174bb5611eb16b3ea121c8951b86"}, + {file = "multidict-6.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feea820722e69451743a3d56ad74948b68bf456984d63c1a92e8347b7b88452d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cc57c68cb9139c7cd6fc39f211b02198e69fb90ce4bc4a094cf5fe0d20fd8b0"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:497988d6b6ec6ed6f87030ec03280b696ca47dbf0648045e4e1d28b80346560d"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89171b2c769e03a953d5969b2f272efa931426355b6c0cb508022976a17fd376"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684133b1e1fe91eda8fa7447f137c9490a064c6b7f392aa857bba83a28cfb693"}, + {file = "multidict-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd9fc9c4849a07f3635ccffa895d57abce554b467d611a5009ba4f39b78a8849"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e07c8e79d6e6fd37b42f3250dba122053fddb319e84b55dd3a8d6446e1a7ee49"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4070613ea2227da2bfb2c35a6041e4371b0af6b0be57f424fe2318b42a748516"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:47fbeedbf94bed6547d3aa632075d804867a352d86688c04e606971595460227"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5774d9218d77befa7b70d836004a768fb9aa4fdb53c97498f4d8d3f67bb9cfa9"}, + {file = "multidict-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2957489cba47c2539a8eb7ab32ff49101439ccf78eab724c828c1a54ff3ff98d"}, + {file = "multidict-6.0.2-cp38-cp38-win32.whl", hash = "sha256:e5b20e9599ba74391ca0cfbd7b328fcc20976823ba19bc573983a25b32e92b57"}, + {file = "multidict-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:8004dca28e15b86d1b1372515f32eb6f814bdf6f00952699bdeb541691091f96"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2e4a0785b84fb59e43c18a015ffc575ba93f7d1dbd272b4cdad9f5134b8a006c"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6701bf8a5d03a43375909ac91b6980aea74b0f5402fbe9428fc3f6edf5d9677e"}, + {file = "multidict-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a007b1638e148c3cfb6bf0bdc4f82776cef0ac487191d093cdc316905e504071"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07a017cfa00c9890011628eab2503bee5872f27144936a52eaab449be5eaf032"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c207fff63adcdf5a485969131dc70e4b194327666b7e8a87a97fbc4fd80a53b2"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:373ba9d1d061c76462d74e7de1c0c8e267e9791ee8cfefcf6b0b2495762c370c"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfba7c6d5d7c9099ba21f84662b037a0ffd4a5e6b26ac07d19e423e6fdf965a9"}, + {file = "multidict-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19d9bad105dfb34eb539c97b132057a4e709919ec4dd883ece5838bcbf262b80"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:de989b195c3d636ba000ee4281cd03bb1234635b124bf4cd89eeee9ca8fcb09d"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c40b7bbece294ae3a87c1bc2abff0ff9beef41d14188cda94ada7bcea99b0fb"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:d16cce709ebfadc91278a1c005e3c17dd5f71f5098bfae1035149785ea6e9c68"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a2c34a93e1d2aa35fbf1485e5010337c72c6791407d03aa5f4eed920343dd360"}, + {file = "multidict-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:feba80698173761cddd814fa22e88b0661e98cb810f9f986c54aa34d281e4937"}, + {file = "multidict-6.0.2-cp39-cp39-win32.whl", hash = "sha256:23b616fdc3c74c9fe01d76ce0d1ce872d2d396d8fa8e4899398ad64fb5aa214a"}, + {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, + {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +nodeenv = [ + {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, + {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, +] +orjson = [ + {file = "orjson-3.6.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:e4a7cad6c63306318453980d302c7c0b74c0cc290dd1f433bbd7d31a5af90cf1"}, + {file = "orjson-3.6.6-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e533941dca4a0530a876de32e54bf2fd3269cdec3751aebde7bfb5b5eba98e74"}, + {file = "orjson-3.6.6-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:9adf63be386eaa34278967512b83ff8fc4bed036a246391ae236f68d23c47452"}, + {file = "orjson-3.6.6-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:3b636753ae34d4619b11ea7d664a2f1e87e55e9738e5123e12bcce22acae9d13"}, + {file = "orjson-3.6.6-cp310-none-win_amd64.whl", hash = "sha256:78a10295ed048fd916c6584d6d27c232eae805a43e7c14be56e3745f784f0eb6"}, + {file = "orjson-3.6.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:82b4f9fb2af7799b52932a62eac484083f930d5519560d6f64b24d66a368d03f"}, + {file = "orjson-3.6.6-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:a0033d07309cc7d8b8c4bc5d42f0dd4422b53ceb91dee9f4086bb2afa70b7772"}, + {file = "orjson-3.6.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b321f99473116ab7c7c028377372f7b4adba4029aaca19cd567e83898f55579"}, + {file = "orjson-3.6.6-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:b9c98ed94f1688cc11b5c61b8eea39d854a1a2f09f71d8a5af005461b14994ed"}, + {file = "orjson-3.6.6-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:00b333a41392bd07a8603c42670547dbedf9b291485d773f90c6470eff435608"}, + {file = "orjson-3.6.6-cp37-none-win_amd64.whl", hash = "sha256:8d4fd3bdee65a81f2b79c50937d4b3c054e1e6bfa3fc72ed018a97c0c7c3d521"}, + {file = "orjson-3.6.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:954c9f8547247cd7a8c91094ff39c9fe314b5eaeaec90b7bfb7384a4108f416f"}, + {file = "orjson-3.6.6-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:74e5aed657ed0b91ef05d44d6a26d3e3e12ce4d2d71f75df41a477b05878c4a9"}, + {file = "orjson-3.6.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4008a5130e6e9c33abaa95e939e0e755175da10745740aa6968461b2f16830e2"}, + {file = "orjson-3.6.6-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:012761d5f3d186deb4f6238f15e9ea7c1aac6deebc8f5b741ba3b4fafe017460"}, + {file = "orjson-3.6.6-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:b464546718a940b48d095a98df4c04808bfa6c8706fe751fc3f9390bc2f82643"}, + {file = "orjson-3.6.6-cp38-none-win_amd64.whl", hash = "sha256:f10a800f4e5a4aab52076d4628e9e4dab9370bdd9d8ea254ebfde846b653ab25"}, + {file = "orjson-3.6.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:8010d2610cfab721725ef14d578c7071e946bbdae63322d8f7b49061cf3fde8d"}, + {file = "orjson-3.6.6-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:8dca67a4855e1e0f9a2ea0386e8db892708522e1171dc0ddf456932288fbae63"}, + {file = "orjson-3.6.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af065d60523139b99bd35b839c7a2d8c5da55df8a8c4402d2eb6cdc07fa7a624"}, + {file = "orjson-3.6.6-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:fa1f389cc9f766ae0cf7ba3533d5089836b01a5ccb3f8d904297f1fcf3d9dc34"}, + {file = "orjson-3.6.6-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:ec1221ad78f94d27b162a1d35672b62ef86f27f0e4c2b65051edb480cc86b286"}, + {file = "orjson-3.6.6-cp39-none-win_amd64.whl", hash = "sha256:afed2af55eeda1de6b3f1cbc93431981b19d380fcc04f6ed86e74c1913070304"}, + {file = "orjson-3.6.6.tar.gz", hash = "sha256:55dd988400fa7fbe0e31407c683f5aaab013b5bd967167b8fe058186773c4d6c"}, +] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +pbr = [ + {file = "pbr-5.8.0-py2.py3-none-any.whl", hash = "sha256:176e8560eaf61e127817ef93d8a844803abb27a4d4637f0ff3bb783129be2e0a"}, + {file = "pbr-5.8.0.tar.gz", hash = "sha256:672d8ebee84921862110f23fcec2acea191ef58543d34dfe9ef3d9f13c31cddf"}, +] +platformdirs = [ + {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, + {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +pre-commit = [ + {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"}, + {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, +] +psycopg2-binary = [ + {file = "psycopg2-binary-2.9.3.tar.gz", hash = "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-manylinux_2_24_ppc64le.whl", hash = "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-win32.whl", hash = "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029"}, + {file = "psycopg2_binary-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_aarch64.whl", hash = "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-manylinux_2_24_ppc64le.whl", hash = "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-win32.whl", hash = "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b"}, + {file = "psycopg2_binary-2.9.3-cp36-cp36m-win_amd64.whl", hash = "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-manylinux_2_24_ppc64le.whl", hash = "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-win32.whl", hash = "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba"}, + {file = "psycopg2_binary-2.9.3-cp37-cp37m-win_amd64.whl", hash = "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-manylinux_2_24_ppc64le.whl", hash = "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-win32.whl", hash = "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce"}, + {file = "psycopg2_binary-2.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-macosx_10_14_x86_64.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-manylinux_2_24_ppc64le.whl", hash = "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-win32.whl", hash = "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d"}, + {file = "psycopg2_binary-2.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f"}, +] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] +pycodestyle = [ + {file = "pycodestyle-2.8.0-py2.py3-none-any.whl", hash = "sha256:720f8b39dde8b293825e7ff02c475f3077124006db4f440dcbc9a20b76548a20"}, + {file = "pycodestyle-2.8.0.tar.gz", hash = "sha256:eddd5847ef438ea1c7870ca7eb78a9d47ce0cdb4851a5523949f2601d0cbbe7f"}, +] +pyflakes = [ + {file = "pyflakes-2.4.0-py2.py3-none-any.whl", hash = "sha256:3bb3a3f256f4b7968c9c788781e4ff07dce46bdf12339dcda61053375426ee2e"}, + {file = "pyflakes-2.4.0.tar.gz", hash = "sha256:05a85c2872edf37a4ed30b0cce2f6093e1d0581f8c19d7393122da7e25b2b24c"}, +] +pygments = [ + {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, + {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, +] +pyparsing = [ + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, +] +pytest = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] +pytz = [ + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, +] +pyyaml = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sphinx = [ + {file = "Sphinx-4.4.0-py3-none-any.whl", hash = "sha256:5da895959511473857b6d0200f56865ed62c31e8f82dd338063b84ec022701fe"}, + {file = "Sphinx-4.4.0.tar.gz", hash = "sha256:6caad9786055cb1fa22b4a365c1775816b876f91966481765d7d50e9f0dd35cc"}, +] +sphinx-autodoc-typehints = [ + {file = "sphinx_autodoc_typehints-1.16.0-py3-none-any.whl", hash = "sha256:b5efe1fb5754349f849ca09b1f5c9b4bb37f1e360f00fbde003b12c60d67cc3a"}, + {file = "sphinx_autodoc_typehints-1.16.0.tar.gz", hash = "sha256:21df6ee692c2c8366f6df13b13e4d4ab8af25cc0dfb65e2d182351528b6eb704"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8"}, + {file = "sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c"}, +] +sphinxcontrib-apidoc = [ + {file = "sphinxcontrib-apidoc-0.3.0.tar.gz", hash = "sha256:729bf592cf7b7dd57c4c05794f732dc026127275d785c2a5494521fdde773fb9"}, + {file = "sphinxcontrib_apidoc-0.3.0-py2.py3-none-any.whl", hash = "sha256:6671a46b2c6c5b0dca3d8a147849d159065e50443df79614f921b42fbd15cb09"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] +tomli = [ + {file = "tomli-2.0.0-py3-none-any.whl", hash = "sha256:b5bde28da1fed24b9bd1d4d2b8cba62300bfb4ec9a6187a957e8ddb9434c5224"}, + {file = "tomli-2.0.0.tar.gz", hash = "sha256:c292c34f58502a1eb2bbb9f5bbc9a5ebc37bee10ffb8c2d6bbdfa8eb13cc14e1"}, +] +typing-extensions = [ + {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, + {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, +] +urllib3 = [ + {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, + {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, +] +virtualenv = [ + {file = "virtualenv-20.13.0-py2.py3-none-any.whl", hash = "sha256:339f16c4a86b44240ba7223d0f93a7887c3ca04b5f9c8129da7958447d079b09"}, + {file = "virtualenv-20.13.0.tar.gz", hash = "sha256:d8458cf8d59d0ea495ad9b34c2599487f8a7772d796f9910858376d1600dd2dd"}, +] +yarl = [ + {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f2a8508f7350512434e41065684076f640ecce176d262a7d54f0da41d99c5a95"}, + {file = "yarl-1.7.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da6df107b9ccfe52d3a48165e48d72db0eca3e3029b5b8cb4fe6ee3cb870ba8b"}, + {file = "yarl-1.7.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a1d0894f238763717bdcfea74558c94e3bc34aeacd3351d769460c1a586a8b05"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe4b95b7e00c6635a72e2d00b478e8a28bfb122dc76349a06e20792eb53a523"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c145ab54702334c42237a6c6c4cc08703b6aa9b94e2f227ceb3d477d20c36c63"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1ca56f002eaf7998b5fcf73b2421790da9d2586331805f38acd9997743114e98"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1d3d5ad8ea96bd6d643d80c7b8d5977b4e2fb1bab6c9da7322616fd26203d125"}, + {file = "yarl-1.7.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:167ab7f64e409e9bdd99333fe8c67b5574a1f0495dcfd905bc7454e766729b9e"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:95a1873b6c0dd1c437fb3bb4a4aaa699a48c218ac7ca1e74b0bee0ab16c7d60d"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6152224d0a1eb254f97df3997d79dadd8bb2c1a02ef283dbb34b97d4f8492d23"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:5bb7d54b8f61ba6eee541fba4b83d22b8a046b4ef4d8eb7f15a7e35db2e1e245"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:9c1f083e7e71b2dd01f7cd7434a5f88c15213194df38bc29b388ccdf1492b739"}, + {file = "yarl-1.7.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f44477ae29025d8ea87ec308539f95963ffdc31a82f42ca9deecf2d505242e72"}, + {file = "yarl-1.7.2-cp310-cp310-win32.whl", hash = "sha256:cff3ba513db55cc6a35076f32c4cdc27032bd075c9faef31fec749e64b45d26c"}, + {file = "yarl-1.7.2-cp310-cp310-win_amd64.whl", hash = "sha256:c9c6d927e098c2d360695f2e9d38870b2e92e0919be07dbe339aefa32a090265"}, + {file = "yarl-1.7.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:9b4c77d92d56a4c5027572752aa35082e40c561eec776048330d2907aead891d"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c01a89a44bb672c38f42b49cdb0ad667b116d731b3f4c896f72302ff77d71656"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c19324a1c5399b602f3b6e7db9478e5b1adf5cf58901996fc973fe4fccd73eed"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3abddf0b8e41445426d29f955b24aeecc83fa1072be1be4e0d194134a7d9baee"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6a1a9fe17621af43e9b9fcea8bd088ba682c8192d744b386ee3c47b56eaabb2c"}, + {file = "yarl-1.7.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b0915ee85150963a9504c10de4e4729ae700af11df0dc5550e6587ed7891e92"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:29e0656d5497733dcddc21797da5a2ab990c0cb9719f1f969e58a4abac66234d"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:bf19725fec28452474d9887a128e98dd67eee7b7d52e932e6949c532d820dc3b"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:d6f3d62e16c10e88d2168ba2d065aa374e3c538998ed04996cd373ff2036d64c"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:ac10bbac36cd89eac19f4e51c032ba6b412b3892b685076f4acd2de18ca990aa"}, + {file = "yarl-1.7.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:aa32aaa97d8b2ed4e54dc65d241a0da1c627454950f7d7b1f95b13985afd6c5d"}, + {file = "yarl-1.7.2-cp36-cp36m-win32.whl", hash = "sha256:87f6e082bce21464857ba58b569370e7b547d239ca22248be68ea5d6b51464a1"}, + {file = "yarl-1.7.2-cp36-cp36m-win_amd64.whl", hash = "sha256:ac35ccde589ab6a1870a484ed136d49a26bcd06b6a1c6397b1967ca13ceb3913"}, + {file = "yarl-1.7.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a467a431a0817a292121c13cbe637348b546e6ef47ca14a790aa2fa8cc93df63"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ab0c3274d0a846840bf6c27d2c60ba771a12e4d7586bf550eefc2df0b56b3b4"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d260d4dc495c05d6600264a197d9d6f7fc9347f21d2594926202fd08cf89a8ba"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fc4dd8b01a8112809e6b636b00f487846956402834a7fd59d46d4f4267181c41"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c1164a2eac148d85bbdd23e07dfcc930f2e633220f3eb3c3e2a25f6148c2819e"}, + {file = "yarl-1.7.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:67e94028817defe5e705079b10a8438b8cb56e7115fa01640e9c0bb3edf67332"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:89ccbf58e6a0ab89d487c92a490cb5660d06c3a47ca08872859672f9c511fc52"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:8cce6f9fa3df25f55521fbb5c7e4a736683148bcc0c75b21863789e5185f9185"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:211fcd65c58bf250fb994b53bc45a442ddc9f441f6fec53e65de8cba48ded986"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c10ea1e80a697cf7d80d1ed414b5cb8f1eec07d618f54637067ae3c0334133c4"}, + {file = "yarl-1.7.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:52690eb521d690ab041c3919666bea13ab9fbff80d615ec16fa81a297131276b"}, + {file = "yarl-1.7.2-cp37-cp37m-win32.whl", hash = "sha256:695ba021a9e04418507fa930d5f0704edbce47076bdcfeeaba1c83683e5649d1"}, + {file = "yarl-1.7.2-cp37-cp37m-win_amd64.whl", hash = "sha256:c17965ff3706beedafd458c452bf15bac693ecd146a60a06a214614dc097a271"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:fce78593346c014d0d986b7ebc80d782b7f5e19843ca798ed62f8e3ba8728576"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c2a1ac41a6aa980db03d098a5531f13985edcb451bcd9d00670b03129922cd0d"}, + {file = "yarl-1.7.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39d5493c5ecd75c8093fa7700a2fb5c94fe28c839c8e40144b7ab7ccba6938c8"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1eb6480ef366d75b54c68164094a6a560c247370a68c02dddb11f20c4c6d3c9d"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ba63585a89c9885f18331a55d25fe81dc2d82b71311ff8bd378fc8004202ff6"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e39378894ee6ae9f555ae2de332d513a5763276a9265f8e7cbaeb1b1ee74623a"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c0910c6b6c31359d2f6184828888c983d54d09d581a4a23547a35f1d0b9484b1"}, + {file = "yarl-1.7.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6feca8b6bfb9eef6ee057628e71e1734caf520a907b6ec0d62839e8293e945c0"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8300401dc88cad23f5b4e4c1226f44a5aa696436a4026e456fe0e5d2f7f486e6"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:788713c2896f426a4e166b11f4ec538b5736294ebf7d5f654ae445fd44270832"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fd547ec596d90c8676e369dd8a581a21227fe9b4ad37d0dc7feb4ccf544c2d59"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:737e401cd0c493f7e3dd4db72aca11cfe069531c9761b8ea474926936b3c57c8"}, + {file = "yarl-1.7.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:baf81561f2972fb895e7844882898bda1eef4b07b5b385bcd308d2098f1a767b"}, + {file = "yarl-1.7.2-cp38-cp38-win32.whl", hash = "sha256:ede3b46cdb719c794427dcce9d8beb4abe8b9aa1e97526cc20de9bd6583ad1ef"}, + {file = "yarl-1.7.2-cp38-cp38-win_amd64.whl", hash = "sha256:cc8b7a7254c0fc3187d43d6cb54b5032d2365efd1df0cd1749c0c4df5f0ad45f"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:580c1f15500e137a8c37053e4cbf6058944d4c114701fa59944607505c2fe3a0"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3ec1d9a0d7780416e657f1e405ba35ec1ba453a4f1511eb8b9fbab81cb8b3ce1"}, + {file = "yarl-1.7.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3bf8cfe8856708ede6a73907bf0501f2dc4e104085e070a41f5d88e7faf237f3"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be4bbb3d27a4e9aa5f3df2ab61e3701ce8fcbd3e9846dbce7c033a7e8136746"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:534b047277a9a19d858cde163aba93f3e1677d5acd92f7d10ace419d478540de"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ddcd80d79c96eb19c354d9dca95291589c5954099836b7c8d29278a7ec0bda"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9bfcd43c65fbb339dc7086b5315750efa42a34eefad0256ba114cd8ad3896f4b"}, + {file = "yarl-1.7.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f64394bd7ceef1237cc604b5a89bf748c95982a84bcd3c4bbeb40f685c810794"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044daf3012e43d4b3538562da94a88fb12a6490652dbc29fb19adfa02cf72eac"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:368bcf400247318382cc150aaa632582d0780b28ee6053cd80268c7e72796dec"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:bab827163113177aee910adb1f48ff7af31ee0289f434f7e22d10baf624a6dfe"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0cba38120db72123db7c58322fa69e3c0efa933040ffb586c3a87c063ec7cae8"}, + {file = "yarl-1.7.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:59218fef177296451b23214c91ea3aba7858b4ae3306dde120224cfe0f7a6ee8"}, + {file = "yarl-1.7.2-cp39-cp39-win32.whl", hash = "sha256:1edc172dcca3f11b38a9d5c7505c83c1913c0addc99cd28e993efeaafdfaa18d"}, + {file = "yarl-1.7.2-cp39-cp39-win_amd64.whl", hash = "sha256:797c2c412b04403d2da075fb93c123df35239cd7b4cc4e0cd9e5839b73f52c58"}, + {file = "yarl-1.7.2.tar.gz", hash = "sha256:45399b46d60c253327a460e99856752009fcee5f5d3c80b2f7c0cae1c38d56dd"}, +] +zipp = [ + {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, + {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, +] diff --git a/packages/plugins/minos-discovery-minos/poetry.toml b/packages/plugins/minos-discovery-minos/poetry.toml new file mode 100644 index 000000000..ab1033bd3 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/poetry.toml @@ -0,0 +1,2 @@ +[virtualenvs] +in-project = true diff --git a/packages/plugins/minos-discovery-minos/pyproject.toml b/packages/plugins/minos-discovery-minos/pyproject.toml new file mode 100644 index 000000000..360218a2a --- /dev/null +++ b/packages/plugins/minos-discovery-minos/pyproject.toml @@ -0,0 +1,54 @@ +[tool.poetry] +name = "minos-discovery-minos" +version = "0.4.1" +description = "Minos Discovery Minos package" +readme = "README.md" +repository = "https://github.com/minos-framework/minos-python" +homepage = "http://www.minos.run/" +authors = ["Minos Framework Devs "] +license = "MIT" +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.9", +] +keywords = [ + "clariteia", + "minos", + "microservice", + "saga", +] +packages = [ + { include = "minos" } +] +include = [ + "AUTHORS.md", + "HISTORY.md", + "LICENSE", +] + +[tool.poetry.dependencies] +python = "^3.9" +minos-microservice-common = "^0.4.0" +minos-microservice-networks = "^0.4.0" + +[tool.poetry.dev-dependencies] +minos-microservice-common = { path = "../../core/minos-microservice-common", develop = true } +minos-microservice-networks = { path = "../../core/minos-microservice-networks", develop = true } +black = "^22.1" +isort = "^5.8.0" +pytest = "^6.2.4" +coverage = "^6.3" +flake8 = "^4.0.1" +Sphinx = "^4.0.1" +pre-commit = "^2.12.1" +sphinx-autodoc-typehints = "^1.12.0" +sphinxcontrib-apidoc = "^0.3.0" +sphinx-rtd-theme = "^1.0.0" +m2r2 = "^0.3.2" + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/packages/plugins/minos-discovery-minos/setup.cfg b/packages/plugins/minos-discovery-minos/setup.cfg new file mode 100644 index 000000000..dbb9ac849 --- /dev/null +++ b/packages/plugins/minos-discovery-minos/setup.cfg @@ -0,0 +1,28 @@ +[coverage:run] +source = + minos + +[coverage:report] +exclude_lines = + pragma: no cover + raise NotImplementedError + if TYPE_CHECKING: + pass +precision = 2 + +[flake8] +filename = + ./minos/**/*.py, + ./tests/**/*.py, + ./examples/**/*.py +max-line-length = 120 +per-file-ignores = + ./**/__init__.py:F401,W391 + +[isort] +known_first_party=minos +multi_line_output = 3 +include_trailing_comma = True +force_grid_wrap = 1 +use_parentheses = True +line_length = 120 diff --git a/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/__init__.py b/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_minos_discovery.py b/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py similarity index 98% rename from packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_minos_discovery.py rename to packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py index 314958d30..d6bbf33a5 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_minos_discovery.py +++ b/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py @@ -8,9 +8,11 @@ ) from minos.networks import ( - MinosDiscoveryClient, MinosDiscoveryConnectorException, ) +from minos.plugins.minos_discovery import ( + MinosDiscoveryClient, +) _Response = namedtuple("Response", ["ok"]) diff --git a/pyproject.toml b/pyproject.toml index 097281422..d20715469 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ minos-microservice-aggregate = { path = "packages/core/minos-microservice-aggreg minos-microservice-saga = { path = "packages/core/minos-microservice-saga", develop = true } minos-microservice-cqrs = { path = "packages/core/minos-microservice-cqrs", develop = true } minos-broker-kafka = { path = "packages/plugins/minos-broker-kafka", develop = true } +minos-discovery-minos = { path = "packages/plugins/minos-discovery-minos", develop = true } [tool.poetry.dev-dependencies] black = "^22.1" From 5e9f9b2d343d0994719ba1fcba356e320f5c3d5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 12:48:27 +0100 Subject: [PATCH 70/97] ISSUE #97 * Add `InMemoryDiscoveryClient`. --- .../minos/networks/__init__.py | 1 + .../minos/networks/discovery/__init__.py | 1 + .../networks/discovery/clients/__init__.py | 3 ++ .../minos/networks/discovery/clients/abc.py | 4 +- .../networks/discovery/clients/memory.py | 37 +++++++++++++++++++ .../tests/test_config.yml | 2 +- .../test_clients/test_memory.py | 28 ++++++++++++++ .../test_discovery/test_connectors.py | 6 +-- 8 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 packages/core/minos-microservice-networks/minos/networks/discovery/clients/memory.py create mode 100644 packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_memory.py diff --git a/packages/core/minos-microservice-networks/minos/networks/__init__.py b/packages/core/minos-microservice-networks/minos/networks/__init__.py index 75e8c6efa..ff8b059f6 100644 --- a/packages/core/minos-microservice-networks/minos/networks/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/__init__.py @@ -68,6 +68,7 @@ from .discovery import ( DiscoveryClient, DiscoveryConnector, + InMemoryDiscoveryClient, KongDiscoveryClient, ) from .exceptions import ( diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py b/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py index 79e69a490..c497d9b72 100644 --- a/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/discovery/__init__.py @@ -1,5 +1,6 @@ from .clients import ( DiscoveryClient, + InMemoryDiscoveryClient, KongDiscoveryClient, ) from .connectors import ( diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py index 0176937b0..ad4043a90 100644 --- a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/__init__.py @@ -4,3 +4,6 @@ from .kong import ( KongDiscoveryClient, ) +from .memory import ( + InMemoryDiscoveryClient, +) diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/abc.py b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/abc.py index 59d574bfe..735fa0633 100644 --- a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/abc.py +++ b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/abc.py @@ -42,7 +42,7 @@ async def subscribe( retry_tries: int = 3, retry_delay: float = 5, ) -> None: - """Perform a subscription query. + """Subscribe to the discovery. :param host: The ip of the microservice to be subscribed. :param port: The port of the microservice to be subscribed. @@ -82,7 +82,7 @@ async def _rest_subscribe( @abstractmethod async def unsubscribe(self, name: str, retry_tries: int = 3, retry_delay: float = 5) -> None: - """Perform an unsubscribe query. + """Unsubscribe from the discovery. :param name: The name of the microservice to be unsubscribed. :param retry_tries: Number of attempts before raising a failure exception. diff --git a/packages/core/minos-microservice-networks/minos/networks/discovery/clients/memory.py b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/memory.py new file mode 100644 index 000000000..763d6678b --- /dev/null +++ b/packages/core/minos-microservice-networks/minos/networks/discovery/clients/memory.py @@ -0,0 +1,37 @@ +from .abc import ( + DiscoveryClient, +) + + +class InMemoryDiscoveryClient(DiscoveryClient): + """In Memory Discovery Client class.""" + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._is_subscribed = False + + @property + def is_subscribed(self) -> bool: + """Check if the client is subscribed or not. + + :return: + """ + return self._is_subscribed + + async def subscribe(self, *args, **kwargs) -> None: + """Subscribe to the discovery. + + :param args: Additional positional arguments. + :param kwargs: Additional named arguments. + :return: This method does not return anything. + """ + self._is_subscribed = True + + async def unsubscribe(self, *args, **kwargs) -> None: + """Unsubscribe from the discovery. + + :param args: Additional positional arguments. + :param kwargs: Additional named arguments. + :return: This method does not return anything. + """ + self._is_subscribed = False diff --git a/packages/core/minos-microservice-networks/tests/test_config.yml b/packages/core/minos-microservice-networks/tests/test_config.yml index 167e46a0c..79786973a 100644 --- a/packages/core/minos-microservice-networks/tests/test_config.yml +++ b/packages/core/minos-microservice-networks/tests/test_config.yml @@ -34,6 +34,6 @@ saga: storage: path: "./order.lmdb" discovery: - client: minos.networks.MinosDiscoveryClient + client: minos.networks.InMemoryDiscoveryClient host: discovery-service port: 8080 diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_memory.py b/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_memory.py new file mode 100644 index 000000000..de074487e --- /dev/null +++ b/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_clients/test_memory.py @@ -0,0 +1,28 @@ +import unittest + +from minos.networks import ( + InMemoryDiscoveryClient, +) + + +class TestInMemoryDiscoveryConnector(unittest.IsolatedAsyncioTestCase): + def test_init(self): + client = InMemoryDiscoveryClient("localhost", 9999) + self.assertEqual("localhost", client.host) + self.assertEqual(9999, client.port) + self.assertFalse(client.is_subscribed) + + async def test_subscribe(self): + client = InMemoryDiscoveryClient("localhost", 9999) + await client.subscribe() + self.assertTrue(client.is_subscribed) + + async def test_unsubscribe(self): + client = InMemoryDiscoveryClient("localhost", 9999) + await client.subscribe() + await client.unsubscribe() + self.assertFalse(client.is_subscribed) + + +if __name__ == "__main__": + unittest.main() diff --git a/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_connectors.py b/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_connectors.py index 86cd03f5a..79afc2833 100644 --- a/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_connectors.py +++ b/packages/core/minos-microservice-networks/tests/test_networks/test_discovery/test_connectors.py @@ -9,7 +9,7 @@ ) from minos.networks import ( DiscoveryConnector, - MinosDiscoveryClient, + InMemoryDiscoveryClient, MinosInvalidDiscoveryClient, get_host_ip, ) @@ -18,7 +18,7 @@ ) -class TestDiscovery(unittest.IsolatedAsyncioTestCase): +class TestDiscoveryConnector(unittest.IsolatedAsyncioTestCase): CONFIG_FILE_PATH = BASE_PATH / "test_config.yml" def setUp(self) -> None: @@ -37,7 +37,7 @@ def test_config_minos_client_not_supported(self): DiscoveryConnector.from_config(config) def test_client(self): - self.assertIsInstance(self.discovery.client, MinosDiscoveryClient) + self.assertIsInstance(self.discovery.client, InMemoryDiscoveryClient) async def test_subscription(self): mock = AsyncMock() From e65b3bdf598414d6d229fd91e21aa244d6b88fad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 12:49:52 +0100 Subject: [PATCH 71/97] ISSUE #97 * Simplify workflow. --- .../workflows/minos-discovery-minos-tests.yml | 30 ------------------- 1 file changed, 30 deletions(-) diff --git a/.github/workflows/minos-discovery-minos-tests.yml b/.github/workflows/minos-discovery-minos-tests.yml index d2b466b03..08beb3355 100644 --- a/.github/workflows/minos-discovery-minos-tests.yml +++ b/.github/workflows/minos-discovery-minos-tests.yml @@ -19,36 +19,6 @@ jobs: run: working-directory: packages/plugins/minos-discovery-minos - services: - postgres: - image: postgres - env: - POSTGRES_USER: minos - POSTGRES_PASSWORD: min0s - POSTGRES_DB: order_db - ports: - - 5432:5432 - options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 - - zookeeper: - image: wurstmeister/zookeeper:latest - ports: - - 2181:2181 - - kafka: - image: wurstmeister/kafka:latest - ports: - - 9092:9092 - env: - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_ADVERTISED_HOST_NAME: kafka - KAFKA_DELETE_TOPIC_ENABLE: "true" - env: - MINOS_BROKER_QUEUE_HOST: postgres - MINOS_BROKER_HOST: kafka - MINOS_REPOSITORY_HOST: postgres - MINOS_SNAPSHOT_HOST: postgres - steps: - name: Check out repository code uses: actions/checkout@v2 From 57c31a0169be6e4cbdc3c43da2294667f24d5350 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 12:53:21 +0100 Subject: [PATCH 72/97] ISSUE #96 * Add `plugins` module. --- packages/plugins/minos-broker-kafka/docs/conf.py | 12 ++---------- .../minos/{ => plugins}/kafka/__init__.py | 0 .../minos/{ => plugins}/kafka/publisher.py | 0 .../minos/{ => plugins}/kafka/subscriber.py | 0 .../tests/test_kafka/test_publisher.py | 10 +++++----- .../tests/test_kafka/test_subscriber.py | 12 ++++++------ 6 files changed, 13 insertions(+), 21 deletions(-) rename packages/plugins/minos-broker-kafka/minos/{ => plugins}/kafka/__init__.py (100%) rename packages/plugins/minos-broker-kafka/minos/{ => plugins}/kafka/publisher.py (100%) rename packages/plugins/minos-broker-kafka/minos/{ => plugins}/kafka/subscriber.py (100%) diff --git a/packages/plugins/minos-broker-kafka/docs/conf.py b/packages/plugins/minos-broker-kafka/docs/conf.py index af22ac1a3..ef0b3df8e 100755 --- a/packages/plugins/minos-broker-kafka/docs/conf.py +++ b/packages/plugins/minos-broker-kafka/docs/conf.py @@ -22,11 +22,8 @@ sys.path.insert(0, os.path.abspath("..")) -import sphinx_rtd_theme - -from minos import ( - kafka, -) +import sphinx_rtd_theme # noqa +from minos.plugins import kafka # -- General configuration --------------------------------------------- @@ -88,7 +85,6 @@ todo_include_todos = False - # -- Options for HTML output ------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for @@ -118,13 +114,11 @@ # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] - # -- Options for HTMLHelp output --------------------------------------- # Output file base name for HTML help builder. htmlhelp_basename = "minosdoc" - # -- Options for LaTeX output ------------------------------------------ latex_elements = { @@ -149,14 +143,12 @@ (master_doc, "minos.tex", "Minos Broker Kafka Documentation", "Minos Framework Devs", "manual"), ] - # -- Options for manual page output ------------------------------------ # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "minos", "Minos Broker Kafka Documentation", [author], 1)] - # -- Options for Texinfo output ---------------------------------------- # Grouping the document tree into Texinfo files. List of tuples diff --git a/packages/plugins/minos-broker-kafka/minos/kafka/__init__.py b/packages/plugins/minos-broker-kafka/minos/plugins/kafka/__init__.py similarity index 100% rename from packages/plugins/minos-broker-kafka/minos/kafka/__init__.py rename to packages/plugins/minos-broker-kafka/minos/plugins/kafka/__init__.py diff --git a/packages/plugins/minos-broker-kafka/minos/kafka/publisher.py b/packages/plugins/minos-broker-kafka/minos/plugins/kafka/publisher.py similarity index 100% rename from packages/plugins/minos-broker-kafka/minos/kafka/publisher.py rename to packages/plugins/minos-broker-kafka/minos/plugins/kafka/publisher.py diff --git a/packages/plugins/minos-broker-kafka/minos/kafka/subscriber.py b/packages/plugins/minos-broker-kafka/minos/plugins/kafka/subscriber.py similarity index 100% rename from packages/plugins/minos-broker-kafka/minos/kafka/subscriber.py rename to packages/plugins/minos-broker-kafka/minos/plugins/kafka/subscriber.py diff --git a/packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py index 69c384831..45f527d04 100644 --- a/packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py +++ b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_publisher.py @@ -10,11 +10,6 @@ from minos.common import ( MinosConfig, ) -from minos.kafka import ( - InMemoryQueuedKafkaBrokerPublisher, - KafkaBrokerPublisher, - PostgreSqlQueuedKafkaBrokerPublisher, -) from minos.networks import ( BrokerMessage, BrokerMessageV1, @@ -23,6 +18,11 @@ InMemoryBrokerPublisherQueue, PostgreSqlBrokerPublisherQueue, ) +from minos.plugins.kafka import ( + InMemoryQueuedKafkaBrokerPublisher, + KafkaBrokerPublisher, + PostgreSqlQueuedKafkaBrokerPublisher, +) from tests.utils import ( CONFIG_FILE_PATH, ) diff --git a/packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py index dd868f398..df9010629 100644 --- a/packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py +++ b/packages/plugins/minos-broker-kafka/tests/test_kafka/test_subscriber.py @@ -17,12 +17,6 @@ from minos.common import ( MinosConfig, ) -from minos.kafka import ( - InMemoryQueuedKafkaBrokerSubscriberBuilder, - KafkaBrokerSubscriber, - KafkaBrokerSubscriberBuilder, - PostgreSqlQueuedKafkaBrokerSubscriberBuilder, -) from minos.networks import ( BrokerMessageV1, BrokerMessageV1Payload, @@ -31,6 +25,12 @@ PostgreSqlBrokerSubscriberQueue, QueuedBrokerSubscriber, ) +from minos.plugins.kafka import ( + InMemoryQueuedKafkaBrokerSubscriberBuilder, + KafkaBrokerSubscriber, + KafkaBrokerSubscriberBuilder, + PostgreSqlQueuedKafkaBrokerSubscriberBuilder, +) from tests.utils import ( CONFIG_FILE_PATH, ) From a40cc851b3182004cedcc7a28acc0252762d1125 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Wed, 2 Feb 2022 11:53:47 +0000 Subject: [PATCH 73/97] Restyled by isort --- packages/plugins/minos-broker-kafka/docs/conf.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/plugins/minos-broker-kafka/docs/conf.py b/packages/plugins/minos-broker-kafka/docs/conf.py index ef0b3df8e..fa8cbc601 100755 --- a/packages/plugins/minos-broker-kafka/docs/conf.py +++ b/packages/plugins/minos-broker-kafka/docs/conf.py @@ -23,7 +23,10 @@ sys.path.insert(0, os.path.abspath("..")) import sphinx_rtd_theme # noqa -from minos.plugins import kafka + +from minos.plugins import ( + kafka, +) # -- General configuration --------------------------------------------- From 30eed720b33500dc07702a08aa8bbd5018c78a95 Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Wed, 2 Feb 2022 11:54:53 +0000 Subject: [PATCH 74/97] Restyled by isort --- packages/plugins/minos-discovery-minos/docs/conf.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/plugins/minos-discovery-minos/docs/conf.py b/packages/plugins/minos-discovery-minos/docs/conf.py index 9dd507ec7..64b4ef650 100755 --- a/packages/plugins/minos-discovery-minos/docs/conf.py +++ b/packages/plugins/minos-discovery-minos/docs/conf.py @@ -22,7 +22,9 @@ sys.path.insert(0, os.path.abspath("..")) -from minos.plugins import minos_discovery +from minos.plugins import ( + minos_discovery, +) # -- General configuration --------------------------------------------- From 5c33d144023d9d5cbde9b8998dd90d29f338f3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 13:58:24 +0100 Subject: [PATCH 75/97] ISSUE #140 * Update documentation to be compatible with the `minos.aggregate` refactor. --- README.md | 437 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 297 insertions(+), 140 deletions(-) diff --git a/README.md b/README.md index f169c73c2..35e560b97 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanif ## Foundational Patterns The `minos` framework is built strongly inspired by the following set of patterns: + * [Microservice architecture](https://microservices.io/patterns/microservices.html): Architect an application as a collection of loosely coupled services. * [Decompose by subdomain](https://microservices.io/patterns/decomposition/decompose-by-subdomain.html): Define services corresponding to Domain-Driven Design (DDD) subdomains * [Self-contained Service](https://microservices.io/patterns/decomposition/self-contained-service.html): Microservices can respond to a synchronous request without waiting for the response from any other service. @@ -80,59 +81,59 @@ Create a `foo.yml` file and add the following lines: # foo.yml service: - name: foo - aggregate: foo.Foo - injections: - lock_pool: minos.common.PostgreSqlLockPool - postgresql_pool: minos.common.PostgreSqlPool - broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher - broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder - broker_pool: minos.networks.BrokerClientPool - transaction_repository: minos.aggregate.PostgreSqlTransactionRepository - event_repository: minos.aggregate.PostgreSqlEventRepository - snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository - saga_manager: minos.saga.SagaManager - services: - - minos.networks.BrokerHandlerService - - minos.networks.RestService - - minos.networks.PeriodicTaskSchedulerService + name: foo + aggregate: foo.Foo + injections: + lock_pool: minos.common.PostgreSqlLockPool + postgresql_pool: minos.common.PostgreSqlPool + broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher + broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder + broker_pool: minos.networks.BrokerClientPool + transaction_repository: minos.aggregate.PostgreSqlTransactionRepository + event_repository: minos.aggregate.PostgreSqlEventRepository + snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository + saga_manager: minos.saga.SagaManager + services: + - minos.networks.BrokerHandlerService + - minos.networks.RestService + - minos.networks.PeriodicTaskSchedulerService middleware: - - minos.saga.transactional_command + - minos.saga.transactional_command services: - - minos.aggregate.TransactionService - - minos.aggregate.SnapshotService - - minos.saga.SagaService - - foo.FooCommandService - - foo.FooQueryService + - minos.aggregate.TransactionService + - minos.aggregate.SnapshotService + - minos.saga.SagaService + - foo.FooCommandService + - foo.FooQueryService rest: - host: 0.0.0.0 - port: 4545 + host: 0.0.0.0 + port: 4545 broker: - host: localhost - port: 9092 - queue: - database: foo_db - user: minos - password: min0s - host: localhost - port: 5432 - records: 1000 - retry: 2 -repository: + host: localhost + port: 9092 + queue: database: foo_db user: minos password: min0s host: localhost port: 5432 + records: 1000 + retry: 2 +repository: + database: foo_db + user: minos + password: min0s + host: localhost + port: 5432 snapshot: - database: foo_db - user: minos - password: min0s - host: localhost - port: 5432 + database: foo_db + user: minos + password: min0s + host: localhost + port: 5432 saga: - storage: - path: "./foo.lmdb" + storage: + path: "./foo.lmdb" ```
@@ -143,12 +144,16 @@ Create a `foo.py` file and add the following content: # foo.py from pathlib import Path -from minos.aggregate import Aggregate +from minos.aggregate import Aggregate, RootEntity from minos.common import EntrypointLauncher from minos.cqrs import CommandService, QueryService -class Foo(Aggregate): +class Foo(RootEntity): + """Foo RootEntity class.""" + + +class FooAggregate(Aggregate[Foo]): """Foo Aggregate class.""" @@ -174,6 +179,7 @@ python foo.py ### Create an Aggregate The way to model data in `minos` is highly inspired by the [Event Sourcing](https://microservices.io/patterns/data/event-sourcing.html) ideas. For this reason, the classes to be used to model data are: + * `minos.aggregate.Entity`: A model that has an identifier that gives it a unique identity, in the sense that some values from which it is composed could change, but its identity will continue being the same. * `minos.aggregate.ExternalEntity`: A model that belongs to another microservice (or aggregate boundary) but needs to be used for some reason inside this microservice (or aggregate boundary). * `minos.aggregate.RootEntity`: Is an `Entity` superset that provides global identity across the project compared to standard `Entity` models, that has only local identity (the `RootEntity` can be accessed from another microservices as `ExternalEntity` models, but standard `Entity` models can only be accessed within the microservice that define them). The `RootEntity` is also the one that interacts with the persistence layer (the `EventRepository` and `SnapshotRepository` instances). @@ -191,21 +197,50 @@ Here is an example of the creation the `Foo` aggregate. In this case, it has two from __future__ import annotations from typing import Optional -from minos.aggregate import Aggregate, AggregateRef, ModelRef +from uuid import UUID +from minos.aggregate import Aggregate, RootEntity, ExternalEntity, Ref -class Foo(Aggregate): - """Foo Aggregate class.""" +class Foo(RootEntity): + """Foo RootEntity class.""" bar: str - foobar: Optional[ModelRef[FooBar]] + foobar: Optional[Ref[FooBar]] -class FooBar(AggregateRef): - """FooBar AggregateRef clas.""" +class FooBar(ExternalEntity): + """FooBar ExternalEntity clas.""" something: str + + +class FooAggregate(Aggregate[Foo]): + """Foo Aggregate class.""" + + @staticmethod + async def create_foo(bar: str) -> UUID: + """Create a new Foo instance + + :param bar: The bar of the new instance. + :return: The identifier of the new instance. + """ + foo = await Foo.create(bar) + + return foo.uuid + + @staticmethod + async def update_foobar(uuid: UUID, foobar: Optional[Ref[FooBar]]) -> None: + """Update the foobar attribute of the ``Foo`` instance. + + :param uuid: The identifier of the ``Foo`` instance. + :param foobar: The foobar value to be set. + :return: This method does not return anything. + """ + foo = await Foo.get(uuid) + foo.foobar = foobar + await foo.save() ``` +
Click to show the full foo.py @@ -216,25 +251,53 @@ from __future__ import annotations from pathlib import Path from typing import Optional +from uuid import UUID -from minos.aggregate import RootEntity, ExternalEntity, Ref +from minos.aggregate import Aggregate, RootEntity, ExternalEntity, Ref from minos.common import EntrypointLauncher from minos.cqrs import CommandService, QueryService class Foo(RootEntity): - """Foo Root Entity class.""" + """Foo RootEntity class.""" bar: str foobar: Optional[Ref[FooBar]] class FooBar(ExternalEntity): - """FooBar External Entity clas.""" + """FooBar ExternalEntity clas.""" something: str +class FooAggregate(Aggregate[Foo]): + """Foo Aggregate class.""" + + @staticmethod + async def create_foo(bar: str) -> UUID: + """Create a new Foo instance + + :param bar: The bar of the new instance. + :return: The identifier of the new instance. + """ + foo = await Foo.create(bar) + + return foo.uuid + + @staticmethod + async def update_foobar(uuid: UUID, foobar: Optional[Ref[FooBar]]) -> None: + """Update the foobar attribute of the ``Foo`` instance. + + :param uuid: The identifier of the ``Foo`` instance. + :param foobar: The foobar value to be set. + :return: This method does not return anything. + """ + foo = await Foo.get(uuid) + foo.foobar = foobar + await foo.save() + + class FooCommandService(CommandService): """Foo Command Service class.""" @@ -276,9 +339,9 @@ class FooCommandService(CommandService): content = await request.content() bar = content["bar"] - foo = await Foo.create(bar) + uuid = await FooAggregate.create_foo(bar) - return Response({"uuid": foo.uuid}) + return Response({"uuid": uuid}) ```
@@ -291,26 +354,54 @@ from __future__ import annotations from pathlib import Path from typing import Optional +from uuid import UUID -from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.aggregate import Aggregate, RootEntity, ExternalEntity, Ref from minos.common import EntrypointLauncher from minos.cqrs import CommandService, QueryService from minos.networks import Request, Response, enroute -class Foo(Aggregate): - """Foo Aggregate class.""" +class Foo(RootEntity): + """Foo RootEntity class.""" bar: str - foobar: Optional[ModelRef[FooBar]] + foobar: Optional[Ref[FooBar]] -class FooBar(AggregateRef): - """FooBar AggregateRef clas.""" +class FooBar(ExternalEntity): + """FooBar ExternalEntity clas.""" something: str +class FooAggregate(Aggregate[Foo]): + """Foo Aggregate class.""" + + @staticmethod + async def create_foo(bar: str) -> UUID: + """Create a new Foo instance + + :param bar: The bar of the new instance. + :return: The identifier of the new instance. + """ + foo = await Foo.create(bar) + + return foo.uuid + + @staticmethod + async def update_foobar(uuid: UUID, foobar: Optional[Ref[FooBar]]) -> None: + """Update the foobar attribute of the ``Foo`` instance. + + :param uuid: The identifier of the ``Foo`` instance. + :param foobar: The foobar value to be set. + :return: This method does not return anything. + """ + foo = await Foo.get(uuid) + foo.foobar = foobar + await foo.save() + + class FooCommandService(CommandService): """Foo Command Service class.""" @@ -325,9 +416,9 @@ class FooCommandService(CommandService): content = await request.content() bar = content["bar"] - foo = await Foo.create(bar) + uuid = await FooAggregate.create_foo(bar) - return Response({"uuid": foo.uuid}) + return Response({"uuid": uuid}) class FooQueryService(QueryService): @@ -394,26 +485,54 @@ from __future__ import annotations from pathlib import Path from typing import Optional +from uuid import UUID -from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.aggregate import Aggregate, RootEntity, ExternalEntity, Ref from minos.common import EntrypointLauncher from minos.cqrs import CommandService, QueryService from minos.networks import Request, Response, enroute -class Foo(Aggregate): - """Foo Aggregate class.""" +class Foo(RootEntity): + """Foo RootEntity class.""" bar: str - foobar: Optional[ModelRef[FooBar]] + foobar: Optional[Ref[FooBar]] -class FooBar(AggregateRef): - """FooBar AggregateRef clas.""" +class FooBar(ExternalEntity): + """FooBar ExternalEntity clas.""" something: str +class FooAggregate(Aggregate[Foo]): + """Foo Aggregate class.""" + + @staticmethod + async def create_foo(bar: str) -> UUID: + """Create a new Foo instance + + :param bar: The bar of the new instance. + :return: The identifier of the new instance. + """ + foo = await Foo.create(bar) + + return foo.uuid + + @staticmethod + async def update_foobar(uuid: UUID, foobar: Optional[Ref[FooBar]]) -> None: + """Update the foobar attribute of the ``Foo`` instance. + + :param uuid: The identifier of the ``Foo`` instance. + :param foobar: The foobar value to be set. + :return: This method does not return anything. + """ + foo = await Foo.get(uuid) + foo.foobar = foobar + await foo.save() + + class FooCommandService(CommandService): """Foo Command Service class.""" @@ -428,9 +547,9 @@ class FooCommandService(CommandService): content = await request.content() bar = content["bar"] - foo = await Foo.create(bar) + uuid = await FooAggregate.create_foo(bar) - return Response({"uuid": foo.uuid}) + return Response({"uuid": uuid}) class FooQueryService(QueryService): @@ -472,7 +591,7 @@ python foo.py ### Interact with another Microservice -Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foo/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. +Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foos/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. ```python # foo.py @@ -486,7 +605,7 @@ from minos.saga import Saga, SagaContext, SagaRequest, SagaResponse class FooCommandService(CommandService): """Foo Command Service class.""" - @enroute.rest.command("/foo/add-foobar", "POST") + @enroute.rest.command("/foos/add-foobar", "POST") async def update_foo(self, request: Request) -> None: """Run a saga example. @@ -495,9 +614,8 @@ class FooCommandService(CommandService): """ content = await request.content() - await self.saga_manager.run( - ADD_FOOBAR_SAGA, SagaContext(uuid=content["uuid"], something=content["something"]) - ) + context = SagaContext(uuid=content["uuid"], something=content["something"]) + await self.saga_manager.run(ADD_FOOBAR_SAGA, context) def _create_foobar(context: SagaContext) -> SagaRequest: @@ -516,9 +634,7 @@ async def _error_foobar(context: SagaContext, response: SagaResponse) -> SagaCon async def _update_foo(context: SagaContext) -> None: - foo = await Foo.get(context["uuid"]) - foo.foobar = context["foobar_uuid"] - await foo.save() + await FooAggregate.update_foobar(context["uuid"], context["foobar_uuid"]) CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) @@ -534,6 +650,7 @@ ADD_FOOBAR_SAGA = ( .commit() ) ``` +
Click to show the full foo.py @@ -544,27 +661,55 @@ from __future__ import annotations from pathlib import Path from typing import Optional +from uuid import UUID -from minos.aggregate import Aggregate, AggregateRef, ModelRef +from minos.aggregate import Aggregate, RootEntity, ExternalEntity, Ref from minos.common import ModelType, EntrypointLauncher from minos.cqrs import CommandService, QueryService from minos.networks import Request, Response, enroute from minos.saga import Saga, SagaContext, SagaRequest, SagaResponse -class Foo(Aggregate): - """Foo Aggregate class.""" +class Foo(RootEntity): + """Foo RootEntity class.""" bar: str - foobar: Optional[ModelRef[FooBar]] + foobar: Optional[Ref[FooBar]] -class FooBar(AggregateRef): - """FooBar AggregateRef clas.""" +class FooBar(ExternalEntity): + """FooBar ExternalEntity clas.""" something: str +class FooAggregate(Aggregate[Foo]): + """Foo Aggregate class.""" + + @staticmethod + async def create_foo(bar: str) -> UUID: + """Create a new Foo instance + + :param bar: The bar of the new instance. + :return: The identifier of the new instance. + """ + foo = await Foo.create(bar) + + return foo.uuid + + @staticmethod + async def update_foobar(uuid: UUID, foobar: Optional[Ref[FooBar]]) -> None: + """Update the foobar attribute of the ``Foo`` instance. + + :param uuid: The identifier of the ``Foo`` instance. + :param foobar: The foobar value to be set. + :return: This method does not return anything. + """ + foo = await Foo.get(uuid) + foo.foobar = foobar + await foo.save() + + class FooCommandService(CommandService): """Foo Command Service class.""" @@ -579,11 +724,11 @@ class FooCommandService(CommandService): content = await request.content() bar = content["bar"] - foo = await Foo.create(bar) + uuid = await FooAggregate.create_foo(bar) - return Response({"uuid": foo.uuid}) + return Response({"uuid": uuid}) - @enroute.rest.command("/foo/add-foobar", "POST") + @enroute.rest.command("/foos/add-foobar", "POST") async def update_foo(self, request: Request) -> None: """Run a saga example. @@ -592,9 +737,8 @@ class FooCommandService(CommandService): """ content = await request.content() - await self.saga_manager.run( - ADD_FOOBAR_SAGA, SagaContext(uuid=content["uuid"], something=content["something"]) - ) + context = SagaContext(uuid=content["uuid"], something=content["something"]) + await self.saga_manager.run(ADD_FOOBAR_SAGA, context, pause_on_disk=True) def _create_foobar(context: SagaContext) -> SagaRequest: @@ -613,9 +757,7 @@ async def _error_foobar(context: SagaContext, response: SagaResponse) -> SagaCon async def _update_foo(context: SagaContext) -> None: - foo = await Foo.get(context["uuid"]) - foo.foobar = context["foobar_uuid"] - await foo.save() + await FooAggregate.update_foobar(context["uuid"], context["foobar_uuid"]) CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) @@ -681,58 +823,58 @@ Here is the `foobar.yml` config file: # foobar.yml service: - name: foobar - aggregate: foobar.FooBar - injections: - lock_pool: minos.common.PostgreSqlLockPool - postgresql_pool: minos.common.PostgreSqlPool - broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher - broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder - broker_pool: minos.networks.BrokerClientPool - transaction_repository: minos.aggregate.PostgreSqlTransactionRepository - event_repository: minos.aggregate.PostgreSqlEventRepository - snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository - saga_manager: minos.saga.SagaManager - services: - - minos.networks.BrokerHandlerService - - minos.networks.RestService - - minos.networks.PeriodicTaskSchedulerService + name: foobar + aggregate: foobar.FooBar + injections: + lock_pool: minos.common.PostgreSqlLockPool + postgresql_pool: minos.common.PostgreSqlPool + broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher + broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder + broker_pool: minos.networks.BrokerClientPool + transaction_repository: minos.aggregate.PostgreSqlTransactionRepository + event_repository: minos.aggregate.PostgreSqlEventRepository + snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository + saga_manager: minos.saga.SagaManager + services: + - minos.networks.BrokerHandlerService + - minos.networks.RestService + - minos.networks.PeriodicTaskSchedulerService middleware: - - minos.saga.transactional_command + - minos.saga.transactional_command services: - - minos.aggregate.TransactionService - - minos.aggregate.SnapshotService - - minos.saga.SagaService - - foobar.FooBarCommandService + - minos.aggregate.TransactionService + - minos.aggregate.SnapshotService + - minos.saga.SagaService + - foobar.FooBarCommandService rest: - host: 0.0.0.0 - port: 4546 + host: 0.0.0.0 + port: 4546 broker: - host: localhost - port: 9092 - queue: - database: foobar_db - user: minos - password: min0s - host: localhost - port: 5432 - records: 1000 - retry: 2 -repository: + host: localhost + port: 9092 + queue: database: foobar_db user: minos password: min0s host: localhost port: 5432 + records: 1000 + retry: 2 +repository: + database: foobar_db + user: minos + password: min0s + host: localhost + port: 5432 snapshot: - database: foobar_db - user: minos - password: min0s - host: localhost - port: 5432 + database: foobar_db + user: minos + password: min0s + host: localhost + port: 5432 saga: - storage: - path: "./foobar.lmdb" + storage: + path: "./foobar.lmdb" ```
@@ -745,19 +887,34 @@ Here is the `foobar.py` config file: from __future__ import annotations from pathlib import Path +from uuid import UUID -from minos.aggregate import Aggregate +from minos.aggregate import Aggregate, RootEntity from minos.common import EntrypointLauncher from minos.cqrs import CommandService from minos.networks import Request, Response, enroute -class FooBar(Aggregate): - """FooBar AggregateRef clas.""" +class FooBar(RootEntity): + """FooBar Root Entity clas.""" something: str +class FooBarAggregate(Aggregate[FooBar]): + """FooBar Aggregate class.""" + + @staticmethod + async def create_foobar(something: str) -> UUID: + """Create a new ``FooBar`` instance. + + :param something: The something attribute. + :return: The identifier of the new instance. + """ + foobar = await FooBar.create(something) + return foobar.uuid + + class FooBarCommandService(CommandService): """Foo Command Service class.""" @@ -771,9 +928,9 @@ class FooBarCommandService(CommandService): content = await request.content() something = content["text"] - foobar = await FooBar.create(something) + uuid = await FooBarAggregate.create_foobar(something) - return Response(foobar.uuid) + return Response(uuid) if __name__ == '__main__': From fb619c640b02da986b33bc1a7849a269d65b0eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 14:02:27 +0100 Subject: [PATCH 76/97] ISSUE #140 * Minor improvements. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35e560b97..24322b4de 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ The required environment to run this quickstart is the following: * A `python>=3.9` interpreter with version equal or greater to . * A `kafka` instance available at `localhost:9092` * A `postgres` instance available at `localhost:5432` with `foo_db` and `foobar_db` databases accessible with the `minos:min0s` credentials. -* A `socket` available to use at `localhost:4545` and `localhost:4546`. +* Two TCP sockets available to use at `localhost:4545` and `localhost:4546`. Note that these parameters can be configured on the `foo.yml` file. From 52ea93ec850f6c6a4832b530d5a7fb5c0420266a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 14:19:23 +0100 Subject: [PATCH 77/97] ISSUE #140 * Minor improvements (2). --- README.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 77 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 24322b4de..98dac35a6 100644 --- a/README.md +++ b/README.md @@ -439,6 +439,22 @@ Execute the following command to start the microservice: python foo.py ``` +To check that everything works fine, execute the following command: +```shell +curl --location --request POST 'http://localhost:4545/foos' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "bar": "test" +}' +``` + +And the expected response will be similar to: +```json +{ + "uuid": "707278ab-2464-45de-8290-e22a50dee863" +} +``` + ### Subscribe to an Event and Expose a Query Here is an example of the event and query handling. In this case, it must be defined on a `QueryService` class. In this case a `"FooCreated"` event is handled (and only a `print` of the content is performed). The event contents typically contains instances of `AggregateDiff` type, which is referred to the difference respect to the previously stored instance. The exposed query is connected to the calls that come from the `"/foos/example"` path and `"GET"` method and a naive string is returned. @@ -459,11 +475,21 @@ class FooQueryService(QueryService): async def foo_created(self, request: Request) -> None: """Handle the "FooCreated" event. - :param request: The ``Request`` that contains the ``bar`` attribute. + :param request: The ``Request`` that contains a ``Event``. + :return: This method does not return anything. + """ + event = await request.content() + print(f"A Foo was created: {event}") + + @enroute.broker.event("FooUpdated.foobar") + async def foo_foobar_updated(self, request: Request) -> None: + """Handle the "FooUpdated.foobar" event. + + :param request: The ``Request`` that contains a ``Event``. :return: This method does not return anything. """ - diff = await request.content() - print(f"A Foo was created: {diff}") + event = await request.content() + print(f"The 'foobar' field of a Foo was updated: {event}") @enroute.rest.query("/foos/example", "GET") async def example(self, request: Request) -> Response: @@ -559,11 +585,21 @@ class FooQueryService(QueryService): async def foo_created(self, request: Request) -> None: """Handle the "FooCreated" event. - :param request: The ``Request`` that contains the ``bar`` attribute. + :param request: The ``Request`` that contains a ``Event``. + :return: This method does not return anything. + """ + event = await request.content() + print(f"A Foo was created: {event}") + + @enroute.broker.event("FooUpdated.foobar") + async def foo_foobar_updated(self, request: Request) -> None: + """Handle the "FooUpdated.foobar" event. + + :param request: The ``Request`` that contains a ``Event``. :return: This method does not return anything. """ - diff = await request.content() - print(f"A Foo was created: {diff}") + event = await request.content() + print(f"The 'foobar' field of a Foo was updated: {event}") @enroute.rest.query("/foos/example", "GET") async def example(self, request: Request) -> Response: @@ -589,6 +625,11 @@ Execute the following command to start the microservice: python foo.py ``` +Now, if a new instance is created (with a rest call, like in the [previous section](#Expose a Command)), the `FooCreated` event will be handled and the microservice's console will print something like: +``` +A Foo was created: Event(...) +``` + ### Interact with another Microservice Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foos/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. @@ -781,11 +822,21 @@ class FooQueryService(QueryService): async def foo_created(self, request: Request) -> None: """Handle the "FooCreated" event. - :param request: The ``Request`` that contains the ``bar`` attribute. + :param request: The ``Request`` that contains a ``Event``. + :return: This method does not return anything. + """ + event = await request.content() + print(f"A Foo was created: {event}") + + @enroute.broker.event("FooUpdated.foobar") + async def foo_foobar_updated(self, request: Request) -> None: + """Handle the "FooUpdated.foobar" event. + + :param request: The ``Request`` that contains a ``Event``. :return: This method does not return anything. """ - diff = await request.content() - print(f"A Foo was created: {diff}") + event = await request.content() + print(f"The 'foobar' field of a Foo was updated: {event}") @enroute.rest.query("/foos/example", "GET") async def example(self, request: Request) -> Response: @@ -947,6 +998,23 @@ Execute the following command to start the `foobar` microservice: python foobar.py ``` + +To check that everything works fine, execute the following command: +```shell +curl --location --request POST 'http://localhost:4545/foos/add-foobar' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "uuid": "e92dd66d-5a46-4ad3-a3ae-7576456138ea", + "something": "something" +}' +``` + +This request will start a new Saga, that sends a command to the `foobar` microservice, retrieve the `FooBar` identifier and update the `Foo` instance. After that, the `FooQueryService` will handle the update event and print a message similar to this one on the console. +``` +The 'foobar' field of a Foo was updated: Event(...) +``` + + ## Packages This project follows a modular structure based on python packages. From 9b47d270c5b22f3bbd8db4bc4ce649523edfb272 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 14:21:52 +0100 Subject: [PATCH 78/97] ISSUE #140 * Remove uuids --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 98dac35a6..20fbee59f 100644 --- a/README.md +++ b/README.md @@ -451,7 +451,7 @@ curl --location --request POST 'http://localhost:4545/foos' \ And the expected response will be similar to: ```json { - "uuid": "707278ab-2464-45de-8290-e22a50dee863" + "uuid": "ADD_YOUR_UUID" } ``` @@ -1004,7 +1004,7 @@ To check that everything works fine, execute the following command: curl --location --request POST 'http://localhost:4545/foos/add-foobar' \ --header 'Content-Type: application/json' \ --data-raw '{ - "uuid": "e92dd66d-5a46-4ad3-a3ae-7576456138ea", + "uuid": "ADD_YOUR_UUID", "something": "something" }' ``` From c749052b7b22864819e4af24d307421878039f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 14:54:10 +0100 Subject: [PATCH 79/97] ISSUE #140 * Add directory hierarchy. --- README.md | 99 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 20fbee59f..33dea27b7 100644 --- a/README.md +++ b/README.md @@ -67,22 +67,30 @@ The required environment to run this quickstart is the following: * A `postgres` instance available at `localhost:5432` with `foo_db` and `foobar_db` databases accessible with the `minos:min0s` credentials. * Two TCP sockets available to use at `localhost:4545` and `localhost:4546`. -Note that these parameters can be configured on the `foo.yml` file. +Note that these parameters can be configured on the `foo/config.yml` file. ### Configure a Microservice -To keep things simpler, this quickstart will create a microservice assuming all the source code is stored on a single `foo.py` file. In addition to the source file, a `foo.yml` will contain all the configuration stuff. +To keep things simpler, this quickstart will create a microservice assuming all the source code is stored on a single `foo/main.py` file. In addition to the source file, a `foo/config.yml` will contain all the configuration stuff. -Create a `foo.yml` file and add the following lines: +The directory structure will become: +```shell +. +└── foo + ├── config.yml + └── main.py +``` + +Create a `foo/config.yml` file and add the following lines:
- Click to show the foo.yml + Click to show the foo/config.yml ```yaml -# foo.yml +# foo/config.yml service: name: foo - aggregate: foo.Foo + aggregate: main.Foo injections: lock_pool: minos.common.PostgreSqlLockPool postgresql_pool: minos.common.PostgreSqlPool @@ -103,8 +111,8 @@ services: - minos.aggregate.TransactionService - minos.aggregate.SnapshotService - minos.saga.SagaService - - foo.FooCommandService - - foo.FooQueryService + - main.FooCommandService + - main.FooQueryService rest: host: 0.0.0.0 port: 4545 @@ -138,10 +146,10 @@ saga:
-Create a `foo.py` file and add the following content: +Create a `foo/main.py` file and add the following content: ```python -# foo.py +# foo/main.py from pathlib import Path from minos.aggregate import Aggregate, RootEntity @@ -166,14 +174,14 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") launcher.launch() ``` Execute the following command to start the microservice: ```shell -python foo.py +python foo/main.py ``` ### Create an Aggregate @@ -193,7 +201,7 @@ The way to model data in `minos` is highly inspired by the [Event Sourcing](htt Here is an example of the creation the `Foo` aggregate. In this case, it has two attributes, a `bar` being a `str`, and a `foobar` being an optional reference to the external `FooBar` aggregate, which it is assumed that it has a `something` attribute. ```python -# foo.py +# foo/main.py from __future__ import annotations from typing import Optional @@ -242,10 +250,10 @@ class FooAggregate(Aggregate[Foo]): ```
- Click to show the full foo.py + Click to show the full foo/main.py ```python -# foo.py +# foo/main.py from __future__ import annotations @@ -307,7 +315,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") launcher.launch() ``` @@ -319,7 +327,7 @@ if __name__ == '__main__': Here is an example of the definition of a command to create `Foo` instances. To do that, it is necessary to define a `CommandService` that contains the handling function. It will handle both the broker messages sent to the `"CreateFoo"` topic and the rest calls to the `"/foos"` path with the `"POST"` method. In this case, the handling function unpacks the `Request`'s content and then calls the `create` method from the `Aggregate`, which stores the `Foo` instance following an event-driven strategy (it also publishes the `"FooCreated"` event). Finally, a `Response` is returned to be handled by the external caller (another microservice or the API-gateway). ```python -# foo.py +# foo/main.py from minos.cqrs import CommandService from minos.networks import enroute, Request, Response @@ -345,10 +353,10 @@ class FooCommandService(CommandService): ```
- Click to show the full foo.py + Click to show the full foo/main.py ```python -# foo.py +# foo/main.py from __future__ import annotations @@ -426,7 +434,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") launcher.launch() ``` @@ -436,7 +444,7 @@ if __name__ == '__main__': Execute the following command to start the microservice: ```shell -python foo.py +python foo/main.py ``` To check that everything works fine, execute the following command: @@ -462,7 +470,7 @@ Here is an example of the event and query handling. In this case, it must be def *Disclaimer*: A real `QueryService` implementation must populate a query-oriented database based on the events to which is subscribed to, and expose queries performed over that query-oriented database. ```python -# foo.py +# foo/main.py from minos.cqrs import QueryService from minos.networks import enroute, Request, Response @@ -502,10 +510,10 @@ class FooQueryService(QueryService): ```
- Click to show the full foo.py + Click to show the full foo/main.py ```python -# foo.py +# foo/main.py from __future__ import annotations @@ -612,7 +620,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") launcher.launch() ``` @@ -622,7 +630,7 @@ if __name__ == '__main__': Execute the following command to start the microservice: ```shell -python foo.py +python foo/main.py ``` Now, if a new instance is created (with a rest call, like in the [previous section](#Expose a Command)), the `FooCreated` event will be handled and the microservice's console will print something like: @@ -635,7 +643,7 @@ A Foo was created: Event(...) Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foos/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. ```python -# foo.py +# foo/main.py from minos.common import ModelType from minos.cqrs import CommandService @@ -693,10 +701,10 @@ ADD_FOOBAR_SAGA = ( ```
- Click to show the full foo.py + Click to show the full foo/main.py ```python -# foo.py +# foo/main.py from __future__ import annotations @@ -849,7 +857,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() ``` @@ -859,23 +867,34 @@ if __name__ == '__main__': Execute the following command to start the `foo` microservice: ```shell -python foo.py +python foo/main.py ``` **Disclaimer**: Note that in this case another microservice is needed to complete the saga. #### The `foobar` Microservice -Here is the `foobar.yml` config file: +The directory structure will become: +```shell +. +├── foo +│   ├── config.yml +│   └── main.py +└── foobar + ├── config.yml + └── main.py +``` + +Here is the `foobar/config.yml` config file:
- Click to show the foobar.yml + Click to show the foobar/config.yml ```yaml -# foobar.yml +# foobar/config.yml service: name: foobar - aggregate: foobar.FooBar + aggregate: main.FooBar injections: lock_pool: minos.common.PostgreSqlLockPool postgresql_pool: minos.common.PostgreSqlPool @@ -896,7 +915,7 @@ services: - minos.aggregate.TransactionService - minos.aggregate.SnapshotService - minos.saga.SagaService - - foobar.FooBarCommandService + - main.FooBarCommandService rest: host: 0.0.0.0 port: 4546 @@ -930,9 +949,9 @@ saga:
-Here is the `foobar.py` config file: +Here is the `foobar/main.py` config file:
- Click to show the foobar.py + Click to show the foobar/main.py ```python from __future__ import annotations @@ -985,7 +1004,7 @@ class FooBarCommandService(CommandService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foobar.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() ``` @@ -995,7 +1014,7 @@ if __name__ == '__main__': Execute the following command to start the `foobar` microservice: ```shell -python foobar.py +python foobar/main.py ``` From 0f3e6dea3775dd488da46efc2a4f118058595687 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 14:56:02 +0100 Subject: [PATCH 80/97] ISSUE #140 * Fix minor bug. --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 33dea27b7..985c8510d 100644 --- a/README.md +++ b/README.md @@ -174,7 +174,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() ``` @@ -315,7 +315,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() ``` @@ -434,7 +434,7 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() ``` @@ -620,7 +620,8 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / "foo/config.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / " + config.yml") launcher.launch() ``` From 309b225003d0c95a761b0ccaa0588cb18270f7ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 14:57:06 +0100 Subject: [PATCH 81/97] ISSUE #140 * Minor change. --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 985c8510d..9312072ef 100644 --- a/README.md +++ b/README.md @@ -459,7 +459,7 @@ curl --location --request POST 'http://localhost:4545/foos' \ And the expected response will be similar to: ```json { - "uuid": "ADD_YOUR_UUID" + "uuid": "YOUR_UUID" } ``` @@ -1024,7 +1024,7 @@ To check that everything works fine, execute the following command: curl --location --request POST 'http://localhost:4545/foos/add-foobar' \ --header 'Content-Type: application/json' \ --data-raw '{ - "uuid": "ADD_YOUR_UUID", + "uuid": "YOUR_UUID", "something": "something" }' ``` From ece85659a1d67e3e58c6b3dfb205779f2e3beacf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 15:05:35 +0100 Subject: [PATCH 82/97] ISSUE #140 * Improve details messages. --- README.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9312072ef..81dad3112 100644 --- a/README.md +++ b/README.md @@ -83,7 +83,7 @@ The directory structure will become: Create a `foo/config.yml` file and add the following lines:
- Click to show the foo/config.yml + Click to show the full file ```yaml # foo/config.yml @@ -250,7 +250,7 @@ class FooAggregate(Aggregate[Foo]): ```
- Click to show the full foo/main.py + Click to show the full file ```python # foo/main.py @@ -353,7 +353,7 @@ class FooCommandService(CommandService): ```
- Click to show the full foo/main.py + Click to show the full file ```python # foo/main.py @@ -510,7 +510,7 @@ class FooQueryService(QueryService): ```
- Click to show the full foo/main.py + Click to show the full file ```python # foo/main.py @@ -702,7 +702,7 @@ ADD_FOOBAR_SAGA = ( ```
- Click to show the full foo/main.py + Click to show the full file ```python # foo/main.py @@ -788,7 +788,7 @@ class FooCommandService(CommandService): content = await request.content() context = SagaContext(uuid=content["uuid"], something=content["something"]) - await self.saga_manager.run(ADD_FOOBAR_SAGA, context, pause_on_disk=True) + await self.saga_manager.run(ADD_FOOBAR_SAGA, context) def _create_foobar(context: SagaContext) -> SagaRequest: @@ -860,7 +860,6 @@ class FooQueryService(QueryService): if __name__ == '__main__': launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() - ```
@@ -888,7 +887,7 @@ The directory structure will become: Here is the `foobar/config.yml` config file:
- Click to show the foobar/config.yml + Click to show the full file ```yaml # foobar/config.yml @@ -952,7 +951,7 @@ saga: Here is the `foobar/main.py` config file:
- Click to show the foobar/main.py + Click to show the full file ```python from __future__ import annotations @@ -1034,7 +1033,6 @@ This request will start a new Saga, that sends a command to the `foobar` microse The 'foobar' field of a Foo was updated: Event(...) ``` - ## Packages This project follows a modular structure based on python packages. From 0605b7456536dbedc4dd07992689f8f6b37e5951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 15:06:00 +0100 Subject: [PATCH 83/97] ISSUE #140 * Fix typo. --- README.md | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index 81dad3112..e1844685a 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ Note that these parameters can be configured on the `foo/config.yml` file. To keep things simpler, this quickstart will create a microservice assuming all the source code is stored on a single `foo/main.py` file. In addition to the source file, a `foo/config.yml` will contain all the configuration stuff. The directory structure will become: + ```shell . └── foo @@ -317,7 +318,6 @@ class FooQueryService(QueryService): if __name__ == '__main__': launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() - ```
@@ -436,7 +436,6 @@ class FooQueryService(QueryService): if __name__ == '__main__': launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() - ```
@@ -448,6 +447,7 @@ python foo/main.py ``` To check that everything works fine, execute the following command: + ```shell curl --location --request POST 'http://localhost:4545/foos' \ --header 'Content-Type: application/json' \ @@ -457,9 +457,10 @@ curl --location --request POST 'http://localhost:4545/foos' \ ``` And the expected response will be similar to: + ```json { - "uuid": "YOUR_UUID" + "uuid": "YOUR_UUID" } ``` @@ -620,10 +621,8 @@ class FooQueryService(QueryService): if __name__ == '__main__': - launcher = EntrypointLauncher.from_config(Path(__file__).parent / " - config.yml") + launcher = EntrypointLauncher.from_config(Path(__file__).parent / "config.yml") launcher.launch() - ```
@@ -635,6 +634,7 @@ python foo/main.py ``` Now, if a new instance is created (with a rest call, like in the [previous section](#Expose a Command)), the `FooCreated` event will be handled and the microservice's console will print something like: + ``` A Foo was created: Event(...) ``` @@ -692,11 +692,11 @@ CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) ADD_FOOBAR_SAGA = ( Saga() .remote_step() - .on_execute(_create_foobar) - .on_success(_success_foobar) - .on_error(_error_foobar) + .on_execute(_create_foobar) + .on_success(_success_foobar) + .on_error(_error_foobar) .local_step() - .on_execute(_update_foo) + .on_execute(_update_foo) .commit() ) ``` @@ -815,11 +815,11 @@ CreateFooBarDTO = ModelType.build("AnotherDTO", {"number": int, "text": str}) ADD_FOOBAR_SAGA = ( Saga() .remote_step() - .on_execute(_create_foobar) - .on_success(_success_foobar) - .on_error(_error_foobar) + .on_execute(_create_foobar) + .on_success(_success_foobar) + .on_error(_error_foobar) .local_step() - .on_execute(_update_foo) + .on_execute(_update_foo) .commit() ) @@ -875,6 +875,7 @@ python foo/main.py #### The `foobar` Microservice The directory structure will become: + ```shell . ├── foo @@ -949,7 +950,7 @@ saga:
-Here is the `foobar/main.py` config file: +Here is the `foobar/main.py` source file:
Click to show the full file @@ -973,7 +974,7 @@ class FooBar(RootEntity): class FooBarAggregate(Aggregate[FooBar]): """FooBar Aggregate class.""" - + @staticmethod async def create_foobar(something: str) -> UUID: """Create a new ``FooBar`` instance. @@ -1017,8 +1018,8 @@ Execute the following command to start the `foobar` microservice: python foobar/main.py ``` - To check that everything works fine, execute the following command: + ```shell curl --location --request POST 'http://localhost:4545/foos/add-foobar' \ --header 'Content-Type: application/json' \ @@ -1029,6 +1030,7 @@ curl --location --request POST 'http://localhost:4545/foos/add-foobar' \ ``` This request will start a new Saga, that sends a command to the `foobar` microservice, retrieve the `FooBar` identifier and update the `Foo` instance. After that, the `FooQueryService` will handle the update event and print a message similar to this one on the console. + ``` The 'foobar' field of a Foo was updated: Event(...) ``` From f833233e9e0c65becf34b719901f3be77b0ef435 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 15:11:50 +0100 Subject: [PATCH 84/97] ISSUE #140 * Add foobar microservice description. --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e1844685a..6b992e9a3 100644 --- a/README.md +++ b/README.md @@ -874,6 +874,8 @@ python foo/main.py #### The `foobar` Microservice +The `foobar` microservice will simply have a `CreateFooBar` command to create new instances of its `FooBar` root entity. + The directory structure will become: ```shell From ef02714616bc31691c286f005c6b8bffcc80cf16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 15:18:17 +0100 Subject: [PATCH 85/97] ISSUE #140 * Change user and password of the quickstart. --- README.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 6b992e9a3..81ceba1a6 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ The required environment to run this quickstart is the following: * A `python>=3.9` interpreter with version equal or greater to . * A `kafka` instance available at `localhost:9092` -* A `postgres` instance available at `localhost:5432` with `foo_db` and `foobar_db` databases accessible with the `minos:min0s` credentials. +* A `postgres` instance available at `localhost:5432` with the `foo_db` and `foobar_db` databases accessible with the `user:pass` credentials. * Two TCP sockets available to use at `localhost:4545` and `localhost:4546`. Note that these parameters can be configured on the `foo/config.yml` file. @@ -122,22 +122,22 @@ broker: port: 9092 queue: database: foo_db - user: minos - password: min0s + user: user + password: pass host: localhost port: 5432 records: 1000 retry: 2 repository: database: foo_db - user: minos - password: min0s + user: user + password: pass host: localhost port: 5432 snapshot: database: foo_db - user: minos - password: min0s + user: user + password: pass host: localhost port: 5432 saga: @@ -927,22 +927,22 @@ broker: port: 9092 queue: database: foobar_db - user: minos - password: min0s + user: user + password: pass host: localhost port: 5432 records: 1000 retry: 2 repository: database: foobar_db - user: minos - password: min0s + user: user + password: pass host: localhost port: 5432 snapshot: database: foobar_db - user: minos - password: min0s + user: user + password: pass host: localhost port: 5432 saga: From ae863daa0cedbb952f07a133174d65f937e07214 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 16:38:35 +0100 Subject: [PATCH 86/97] ISSUE #97 * Remove duplicated code. --- .../tests/test_minos_discovery/test_client.py | 20 ++----------------- 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py b/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py index d6bbf33a5..d412b1340 100644 --- a/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py +++ b/packages/plugins/minos-discovery-minos/tests/test_minos_discovery/test_client.py @@ -54,21 +54,13 @@ async def test_subscribe(self, mock): self.assertEqual(expected, mock.call_args) @patch("aiohttp.ClientSession.post") - async def test_subscribe_raises_failure(self, mock): + async def test_subscribe_raises(self, mock): mock.return_value.__aenter__ = _fn_failure with self.assertRaises(MinosDiscoveryConnectorException): await self.client.subscribe("56.56.56.56", 56, "test", [{"url": "/foo", "method": "POST"}], retry_delay=0) self.assertEqual(3, mock.call_count) - @patch("aiohttp.ClientSession.post") - async def test_subscribe_raises_exception(self, mock): - mock.return_value.__aenter__ = _fn_raises - - with self.assertRaises(MinosDiscoveryConnectorException): - await self.client.subscribe("56.56.56.56", 56, "test", [{"url": "/foo", "method": "POST"}], retry_delay=0) - self.assertEqual(3, mock.call_count) - @patch("aiohttp.ClientSession.delete") async def test_unsubscribe(self, mock): mock.return_value.__aenter__ = _fn @@ -78,21 +70,13 @@ async def test_unsubscribe(self, mock): self.assertEqual(call("http://123.456.123.1:1234/microservices/test"), mock.call_args) @patch("aiohttp.ClientSession.delete") - async def test_unsubscribe_raises_failure(self, mock): + async def test_unsubscribe_raises(self, mock): mock.return_value.__aenter__ = _fn_failure with self.assertRaises(MinosDiscoveryConnectorException): await self.client.unsubscribe("test", retry_delay=0) self.assertEqual(3, mock.call_count) - @patch("aiohttp.ClientSession.delete") - async def test_unsubscribe_raises_exception(self, mock): - mock.return_value.__aenter__ = _fn_raises - - with self.assertRaises(MinosDiscoveryConnectorException): - await self.client.unsubscribe("test", retry_delay=0) - self.assertEqual(3, mock.call_count) - if __name__ == "__main__": unittest.main() From 250392fd878c2ef1e6d74110d1b5770c8979f77f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 16:47:15 +0100 Subject: [PATCH 87/97] ISSUE #97 * Improve QueryService explanations. --- README.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 81ceba1a6..871900639 100644 --- a/README.md +++ b/README.md @@ -466,7 +466,7 @@ And the expected response will be similar to: ### Subscribe to an Event and Expose a Query -Here is an example of the event and query handling. In this case, it must be defined on a `QueryService` class. In this case a `"FooCreated"` event is handled (and only a `print` of the content is performed). The event contents typically contains instances of `AggregateDiff` type, which is referred to the difference respect to the previously stored instance. The exposed query is connected to the calls that come from the `"/foos/example"` path and `"GET"` method and a naive string is returned. +Here is an example of the event and query handling. In this case, it must be defined on a `QueryService` class. In this case a `"FooCreated"` and `"FooUpdated.foobar"` events are handled (they will print the content on the microservice's logs). The event contents typically contains instances of `AggregateDiff` type, which is referred to the difference respect to the previously stored instance. The exposed query is connected to the calls that come from the `"/foos/example"` path and `"GET"` method and a naive string is returned. *Disclaimer*: A real `QueryService` implementation must populate a query-oriented database based on the events to which is subscribed to, and expose queries performed over that query-oriented database. @@ -639,6 +639,18 @@ Now, if a new instance is created (with a rest call, like in the [previous secti A Foo was created: Event(...) ``` +Also, to check that everything is fine the example query can be executed with: + +```shell +curl --location --request GET 'http://localhost:4545/foos/example' +``` + +And the expected result should be something like: + +``` +"This is an example response!" +``` + ### Interact with another Microservice Here is an example of the interaction between two microservices through a SAGA pattern. In this case, the interaction starts with a call to the `"/foos/add-foobar"` path and the `"POST"` method, which performs a `SagaManager` run over the `ADD_FOOBAR_SAGA` saga. This saga has two steps, one remote that executes the `"CreateFooBar"` command (possibly defined on the supposed `"foobar"` microservice), and a local step that is executed on this microservice. The `CreateFooBarDTO` defines the structure of the request to be sent when the `"CreateFooBar"` command is executed. From ae1399cf30d8b25ad03a555db51a611f82a404ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 16:59:21 +0100 Subject: [PATCH 88/97] ISSUE #97 * Add the Roadmap section. * Add a summary containing the most useful commands. --- README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.md b/README.md index 871900639..086e89a87 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,11 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanifesto.org/) microservices in Python. Internally, it leverages Event Sourcing, CQRS and a message driven architecture to fulfil the commitments of an asynchronous environment. +### Roadmap + +#### 0.6.x +* [TODO] + ## Foundational Patterns The `minos` framework is built strongly inspired by the following set of patterns: @@ -41,6 +46,14 @@ The `minos` framework is built strongly inspired by the following set of pattern The easiest way to use `minos` is with the help of the [`minos-cli`](https://github.com/minos-framework/minos-cli), which provides commands to setup both the project skeleton (configures containerization, databases, brokers, etc.) and the microservice skeleton (the base microservice structure, environment configuration, etc.) +Here is a summary containing the most useful commands: + +* `minos new project NAME`: Create a new Project +* `minos set RESOURCE BACKEND`: Configure an environment resource (broker, database, etc.). +* `minos deploy project`: Deploy a project. +* `minos new microservice NAME`: Create a new microservice. +* `minos deploy microservice` deploy a microservice. + ### Manual installation If you want to directly use `minos` without the command-line utility, the following command will install the needed packages: From dd1f29cf6c52974ff1ddc06e0faa1f91d38e4757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 17:04:06 +0100 Subject: [PATCH 89/97] ISSUE #97 * Improve the `minos-cli` section. --- README.md | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 086e89a87..eb70a5482 100644 --- a/README.md +++ b/README.md @@ -44,16 +44,24 @@ The `minos` framework is built strongly inspired by the following set of pattern ### Guided installation -The easiest way to use `minos` is with the help of the [`minos-cli`](https://github.com/minos-framework/minos-cli), which provides commands to setup both the project skeleton (configures containerization, databases, brokers, etc.) and the microservice skeleton (the base microservice structure, environment configuration, etc.) +The easiest way to manage a project is with the `minos` command-line interface, which provides commands to setup both the project skeleton (configures containerization, databases, brokers, etc.) and the microservice skeleton (the base microservice structure, environment configuration, etc.). + +You can install it with: + +```shell +pip install minos-cli +``` Here is a summary containing the most useful commands: -* `minos new project NAME`: Create a new Project -* `minos set RESOURCE BACKEND`: Configure an environment resource (broker, database, etc.). +* `minos new project $NAME`: Create a new Project +* `minos set $RESOURCE $BACKEND`: Configure an environment resource (broker, database, etc.). * `minos deploy project`: Deploy a project. -* `minos new microservice NAME`: Create a new microservice. +* `minos new microservice $NAME`: Create a new microservice. * `minos deploy microservice` deploy a microservice. +For more information, visit the [`minos-cli`](https://github.com/minos-framework/minos-cli) repository. + ### Manual installation If you want to directly use `minos` without the command-line utility, the following command will install the needed packages: From e584bf4a45ff096e06c3c6d1e7699ec21d3c0c9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 18:20:34 +0100 Subject: [PATCH 90/97] ISSUE #140 * Fill roadmap for `0.6.x`. --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eb70a5482..e027cef49 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,13 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanif ### Roadmap #### 0.6.x -* [TODO] +* [#78](https://github.com/minos-framework/minos-python/issues/78) Implement a circuit breaker for `minos-broker-kafka`. +* [#87](https://github.com/minos-framework/minos-python/issues/87) Implement idempotency for `BrokerSubscriber` message processing. +* [#100](https://github.com/minos-framework/minos-python/issues/100) Create the `minos-serializers-avro` plugin. +* [#148](https://github.com/minos-framework/minos-python/issues/148) Create the `minos-rest-aiohttp`. +* [#149](https://github.com/minos-framework/minos-python/issues/149) Add `minos-graphql-aiohttp` plugin. +* [#150](https://github.com/minos-framework/minos-python/issues/150) Refactor configuration file and `MinosConfig` accessor. +* [#151](https://github.com/minos-framework/minos-python/issues/151) Expose `OpenAPI` and `AsyncAPI` specifications. ## Foundational Patterns From 5e8e8f531f9cae592e44a8df2adc41a0a6f7eeef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 18:37:40 +0100 Subject: [PATCH 91/97] ISSUE #140 * Update README. --- README.md | 55 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index e027cef49..76d28d975 100644 --- a/README.md +++ b/README.md @@ -48,8 +48,6 @@ The `minos` framework is built strongly inspired by the following set of pattern ## Installation -### Guided installation - The easiest way to manage a project is with the `minos` command-line interface, which provides commands to setup both the project skeleton (configures containerization, databases, brokers, etc.) and the microservice skeleton (the base microservice structure, environment configuration, etc.). You can install it with: @@ -68,24 +66,11 @@ Here is a summary containing the most useful commands: For more information, visit the [`minos-cli`](https://github.com/minos-framework/minos-cli) repository. -### Manual installation - -If you want to directly use `minos` without the command-line utility, the following command will install the needed packages: - -```shell -pip install \ - minos-microservice-aggregate \ - minos-microservice-common \ - minos-microservice-cqrs \ - minos-microservice-networks \ - minos-microservice-saga -``` - ## QuickStart This section includes a quickstart guide to create your first `minos` microservice, so that anyone can get the gist of the framework. -#### Setting up the environment +### Set up the environment The required environment to run this quickstart is the following: @@ -94,7 +79,22 @@ The required environment to run this quickstart is the following: * A `postgres` instance available at `localhost:5432` with the `foo_db` and `foobar_db` databases accessible with the `user:pass` credentials. * Two TCP sockets available to use at `localhost:4545` and `localhost:4546`. -Note that these parameters can be configured on the `foo/config.yml` file. +Note that these parameters can be customized on the configuration files. + +### Install the dependencies + +If you want to directly use `minos` without the command-line utility, the following command will install the needed packages: + +```shell +pip install \ + minos-microservice-aggregate \ + minos-microservice-common \ + minos-microservice-cqrs \ + minos-microservice-networks \ + minos-microservice-saga \ + minos-broker-kafka +``` + ### Configure a Microservice @@ -122,13 +122,14 @@ service: injections: lock_pool: minos.common.PostgreSqlLockPool postgresql_pool: minos.common.PostgreSqlPool - broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher - broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder + broker_publisher: minos.plugins.kafka.PostgreSqlQueuedKafkaBrokerPublisher + broker_subscriber_builder: minos.plugins.kafka.PostgreSqlQueuedKafkaBrokerSubscriberBuilder broker_pool: minos.networks.BrokerClientPool transaction_repository: minos.aggregate.PostgreSqlTransactionRepository event_repository: minos.aggregate.PostgreSqlEventRepository snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository saga_manager: minos.saga.SagaManager + discovery: minos.networks.DiscoveryConnector services: - minos.networks.BrokerHandlerService - minos.networks.RestService @@ -170,6 +171,10 @@ snapshot: saga: storage: path: "./foo.lmdb" +discovery: + client: minos.networks.InMemoryDiscoveryClient + host: localhost + port: 5567 ```
@@ -940,13 +945,14 @@ service: injections: lock_pool: minos.common.PostgreSqlLockPool postgresql_pool: minos.common.PostgreSqlPool - broker_publisher: minos.networks.PostgreSqlQueuedKafkaBrokerPublisher - broker_subscriber_builder: minos.networks.PostgreSqlQueuedKafkaBrokerSubscriberBuilder + broker_publisher: minos.plugins.kafka.PostgreSqlQueuedKafkaBrokerPublisher + broker_subscriber_builder: minos.plugins.kafka.PostgreSqlQueuedKafkaBrokerSubscriberBuilder broker_pool: minos.networks.BrokerClientPool transaction_repository: minos.aggregate.PostgreSqlTransactionRepository event_repository: minos.aggregate.PostgreSqlEventRepository snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository saga_manager: minos.saga.SagaManager + discovery: minos.networks.DiscoveryConnector services: - minos.networks.BrokerHandlerService - minos.networks.RestService @@ -987,6 +993,10 @@ snapshot: saga: storage: path: "./foobar.lmdb" +discovery: + client: minos.networks.InMemoryDiscoveryClient + host: localhost + port: 5567 ```
@@ -1094,7 +1104,8 @@ The core packages provide the base implementation of the framework. The plugin packages provide connectors to external technologies like brokers, discovery services, databases, serializers and so on. -* Coming soon... +* [minos-broker-kafka](https://minos-framework.github.io/minos-python/packages/plugins/minos-broker-kafka): The networks core. +* [minos-discovery-minos](https://minos-framework.github.io/minos-python/packages/plugins/minos-discovery-minos): The SAGA pattern implementation. ## Documentation From 951f061fcb054d371b92400df8f2b0b36f389d07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Wed, 2 Feb 2022 20:24:32 +0100 Subject: [PATCH 92/97] ISSUE #96 #97 * Fix bug related with documentation generation. --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 31536e72d..f5917a4f5 100644 --- a/Makefile +++ b/Makefile @@ -7,6 +7,7 @@ install: docs: mkdir -p $(DOCS_TARGET)/core + mkdir -p $(DOCS_TARGET)/plugins $(MAKE) --directory=packages/core/minos-microservice-aggregate install docs cp -R packages/core/minos-microservice-aggregate/docs/_build/html $(DOCS_TARGET)/core/minos-microservice-aggregate From 2849096cbea351814ebe84cffdfbc094fcb0fee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Thu, 3 Feb 2022 08:58:52 +0100 Subject: [PATCH 93/97] ISSUE #? * Add additional feature to the `0.6.x` roadmap. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 76d28d975..a5aa66b1b 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ Minos is a framework which helps you create [reactive](https://www.reactivemanif * [#149](https://github.com/minos-framework/minos-python/issues/149) Add `minos-graphql-aiohttp` plugin. * [#150](https://github.com/minos-framework/minos-python/issues/150) Refactor configuration file and `MinosConfig` accessor. * [#151](https://github.com/minos-framework/minos-python/issues/151) Expose `OpenAPI` and `AsyncAPI` specifications. +* [#152](https://github.com/minos-framework/minos-python/issues/152) Provide a testing suite to test the microservice. ## Foundational Patterns From 5147f3f5fd084a81dd400c0385df682114196746 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Thu, 3 Feb 2022 09:05:01 +0100 Subject: [PATCH 94/97] ISSUE #? * Change `snok/install-poetry` version. --- .github/workflows/docs.yml | 2 +- .github/workflows/minos-broker-kafka-publish.yml | 2 +- .github/workflows/minos-broker-kafka-tests.yml | 2 +- .github/workflows/minos-discovery-minos-publish.yml | 2 +- .github/workflows/minos-discovery-minos-tests.yml | 2 +- .github/workflows/minos-microservice-common-publish.yml | 2 +- .github/workflows/minos-microservice-common-tests.yml | 2 +- .github/workflows/minos-microservice-cqrs-publish.yml | 2 +- .github/workflows/minos-microservice-cqrs-tests.yml | 2 +- .github/workflows/minos-microservice-networks-publish.yml | 2 +- .github/workflows/minos-microservice-networks-tests.yml | 2 +- .github/workflows/minos-microservice-saga-publish.yml | 2 +- .github/workflows/minos-microservice-saga-tests.yml | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index bd9530277..7d9141096 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -15,7 +15,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-broker-kafka-publish.yml b/.github/workflows/minos-broker-kafka-publish.yml index 4fb44f45f..ce9994140 100644 --- a/.github/workflows/minos-broker-kafka-publish.yml +++ b/.github/workflows/minos-broker-kafka-publish.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-broker-kafka-tests.yml b/.github/workflows/minos-broker-kafka-tests.yml index c35a8a639..9fca0d856 100644 --- a/.github/workflows/minos-broker-kafka-tests.yml +++ b/.github/workflows/minos-broker-kafka-tests.yml @@ -54,7 +54,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-discovery-minos-publish.yml b/.github/workflows/minos-discovery-minos-publish.yml index 3b8a196f4..a46234289 100644 --- a/.github/workflows/minos-discovery-minos-publish.yml +++ b/.github/workflows/minos-discovery-minos-publish.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-discovery-minos-tests.yml b/.github/workflows/minos-discovery-minos-tests.yml index 08beb3355..ba5e9a6f6 100644 --- a/.github/workflows/minos-discovery-minos-tests.yml +++ b/.github/workflows/minos-discovery-minos-tests.yml @@ -24,7 +24,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-common-publish.yml b/.github/workflows/minos-microservice-common-publish.yml index cbf606ea7..13b756af0 100644 --- a/.github/workflows/minos-microservice-common-publish.yml +++ b/.github/workflows/minos-microservice-common-publish.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-common-tests.yml b/.github/workflows/minos-microservice-common-tests.yml index eb3f220b6..637130b43 100644 --- a/.github/workflows/minos-microservice-common-tests.yml +++ b/.github/workflows/minos-microservice-common-tests.yml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-cqrs-publish.yml b/.github/workflows/minos-microservice-cqrs-publish.yml index 2b2705c26..8c18da944 100644 --- a/.github/workflows/minos-microservice-cqrs-publish.yml +++ b/.github/workflows/minos-microservice-cqrs-publish.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-cqrs-tests.yml b/.github/workflows/minos-microservice-cqrs-tests.yml index 60c857a43..dc2644ba4 100644 --- a/.github/workflows/minos-microservice-cqrs-tests.yml +++ b/.github/workflows/minos-microservice-cqrs-tests.yml @@ -41,7 +41,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-networks-publish.yml b/.github/workflows/minos-microservice-networks-publish.yml index 7ca379b3d..9b382cba7 100644 --- a/.github/workflows/minos-microservice-networks-publish.yml +++ b/.github/workflows/minos-microservice-networks-publish.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-networks-tests.yml b/.github/workflows/minos-microservice-networks-tests.yml index 5483287b5..49a642b3e 100644 --- a/.github/workflows/minos-microservice-networks-tests.yml +++ b/.github/workflows/minos-microservice-networks-tests.yml @@ -40,7 +40,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-saga-publish.yml b/.github/workflows/minos-microservice-saga-publish.yml index 874720403..67e1be47d 100644 --- a/.github/workflows/minos-microservice-saga-publish.yml +++ b/.github/workflows/minos-microservice-saga-publish.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install diff --git a/.github/workflows/minos-microservice-saga-tests.yml b/.github/workflows/minos-microservice-saga-tests.yml index 49ee0fb14..dbd6cad17 100644 --- a/.github/workflows/minos-microservice-saga-tests.yml +++ b/.github/workflows/minos-microservice-saga-tests.yml @@ -25,7 +25,7 @@ jobs: uses: actions/checkout@v2 - name: Install Poetry - uses: snok/install-poetry@v1.1.4 + uses: snok/install-poetry@v1 - name: Install dependencies run: make install From 2dbea925fc3663554b6e3e3ccff84bf9a419c700 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Thu, 3 Feb 2022 10:09:14 +0100 Subject: [PATCH 95/97] ISSUE #? * Change log level from INFO to DEBUG --- .../minos/networks/brokers/collections/queues/abc.py | 4 ++-- .../minos/networks/brokers/publishers/abc.py | 2 +- .../minos/networks/brokers/subscribers/abc.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/collections/queues/abc.py b/packages/core/minos-microservice-networks/minos/networks/brokers/collections/queues/abc.py index 16016f26d..a91ab4422 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/collections/queues/abc.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/collections/queues/abc.py @@ -27,7 +27,7 @@ class BrokerQueue(ABC, MinosSetup): async def enqueue(self, message: BrokerMessage) -> None: """Enqueue method.""" - logger.info(f"Enqueuing {message!r} message...") + logger.debug(f"Enqueuing {message!r} message...") await self._enqueue(message) @abstractmethod @@ -45,7 +45,7 @@ async def __anext__(self) -> BrokerMessage: async def dequeue(self) -> BrokerMessage: """Dequeue method.""" message = await self._dequeue() - logger.info(f"Dequeuing {message!r} message...") + logger.debug(f"Dequeuing {message!r} message...") return message @abstractmethod diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/abc.py b/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/abc.py index 470bdd4c8..eb188745a 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/abc.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/publishers/abc.py @@ -24,7 +24,7 @@ async def send(self, message: BrokerMessage) -> None: :param message: The message to be sent. :return: This method does not return anything. """ - logger.info(f"Sending {message!r} message...") + logger.debug(f"Sending {message!r} message...") await self._send(message) @abstractmethod diff --git a/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/abc.py b/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/abc.py index fc483151a..1ad1fd605 100644 --- a/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/abc.py +++ b/packages/core/minos-microservice-networks/minos/networks/brokers/subscribers/abc.py @@ -58,7 +58,7 @@ async def receive(self) -> BrokerMessage: :return: A ``BrokerMessage`` instance. """ message = await self._receive() - logger.info(f"Receiving {message!r} message...") + logger.debug(f"Receiving {message!r} message...") return message @abstractmethod From d5963fc8afafc93ee81556dcdcb96f57f4866a11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Thu, 3 Feb 2022 10:29:06 +0100 Subject: [PATCH 96/97] ISSUE #? * Minor improvements. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a5aa66b1b..af65375f1 100644 --- a/README.md +++ b/README.md @@ -1096,17 +1096,17 @@ This project follows a modular structure based on python packages. The core packages provide the base implementation of the framework. * [minos-microservice-aggregate](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-aggregate): The Aggregate pattern implementation. -* [minos-microservice-common](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-common): The common core. +* [minos-microservice-common](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-common): The common core package. * [minos-microservice-cqrs](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-cqrs): The CQRS pattern implementation. -* [minos-microservice-networks](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-networks): The networks core. +* [minos-microservice-networks](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-networks): The networks core package. * [minos-microservice-saga](https://minos-framework.github.io/minos-python/packages/core/minos-microservice-saga): The SAGA pattern implementation. ### Plugins The plugin packages provide connectors to external technologies like brokers, discovery services, databases, serializers and so on. -* [minos-broker-kafka](https://minos-framework.github.io/minos-python/packages/plugins/minos-broker-kafka): The networks core. -* [minos-discovery-minos](https://minos-framework.github.io/minos-python/packages/plugins/minos-discovery-minos): The SAGA pattern implementation. +* [minos-broker-kafka](https://minos-framework.github.io/minos-python/packages/plugins/minos-broker-kafka): The `kafka` plugin package. +* [minos-discovery-minos](https://minos-framework.github.io/minos-python/packages/plugins/minos-discovery-minos): The `minos-discovery` plugin package. ## Documentation From f2dd319ae8afbbcd1f341d81af87ff67a7786d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20Garc=C3=ADa=20Prado?= Date: Thu, 3 Feb 2022 10:44:44 +0100 Subject: [PATCH 97/97] v0.5.0 --- packages/core/minos-microservice-aggregate/HISTORY.md | 11 +++++++++++ .../minos/aggregate/__init__.py | 2 +- .../core/minos-microservice-aggregate/pyproject.toml | 4 ++-- packages/core/minos-microservice-common/HISTORY.md | 5 +++++ .../minos/common/__init__.py | 2 +- .../core/minos-microservice-common/pyproject.toml | 4 ++-- packages/core/minos-microservice-cqrs/HISTORY.md | 4 ++++ .../minos-microservice-cqrs/minos/cqrs/__init__.py | 2 +- packages/core/minos-microservice-cqrs/pyproject.toml | 4 ++-- packages/core/minos-microservice-networks/HISTORY.md | 8 ++++++++ .../minos/networks/__init__.py | 2 +- .../core/minos-microservice-networks/pyproject.toml | 4 ++-- packages/core/minos-microservice-saga/HISTORY.md | 5 +++++ .../minos-microservice-saga/minos/saga/__init__.py | 2 +- packages/core/minos-microservice-saga/pyproject.toml | 4 ++-- packages/plugins/minos-broker-kafka/HISTORY.md | 11 +++++++++++ .../minos/plugins/kafka/__init__.py | 2 +- packages/plugins/minos-broker-kafka/pyproject.toml | 4 ++-- packages/plugins/minos-discovery-minos/HISTORY.md | 5 +++++ .../minos/plugins/minos_discovery/__init__.py | 2 +- packages/plugins/minos-discovery-minos/pyproject.toml | 4 ++-- 21 files changed, 70 insertions(+), 21 deletions(-) diff --git a/packages/core/minos-microservice-aggregate/HISTORY.md b/packages/core/minos-microservice-aggregate/HISTORY.md index 129555d94..7c9707bce 100644 --- a/packages/core/minos-microservice-aggregate/HISTORY.md +++ b/packages/core/minos-microservice-aggregate/HISTORY.md @@ -54,3 +54,14 @@ ## 0.4.1 (2022-01-31) * Update `README.md`. + + +## 0.5.0 (2022-02-03) + +* Rename `Aggregate` as `RootEntity`. +* Rename `AggregateRef` as `ExternalEntity`. +* Rename `ModelRef` as `Ref`. +* Rename `AggregateDiff` as `Event`. +* Create the `Aggregate` base class, with the purpose to move the business logic from the `minos.cqrs.CommandService` to this brand-new class. +* Refactor internal module hierarchy. +* Minor changes. \ No newline at end of file diff --git a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py index ed120234a..7353aa527 100644 --- a/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py +++ b/packages/core/minos-microservice-aggregate/minos/aggregate/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .actions import ( Action, diff --git a/packages/core/minos-microservice-aggregate/pyproject.toml b/packages/core/minos-microservice-aggregate/pyproject.toml index e3d38fdb5..077039bf5 100644 --- a/packages/core/minos-microservice-aggregate/pyproject.toml +++ b/packages/core/minos-microservice-aggregate/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-microservice-aggregate" -version = "0.4.1" -description = "Python Package for Minos Microservices containing all the Aggregate stuff" +version = "0.5.0" +description = "The Aggregate pattern of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/" diff --git a/packages/core/minos-microservice-common/HISTORY.md b/packages/core/minos-microservice-common/HISTORY.md index 9d6c0db6f..80a7423be 100644 --- a/packages/core/minos-microservice-common/HISTORY.md +++ b/packages/core/minos-microservice-common/HISTORY.md @@ -274,3 +274,8 @@ History ------------------ * Update `README.md`. + +0.5.0 (2022-02-03) +------------------ + +* Minor changes. \ No newline at end of file diff --git a/packages/core/minos-microservice-common/minos/common/__init__.py b/packages/core/minos-microservice-common/minos/common/__init__.py index b4df02ca2..441e8c580 100644 --- a/packages/core/minos-microservice-common/minos/common/__init__.py +++ b/packages/core/minos-microservice-common/minos/common/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .configuration import ( BROKER, diff --git a/packages/core/minos-microservice-common/pyproject.toml b/packages/core/minos-microservice-common/pyproject.toml index 6aa7e7a60..47b0e67f1 100644 --- a/packages/core/minos-microservice-common/pyproject.toml +++ b/packages/core/minos-microservice-common/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-microservice-common" -version = "0.4.1" -description = "Python Package with common Classes and Utilities used in Minos Microservices." +version = "0.5.0" +description = "The common core of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/" diff --git a/packages/core/minos-microservice-cqrs/HISTORY.md b/packages/core/minos-microservice-cqrs/HISTORY.md index 9c746bc80..929911aaf 100644 --- a/packages/core/minos-microservice-cqrs/HISTORY.md +++ b/packages/core/minos-microservice-cqrs/HISTORY.md @@ -60,3 +60,7 @@ # 0.4.1 (2022-01-31) * Update `README.md`. + +# 0.5.0 (2022-02-03) + +* Minor changes. \ No newline at end of file diff --git a/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py b/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py index ba8961a06..be82395ea 100644 --- a/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py +++ b/packages/core/minos-microservice-cqrs/minos/cqrs/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .exceptions import ( MinosCqrsException, diff --git a/packages/core/minos-microservice-cqrs/pyproject.toml b/packages/core/minos-microservice-cqrs/pyproject.toml index ad41acf4e..c8826041a 100644 --- a/packages/core/minos-microservice-cqrs/pyproject.toml +++ b/packages/core/minos-microservice-cqrs/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-microservice-cqrs" -version = "0.4.1" -description = "Minos Microservice CQRS package" +version = "0.5.0" +description = "The CQRS pattern of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/" diff --git a/packages/core/minos-microservice-networks/HISTORY.md b/packages/core/minos-microservice-networks/HISTORY.md index 448ee107d..a9d53e401 100644 --- a/packages/core/minos-microservice-networks/HISTORY.md +++ b/packages/core/minos-microservice-networks/HISTORY.md @@ -196,3 +196,11 @@ History ------------------ * Update `README.md`. + + +0.5.0 (2022-02-03) +------------------ + +* Extract `kafka` related code to the `minos-broker-kafka` plugin. +* Extract `minos-discovery` related code to the `minos-discovery-minos` plugin. +* Minor changes. \ No newline at end of file diff --git a/packages/core/minos-microservice-networks/minos/networks/__init__.py b/packages/core/minos-microservice-networks/minos/networks/__init__.py index ff8b059f6..5012c93c7 100644 --- a/packages/core/minos-microservice-networks/minos/networks/__init__.py +++ b/packages/core/minos-microservice-networks/minos/networks/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .brokers import ( REQUEST_HEADERS_CONTEXT_VAR, diff --git a/packages/core/minos-microservice-networks/pyproject.toml b/packages/core/minos-microservice-networks/pyproject.toml index 8b54496f5..31667da20 100644 --- a/packages/core/minos-microservice-networks/pyproject.toml +++ b/packages/core/minos-microservice-networks/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-microservice-networks" -version = "0.4.1" -description = "Python Package with the common network classes and utilities used in Minos Microservice." +version = "0.5.0" +description = "The networks core of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/" diff --git a/packages/core/minos-microservice-saga/HISTORY.md b/packages/core/minos-microservice-saga/HISTORY.md index dcbad1fda..5e96c8a00 100644 --- a/packages/core/minos-microservice-saga/HISTORY.md +++ b/packages/core/minos-microservice-saga/HISTORY.md @@ -159,3 +159,8 @@ History ------------------ * Update `README.md`. + +0.5.0 (2022-02-03) +------------------ + +* Minor changes. \ No newline at end of file diff --git a/packages/core/minos-microservice-saga/minos/saga/__init__.py b/packages/core/minos-microservice-saga/minos/saga/__init__.py index e9b6266d7..c15d553c2 100644 --- a/packages/core/minos-microservice-saga/minos/saga/__init__.py +++ b/packages/core/minos-microservice-saga/minos/saga/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .context import ( SagaContext, diff --git a/packages/core/minos-microservice-saga/pyproject.toml b/packages/core/minos-microservice-saga/pyproject.toml index e7937c119..d7affed7a 100644 --- a/packages/core/minos-microservice-saga/pyproject.toml +++ b/packages/core/minos-microservice-saga/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-microservice-saga" -version = "0.4.1" -description = "Saga Library for MinOS project." +version = "0.5.0" +description = "The SAGA pattern of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/" diff --git a/packages/plugins/minos-broker-kafka/HISTORY.md b/packages/plugins/minos-broker-kafka/HISTORY.md index e061a5372..af6eb3c93 100644 --- a/packages/plugins/minos-broker-kafka/HISTORY.md +++ b/packages/plugins/minos-broker-kafka/HISTORY.md @@ -1 +1,12 @@ # History + +## 0.5.0 (2022-02-03) + +* Migrate `PostgreSqlQueuedKafkaBrokerPublisher` from `minos-microservice-networks`. +* Migrate `InMemoryQueuedKafkaBrokerPublisher` from `minos-microservice-networks`. +* Migrate `KafkaBrokerPublisher` from `minos-microservice-networks`. +* Migrate `KafkaBrokerSubscriber` from `minos-microservice-networks`. +* Migrate `KafkaBrokerSubscriberBuilder` from `minos-microservice-networks`. +* Migrate `PostgreSqlQueuedKafkaBrokerSubscriberBuilder` from `minos-microservice-networks`. +* Migrate `InMemoryQueuedKafkaBrokerSubscriberBuilder` from `minos-microservice-networks`. +* Minor changes. \ No newline at end of file diff --git a/packages/plugins/minos-broker-kafka/minos/plugins/kafka/__init__.py b/packages/plugins/minos-broker-kafka/minos/plugins/kafka/__init__.py index a41da4687..3da0404fa 100644 --- a/packages/plugins/minos-broker-kafka/minos/plugins/kafka/__init__.py +++ b/packages/plugins/minos-broker-kafka/minos/plugins/kafka/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .publisher import ( InMemoryQueuedKafkaBrokerPublisher, diff --git a/packages/plugins/minos-broker-kafka/pyproject.toml b/packages/plugins/minos-broker-kafka/pyproject.toml index 95f10ccf7..699c59a66 100644 --- a/packages/plugins/minos-broker-kafka/pyproject.toml +++ b/packages/plugins/minos-broker-kafka/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-broker-kafka" -version = "0.4.1" -description = "Minos Broker Kafka package" +version = "0.5.0" +description = "The kafka plugin of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/" diff --git a/packages/plugins/minos-discovery-minos/HISTORY.md b/packages/plugins/minos-discovery-minos/HISTORY.md index e061a5372..d4ec91a28 100644 --- a/packages/plugins/minos-discovery-minos/HISTORY.md +++ b/packages/plugins/minos-discovery-minos/HISTORY.md @@ -1 +1,6 @@ # History + +## 0.5.0 (2022-02-03) + +* Migrate `MinosDiscoveryClient` from `minos-microservice-networks`. +* Minor changes. \ No newline at end of file diff --git a/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py b/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py index a1d32d422..d3b5c3156 100644 --- a/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py +++ b/packages/plugins/minos-discovery-minos/minos/plugins/minos_discovery/__init__.py @@ -1,6 +1,6 @@ __author__ = "Minos Framework Devs" __email__ = "hey@minos.run" -__version__ = "0.4.1" +__version__ = "0.5.0" from .client import ( MinosDiscoveryClient, diff --git a/packages/plugins/minos-discovery-minos/pyproject.toml b/packages/plugins/minos-discovery-minos/pyproject.toml index 360218a2a..d608125d6 100644 --- a/packages/plugins/minos-discovery-minos/pyproject.toml +++ b/packages/plugins/minos-discovery-minos/pyproject.toml @@ -1,7 +1,7 @@ [tool.poetry] name = "minos-discovery-minos" -version = "0.4.1" -description = "Minos Discovery Minos package" +version = "0.5.0" +description = "The minos-discover plugin of the Minos Framework" readme = "README.md" repository = "https://github.com/minos-framework/minos-python" homepage = "http://www.minos.run/"