Kaydet (Commit) 95be7ff9 authored tarafından Senthil Kumaran's avatar Senthil Kumaran

merge from 3.3

Issue #19082: Working xmlrpc.server and xmlrpc.client examples. Both in modules and in documentation.
...@@ -184,6 +184,70 @@ server:: ...@@ -184,6 +184,70 @@ server::
# Print list of available methods # Print list of available methods
print(s.system.listMethods()) print(s.system.listMethods())
The following example included in `Lib/xmlrpc/server.py` module shows a server
allowing dotted names and registering a multicall function.
.. warning::
Enabling the *allow_dotted_names* option allows intruders to access your
module's global variables and may allow intruders to execute arbitrary code on
your machine. Only use this example only within a secure, closed network.
::
import datetime
class ExampleService:
def getData(self):
return '42'
class currentTime:
@staticmethod
def getCurrentTime():
return datetime.datetime.now()
server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(pow)
server.register_function(lambda x,y: x+y, 'add')
server.register_instance(ExampleService(), allow_dotted_names=True)
server.register_multicall_functions()
print('Serving XML-RPC on localhost port 8000')
try:
server.serve_forever()
except KeyboardInterrupt:
print("\nKeyboard interrupt received, exiting.")
server.server_close()
sys.exit(0)
This ExampleService demo can be invoked from the command line::
python -m xmlrpc.server
The client that interacts with the above server is included in
`Lib/xmlrpc/client.py`::
server = ServerProxy("http://localhost:8000")
try:
print(server.currentTime.getCurrentTime())
except Error as v:
print("ERROR", v)
multi = MultiCall(server)
multi.getData()
multi.pow(2,9)
multi.add(1,2)
try:
for response in multi():
print(response)
except Error as v:
print("ERROR", v)
This client which interacts with the demo XMLRPC server can be invoked as::
python -m xmlrpc.client
CGIXMLRPCRequestHandler CGIXMLRPCRequestHandler
----------------------- -----------------------
......
...@@ -1461,18 +1461,18 @@ if __name__ == "__main__": ...@@ -1461,18 +1461,18 @@ if __name__ == "__main__":
# simple test program (from the XML-RPC specification) # simple test program (from the XML-RPC specification)
# server = ServerProxy("http://localhost:8000") # local server # local server, available from Lib/xmlrpc/server.py
server = ServerProxy("http://time.xmlrpc.com/RPC2") server = ServerProxy("http://localhost:8000")
try: try:
print(server.currentTime.getCurrentTime()) print(server.currentTime.getCurrentTime())
except Error as v: except Error as v:
print("ERROR", v) print("ERROR", v)
# The server at xmlrpc.com doesn't seem to support multicall anymore.
multi = MultiCall(server) multi = MultiCall(server)
multi.currentTime.getCurrentTime() multi.getData()
multi.currentTime.getCurrentTime() multi.pow(2,9)
multi.add(1,2)
try: try:
for response in multi(): for response in multi():
print(response) print(response)
......
...@@ -960,10 +960,24 @@ class DocCGIXMLRPCRequestHandler( CGIXMLRPCRequestHandler, ...@@ -960,10 +960,24 @@ class DocCGIXMLRPCRequestHandler( CGIXMLRPCRequestHandler,
if __name__ == '__main__': if __name__ == '__main__':
import datetime
class ExampleService:
def getData(self):
return '42'
class currentTime:
@staticmethod
def getCurrentTime():
return datetime.datetime.now()
server = SimpleXMLRPCServer(("localhost", 8000)) server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(pow) server.register_function(pow)
server.register_function(lambda x,y: x+y, 'add') server.register_function(lambda x,y: x+y, 'add')
server.register_instance(ExampleService(), allow_dotted_names=True)
server.register_multicall_functions()
print('Serving XML-RPC on localhost port 8000') print('Serving XML-RPC on localhost port 8000')
print('It is advisable to run this example server within a secure, closed network.')
try: try:
server.serve_forever() server.serve_forever()
except KeyboardInterrupt: except KeyboardInterrupt:
......
...@@ -25,6 +25,9 @@ Core and Builtins ...@@ -25,6 +25,9 @@ Core and Builtins
Library Library
------- -------
- Issue #19082: Working xmlrpc.server and xmlrpc.client examples. Both in
modules and in documentation. Initial patch contributed by Vajrasky Kok.
- Issue #20138: The wsgiref.application_uri() and wsgiref.request_uri() - Issue #20138: The wsgiref.application_uri() and wsgiref.request_uri()
functions now conform to PEP 3333 when handle non-ASCII URLs. functions now conform to PEP 3333 when handle non-ASCII URLs.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment