summaryrefslogtreecommitdiff
path: root/rpc.py
diff options
context:
space:
mode:
authormartin.von.loewis <devnull@localhost>2011-12-12 18:31:13 +0000
committermartin.von.loewis <devnull@localhost>2011-12-12 18:31:13 +0000
commite5d6efce9883554329928347d5dde6741aacba8c (patch)
tree7b88b5c761c495b204f2e652250e4f6db00d8d0f /rpc.py
parentbb11097eaf5b8cee30fbf5c47c0e7063093ae68c (diff)
downloaddecorator-e5d6efce9883554329928347d5dde6741aacba8c.tar.gz
Add browse RPC.
Diffstat (limited to 'rpc.py')
-rw-r--r--rpc.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/rpc.py b/rpc.py
index 23ccfc2..bb78a8a 100644
--- a/rpc.py
+++ b/rpc.py
@@ -21,6 +21,7 @@ class RequestHandler(SimpleXMLRPCDispatcher):
self.register_function(release_data)
self.register_function(release_data, name='package_data') # Deprecated
self.register_function(search)
+ self.register_function(browse)
self.register_function(updated_releases)
self.register_function(changelog)
self.register_function(changed_packages)
@@ -119,6 +120,19 @@ def search(store, spec, operator='and'):
spec['_pypi_hidden'] = 'FALSE'
return [row.as_dict() for row in store.query_packages(spec, operator)]
+def browse(store, categories):
+ if not isinstance(categories, list):
+ raise TypeError, "Parameter categories must be a list"
+ classifier_ids = store.get_classifier_ids(categories)
+ print classifier_ids
+ if len(classifier_ids) != len(categories):
+ for c in categories:
+ if c not in classifier_ids:
+ raise ValueError, 'Unknown category "%s"' % c
+ ids = classifier_ids.values()
+ packages, tally = store.browse(ids)
+ return [(name, version) for name, version, desc in packages]
+
def updated_releases(store, since):
result = store.updated_releases(since)
return [(row['name'], row['version']) for row in result]