Revision cf3c2494
Chaque plugin adresse désormais une seule requête à la base de données pour tous les évènements de la page, plutôt qu'une requête par évènement.
git-svn-id: https://vigilo-dev.si.c-s.fr/svn@6291 b22e2e97-25c9-44ff-b637-2e5ceca36478
vigiboard/controllers/vigiboardrequest.py | ||
---|---|---|
30 | 30 |
|
31 | 31 |
from sqlalchemy import not_, and_, asc, desc |
32 | 32 |
from sqlalchemy.sql.expression import or_, null as expr_null, union_all |
33 |
from sqlalchemy.orm import contains_eager |
|
33 | 34 |
|
34 | 35 |
from vigilo.models.session import DBSession |
35 | 36 |
from vigilo.models.tables import Event, CorrEvent, EventHistory, \ |
... | ... | |
101 | 102 |
# Les managers ont accès à tout, les autres sont soumis |
102 | 103 |
# aux vérifications classiques d'accès aux données. |
103 | 104 |
if not is_manager: |
104 |
# user_groups = [ug[0] for ug in user.supitemgroups() if ug[1]] |
|
105 |
# lls_query = lls_query.filter( |
|
106 |
# SUPITEM_GROUP_TABLE.c.idgroup.in_(user_groups) |
|
107 |
# ) |
|
108 |
# host_query = host_query.filter( |
|
109 |
# SUPITEM_GROUP_TABLE.c.idgroup.in_(user_groups) |
|
110 |
# ) |
|
111 | 105 |
|
112 | 106 |
lls_query = lls_query.join( |
113 | 107 |
(GroupHierarchy, |
... | ... | |
143 | 137 |
# Tables sur lesquelles porte la récupération (JOIN) |
144 | 138 |
self.join = [] |
145 | 139 |
|
140 |
# Options à ajouter la requête |
|
141 |
self.option = [] |
|
142 |
|
|
146 | 143 |
# Tables sur lesquelles porte la récupération (OUTER JOIN) |
147 | 144 |
self.outerjoin = [] |
148 | 145 |
|
... | ... | |
247 | 244 |
# query et join ont besoin de referrence |
248 | 245 |
self.req = self.req.query(*self.table) |
249 | 246 |
self.req = self.req.join(*self.join) |
247 |
self.req = self.req.options(*self.option) |
|
250 | 248 |
|
251 | 249 |
# le reste, non |
252 | 250 |
for i in self.outerjoin: |
... | ... | |
305 | 303 |
break |
306 | 304 |
self.join.append(i) |
307 | 305 |
|
306 |
def add_option(self, *argv): |
|
307 |
""" |
|
308 |
Ajoute une ou plusieurs options à la requête. |
|
309 |
|
|
310 |
@param argv: Liste des options à ajouter |
|
311 |
""" |
|
312 |
|
|
313 |
# On vérifie qu'il n'y a pas de doublons |
|
314 |
# dans la liste finale des options. |
|
315 |
|
|
316 |
for i in argv: |
|
317 |
for j in self.option: |
|
318 |
if str(i) == str(j): |
|
319 |
break |
|
320 |
self.option.append(i) |
|
321 |
|
|
322 |
def add_contains_eager(self, relation): |
|
323 |
""" |
|
324 |
Ajoute une option de type contains_eager à la |
|
325 |
requête pour la relation passée en paramètre. |
|
326 |
""" |
|
327 |
self.add_option(contains_eager(relation)) |
|
328 |
|
|
308 | 329 |
def add_outer_join(self, *argv): |
309 | 330 |
""" |
310 | 331 |
Ajoute une ou plusieurs jointures externes à |
Also available in: Unified diff