From fe8c5964caa4350fd88a83688c97448aec4ac0f4 Mon Sep 17 00:00:00 2001 From: Xibo Ning Date: Jan 17 2017 20:08:26 +0000 Subject: fix method names to listPackagesSimple and countAndFilterResults. 1. replace listPackages call by listPackagesSimple. 2. replace filterResults by countAndFilterResults. --- diff --git a/cli/koji b/cli/koji index d1d70c5..9f67396 100755 --- a/cli/koji +++ b/cli/koji @@ -3226,7 +3226,10 @@ def anon_handle_list_pkgs(options, session, args): opts['event'] = event['id'] event['timestr'] = time.asctime(time.localtime(event['ts'])) print "Querying at event %(id)i (%(timestr)s)" % event - data = session.listPackages(**opts) + if 'tagID' in opts or 'pkgID' in opts or 'userID' in opts: + data = session.listPackages(**opts) + else: + data = session.listPackagesSimple(**opts) if not data: print "(no matching packages)" return 1 @@ -6266,7 +6269,10 @@ def handle_set_pkg_owner_global(options, session, args): continue to_change.extend(entries) if not packages and options.old_user: - entries = session.listPackages(**opts) + if 'tagID' in opts or 'pkgID' in opts or 'userID' in opts: + entries = session.listPackages(**opts) + else: + entries = session.listPackagesSimple(**opts) if not entries: print "No data for user %s" % old_user['name'] return 1 diff --git a/hub/kojihub.py b/hub/kojihub.py index 1ccb9ed..6a74cc4 100644 --- a/hub/kojihub.py +++ b/hub/kojihub.py @@ -9861,7 +9861,7 @@ class RootExports(object): return results - def listFlatPackages(self, prefix=None, queryOpts=None): + def listPackagesSimple(self, prefix=None, queryOpts=None): """list packages that starts with prefix and are filted and ordered by queryOpts. @@ -9875,16 +9875,18 @@ class RootExports(object): 'package_name' and 'package_id'. """ _escape = lambda _str: _str.replace('_', '#_').replace('%', '#%') - + fields = (('package.id', 'package_id'), + ('package.name', 'package_name')) if prefix is None: clauses = None else: - clauses = ["""package.name ILIKE '%s%%' ESCAPE '#'""" - % _escape(prefix)] + prefix = _escape(prefix) + clauses = ["""package.name ILIKE '%(prefix)s%%' ESCAPE '#'"""] query = QueryProcessor( - tables=['package'], clauses=clauses, - columns=['package.id', 'package.name'], opts=queryOpts) - return query.executeOne() + tables=['package'], clauses=clauses, values=locals(), + columns=[f[0] for f in fields], aliases=[f[1] for f in fields], + opts=queryOpts) + return query.execute() def checkTagPackage(self,tag,pkg): @@ -10562,31 +10564,11 @@ class RootExports(object): NULL higher than all other values; default to True for consistency with database sorts """ - filterOpts = kw.pop('filterOpts', {}) - - results = getattr(self, methodName)(*args, **kw) - if results is None: - return None - elif not isinstance(results, list): - raise TypeError, '%s() did not return a list' % methodName - - order = filterOpts.get('order') - if order: - results.sort(self._sortByKeyFunc(order, filterOpts.get('noneGreatest', True))) - - offset = filterOpts.get('offset') - if offset is not None: - results = results[offset:] - limit = filterOpts.get('limit') - if limit is not None: - results = results[:limit] - - return results + return self.countAndFilterResults(methodName, *args, **kw)[1] - def CountAndFilterResults(self, methodName, *args, **kw): - """ Replacement of the method filterResults when we need both the total - result count and the filtered result. + def countAndFilterResults(self, methodName, *args, **kw): + """Filter results by a given name and count total result account. Execute the XML-RPC method with the given name and filter the results based on the options specified in the keywork option "filterOpts". diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py index 7bcd82a..9871b31 100644 --- a/www/kojiweb/index.py +++ b/www/kojiweb/index.py @@ -352,8 +352,7 @@ def notificationedit(environ, notificationID): values = _initValues(environ, 'Edit Notification') values['notif'] = notification - packages = server.listPackages() - packages.sort(kojiweb.util.sortByKeyFunc('package_name')) + packages = server.listPackagesSimple(queryOpts={'order': 'package_name'}) values['packages'] = packages tags = server.listTags(queryOpts={'order': 'name'}) values['tags'] = tags @@ -397,8 +396,7 @@ def notificationcreate(environ): values = _initValues(environ, 'Edit Notification') values['notif'] = None - packages = server.listPackages() - packages.sort(kojiweb.util.sortByKeyFunc('package_name')) + packages = server.listPackagesSimple(queryOpts={'order': 'package_name'}) values['packages'] = packages tags = server.listTags(queryOpts={'order': 'name'}) values['tags'] = tags diff --git a/www/lib/kojiweb/util.py b/www/lib/kojiweb/util.py index 82e572f..03d0272 100644 --- a/www/lib/kojiweb/util.py +++ b/www/lib/kojiweb/util.py @@ -331,12 +331,11 @@ def paginateResults(server, values, methodName, args=None, kw=None, if not dataName: raise StandardError, 'dataName must be specified' - totalRows = server.count(methodName, *args, **kw) - kw['filterOpts'] = {'order': order, 'offset': start, 'limit': pageSize} - data = server.filterResults(methodName, *args, **kw) + + totalRows, data = server.countAndFilterResults(methodName, *args, **kw) count = len(data) _populateValues(values, dataName, prefix, data, totalRows, start, count, pageSize, order)