Skip to content
Merged

0.5.x #274

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
20002b1
ISSUE #195
vladyslav-fenchak Feb 16, 2022
d3cb918
ISSUE #195
vladyslav-fenchak Feb 16, 2022
b77ca17
Restyled by isort
restyled-commits Feb 16, 2022
1035e0a
Merge pull request #204 from minos-framework/restyled/issue-195-event…
vladyslav-fenchak Feb 16, 2022
ce259f2
Merge pull request #203 from minos-framework/issue-195-event-class-re…
andrea-mucci Feb 16, 2022
69050fd
ISSUE #200
vladyslav-fenchak Feb 17, 2022
3eb61b8
ISSUE #205
vladyslav-fenchak Feb 17, 2022
d793544
Restyled by black
restyled-commits Feb 17, 2022
99ed2d2
Merge pull request #208 from minos-framework/restyled/issue-205-tests…
vladyslav-fenchak Feb 17, 2022
3e0389b
Merge pull request #206 from minos-framework/issue-200-print-error-in…
andrea-mucci Feb 17, 2022
36bf0e0
Merge pull request #207 from minos-framework/issue-205-tests-for-even…
andrea-mucci Feb 17, 2022
13ef801
ISSUE #224
vladyslav-fenchak Feb 22, 2022
4e1cd34
Merge pull request #225 from minos-framework/issue-224-event-class-mo…
andrea-mucci Feb 22, 2022
bf4935b
Bump orjson in /packages/core/minos-microservice-common
dependabot[bot] Mar 1, 2022
6641c9b
Bump sphinx-autodoc-typehints
dependabot[bot] Mar 1, 2022
e188a0a
Bump pytest in /packages/core/minos-microservice-saga
dependabot[bot] Mar 1, 2022
f043fa3
Bump pytest from 6.2.5 to 7.0.1
dependabot[bot] Mar 1, 2022
7e00eb4
Bump pytest in /packages/core/minos-microservice-aggregate
dependabot[bot] Mar 1, 2022
6c9c188
Bump sphinx-autodoc-typehints
dependabot[bot] Mar 1, 2022
99a983a
Bump pytest in /packages/core/minos-microservice-cqrs
dependabot[bot] Mar 1, 2022
d9e90e6
Bump coverage in /packages/core/minos-microservice-networks
dependabot[bot] Mar 1, 2022
3f9b268
Bump coverage in /packages/core/minos-microservice-common
dependabot[bot] Mar 1, 2022
14da620
Bump sphinx-autodoc-typehints in /packages/core/minos-microservice-saga
dependabot[bot] Mar 1, 2022
215fae2
Bump coverage from 6.3.1 to 6.3.2
dependabot[bot] Mar 1, 2022
4807083
Bump coverage in /packages/core/minos-microservice-aggregate
dependabot[bot] Mar 1, 2022
eb6d7f8
Bump sphinx-autodoc-typehints in /packages/core/minos-microservice-cqrs
dependabot[bot] Mar 1, 2022
853502a
Bump pytest in /packages/core/minos-microservice-common
dependabot[bot] Mar 1, 2022
0a9242f
Bump coverage in /packages/core/minos-microservice-saga
dependabot[bot] Mar 1, 2022
ab782c4
Bump pytest in /packages/core/minos-microservice-networks
dependabot[bot] Mar 1, 2022
0c62db5
Bump sphinx-autodoc-typehints
dependabot[bot] Mar 1, 2022
bf73ba0
Bump sphinx-autodoc-typehints from 1.16.0 to 1.17.0
dependabot[bot] Mar 1, 2022
e46d6c6
Bump coverage in /packages/core/minos-microservice-cqrs
dependabot[bot] Mar 1, 2022
a50992a
Bump orjson in /packages/core/minos-microservice-networks
dependabot[bot] Mar 1, 2022
aa764d0
Merge pull request #257 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
39661cf
Merge pull request #256 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
f0ee2ca
Merge pull request #254 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
554d22a
Merge pull request #255 from minos-framework/dependabot/pip/sphinx-au…
Mar 2, 2022
bc2098d
Merge pull request #238 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
5143c85
Merge pull request #252 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
283208f
Merge pull request #249 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
82e187f
Merge pull request #245 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
908bbbb
Merge pull request #250 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
bb1516c
Merge pull request #253 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
8f1403c
Merge pull request #248 from minos-framework/dependabot/pip/coverage-…
Mar 2, 2022
6c1bd66
Merge pull request #243 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
8829557
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/packa…
Mar 2, 2022
bcc4716
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/packa…
Mar 2, 2022
e6b8d49
Merge pull request #251 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
a6cad7c
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/packa…
Mar 2, 2022
d6f4f2e
Merge pull request #242 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
ffda3c9
Merge pull request #244 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
b0df746
Merge pull request #246 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
ff47a82
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/packa…
Mar 2, 2022
a68c7af
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/packa…
Mar 2, 2022
88407ff
Merge pull request #240 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
260d876
Merge pull request #239 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
c6c77a9
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/packa…
Mar 2, 2022
c2afab4
Merge pull request #247 from minos-framework/dependabot/pip/packages/…
Mar 2, 2022
53fe996
Merge remote-tracking branch 'origin/0.5.3' into dependabot/pip/pytes…
Mar 2, 2022
c3f961d
Merge pull request #241 from minos-framework/dependabot/pip/pytest-7.0.1
Mar 2, 2022
b022b1a
ISSUE #219
Mar 2, 2022
18acd2b
ISSUE #264
Mar 2, 2022
24dffa8
ISSUE #?
Mar 2, 2022
312d801
Merge remote-tracking branch 'origin/0.5.3' into issue-264-improve-ty…
Mar 2, 2022
9e39add
ISSUE #264
Mar 2, 2022
38e7898
ISSUE #264
Mar 3, 2022
90ec43b
ISSUE #264
Mar 3, 2022
4117f50
ISSUE #224
Mar 3, 2022
655dd9a
Merge remote-tracking branch 'origin/0.5.3' into issue-264-improve-ty…
Mar 3, 2022
cf04895
ISSUE #186
Mar 3, 2022
0a372af
Merge pull request #265 from minos-framework/issue-264-improve-typehi…
Mar 3, 2022
c845e23
Merge pull request #266 from minos-framework/issue-186-avrodataencode…
Mar 3, 2022
33b7036
ISSUE #219
Mar 3, 2022
b3b5699
ISSUE #219
Mar 3, 2022
de306eb
Merge remote-tracking branch 'origin/0.5.3' into issue-219-getitem-ge…
Mar 3, 2022
45e36ad
ISSUE #219
Mar 3, 2022
ba5f73d
ISSUE #219
Mar 3, 2022
024b885
ISSUE #219
Mar 3, 2022
0492c19
ISSUE #219
Mar 3, 2022
b8ab66b
Merge pull request #262 from minos-framework/issue-219-getitem-getattr
Mar 3, 2022
d84afb7
ISSUE #219
Mar 4, 2022
5713e35
ISSUE #200
Mar 4, 2022
92547d9
ISSUE #219
Mar 4, 2022
75fbd6c
ISSUE #219
Mar 4, 2022
a3180b8
ISSUE #?
Mar 4, 2022
20b6c14
ISSUE #272
Mar 4, 2022
a90ec81
Merge pull request #273 from minos-framework/issue-272-resolve-refere…
Mar 4, 2022
7271bb8
v0.5.3
Mar 4, 2022
e8aac78
ISSUE #?
Mar 4, 2022
01eb723
ISSUE #?
Mar 4, 2022
d875151
ISSUE #?
Mar 4, 2022
6148d82
ISSUE #?
Mar 4, 2022
e457d62
ISSUE #?
Mar 4, 2022
5134da9
Merge pull request #185 from minos-framework/0.5.3
Mar 4, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion packages/core/minos-microservice-aggregate/HISTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,4 +76,12 @@
* Add `get_all` method to `RootEntity` and `SnapshotRepository` to get all the stored instance on the repository.
* Rename `SnapshotService` command topics to avoid collisions with application-level topics.
* Rename `TransactionService` command topics to avoid collisions with application-level topics.
* Minor changes.
* Minor changes.

0.5.3 (2022-03-04)
------------------

* Add `RefException` to be raised when some reference cannot be resolved.
* Improve attribute and item accessors of `Ref`, `Event` and `FieldDiffContainer`
* Deprecate `Event.get_one` in favor of `Event.get_field`.
* Deprecate `Event.get_all` in favor of `Event.get_fields`.
2 changes: 1 addition & 1 deletion packages/core/minos-microservice-aggregate/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
.PHONY: docs
.PHONY: docs dist

lint:
poetry run flake8
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
__author__ = "Minos Framework Devs"
__email__ = "hey@minos.run"
__version__ = "0.5.2"
__version__ = "0.5.3"

from .actions import (
Action,
Expand Down Expand Up @@ -42,6 +42,7 @@
EventRepositoryConflictException,
EventRepositoryException,
NotFoundException,
RefException,
SnapshotRepositoryConflictException,
SnapshotRepositoryException,
TransactionNotFoundException,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ def from_diff(cls: Type[T], event: Event, *args, **kwargs) -> T:
version=event.version,
created_at=event.created_at,
updated_at=event.created_at,
**event.get_all(),
**event.get_fields(),
**kwargs,
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
annotations,
)

import logging
from typing import (
Any,
Generic,
Expand Down Expand Up @@ -39,7 +40,11 @@
from ...contextvars import (
IS_REPOSITORY_SERIALIZATION_CONTEXT_VAR,
)
from ...exceptions import (
RefException,
)

logger = logging.getLogger(__name__)
MT = TypeVar("MT", bound=Model)


Expand All @@ -56,13 +61,55 @@ def __init__(self, data: Union[MT, UUID], *args, broker_pool: BrokerClientPool =

self._broker_pool = broker_pool

def __setitem__(self, key: str, value: Any) -> None:
try:
return super().__setitem__(key, value)
except KeyError as exc:
if key == "uuid":
self.data = value
return

try:
self.data[key] = value
except Exception:
raise exc

def __getitem__(self, item: str) -> Any:
try:
return super().__getitem__(item)
except KeyError as exc:
if item == "uuid":
return self.uuid

try:
return self.data[item]
except Exception:
raise exc

def __setattr__(self, key: str, value: Any) -> None:
try:
return super().__setattr__(key, value)
except AttributeError as exc:
if key == "uuid":
self.data = value
return

try:
setattr(self.data, key, value)
except Exception:
raise exc

def __getattr__(self, item: str) -> Any:
try:
return super().__getattr__(item)
except AttributeError as exc:
if item != "data":
if item == "data":
raise exc

try:
return getattr(self.data, item)
raise exc
except Exception:
raise exc

@property
def int(self) -> int:
Expand Down Expand Up @@ -146,6 +193,14 @@ def uuid(self) -> UUID:
return self.data
return self.data.uuid

@uuid.setter
def uuid(self, value: UUID) -> None:
"""Set the uuid that identifies the ``Model``.

:return: This method does not return anything.
"""
raise RuntimeError("The 'uuid' must be set through the '__setattr__' method.") # pragma: no cover

@property
def data_cls(self) -> Optional[type]:
"""Get data class if available.
Expand Down Expand Up @@ -178,6 +233,8 @@ async def resolve(self, force: bool = False, **kwargs) -> None:
@staticmethod
async def _get_response(broker: BrokerClient, **kwargs) -> MT:
message = await broker.receive(**kwargs)
if not message.ok:
raise RefException(f"The received message is not ok: {message!r}")
return message.content

@property
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import logging
from asyncio import (
gather,
)
Expand Down Expand Up @@ -29,13 +30,18 @@
BrokerMessageV1Payload,
)

from ...exceptions import (
RefException,
)
from .extractors import (
RefExtractor,
)
from .injectors import (
RefInjector,
)

logger = logging.getLogger(__name__)


class RefResolver:
"""Ref Resolver class."""
Expand Down Expand Up @@ -76,5 +82,10 @@ async def _query(self, references: dict[str, set[UUID]]) -> dict[UUID, Model]:

@staticmethod
async def _get_response(broker: BrokerClient, count: int, **kwargs) -> Iterable[Model]:
messages = [message async for message in broker.receive_many(count, **kwargs)]
messages = list()
async for message in broker.receive_many(count, **kwargs):
if not message.ok:
raise RefException(f"The received message is not ok: {message!r}")
messages.append(message)

return chain(*(message.content for message in messages))
Original file line number Diff line number Diff line change
Expand Up @@ -93,10 +93,10 @@ def __init__(

self._mapper = _build_mapper(self._fields)

def __getattr__(self, item: str) -> Any:
def __getitem__(self, item: str) -> Any:
try:
return super().__getattr__(item)
except AttributeError as exc:
return super().__getitem__(item)
except KeyError as exc:
try:
return self.get_one(item)
except Exception:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
)

import logging
import warnings
from datetime import (
datetime,
)
Expand Down Expand Up @@ -64,20 +65,40 @@ def simplified_name(self) -> str:
def __lt__(self, other: Any) -> bool:
return isinstance(other, type(self)) and self.version < other.version

def __getattr__(self, item: str) -> Any:
def __getitem__(self, item: str) -> Any:
try:
return super().__getattr__(item)
except AttributeError as exc:
return super().__getitem__(item)
except KeyError as exc:
if item != "fields_diff":
try:
return self.get_one(item)
return self.get_field(item)
except Exception:
raise exc
raise exc

def __getattr__(self, item: str) -> Any:
try:
return super().__getattr__(item)
except AttributeError as exc:
try:
return self[item]
except Exception:
raise exc

def get_one(self, name: str, return_diff: bool = False) -> Union[FieldDiff, Any, list[FieldDiff], list[Any]]:
"""Get first field diff with given name.

:param name: The name of the field diff.
:param return_diff: If ``True`` the result is returned as field diff instances, otherwise the result is
returned as value instances.
:return: A ``FieldDiff`` instance.
"""
warnings.warn("get_one() method is deprecated by get_field() and will be removed soon.", DeprecationWarning)
return self.get_field(name, return_diff)

def get_field(self, name: str, return_diff: bool = False) -> Union[FieldDiff, Any, list[FieldDiff], list[Any]]:
"""Get first field diff with given name.

:param name: The name of the field diff.
:param return_diff: If ``True`` the result is returned as field diff instances, otherwise the result is
returned as value instances.
Expand All @@ -88,6 +109,16 @@ def get_one(self, name: str, return_diff: bool = False) -> Union[FieldDiff, Any,
def get_all(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, list[FieldDiff], list[Any]]]:
"""Get all field diffs with given name.

:param return_diff: If ``True`` the result is returned as field diff instances, otherwise the result is
returned as value instances.
:return: A list of ``FieldDiff`` instances.
"""
warnings.warn("get_all() method is deprecated by get_fields() and will be removed soon.", DeprecationWarning)
return self.get_fields(return_diff)

def get_fields(self, return_diff: bool = False) -> dict[str, Union[FieldDiff, Any, list[FieldDiff], list[Any]]]:
"""Get all field diffs with given name.

:param return_diff: If ``True`` the result is returned as field diff instances, otherwise the result is
returned as value instances.
:return: A list of ``FieldDiff`` instances.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from .entities import (
RootEntity,
)
from .models import (
from .events import (
Event,
)

Expand Down Expand Up @@ -73,3 +73,7 @@ class AlreadyDeletedException(SnapshotRepositoryException):

class ValueObjectException(AggregateException):
"""If an attribute of an immutable class is modified, this exception will be raised"""


class RefException(AggregateException):
"""Exception to be raised when some reference can not be resolved."""
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,8 @@
class ValueObject(DeclarativeModel):
"""Value Object class."""

def __setattr__(self, key: str, value: Any):
if key.startswith("_"):
super().__setattr__(key, value)
else:
raise ValueObjectException("modification of an immutable value object not allowed")
def __setitem__(self, key: str, value: Any) -> None:
raise ValueObjectException("modification of an immutable value object not allowed")


T = TypeVar("T", bound=Model)
Expand Down
Loading