^Rc@sdZddlZddlZddlZddlZddlTddlZddlZddlZyddl Z Wne k rdZ nXye Wne k rdZ nXyddlZWne k rdZnXyejjdkZWne k r dZnXejdjdZejdZe rCd Zn d Zd ZdRZdTZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'de(fdYZ)de)fdYZ*de)fdYZ+de)fd YZ,dd!l-m.Z.e.ej/Z0erBe1Z2Z3e4e0d"es5e>e3fZ>ny"ddl?Z?e?j@ZAe?jBZCWn!eDe fk rzdZAZCnXyddl?Z?e?jEZFWneDe fk rdZFnXy,dd/lGmHZHeIeHd0se nWne k rdZJnXd1dXd2YZJd3dYd4YZKd5dZd6YZEd7d[d8YZBd9d\d:YZLd;d]d<YZMd=d^d>YZNdd?ZOddddd@ZPddAZQdBZRdCZSdDe re jTneUfdEYZVdFd_dGYZWdHd`dIYZXdJeXfdKYZYdLdadMYZZeZZ[edNkreZdOZ\e\GHye\j]j^GHWne)k rZ_dPGe_GHnXeNe\Z`e`j]j^e`j]j^yxe`D] ZaeaGHqWWqe)k rZ_dPGe_GHqXndS(bs~ An XML-RPC client interface for Python. The marshalling and response parser code can also be used to implement XML-RPC servers. Exported exceptions: Error Base class for client errors ProtocolError Indicates an HTTP protocol error ResponseError Indicates a broken response package Fault Indicates an XML-RPC fault package Exported classes: ServerProxy Represents a logical connection to an XML-RPC server MultiCall Executor of boxcared xmlrpc requests Boolean boolean wrapper to generate a "boolean" XML-RPC value DateTime dateTime wrapper for an ISO 8601 string or time tuple or localtime integer value to generate a "dateTime.iso8601" XML-RPC value Binary binary data wrapper SlowParser Slow but safe standard parser (based on xmllib) Marshaller Generate an XML-RPC params chunk from a Python data structure Unmarshaller Unmarshal an XML-RPC response from incoming XML event message Transport Handles an HTTP transaction to an XML-RPC server SafeTransport Handles an HTTPS transaction to an XML-RPC server Exported constants: True False Exported functions: boolean Convert any Python value to an XML-RPC boolean getparser Create instance of the fastest available parser & attach to an unmarshalling object dumps Convert an argument tuple or a Fault instance to an XML-RPC request (or response, if the methodresponse option is used). loads Convert an XML-RPC packet to unmarshalled data plus a method name (None if not present). iN(t*tboolis[-]cCs.tr*|r*||r*t||}n|S(N(tunicode(tdatatencodingtis8bit((s/usr/lib/python2.7/xmlrpclib.pyt_decodescCs4||dd}||dd}||ddS(Nt&s&ts>((tstreplace((s/usr/lib/python2.7/xmlrpclib.pytescapescCs*y|jdSWntk r%|SXdS(Ntascii(tencodet UnicodeError(tstring((s/usr/lib/python2.7/xmlrpclib.pyt _stringifys cCs|S(N((R((s/usr/lib/python2.7/xmlrpclib.pyRss1.0.1liiiDii ipiԁiCiBiiitErrorcBseZdZdZRS(sBase class for client errors.cCs t|S(N(trepr(tself((s/usr/lib/python2.7/xmlrpclib.pyt__str__s(t__name__t __module__t__doc__R(((s/usr/lib/python2.7/xmlrpclib.pyRst ProtocolErrorcBs eZdZdZdZRS(s!Indicates an HTTP protocol error.cCs5tj|||_||_||_||_dS(N(Rt__init__turlterrcodeterrmsgtheaders(RRRRR((s/usr/lib/python2.7/xmlrpclib.pyRs     cCsd|j|j|jfS(Ns(RRR(R((s/usr/lib/python2.7/xmlrpclib.pyt__repr__s(RRRRR(((s/usr/lib/python2.7/xmlrpclib.pyRs t ResponseErrorcBseZdZRS(s$Indicates a broken response package.(RRR(((s/usr/lib/python2.7/xmlrpclib.pyR stFaultcBs eZdZdZdZRS(s#Indicates an XML-RPC fault package.cKs#tj|||_||_dS(N(RRt faultCodet faultString(RR"R#textra((s/usr/lib/python2.7/xmlrpclib.pyRs  cCsd|jt|jfS(Ns(R"RR#(R((s/usr/lib/python2.7/xmlrpclib.pyRs(RRRRR(((s/usr/lib/python2.7/xmlrpclib.pyR! s (tmodulestTruetFalsetBooleancBsGeZdZddZdZdZdZdZdZRS(saBoolean-value wrapper. Use True or False to generate a "boolean" XML-RPC value. icCstj||_dS(N(toperatorttruthtvalue(RR+((s/usr/lib/python2.7/xmlrpclib.pyR2scCs|jd|jdS(Ns%%d (twriteR+(Rtout((s/usr/lib/python2.7/xmlrpclib.pyR5scCs+t|tr|j}nt|j|S(N(t isinstanceR(R+tcmp(Rtother((s/usr/lib/python2.7/xmlrpclib.pyt__cmp__8s cCs)|jrdt|Sdt|SdS(Nss(R+tid(R((s/usr/lib/python2.7/xmlrpclib.pyR=s cCs|jS(N(R+(R((s/usr/lib/python2.7/xmlrpclib.pyt__int__CscCs|jS(N(R+(R((s/usr/lib/python2.7/xmlrpclib.pyt __nonzero__Fs( RRRRRR1RR3R4(((s/usr/lib/python2.7/xmlrpclib.pyR(,s     cCs|tj|S(s.Convert any Python value to XML-RPC 'boolean'.(R)R*(R+t _truefalse((s/usr/lib/python2.7/xmlrpclib.pytbooleanWscCstrGt|tjrGd|j|j|j|j|j|jfSnt|tt j fs|dkrzt j }nt j |}nd|d S(Ns%04d%02d%02dT%02d:%02d:%02dii( tdatetimeR.tyeartmonthtdaythourtminutetsecondt TupleTypettimet struct_timet localtime(R+((s/usr/lib/python2.7/xmlrpclib.pyt _strftimejs tDateTimecBseZdZddZdZdZdZdZdZdZ d Z d Z d Z d Z d ZdZdZRS(sDateTime wrapper for an ISO 8601 string or time tuple or localtime integer value to generate 'dateTime.iso8601' XML-RPC value. icCs.t|tr||_nt||_dS(N(R.t StringTypeR+RB(RR+((s/usr/lib/python2.7/xmlrpclib.pyR~s cCst|tr$|j}|j}ntrWt|tjrW|j}|jd}nt|ttfr~|j}|}nmt|dr|j}|j}nCt|dr|j j pt |}t d|j j |f||fS(Ns%Y%m%dT%H:%M:%St timetuplet __class__sCan't compare %s and %s( R.RCR+R7tstrftimetstrRthasattrRERFRttypet TypeError(RR0R tototype((s/usr/lib/python2.7/xmlrpclib.pytmake_comparables$        cCs|j|\}}||kS(N(RN(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyt__lt__scCs|j|\}}||kS(N(RN(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyt__le__scCs|j|\}}||kS(N(RN(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyt__gt__scCs|j|\}}||kS(N(RN(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyt__ge__scCs|j|\}}||kS(N(RN(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyt__eq__scCs|j|\}}||kS(N(RN(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyt__ne__scCstj|jdS(Ns%Y%m%dT%H:%M:%S(R?tstrptimeR+(R((s/usr/lib/python2.7/xmlrpclib.pyREscCs"|j|\}}t||S(N(RNR/(RR0R RL((s/usr/lib/python2.7/xmlrpclib.pyR1scCs|jS(N(R+(R((s/usr/lib/python2.7/xmlrpclib.pyRscCsdt|jt|fS(Ns(RR+R2(R((s/usr/lib/python2.7/xmlrpclib.pyRscCs"t|}tj||_dS(N(RHRtstripR+(RR((s/usr/lib/python2.7/xmlrpclib.pytdecodes cCs.|jd|j|j|jddS(Nss (R,R+(RR-((s/usr/lib/python2.7/xmlrpclib.pyRs (RRRRRNRORPRQRRRSRTRER1RRRWR(((s/usr/lib/python2.7/xmlrpclib.pyRCxs            cCst}|j||S(N(RCRW(RR+((s/usr/lib/python2.7/xmlrpclib.pyt _datetimes  cCs)tj|d}tjt|d S(Ns%Y%m%dT%H:%M:%Si(R?RUR7ttuple(Rtt((s/usr/lib/python2.7/xmlrpclib.pyt_datetime_typestBinarycBs>eZdZddZdZdZdZdZRS(sWrapper for binary data.cCs ||_dS(N(R(RR((s/usr/lib/python2.7/xmlrpclib.pyRscCs |jp dS(Nt(R(R((s/usr/lib/python2.7/xmlrpclib.pyRscCs+t|tr|j}nt|j|S(N(R.R\RR/(RR0((s/usr/lib/python2.7/xmlrpclib.pyR1s cCstj||_dS(N(tbase64t decodestringR(RR((s/usr/lib/python2.7/xmlrpclib.pyRWscCs:|jdtjtj|j||jddS(Ns s (R,R^RtStringIOR(RR-((s/usr/lib/python2.7/xmlrpclib.pyRs N( RRRtNoneRRR1RWR(((s/usr/lib/python2.7/xmlrpclib.pyR\s     cCst}|j||S(N(R\RW(RR+((s/usr/lib/python2.7/xmlrpclib.pyt_binarys  (texpatt ParserCreatet ExpatParsercBs#eZdZdZdZRS(cCsrtjdd|_}||_|j|_|j|_|j |_ d}|j s^d}n|j |ddS(Nsutf-8( RcRdRat_parsert_targettstarttStartElementHandlertendtEndElementHandlerRtCharacterDataHandlertreturns_unicodetxml(RttargettparserR((s/usr/lib/python2.7/xmlrpclib.pyR!s      cCs|jj|ddS(Ni(RftParse(RR((s/usr/lib/python2.7/xmlrpclib.pytfeed,scCs#|jjdd|`|`dS(NR]i(RfRqRg(R((s/usr/lib/python2.7/xmlrpclib.pytclose/s(RRRRrRs(((s/usr/lib/python2.7/xmlrpclib.pyRes t SlowParsercBseZdZdZRS(s/Default XML parser (based on xmllib.XMLParser).cCsddl}|jtjkr0|jft_n|j|_|j|_|j|_ |j|_ |j |_ y|jj |ddWn!tk r|jj |nXdS(Nit accept_utf8i(txmllibt XMLParserRtt __bases__Rnt handle_xmlRhtunknown_starttagRt handle_datat handle_cdataRjtunknown_endtagRRK(RRoRv((s/usr/lib/python2.7/xmlrpclib.pyR6s       (RRRR(((s/usr/lib/python2.7/xmlrpclib.pyRt3st MarshallercBs7eZdZdddZiZdZdZdZeee R"R#s s s s s R](tappendt_Marshaller__dumpR.R!R"R#Rtjoin(RtvaluesR-R,tdumptvtresult((s/usr/lib/python2.7/xmlrpclib.pytdumpscs"          cCsy|jt|}Wntk ry |jWntdt|nXxBt|jD]1}||jjkr_tdt|q_q_W|jt}nX||||dS(Nscannot marshal %s objects(tdispatchRJtKeyErrort__dict__RKt__mro__tkeyst InstanceType(RR+R,tfttype_((s/usr/lib/python2.7/xmlrpclib.pyt__dump~s  cCs#|jstdn|ddS(Ns0cannot marshal None unless allow_none is enableds(RRK(RR+R,((s/usr/lib/python2.7/xmlrpclib.pytdump_nils  cCsL|tks|tkr$tdn|d|t||ddS(Nsint exceeds XML-RPC limitss s (tMAXINTtMININTt OverflowErrorRH(RR+R,((s/usr/lib/python2.7/xmlrpclib.pytdump_ints   cCs.|d||rdpd|ddS(Nst1t0s ((RR+R,((s/usr/lib/python2.7/xmlrpclib.pyt dump_bools cCsR|tks|tkr$tdn|d|tt||ddS(Nslong int exceeds XML-RPC limitss s (RRRRHtint(RR+R,((s/usr/lib/python2.7/xmlrpclib.pyt dump_longs   cCs(|d|t||ddS(Nss (R(RR+R,((s/usr/lib/python2.7/xmlrpclib.pyt dump_doubles cCs(|d||||ddS(Nss ((RR+R,R ((s/usr/lib/python2.7/xmlrpclib.pyt dump_strings cCs:|j|j}|d||||ddS(Nss (RR(RR+R,R ((s/usr/lib/python2.7/xmlrpclib.pyt dump_unicodes cCs}t|}||jkr'tdnd|j|<|j}|dx|D]}|||qNW|d|j|=dS(Ns"cannot marshal recursive sequencess s (R2RRKRaR(RR+R,tiRR((s/usr/lib/python2.7/xmlrpclib.pyt dump_arrays       cCst|}||jkr'tdnd|j|<|j}|dx|jD]\}}|dt|tk rtrt|t kr|j |j }qtdn|d||||||dqTW|d|j|=dS(Ns%cannot marshal recursive dictionariess s sdictionary key must be strings%s s s ( R2RRKRaRtitemsRJRDRt UnicodeTypeRR(RR+R,R RRtkR((s/usr/lib/python2.7/xmlrpclib.pyt dump_structs"         cCs(|d|t||ddS(Nss (RB(RR+R,((s/usr/lib/python2.7/xmlrpclib.pyt dump_datetimes cCsE|jtkr.||_|j||`n|j|j|dS(N(RFtWRAPPERSR,RRR(RR+R,((s/usr/lib/python2.7/xmlrpclib.pyt dump_instances    N("RRRRaRRRRRtNoneTypeRtIntTypet_bool_is_builtinRRRtLongTypeRt FloatTypeR RRDRRRRR>tListTypeRtDictTypeR7RRR(((s/usr/lib/python2.7/xmlrpclib.pyR~Ns>                      t UnmarshallercBszeZdZddZdZdZdZdZdZe j dZ d Z iZ d Zee d |jrt||j}n|jt|d|_dS(Ni(RRRRR(RR((s/usr/lib/python2.7/xmlrpclib.pyt end_stringes RtnamecCs3|jj}|j|g|j|)d|_dS(Ni(RtpopRR(RRtmark((s/usr/lib/python2.7/xmlrpclib.pyt end_arraymsRcCs~|jj}i}|j|}x<tdt|dD]"}||d|t|| a object used to boxcar method calls server should be a ServerProxy object. Methods can be added to the MultiCall using normal method call syntax e.g.: multicall = MultiCall(server_proxy) multicall.add(2,3) multicall.get_address("Guido") To execute the multicall, call the MultiCall object e.g.: add_result, address = multicall() cCs||_g|_dS(N(t_MultiCall__servert_MultiCall__call_list(Rtserver((s/usr/lib/python2.7/xmlrpclib.pyRs cCsdt|S(Ns(R2(R((s/usr/lib/python2.7/xmlrpclib.pyRscCst|j|S(N(RR(RR((s/usr/lib/python2.7/xmlrpclib.pyRscCsTg}x2|jD]'\}}|ji|d6|d6qWt|jjj|S(NRR(RRRRtsystemt multicall(Rtmarshalled_listRR((s/usr/lib/python2.7/xmlrpclib.pyRs(RRRRRRRR(((s/usr/lib/python2.7/xmlrpclib.pyRs    cCs|rt rtdntratra|r4t}nt}tttt|t }t|}nEt d|}trt|}n!t rt |}n t |}||fS(sgetparser() -> parser, unmarshaller Create an instance of the fastest available parser, and attach it to an unmarshalling object. Return both objects. s$the datetime module is not availableR( R7Rt FastParsertFastUnmarshallerR[RXR&R'RbR!RReRt(Rt mkdatetimeRoRp((s/usr/lib/python2.7/xmlrpclib.pyt getparsers     cCst|trd}n|r0t|tr0n|s?d}ntrTt|}nt||}|j|}|dkrdt|}nd}|rt|ts|j|}n|d|d|df}n|r|d|d f}n|St j |d S( sdata [,options] -> marshalled data Convert an argument tuple or a Fault instance to an XML-RPC request (or response, if the methodresponse option is used). In addition to the data object, the following options can be given as keyword arguments: methodname: the method name for a methodCall packet methodresponse: true to create a methodResponse packet. If this option is used with a tuple, the tuple must be a singleton (i.e. it can contain only one element). encoding: the packet encoding (default is UTF-8) All 8-bit strings in the data structure are assumed to use the packet encoding. Unicode strings are automatically converted, where necessary. isutf-8s$ s s s s s s R]( R.R!R>tFastMarshallerR~RRHRDRRR(Rt methodnametmethodresponseRRtmRt xmlheader((s/usr/lib/python2.7/xmlrpclib.pyRs8     cCsBtd|\}}|j||j|j|jfS(sdata -> unmarshalled data, method name Convert an XML-RPC packet to unmarshalled data plus a method name (None if not present). If the XML-RPC packet represents a fault condition, this function raises a Fault exception. R(RRrRsR(RRtptu((s/usr/lib/python2.7/xmlrpclib.pytloadses   cCsjtstntj}tjddd|dd}|j||j|j}|j|S(shdata -> gzip encoded data Encode data using the gzip content encoding as described in RFC 1952 tmodetwbtfileobjt compressleveli(tgziptNotImplementedErrorR`tGzipFileR,Rstgetvalue(RRtgzftencoded((s/usr/lib/python2.7/xmlrpclib.pyt gzip_encode{s      cCs~tstntj|}tjddd|}y|j}Wntk retdnX|j|j|S(srgzip encoded data -> unencoded data Decode data using the gzip content encoding as described in RFC 1952 RtrbRs invalid data(RRR`RtreadtIOErrorRRs(RRRtdecoded((s/usr/lib/python2.7/xmlrpclib.pyt gzip_decodes    tGzipDecodedResponsecBs eZdZdZdZRS(sha file-like object to decode a response encoded with the gzip method, as described in RFC 1952. cCsJtstntj|j|_tjj|ddd|jdS(NRRR(RRR`RtstringioRR(Rtresponse((s/usr/lib/python2.7/xmlrpclib.pyRs cCs!tjj||jjdS(N(RRRsR (R((s/usr/lib/python2.7/xmlrpclib.pyRss(RRRRRs(((s/usr/lib/python2.7/xmlrpclib.pyR s t_MethodcBs#eZdZdZdZRS(cCs||_||_dS(N(t _Method__sendt _Method__name(RtsendR((s/usr/lib/python2.7/xmlrpclib.pyRs cCst|jd|j|fS(Ns%s.%s(RRR(RR((s/usr/lib/python2.7/xmlrpclib.pyRscGs|j|j|S(N(RR(RR((s/usr/lib/python2.7/xmlrpclib.pyRs(RRRRR(((s/usr/lib/python2.7/xmlrpclib.pyRs  t TransportcBseZdZdeZeZdZddZ ddZ ddZ dZ dZ dZd Zd Zd Zd Zd ZdZRS(s1Handles an HTTP transaction to an XML-RPC server.s'xmlrpclib.py/%s (by www.pythonware.com)icCs||_d|_g|_dS(N(NN(RRat _connectiont_extra_headers(RR((s/usr/lib/python2.7/xmlrpclib.pyRs  cCsxdD]}y|j||||SWqtjk rl}|sc|jtjtjtjfkrqqtjk r|rqqXqWdS(Nii(ii( tsingle_requesttsocketterrorterrnot ECONNRESETt ECONNABORTEDtEPIPEthttplibt BadStatusLine(Rthostthandlert request_bodytverboseRte((s/usr/lib/python2.7/xmlrpclib.pytrequests ' cCs|j|}|r%|jdny{|j||||j|||j||j|||jdt}|jdkr||_ |j |SWn1t k rnt k r|j nX|jddr|jnt|||j|j|jdS(Nit bufferingiscontent-lengthi(tmake_connectiontset_debuglevelt send_requestt send_hosttsend_user_agentt send_contentt getresponseR&tstatusR!tparse_responseR!t ExceptionRst getheaderRRtreasontmsg(RRRR R!thR ((s/usr/lib/python2.7/xmlrpclib.pyRs.       cCstd|jS(NR(RR(R((s/usr/lib/python2.7/xmlrpclib.pyR(scCsi}t|tr$|\}}nddl}|j|\}}|rddl}|j|j|}tjtj |d}dd|fg}nd}|||fS(NiR]t AuthorizationsBasic ( R.R>turllibt splituserR^t encodestringtunquoteRRtsplitRa(RRtx509R4tauthR^t extra_headers((s/usr/lib/python2.7/xmlrpclib.pyt get_host_info6s  cCse|jr'||jdkr'|jdS|j|\}|_}|tj|f|_|jdS(Nii(RR<RRtHTTPConnection(RRtchostR9((s/usr/lib/python2.7/xmlrpclib.pyR%Qs  cCs.|jdr*|jdjd|_ndS(Ni(NN(RRsRa(R((s/usr/lib/python2.7/xmlrpclib.pyRsas cCsL|jr8tr8|jd|dt|jddn|jd|dS(NtPOSTtskip_accept_encodingsAccept-EncodingR(taccept_gzip_encodingRt putrequestR&t putheader(Rt connectionRR ((s/usr/lib/python2.7/xmlrpclib.pyR'mscCs[|j}|rWt|tr-|j}nx'|D]\}}|j||q4WndS(N(RR.RRRC(RRDRR;tkeyR+((s/usr/lib/python2.7/xmlrpclib.pyR(~s  cCs|jd|jdS(Ns User-Agent(RCt user_agent(RRD((s/usr/lib/python2.7/xmlrpclib.pyR)scCs|jdd|jdk rY|jt|krYtrY|jddt|}n|jdtt||j|dS(Ns Content-Typestext/xmlsContent-EncodingRsContent-Length(RCtencode_thresholdRaRRRRHt endheaders(RRDR ((s/usr/lib/python2.7/xmlrpclib.pyR*scCst|dr?|jdddkr6t|}qE|}n|}|j\}}xD|jd}|ssPn|jrdGt|GHn|j|qZ||k r|jn|j|jS(NR/sContent-EncodingR]Risbody:( RIR/R RRR!RRrRs(RR tstreamRRR((s/usr/lib/python2.7/xmlrpclib.pyR-s"     N(RRRt __version__RFR&RARaRGRR#RRR<R%RsR'R(R)R*R-(((s/usr/lib/python2.7/xmlrpclib.pyRs     '     t SafeTransportcBseZdZdZRS(s2Handles an HTTPS transaction to an XML-RPC server.cCs|jr'||jdkr'|jdSy tj}Wntk rStdnHX|j|\}|_}|||d|pif|_|jdSdS(Niis-your version of httplib doesn't support HTTPS(RRtHTTPSConnectiontAttributeErrorRR<RRa(RRtHTTPSR>R9((s/usr/lib/python2.7/xmlrpclib.pyR%s    !(RRRR%(((s/usr/lib/python2.7/xmlrpclib.pyRKst ServerProxycBsYeZdZddddddZdZdZdZeZdZ dZ RS( suri [,options] -> a logical connection to an XML-RPC server uri is the connection point on the server, given as scheme://host/target. The standard implementation always supports the "http" scheme. If SSL socket support is available (Python 2.0), it also supports "https". If the target part and the slash preceding it are both omitted, "/RPC2" is assumed. The following options can be given as keyword arguments: transport: a transport factory encoding: the request encoding (default is UTF-8) All 8-bit strings passed to the server proxy are assumed to use the given encoding. ic Cst|tr!|jd}nddl}|j|\}}|dkrZtdn|j|\|_|_|jsd|_n|dkr|dkrt d|}qt d|}n||_ ||_ ||_||_dS( Ns ISO-8859-1ithttpthttpssunsupported XML-RPC protocols/RPC2R(RPRQ(R.RRR4t splittypeRt splithostt_ServerProxy__hostt_ServerProxy__handlerRaRKRt_ServerProxy__transportt_ServerProxy__encodingt_ServerProxy__verboset_ServerProxy__allow_none( Rturit transportRR!RRR4RJ((s/usr/lib/python2.7/xmlrpclib.pyRs"          cCs|jjdS(N(RVRs(R((s/usr/lib/python2.7/xmlrpclib.pyt__closescCskt||d|jd|j}|jj|j|j|d|j}t|dkrg|d}n|S(NRRR!ii( RRWRYRVR#RTRURXR(RRRR#R ((s/usr/lib/python2.7/xmlrpclib.pyt __request s    cCsd|j|jfS(Ns(RTRU(R((s/usr/lib/python2.7/xmlrpclib.pyR2scCst|j|S(N(Rt_ServerProxy__request(RR((s/usr/lib/python2.7/xmlrpclib.pyR:scCs=|dkr|jS|dkr&|jStd|fdS(s|A workaround to get special attributes on the ServerProxy without interfering with the magic __getattr__ RsR[sAttribute %r not foundN(t_ServerProxy__closeRVRM(Rtattr((s/usr/lib/python2.7/xmlrpclib.pyRAs   N( RRRRaRR_R^RRRR(((s/usr/lib/python2.7/xmlrpclib.pyROs     t__main__shttp://time.xmlrpc.com/RPC2tERRORllll((((((((((((((bRtreRR?R)ttypesRRRRt ImportErrorRaRt NameErrorR7R'RFRRtcompiletsearchRR R RRJRRt PARSE_ERRORt SERVER_ERRORtAPPLICATION_ERRORt SYSTEM_ERRORtTRANSPORT_ERRORtNOT_WELLFORMED_ERRORtUNSUPPORTED_ENCODINGtINVALID_ENCODING_CHARtINVALID_XMLRPCtMETHOD_NOT_FOUNDtINVALID_METHOD_PARAMStINTERNAL_ERRORR.RRR R!tsysR%Rtmod_dictRR6R(R&RBRCRXR[R^t cStringIOR`R\RbRt _xmlrpclibtParserRRRRMR~Rt xml.parsersRcRIReRtRRRRRRRR RtobjectR RRRKROtServerRt currentTimetgetCurrentTimeRtmultiR (((s/usr/lib/python2.7/xmlrpclib.pyts0                     T               - &  N   %&a