rb-commons 0.5.7__py3-none-any.whl → 0.5.9__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 +24 -3
- {rb_commons-0.5.7.dist-info → rb_commons-0.5.9.dist-info}/METADATA +1 -1
- {rb_commons-0.5.7.dist-info → rb_commons-0.5.9.dist-info}/RECORD +5 -5
- {rb_commons-0.5.7.dist-info → rb_commons-0.5.9.dist-info}/WHEEL +0 -0
- {rb_commons-0.5.7.dist-info → rb_commons-0.5.9.dist-info}/top_level.txt +0 -0
rb_commons/orm/managers.py
CHANGED
@@ -2,7 +2,7 @@ from __future__ import annotations
|
|
2
2
|
|
3
3
|
import uuid
|
4
4
|
from typing import TypeVar, Type, Generic, Optional, List, Dict, Literal, Union, Sequence, Any, Iterable
|
5
|
-
from sqlalchemy import select, delete, update, and_, func, desc, inspect, or_
|
5
|
+
from sqlalchemy import select, delete, update, and_, func, desc, inspect, or_, asc
|
6
6
|
from sqlalchemy.exc import IntegrityError, SQLAlchemyError, NoResultFound
|
7
7
|
from sqlalchemy.ext.asyncio import AsyncSession
|
8
8
|
from sqlalchemy.orm import declarative_base, InstrumentedAttribute, selectinload, RelationshipProperty, Load
|
@@ -403,8 +403,10 @@ class BaseManager(Generic[ModelType]):
|
|
403
403
|
raise NotFoundException("Object does not exist", 404, "0001")
|
404
404
|
return instance
|
405
405
|
|
406
|
-
async def is_exists(self
|
407
|
-
|
406
|
+
async def is_exists(self):
|
407
|
+
self._ensure_filtered()
|
408
|
+
|
409
|
+
stmt = select(self.model).filter(and_(*self.filters))
|
408
410
|
result = await self.session.execute(stmt)
|
409
411
|
return result.scalar_one_or_none() is not None
|
410
412
|
|
@@ -420,6 +422,25 @@ class BaseManager(Generic[ModelType]):
|
|
420
422
|
self._filtered = True
|
421
423
|
return self
|
422
424
|
|
425
|
+
def sort_by(self, tokens: Sequence[str]) -> "BaseManager[ModelType]":
|
426
|
+
"""
|
427
|
+
Dynamically apply ORDER BY clauses based on a list of "field" or "-field" tokens.
|
428
|
+
"""
|
429
|
+
model = self.model
|
430
|
+
|
431
|
+
for tok in tokens:
|
432
|
+
if not tok:
|
433
|
+
continue
|
434
|
+
direction = desc if tok.startswith("-") else asc
|
435
|
+
name = tok.lstrip("-")
|
436
|
+
col = getattr(model, name, None)
|
437
|
+
if col is None:
|
438
|
+
raise InternalException(f"Cannot sort by unknown field '{name}'")
|
439
|
+
|
440
|
+
self._order_by.append(direction(col))
|
441
|
+
|
442
|
+
return self
|
443
|
+
|
423
444
|
def model_to_dict(self, instance: ModelType, exclude: set[str] | None = None):
|
424
445
|
exclude = exclude or set()
|
425
446
|
return {
|
@@ -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=
|
14
|
+
rb_commons/orm/managers.py,sha256=VMu3v-JzSVZ9pN2d4ZcAF6qZyqmBeXZ62kiHUY73v20,17163
|
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=e5Sw5zUcepXOtsrOlFEgp0Kr5lqHF7sVGPRvx0gDw68,1019
|
@@ -20,7 +20,7 @@ rb_commons/schemes/jwt.py,sha256=F66JJDhholuOPPzlKeoC6f1TL4gXg4oRUrV5yheNpyo,167
|
|
20
20
|
rb_commons/schemes/pagination.py,sha256=8VZW1wZGJIPR9jEBUgppZUoB4uqP8ORudHkMwvEJSxg,1866
|
21
21
|
rb_commons/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
22
22
|
rb_commons/utils/media.py,sha256=KNY_9SdRa3Rp7d3B1tZaXkhmzVa65RcS62BYwZP1bVM,332
|
23
|
-
rb_commons-0.5.
|
24
|
-
rb_commons-0.5.
|
25
|
-
rb_commons-0.5.
|
26
|
-
rb_commons-0.5.
|
23
|
+
rb_commons-0.5.9.dist-info/METADATA,sha256=d-yIjeyxJiiYucx5M2Qh3Y_dXSo8wXXeizA3glwLcLo,6570
|
24
|
+
rb_commons-0.5.9.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
|
25
|
+
rb_commons-0.5.9.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
|
26
|
+
rb_commons-0.5.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|