diff options
| author | Xiang Zhang <angwerzx@126.com> | 2017-02-28 17:12:52 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-28 17:12:52 +0800 |
| commit | 267b9d2fa8efce7c5bc34ce50048ebca8fddf04f (patch) | |
| tree | b35a09c9064f25d825c721dc29b18e5bf94143f5 /Lib | |
| parent | 7c8b3fa31caf866572649e2bc82729d8fc081b89 (diff) | |
| download | cpython-git-267b9d2fa8efce7c5bc34ce50048ebca8fddf04f.tar.gz | |
bpo-7769: enable xmlrpc.server.SimpleXMLRPCDispatcher.register_function used as decorator (GH-231)
Diffstat (limited to 'Lib')
| -rw-r--r-- | Lib/test/test_xmlrpc.py | 13 | ||||
| -rw-r--r-- | Lib/xmlrpc/server.py | 8 |
2 files changed, 14 insertions, 7 deletions
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index df9c79e3df..ef8ad217ea 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -505,10 +505,6 @@ def http_server(evt, numrequests, requestHandler=None, encoding=None): def getData(): return '42' - def my_function(): - '''This is my function''' - return True - class MyXMLRPCServer(xmlrpc.server.SimpleXMLRPCServer): def get_request(self): # Ensure the socket is always non-blocking. On Linux, socket @@ -535,9 +531,14 @@ def http_server(evt, numrequests, requestHandler=None, encoding=None): serv.register_introspection_functions() serv.register_multicall_functions() serv.register_function(pow) - serv.register_function(lambda x,y: x+y, 'add') serv.register_function(lambda x: x, 'têšt') - serv.register_function(my_function) + @serv.register_function + def my_function(): + '''This is my function''' + return True + @serv.register_function(name='add') + def _(x, y): + return x + y testInstance = TestInstanceClass() serv.register_instance(testInstance, allow_dotted_names=True) evt.set() diff --git a/Lib/xmlrpc/server.py b/Lib/xmlrpc/server.py index 849bfddd84..a6275a1b74 100644 --- a/Lib/xmlrpc/server.py +++ b/Lib/xmlrpc/server.py @@ -106,6 +106,7 @@ server.handle_request() from xmlrpc.client import Fault, dumps, loads, gzip_encode, gzip_decode from http.server import BaseHTTPRequestHandler +from functools import partial import http.server import socketserver import sys @@ -204,17 +205,22 @@ class SimpleXMLRPCDispatcher: self.instance = instance self.allow_dotted_names = allow_dotted_names - def register_function(self, function, name=None): + def register_function(self, function=None, name=None): """Registers a function to respond to XML-RPC requests. The optional name argument can be used to set a Unicode name for the function. """ + # decorator factory + if function is None: + return partial(self.register_function, name=name) if name is None: name = function.__name__ self.funcs[name] = function + return function + def register_introspection_functions(self): """Registers the XML-RPC introspection methods in the system namespace. |
