[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