12.10.2 数据类型
XML-RPC协议能够识别一组有限的常用数据类型。这些类型可以作为参数或返回值传递,还可以结合使用来创建更复杂的数据结构。
import xmlrpc.client
import datetime
server = xmlrpc.client.ServerProxy('http://localhost:9000')
data = [
('boolean',True),
('integer',1),
('float',2.5),
('string','some text'),
('datetime',datetime.datetime.now()),
('array',['a','list']),
('array',('a','tuple')),
('structure',{'a':'dictionart'}),
]
for t,v in data:
as_string,type_name,value = server.show_type(v)
print('{:<12}:{}'.format(t,as_string))
print('{:12} {}'.format('',type_name))
print('{:12} {}'.format('',value))
下面给出简单类型:
可以嵌套支持的类型来创建任意复杂的值。
import xmlrpc.client
import datetime
import pprint
server = xmlrpc.client.ServerProxy('http://localhost:9000')
data = {
'boolean':True,
'integer':1,
'float-point number':2.5,
'string':'some text',
'datetime':datetime.datetime.now(),
'array':['a','list'],
'array':('a','tuple'),
'strucure':{'a':'dictionary'},
}
arg = []
for i in range(3):
d = {}
d.update(data)
d['integer'] = i
arg.append(d)
print('Before:')
pprint.pprint(arg,width=40)
print('\nAfter:')
pprint.pprint(server.show_type(arg)[-1],width=40)
这个程序向示例服务器传递一个字典列表,其中包含支持的所有类型,由示例服务器返回数据。元组会转换为列表,datetime实例转换为DateTime对象。否则,其他数据不变。
运行结果:
XML-RPC支持日期作为一个内置类型,xmlrpclib可以使用两个类在发出代理中或者从服务器接收日期时表示日期值。
import xmlrpc.client
server = xmlrpc.client.ServerProxy('http://localhost:9000',
use_datetime=True)
now = server.now()
print('With:',now,type(now),now.__class__.__name__)
server = xmlrpc.client.ServerProxy('http://localhost:9000',
use_datetime=False)
now = server.now()
print('Without:',now,type(now),now.__class__.__name__)
默认地,会使用DateTime的一个内部版本,不过如果设置了use_datetime选项,则会打开datetime支持,使用datetime模块中的类。
运行结果: