rb-commons 0.3.2__py3-none-any.whl → 0.3.4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rb_commons/orm/managers.py +42 -3
- {rb_commons-0.3.2.dist-info → rb_commons-0.3.4.dist-info}/METADATA +1 -1
- {rb_commons-0.3.2.dist-info → rb_commons-0.3.4.dist-info}/RECORD +5 -5
- {rb_commons-0.3.2.dist-info → rb_commons-0.3.4.dist-info}/WHEEL +0 -0
- {rb_commons-0.3.2.dist-info → rb_commons-0.3.4.dist-info}/top_level.txt +0 -0
rb_commons/orm/managers.py
CHANGED
@@ -181,19 +181,28 @@ class BaseManager(Generic[ModelType]):
|
|
181
181
|
return await self._smart_commit(obj)
|
182
182
|
|
183
183
|
@with_transaction_error_handling
|
184
|
-
async def delete(self):
|
184
|
+
async def delete(self, instance: ModelType) -> bool:
|
185
185
|
"""
|
186
186
|
Delete object(s) with flexible filtering options
|
187
|
+
- If `instance` is provided, delete that single instance.
|
188
|
+
- If `instance` is not provided, delete according to self.filters.
|
187
189
|
|
190
|
+
:arg instance: Model instance to delete.
|
188
191
|
:return: Number of deleted records or None
|
189
192
|
"""
|
193
|
+
|
194
|
+
if instance is not None:
|
195
|
+
await self.session.delete(instance)
|
196
|
+
await self.session.commit()
|
197
|
+
return True
|
198
|
+
|
190
199
|
self._ensure_filtered()
|
191
200
|
|
192
201
|
try:
|
193
202
|
delete_stmt = delete(self.model).where(and_(*self.filters))
|
194
|
-
|
203
|
+
await self.session.execute(delete_stmt)
|
195
204
|
await self.session.commit()
|
196
|
-
return
|
205
|
+
return True
|
197
206
|
except NoResultFound:
|
198
207
|
return False
|
199
208
|
|
@@ -273,6 +282,36 @@ class BaseManager(Generic[ModelType]):
|
|
273
282
|
await self.session.flush()
|
274
283
|
return await self._smart_commit(instance)
|
275
284
|
|
285
|
+
@with_transaction_error_handling
|
286
|
+
async def lazy_save(self, instance: ModelType, load_relations: Sequence[str] = None) -> Optional[ModelType]:
|
287
|
+
self.session.add(instance)
|
288
|
+
await self.session.flush()
|
289
|
+
await self._smart_commit(instance)
|
290
|
+
|
291
|
+
if load_relations is None:
|
292
|
+
mapper = inspect(self.model)
|
293
|
+
load_relations = [rel.key for rel in mapper.relationships]
|
294
|
+
|
295
|
+
if not load_relations:
|
296
|
+
return instance
|
297
|
+
|
298
|
+
stmt = select(self.model).filter_by(id=instance.id)
|
299
|
+
|
300
|
+
for rel in load_relations:
|
301
|
+
stmt = stmt.options(selectinload(getattr(self.model, rel)))
|
302
|
+
|
303
|
+
result = await self.session.execute(stmt)
|
304
|
+
loaded_instance = result.scalar_one_or_none()
|
305
|
+
|
306
|
+
if loaded_instance is None:
|
307
|
+
raise NotFoundException(
|
308
|
+
message="Object saved but could not be retrieved with relationships",
|
309
|
+
status=404,
|
310
|
+
code="0001",
|
311
|
+
)
|
312
|
+
|
313
|
+
return loaded_instance
|
314
|
+
|
276
315
|
async def is_exists(self, **kwargs) -> bool:
|
277
316
|
stmt = select(self.model).filter_by(**kwargs)
|
278
317
|
result = await self.session.execute(stmt)
|
@@ -11,14 +11,14 @@ rb_commons/http/consul.py,sha256=Ioq72VD1jGwoC96set7n2SgxN40olzI-myA2lwKkYi4,186
|
|
11
11
|
rb_commons/http/exceptions.py,sha256=EGRMr1cRgiJ9Q2tkfANbf0c6-zzXf1CD6J3cmCaT_FA,1885
|
12
12
|
rb_commons/orm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
rb_commons/orm/exceptions.py,sha256=1aMctiEwrPjyehoXVX1l6ML5ZOhmDkmBISzlTD5ey1Y,509
|
14
|
-
rb_commons/orm/managers.py,sha256=
|
14
|
+
rb_commons/orm/managers.py,sha256=PyvJqlDo4eK_89XzTgrmOQByTTO88pPHyCdNA5bLLa8,12675
|
15
15
|
rb_commons/permissions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
16
|
rb_commons/permissions/role_permissions.py,sha256=3ZTwKclavAKSheO58fybo2uLDeTkd-iluTY7hUEjRPk,957
|
17
17
|
rb_commons/schemes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
18
18
|
rb_commons/schemes/jwt.py,sha256=F66JJDhholuOPPzlKeoC6f1TL4gXg4oRUrV5yheNpyo,1675
|
19
19
|
rb_commons/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
20
20
|
rb_commons/utils/media.py,sha256=KNY_9SdRa3Rp7d3B1tZaXkhmzVa65RcS62BYwZP1bVM,332
|
21
|
-
rb_commons-0.3.
|
22
|
-
rb_commons-0.3.
|
23
|
-
rb_commons-0.3.
|
24
|
-
rb_commons-0.3.
|
21
|
+
rb_commons-0.3.4.dist-info/METADATA,sha256=My_CBWU0ri8LI2MkU6eO7VCuI3g24pWoILzw1yZ3C4I,6570
|
22
|
+
rb_commons-0.3.4.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
23
|
+
rb_commons-0.3.4.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
|
24
|
+
rb_commons-0.3.4.dist-info/RECORD,,
|
File without changes
|
File without changes
|