What once was an 800 query job is now a 17 query job, used to produce a 1.5M+ file, now produces one around 100K. Hurray efficiency

This commit is contained in:
Michael McGrath 2008-03-10 18:22:01 -05:00
parent 99ddafc6ad
commit 072f622876
2 changed files with 26 additions and 4 deletions

View file

@ -321,7 +321,15 @@ class MakeShellAccounts(BaseClient):
params = {'search' : search}
request = self.send_request('group/list', auth=True, input=params)
self.groups = request['groups']
self.memberships = request['memberships']
memberships = {}
for group in self.groups:
memberships[group['name']] = []
try:
for member in request['memberships'][u'%s' % group['id']]:
memberships[group['name']].append({'person_id': member})
except KeyError:
pass
self.memberships = memberships
self.valid_groups()
return self.groups

View file

@ -3,6 +3,7 @@ from turbogears import controllers, expose, paginate, identity, redirect, widget
from turbogears.database import session
import cherrypy
import sqlalchemy
import fas
from fas.auth import *
@ -253,12 +254,25 @@ class Group(controllers.Controller):
groups = []
re_search = re.sub(r'\*', r'%', search).lower()
results = Groups.query.filter(Groups.name.like(re_search)).order_by('name').all()
# memberships = session.query(PersonRoles).order_by(PersonRoles.sponsor_id).all()
membersql = sqlalchemy.select([PersonRoles.c.person_id, PersonRoles.c.group_id]).order_by(PersonRoles.c.group_id)
members = membersql.execute()
for member in members:
try:
memberships[member[1]].append(member[0])
except KeyError:
memberships[member[1]]=[member[0]]
for group in results:
if canViewGroup(person, group):
groups.append(group)
if self.jsonRequest():
# Added an efficiency
memberships[group.name] = group.approved_roles
# if self.jsonRequest():
# Adds efficiency
#grp_members = session.query(Groups).filter_by(name=group.name).all()
# grp_members = session.query(PersonRoles).filter_by(group_id=group.id).all()
# memberships[group.name] = []
# for member in grp_members:
# memberships[group.name].append({'person_id': member.person_id})
# memberships[group.name] = group.approved_roles
if not len(groups):
turbogears.flash(_("No Groups found matching '%s'") % search)
return dict(groups=groups, search=search, memberships=memberships)