2222 inject ,
2323)
2424
25- from minos .aggregate .events import (
25+ from minos .common import (
26+ NULL_DATETIME ,
27+ NULL_UUID ,
28+ DeclarativeModel ,
29+ NotProvidedException ,
30+ )
31+
32+ from ..events import (
2633 Event ,
2734 EventEntry ,
2835 EventRepository ,
2936 IncrementalFieldDiff ,
3037)
31- from minos . aggregate .exceptions import (
38+ from . .exceptions import (
3239 EventRepositoryException ,
3340)
34- from minos . aggregate .queries import (
41+ from . .queries import (
3542 _Condition ,
3643 _Ordering ,
3744)
38- from minos . aggregate .snapshots import (
45+ from . .snapshots import (
3946 SnapshotRepository ,
4047)
41- from minos .common import (
42- NULL_DATETIME ,
43- NULL_UUID ,
44- DeclarativeModel ,
45- NotProvidedException ,
46- )
4748
4849logger = logging .getLogger (__name__ )
4950
@@ -83,46 +84,74 @@ def __init__(
8384 version : int = 0 ,
8485 created_at : datetime = NULL_DATETIME ,
8586 updated_at : datetime = NULL_DATETIME ,
86- _repository : EventRepository = Provide ["event_repository" ],
87- _snapshot : SnapshotRepository = Provide ["snapshot_repository" ],
87+ _event_repository : EventRepository = Provide ["event_repository" ],
88+ _snapshot_repository : SnapshotRepository = Provide ["snapshot_repository" ],
8889 ** kwargs ,
8990 ):
9091
9192 super ().__init__ (version , created_at , updated_at , * args , uuid = uuid , ** kwargs )
9293
93- if _repository is None or isinstance (_repository , Provide ):
94- raise NotProvidedException ("An event repository instance is required." )
95- if _snapshot is None or isinstance (_snapshot , Provide ):
96- raise NotProvidedException ("A snapshot instance is required." )
94+ if _event_repository is None or isinstance (_event_repository , Provide ):
95+ raise NotProvidedException (f"A { EventRepository !r } instance is required." )
96+ if _snapshot_repository is None or isinstance (_snapshot_repository , Provide ):
97+ raise NotProvidedException (f "A { SnapshotRepository !r } instance is required." )
9798
98- self ._repository = _repository
99- self ._snapshot = _snapshot
99+ self ._event_repository = _event_repository
100+ self ._snapshot_repository = _snapshot_repository
100101
101102 @classmethod
102103 @inject
103104 async def get (
104- cls : Type [T ], uuid : UUID , _snapshot : SnapshotRepository = Provide ["snapshot_repository" ], ** kwargs
105+ cls : Type [T ], uuid : UUID , * , _snapshot_repository : SnapshotRepository = Provide ["snapshot_repository" ], ** kwargs
105106 ) -> T :
106107 """Get one instance from the database based on its identifier.
107108
108109 :param uuid: The identifier of the instance.
109- :param _snapshot : Snapshot to be set to the root entity.
110+ :param _snapshot_repository : Snapshot to be set to the root entity.
110111 :return: A ``RootEntity`` instance.
111112 """
112- if _snapshot is None or isinstance (_snapshot , Provide ):
113- raise NotProvidedException ("A snapshot instance is required." )
113+ if _snapshot_repository is None or isinstance (_snapshot_repository , Provide ):
114+ raise NotProvidedException (f "A { SnapshotRepository !r } instance is required." )
114115
115116 # noinspection PyTypeChecker
116- return await _snapshot .get (cls .classname , uuid , _snapshot = _snapshot , ** kwargs )
117+ return await _snapshot_repository .get (cls .classname , uuid , _snapshot_repository = _snapshot_repository , ** kwargs )
117118
118119 @classmethod
119120 @inject
120- async def find (
121+ def get_all (
122+ cls : Type [T ],
123+ ordering : Optional [_Ordering ] = None ,
124+ limit : Optional [int ] = None ,
125+ * ,
126+ _snapshot_repository : SnapshotRepository = Provide ["snapshot_repository" ],
127+ ** kwargs ,
128+ ) -> AsyncIterator [T ]:
129+ """Get all instance from the database.
130+
131+ :param ordering: Optional argument to return the instance with specific ordering strategy. The default behaviour
132+ is to retrieve them without any order pattern.
133+ :param limit: Optional argument to return only a subset of instances. The default behaviour is to return all the
134+ instances that meet the given condition.
135+ :param _snapshot_repository: Snapshot to be set to the root entity.
136+ :return: A ``RootEntity`` instance.
137+ """
138+ if _snapshot_repository is None or isinstance (_snapshot_repository , Provide ):
139+ raise NotProvidedException (f"A { SnapshotRepository !r} instance is required." )
140+
141+ # noinspection PyTypeChecker
142+ return _snapshot_repository .get_all (
143+ cls .classname , ordering , limit , _snapshot_repository = _snapshot_repository , ** kwargs
144+ )
145+
146+ @classmethod
147+ @inject
148+ def find (
121149 cls : Type [T ],
122150 condition : _Condition ,
123151 ordering : Optional [_Ordering ] = None ,
124152 limit : Optional [int ] = None ,
125- _snapshot : SnapshotRepository = Provide ["snapshot_repository" ],
153+ * ,
154+ _snapshot_repository : SnapshotRepository = Provide ["snapshot_repository" ],
126155 ** kwargs ,
127156 ) -> AsyncIterator [T ]:
128157 """Find a collection of instances based on a given ``Condition``.
@@ -132,16 +161,15 @@ async def find(
132161 is to retrieve them without any order pattern.
133162 :param limit: Optional argument to return only a subset of instances. The default behaviour is to return all the
134163 instances that meet the given condition.
135- :param _snapshot : Snapshot to be set to the instances.
164+ :param _snapshot_repository : Snapshot to be set to the instances.
136165 :return: An asynchronous iterator of ``RootEntity`` instances.
137166 """
138- if _snapshot is None or isinstance (_snapshot , Provide ):
139- raise NotProvidedException ("A snapshot instance is required." )
167+ if _snapshot_repository is None or isinstance (_snapshot_repository , Provide ):
168+ raise NotProvidedException (f "A { SnapshotRepository !r } instance is required." )
140169 # noinspection PyTypeChecker
141- iterable = _snapshot .find (cls .classname , condition , ordering , limit , _snapshot = _snapshot , ** kwargs )
142- # noinspection PyTypeChecker
143- async for instance in iterable :
144- yield instance
170+ return _snapshot_repository .find (
171+ cls .classname , condition , ordering , limit , _snapshot_repository = _snapshot_repository , ** kwargs
172+ )
145173
146174 @classmethod
147175 async def create (cls : Type [T ], * args , ** kwargs ) -> T :
@@ -171,7 +199,7 @@ async def create(cls: Type[T], *args, **kwargs) -> T:
171199 instance : T = cls (* args , ** kwargs )
172200
173201 event = Event .from_root_entity (instance )
174- entry = await instance ._repository .submit (event )
202+ entry = await instance ._event_repository .submit (event )
175203
176204 instance ._update_from_repository_entry (entry )
177205
@@ -201,12 +229,14 @@ async def update(self: T, **kwargs) -> T:
201229 for key , value in kwargs .items ():
202230 setattr (self , key , value )
203231
204- previous = await self .get (self .uuid , _repository = self ._repository , _snapshot = self ._snapshot )
232+ previous = await self .get (
233+ self .uuid , _event_repository = self ._event_repository , _snapshot_repository = self ._snapshot_repository
234+ )
205235 event = self .diff (previous )
206236 if not len (event .fields_diff ):
207237 return self
208238
209- entry = await self ._repository .submit (event )
239+ entry = await self ._event_repository .submit (event )
210240
211241 self ._update_from_repository_entry (entry )
212242
@@ -234,17 +264,23 @@ async def save(self) -> None:
234264 if k not in {"uuid" , "version" , "created_at" , "updated_at" }
235265 }
236266 if is_creation :
237- new = await self .create (** values , _repository = self ._repository , _snapshot = self ._snapshot )
267+ new = await self .create (
268+ ** values , _event_repository = self ._event_repository , _snapshot_repository = self ._snapshot_repository
269+ )
238270 self ._fields |= new .fields
239271 else :
240- await self .update (** values , _repository = self ._repository , _snapshot = self ._snapshot )
272+ await self .update (
273+ ** values , _event_repository = self ._event_repository , _snapshot_repository = self ._snapshot_repository
274+ )
241275
242276 async def refresh (self ) -> None :
243277 """Refresh the state of the given instance.
244278
245279 :return: This method does not return anything.
246280 """
247- new = await type (self ).get (self .uuid , _repository = self ._repository , _snapshot = self ._snapshot )
281+ new = await self .get (
282+ self .uuid , _event_repository = self ._event_repository , _snapshot_repository = self ._snapshot_repository
283+ )
248284 self ._fields |= new .fields
249285
250286 async def delete (self ) -> None :
@@ -253,7 +289,7 @@ async def delete(self) -> None:
253289 :return: This method does not return anything.
254290 """
255291 event = Event .from_deleted_root_entity (self )
256- entry = await self ._repository .submit (event )
292+ entry = await self ._event_repository .submit (event )
257293
258294 self ._update_from_repository_entry (entry )
259295
0 commit comments