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.
@@ -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
- result = await self.session.execute(delete_stmt)
203
+ await self.session.execute(delete_stmt)
195
204
  await self.session.commit()
196
- return result.rowcount
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rb-commons
3
- Version: 0.3.2
3
+ Version: 0.3.4
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=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.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.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,,