rb-commons 0.4.3__py3-none-any.whl → 0.4.5__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 +27 -23
- {rb_commons-0.4.3.dist-info → rb_commons-0.4.5.dist-info}/METADATA +1 -1
- {rb_commons-0.4.3.dist-info → rb_commons-0.4.5.dist-info}/RECORD +5 -5
- {rb_commons-0.4.3.dist-info → rb_commons-0.4.5.dist-info}/WHEEL +0 -0
- {rb_commons-0.4.3.dist-info → rb_commons-0.4.5.dist-info}/top_level.txt +0 -0
rb_commons/orm/managers.py
CHANGED
@@ -65,22 +65,29 @@ class BaseManager(Generic[ModelType]):
|
|
65
65
|
return instance
|
66
66
|
|
67
67
|
def _apply_eager_loading(self, stmt, load_all_relations: bool = False):
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
mapper
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
68
|
+
if not load_all_relations:
|
69
|
+
return stmt
|
70
|
+
|
71
|
+
opts = []
|
72
|
+
visited = set()
|
73
|
+
|
74
|
+
def recurse(model, loader=None):
|
75
|
+
mapper = inspect(model)
|
76
|
+
if mapper in visited:
|
77
|
+
return
|
78
|
+
visited.add(mapper)
|
79
|
+
|
80
|
+
for rel in mapper.relationships:
|
81
|
+
attr = getattr(model, rel.key)
|
82
|
+
if loader is None:
|
83
|
+
this_loader = selectinload(attr)
|
84
|
+
else:
|
85
|
+
this_loader = loader.selectinload(attr)
|
86
|
+
opts.append(this_loader)
|
87
|
+
recurse(rel.mapper.class_, this_loader)
|
82
88
|
|
83
|
-
|
89
|
+
recurse(self.model)
|
90
|
+
return stmt.options(*opts)
|
84
91
|
|
85
92
|
def filter(self, **kwargs) -> 'BaseManager[ModelType]':
|
86
93
|
"""
|
@@ -162,16 +169,13 @@ class BaseManager(Generic[ModelType]):
|
|
162
169
|
async def all(self, load_all_relations: bool = False) -> List[ModelType]:
|
163
170
|
self._ensure_filtered()
|
164
171
|
|
165
|
-
|
166
|
-
|
172
|
+
stmt = select(self.model).filter(and_(*self.filters))
|
173
|
+
stmt = self._apply_eager_loading(stmt, load_all_relations)
|
167
174
|
|
168
|
-
result = await self.session.execute(
|
175
|
+
result = await self.session.execute(stmt)
|
169
176
|
rows = result.scalars().all()
|
170
177
|
|
171
|
-
unique_by_pk = {}
|
172
|
-
for obj in rows:
|
173
|
-
unique_by_pk[obj.id] = obj
|
174
|
-
|
178
|
+
unique_by_pk = {obj.id: obj for obj in rows}
|
175
179
|
return list(unique_by_pk.values())
|
176
180
|
|
177
181
|
async def first(self, load_relations: Sequence[str] = None) -> Optional[ModelType]:
|
@@ -221,7 +225,7 @@ class BaseManager(Generic[ModelType]):
|
|
221
225
|
return await self._smart_commit(obj)
|
222
226
|
|
223
227
|
@with_transaction_error_handling
|
224
|
-
async def delete(self, instance: ModelType) -> bool:
|
228
|
+
async def delete(self, instance: ModelType = None) -> bool:
|
225
229
|
"""
|
226
230
|
Delete object(s) with flexible filtering options
|
227
231
|
- If `instance` is provided, delete that single instance.
|
@@ -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=zzCNfxa3yVFfTT2E79TiB-75k_5LlhJv-Y1JMyERNhU,14107
|
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.
|
23
|
-
rb_commons-0.4.
|
24
|
-
rb_commons-0.4.
|
25
|
-
rb_commons-0.4.
|
22
|
+
rb_commons-0.4.5.dist-info/METADATA,sha256=0s_TOBFKNjx1qCOBGjN2I8n5iy352WOKkli73bc1qTQ,6570
|
23
|
+
rb_commons-0.4.5.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
24
|
+
rb_commons-0.4.5.dist-info/top_level.txt,sha256=HPx_WAYo3_fbg1WCeGHsz3wPGio1ucbnrlm2lmqlJog,11
|
25
|
+
rb_commons-0.4.5.dist-info/RECORD,,
|
File without changes
|
File without changes
|