rb-commons 0.4.6__py3-none-any.whl → 0.4.7__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.
@@ -387,6 +387,40 @@ class BaseManager(Generic[ModelType]):
387
387
  if not self.session.in_transaction():
388
388
  await self.session.commit()
389
389
 
390
+ @with_transaction_error_handling
391
+ def has_relation(self, relation_name: str) -> 'BaseManager[ModelType]':
392
+ """
393
+ Check if a relationship exists between models using an EXISTS subquery.
394
+
395
+ :param relation_name Name of the relationship to check. Must be a valid relationship
396
+ defined in the model.
397
+
398
+ :return BaseManager[ModelType]: Self instance for method chaining.
399
+
400
+ :raise DatabaseException: If there's an error constructing the subquery.
401
+ :raise InternalException: If there's an unexpected error in relationship handling.
402
+
403
+ Notes:
404
+ - The relationship must be properly defined in the SQLAlchemy model
405
+ - Uses a non-correlated EXISTS subquery for better performance
406
+ - Silently continues if the relationship doesn't exist
407
+ """
408
+ # Get the relationship property
409
+ relationship = getattr(self.model, relation_name)
410
+
411
+ # Create subquery using select
412
+ subquery = (
413
+ select(1)
414
+ .select_from(relationship.property.mapper.class_)
415
+ .where(relationship.property.primaryjoin)
416
+ .exists()
417
+ )
418
+
419
+ # Add the exists condition to filters
420
+ self.filters.append(subquery)
421
+
422
+ return self
423
+
390
424
  def model_to_dict(self, instance: ModelType, exclude: set = None):
391
425
  exclude = exclude or set()
392
426
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rb-commons
3
- Version: 0.4.6
3
+ Version: 0.4.7
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,7 +11,7 @@ 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=Zgnwy-us4DD3baF6RlOWo91JNcb2vjpfGUZFtDwt5HE,14619
14
+ rb_commons/orm/managers.py,sha256=u9DUyttHcLOf1DmRPmGWZD2n8NgZtYPNGqed-7wqxkY,15980
15
15
  rb_commons/orm/services.py,sha256=71eRcJ4TxZvzNz-hLXo12X4U7PGK54ZfbLAb27AjZi8,1589
16
16
  rb_commons/permissions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  rb_commons/permissions/role_permissions.py,sha256=HL50s5RHW1nk2U3-YTESg0EDGkJDu1vN4QchcfK-L5g,988
@@ -19,7 +19,7 @@ rb_commons/schemes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
19
19
  rb_commons/schemes/jwt.py,sha256=F66JJDhholuOPPzlKeoC6f1TL4gXg4oRUrV5yheNpyo,1675
20
20
  rb_commons/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  rb_commons/utils/media.py,sha256=KNY_9SdRa3Rp7d3B1tZaXkhmzVa65RcS62BYwZP1bVM,332
22
- rb_commons-0.4.6.dist-info/METADATA,sha256=0e-bAen62Rt3yCg7KMClMeeNEu6UeuO05AjbvW5IPkk,6570
23
- rb_commons-0.4.6.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
24
- rb_commons-0.4.6.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
25
- rb_commons-0.4.6.dist-info/RECORD,,
22
+ rb_commons-0.4.7.dist-info/METADATA,sha256=TSSXMDvtz_0selZFbRjV_HLDT4VDh9isAVlkc0M76qQ,6570
23
+ rb_commons-0.4.7.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
24
+ rb_commons-0.4.7.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
25
+ rb_commons-0.4.7.dist-info/RECORD,,