[Pypi-checkins] r948 - trunk/pypi
richard
python-checkins at python.org
Mon Aug 22 07:42:46 CEST 2011
Author: richard
Date: Mon Aug 22 07:42:46 2011
New Revision: 948
Modified:
trunk/pypi/rpc.py
trunk/pypi/store.py
Log:
add XML-RPC interfaces for retrieving download counts for releases, packages by user and users (roles) by package
Modified: trunk/pypi/rpc.py
==============================================================================
--- trunk/pypi/rpc.py (original)
+++ trunk/pypi/rpc.py Mon Aug 22 07:42:46 2011
@@ -25,6 +25,9 @@
self.register_function(changelog)
self.register_function(changed_packages)
self.register_function(post_cheesecake_for_release)
+ self.register_function(release_downloads)
+ self.register_function(package_roles)
+ self.register_function(user_packages)
self.register_introspection_functions()
self.register_multicall_functions()
@@ -52,6 +55,20 @@
raise Fault, "multicall too large"
return SimpleXMLRPCDispatcher.system_multicall(self, call_list)
+def release_downloads(store, package_name, version):
+ '''Return download count for given release.'''
+ return store.get_release_downloads(package_name, version)
+
+def package_roles(store, package_name):
+ '''Return associated users and package roles.'''
+ result = store.get_package_roles(package_name)
+ return [tuple(fields.values())for fields in result]
+
+def user_packages(store, user):
+ '''Return associated packages for user.'''
+ result = store.get_user_packages(user)
+ return [tuple(fields.values()) for fields in result]
+
def list_packages(store):
result = store.get_packages()
return [row['name'] for row in result]
Modified: trunk/pypi/store.py
==============================================================================
--- trunk/pypi/store.py (original)
+++ trunk/pypi/store.py Mon Aug 22 07:42:46 2011
@@ -705,6 +705,21 @@
where name=%s and version=%s''', (name, version))
return Result(None, cursor.fetchall(), self._Release_Dependencies)
+ def get_release_downloads(self, name, version):
+ '''Fetch current download count for a release.'''
+ cursor = self.get_cursor()
+ safe_execute(cursor, '''select filename, downloads from release_files where
+ name=%s and version=%s''', (name, version))
+ return cursor.fetchall()
+
+ _Package_Roles = FastResultRow('role_name package_name')
+ def get_user_packages(self, name):
+ '''Fetch all packages and roles associated to user.'''
+ cursor = self.get_cursor()
+ safe_execute(cursor, '''select role_name, package_name from roles where
+ user_name=%s''', (name,))
+ return Result(None, cursor.fetchall(), self._Package_Roles)
+
_Package_Roles = FastResultRow('role_name user_name')
def get_package_roles(self, name):
''' Fetch the list of Roles for the package.
More information about the Pypi-checkins
mailing list