rb-commons 0.4.6__tar.gz → 0.4.8__tar.gz
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-0.4.6 → rb_commons-0.4.8}/PKG-INFO +1 -1
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/orm/managers.py +33 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons.egg-info/PKG-INFO +1 -1
- {rb_commons-0.4.6 → rb_commons-0.4.8}/setup.py +1 -1
- {rb_commons-0.4.6 → rb_commons-0.4.8}/README.md +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/broker/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/broker/consumer.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/configs/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/configs/config.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/configs/injections.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/configs/rabbitmq.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/http/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/http/base_api.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/http/consul.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/http/exceptions.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/orm/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/orm/exceptions.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/orm/services.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/permissions/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/permissions/role_permissions.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/schemes/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/schemes/jwt.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/utils/__init__.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons/utils/media.py +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons.egg-info/SOURCES.txt +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons.egg-info/dependency_links.txt +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons.egg-info/requires.txt +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/rb_commons.egg-info/top_level.txt +0 -0
- {rb_commons-0.4.6 → rb_commons-0.4.8}/setup.cfg +0 -0
@@ -387,6 +387,39 @@ class BaseManager(Generic[ModelType]):
|
|
387
387
|
if not self.session.in_transaction():
|
388
388
|
await self.session.commit()
|
389
389
|
|
390
|
+
def has_relation(self, relation_name: str) -> 'BaseManager[ModelType]':
|
391
|
+
"""
|
392
|
+
Check if a relationship exists between models using an EXISTS subquery.
|
393
|
+
|
394
|
+
:param relation_name Name of the relationship to check. Must be a valid relationship
|
395
|
+
defined in the model.
|
396
|
+
|
397
|
+
:return BaseManager[ModelType]: Self instance for method chaining.
|
398
|
+
|
399
|
+
:raise DatabaseException: If there's an error constructing the subquery.
|
400
|
+
:raise InternalException: If there's an unexpected error in relationship handling.
|
401
|
+
|
402
|
+
Notes:
|
403
|
+
- The relationship must be properly defined in the SQLAlchemy model
|
404
|
+
- Uses a non-correlated EXISTS subquery for better performance
|
405
|
+
- Silently continues if the relationship doesn't exist
|
406
|
+
"""
|
407
|
+
# Get the relationship property
|
408
|
+
relationship = getattr(self.model, relation_name)
|
409
|
+
|
410
|
+
# Create subquery using select
|
411
|
+
subquery = (
|
412
|
+
select(1)
|
413
|
+
.select_from(relationship.property.mapper.class_)
|
414
|
+
.where(relationship.property.primaryjoin)
|
415
|
+
.exists()
|
416
|
+
)
|
417
|
+
|
418
|
+
# Add the exists condition to filters
|
419
|
+
self.filters.append(subquery)
|
420
|
+
|
421
|
+
return self
|
422
|
+
|
390
423
|
def model_to_dict(self, instance: ModelType, exclude: set = None):
|
391
424
|
exclude = exclude or set()
|
392
425
|
|
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
|
|
5
5
|
|
6
6
|
setup(
|
7
7
|
name="rb-commons",
|
8
|
-
version="0.4.
|
8
|
+
version="0.4.8",
|
9
9
|
author="Abdulvoris",
|
10
10
|
author_email="erkinovabdulvoris101@gmail.com",
|
11
11
|
description="Commons of project and simplified orm based on sqlalchemy.",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|