rb-commons 0.3.2__py3-none-any.whl → 0.3.3__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.
@@ -273,6 +273,36 @@ class BaseManager(Generic[ModelType]):
273
273
  await self.session.flush()
274
274
  return await self._smart_commit(instance)
275
275
 
276
+ @with_transaction_error_handling
277
+ async def lazy_save(self, instance: ModelType, load_relations: Sequence[str] = None) -> Optional[ModelType]:
278
+ self.session.add(instance)
279
+ await self.session.flush()
280
+ await self._smart_commit(instance)
281
+
282
+ if load_relations is None:
283
+ mapper = inspect(self.model)
284
+ load_relations = [rel.key for rel in mapper.relationships]
285
+
286
+ if not load_relations:
287
+ return instance
288
+
289
+ stmt = select(self.model).filter_by(id=instance.id)
290
+
291
+ for rel in load_relations:
292
+ stmt = stmt.options(selectinload(getattr(self.model, rel)))
293
+
294
+ result = await self.session.execute(stmt)
295
+ loaded_instance = result.scalar_one_or_none()
296
+
297
+ if loaded_instance is None:
298
+ raise NotFoundException(
299
+ message="Object saved but could not be retrieved with relationships",
300
+ status=404,
301
+ code="0001",
302
+ )
303
+
304
+ return loaded_instance
305
+
276
306
  async def is_exists(self, **kwargs) -> bool:
277
307
  stmt = select(self.model).filter_by(**kwargs)
278
308
  result = await self.session.execute(stmt)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rb-commons
3
- Version: 0.3.2
3
+ Version: 0.3.3
4
4
  Summary: Commons of project and simplified orm based on sqlalchemy.
5
5
  Home-page: https://github.com/RoboSell-organization/rb-commons
6
6
  Author: Abdulvoris
@@ -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=LyskLC802SanjtETgdw7vX1MwXPj2hzScGVnfGvDWj0,11273
14
+ rb_commons/orm/managers.py,sha256=RorQhyxTSHT7GtXSS2mcNLXnQvdFYqvC81FQP1daZHI,12312
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.2.dist-info/METADATA,sha256=4X0sjVssW-hdgOJZ6L9a95ftAvJD0_ORAPhIEDN9mhc,6570
22
- rb_commons-0.3.2.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
23
- rb_commons-0.3.2.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
24
- rb_commons-0.3.2.dist-info/RECORD,,
21
+ rb_commons-0.3.3.dist-info/METADATA,sha256=ht28sKO-Xurr_E6I7yNoT__AbijGoA_yjlzapvOkBHE,6570
22
+ rb_commons-0.3.3.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
23
+ rb_commons-0.3.3.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
24
+ rb_commons-0.3.3.dist-info/RECORD,,