--Noah
PS: Is there any simple way to get a devlopment environment going? I think I have finally got the schema cleaned up enough to import, but its hard to tell if this is the right one to use (pkgbase_schema.sql).
Index: rpc.py
===================================================================
--- rpc.py (revision 526)
+++ rpc.py (working copy)
@@ -1,32 +1,40 @@
import xmlrpclib
import traceback
from cStringIO import StringIO
+from SimpleXMLRPCServer import SimpleXMLRPCDispatcher
allowed = ('package_releases', 'package_urls', 'package_data',
'search', 'list_packages', 'release_urls', 'release_data',
'updated_releases', 'changelog', 'post_cheesecake_for_release')
-def handle_request(webui_obj):
- webui_obj.handler.send_response(200, 'OK')
- webui_obj.handler.send_header('Content-type', 'text/xml')
- webui_obj.handler.send_header('charset', 'UTF-8' );
- webui_obj.handler.end_headers()
- try:
- methodArgs, methodName =
xmlrpclib.loads(webui_obj.handler.rfile.read())
- if methodName in allowed:
- response = globals()[methodName](webui_obj.store, *methodArgs)
- else:
- raise KeyError, "Method %r does not exist" % (methodName,)
- if response is None:
- response = ''
- # xmlrpclib.dumps encodes Unicode as UTF-8
- xml = xmlrpclib.dumps((response,), allow_none=True)
- webui_obj.handler.wfile.write(xml)
- except:
- out = StringIO()
- traceback.print_exc(file=out)
- result = xmlrpclib.dumps(xmlrpclib.Fault(1, out.getvalue()))
- webui_obj.handler.wfile.write(result)
+class RequestHandler(SimpleXMLRPCDispatcher):
+ """A request dispatcher for the PyPI XML-RPC API."""
+
+ def __init__(self):
+ SimpleXMLRPCDispatcher.__init__(self)
+ self.register_function(list_packages)
+ self.register_function(package_releases)
+ self.register_function(release_urls)
+ self.register_function(release_urls, name='package_urls') # Deprecated
+ self.register_function(release_data)
+ self.register_function(release_data, name='package_data') # Deprecated
+ self.register_function(search)
+ self.register_function(updated_releases)
+ self.register_function(changelog)
+ self.register_function(post_cheesecake_for_release)
+ self.register_introspection_functions()
+ self.register_multicall_functions()
+
+ def __call__(self, webui_obj):
+ webui_obj.handler.send_response(200, 'OK')
+ webui_obj.handler.send_header('Content-type', 'text/xml')
+ webui_obj.handler.send_header('charset', 'UTF-8' );
+ webui_obj.handler.end_headers()
+ data = webui_obj.handler.rfile.read()
+ def dispatch(method, params):
+ self._dispatch(method, (webui_obj.store,)+params)
+ response = self._marshaled_dispatch(data, dispatch)
+ webui_obj.handler.wfile.write(response)
def list_packages(store):
result = store.get_packages()
@@ -88,3 +96,5 @@
store.save_cheesecake_score(name, version, score_data)
store.commit()
+
+handle_request = RequestHandler()
\ No newline at end of file
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Catalog-SIG mailing list [email protected] http://mail.python.org/mailman/listinfo/catalog-sig
