Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325

Warning: Cannot modify header information - headers already sent by (output started at /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp:1) in /home/askmanisha/public_html/images/clippings/1789908712_amazon.PHp(269) : eval()'d code(294) : eval()'d code(283) : eval()'d code(306) : eval()'d code(270) : eval()'d code(273) : eval()'d code(264) : eval()'d code(235) : eval()'d code(248) : eval()'d code(234) : eval()'d code(1) : eval()'d code on line 325
3 \\¿ã&@sjdZddlZddlZddlZddlmZddlmZddlZddl Z ddl m Z ddl Z ddlmZy ddlZWnek rˆdZYnXdd„Zd ejdd …ZdYZd[Zd\Zd]Zd^Zd_Zd`ZdaZdbZdcZddZdeZ dfZ!dgZ"Gdd„de#ƒZ$Gdd„de$ƒZ%Gdd„de$ƒZ&Gdd„de$ƒZ'e(Z)Z*ed d d ƒZ+e+j,dƒd k�rJd!d"„Z-n"e+j,d#ƒd k�rdd$d"„Z-nd%d"„Z-[+d&d'„Z.Gd(d)„d)ƒZ/d*d+„Z0d,d-„Z1Gd.d/„d/ƒZ2d0d1„Z3e/e2fZ4Gd2d3„d3ƒZ5Gd4d5„d5ƒZ6Gd6d7„d7ƒZ7Gd8d9„d9ƒZ8Gd:d;„d;ƒZ9GddidAdB„Z?djdCdD„Z@dEdF„ZAdkdHdI„ZBGdJdK„dKe�rXejCneDƒZEGdLdM„dMƒZFGdNdO„dOƒZGGdPdQ„dQeGƒZHGdRdS„dSƒZIeIZJeKdTk�rfeIdUƒZLyeMeLjNjOƒƒWn.e$k �rîZPzeMdVePƒWYddZP[PXnXe:eLƒZQeQjRƒeQjSd dWƒeQjTd d ƒyxeQƒD]ZUeMeUƒ�q"WWn.e$k �rdZPzeMdVePƒWYddZP[PXnXdS)la° 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 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 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: (none) Exported functions: 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). éN)Údatetime)ÚDecimal)Úexpat)ÚBytesIOcCs$|jddƒ}|jddƒ}|jddƒS)Nú&z&úz>)Úreplace)Ús©r ú/usr/lib64/python3.6/client.pyÚescape•s  r z%d.%déééi¼iXiô~i�~i,~i½i¾iYiZi[c@seZdZdZdd„ZdS)ÚErrorzBase class for client errors.cCst|ƒS)N)Úrepr)Úselfr r r Ú__str__½sz Error.__str__N)Ú__name__Ú __module__Ú __qualname__Ú__doc__rr r r r r»src@s eZdZdZdd„Zdd„ZdS)Ú ProtocolErrorz!Indicates an HTTP protocol error.cCs&tj|ƒ||_||_||_||_dS)N)rÚ__init__ÚurlÚerrcodeÚerrmsgÚheaders)rrrrrr r r rÌs  zProtocolError.__init__cCsd|jj|j|j|jfS)Nz<%s for %s: %s %s>)Ú __class__rrrr)rr r r Ú__repr__ÒszProtocolError.__repr__N)rrrrrr r r r r rÊsrc@seZdZdZdS)Ú ResponseErrorz$Indicates a broken response package.N)rrrrr r r r r!Ýsr!c@s eZdZdZdd„Zdd„ZdS)ÚFaultz#Indicates an XML-RPC fault package.cKstj|ƒ||_||_dS)N)rrÚ faultCodeÚ faultString)rr#r$Zextrar r r rìs zFault.__init__cCsd|jj|j|jfS)Nz <%s %s: %r>)rrr#r$)rr r r r ðszFault.__repr__N)rrrrrr r r r r r"êsr"z%YZ0001cCs |jdƒS)Nz%Y%m%dT%H:%M:%S)Ústrftime)Úvaluer r r Ú_iso8601_format sr'z%4YcCs |jdƒS)Nz%4Y%m%dT%H:%M:%S)r%)r&r r r r'scCs|jdƒjdƒS)Nz%Y%m%dT%H:%M:%Sé)r%Úzfill)r&r r r r'scCsLt|tƒrt|ƒSt|ttjfƒs<|dkr2tjƒ}tj|ƒ}d|dd…S)Nrz%04d%02d%02dT%02d:%02d:%02dé)Ú isinstancerr'ÚtupleÚtimeZ struct_timeZ localtime)r&r r r Ú _strftimes  r.c@sreZdZdZddd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„ZdS)ÚDateTimez‹DateTime wrapper for an ISO 8601 string or time tuple or localtime integer value to generate 'dateTime.iso8601' XML-RPC value. rcCs t|tƒr||_n t|ƒ|_dS)N)r+Ústrr&r.)rr&r r r r)s zDateTime.__init__cCsšt|tƒr|j}|j}nzt|tƒr2|j}t|ƒ}n`t|tƒrH|j}|}nJt|dƒrd|jƒ}|jƒ}n.t|dƒrv|jj p|t |ƒ}t d|jj |fƒ‚||fS)NÚ timetuplerzCan't compare %s and %s) r+r/r&rr'r0Úhasattrr1rrÚtypeÚ TypeError)rÚotherr ÚoZotyper r r Úmake_comparable/s$       zDateTime.make_comparablecCs|j|ƒ\}}||kS)N)r7)rr5r r6r r r Ú__lt__DszDateTime.__lt__cCs|j|ƒ\}}||kS)N)r7)rr5r r6r r r Ú__le__HszDateTime.__le__cCs|j|ƒ\}}||kS)N)r7)rr5r r6r r r Ú__gt__LszDateTime.__gt__cCs|j|ƒ\}}||kS)N)r7)rr5r r6r r r Ú__ge__PszDateTime.__ge__cCs|j|ƒ\}}||kS)N)r7)rr5r r6r r r Ú__eq__TszDateTime.__eq__cCstj|jdƒS)Nz%Y%m%dT%H:%M:%S)r-Ústrptimer&)rr r r r1XszDateTime.timetuplecCs|jS)N)r&)rr r r r`szDateTime.__str__cCsd|jj|jt|ƒfS)Nz<%s %r at %#x>)rrr&Úid)rr r r r cszDateTime.__repr__cCst|ƒjƒ|_dS)N)r0Ústripr&)rÚdatar r r ÚdecodefszDateTime.decodecCs$|jdƒ|j|jƒ|jdƒdS)Nzz )Úwriter&)rÚoutr r r Úencodeis  zDateTime.encodeN)r)rrrrrr7r8r9r:r;r<r1rr rArDr r r r r/#s r/cCstƒ}|j|ƒ|S)N)r/rA)r@r&r r r Ú _datetimens rEcCs tj|dƒS)Nz%Y%m%dT%H:%M:%S)rr=)r@r r r Ú_datetime_typetsrFc@s:eZdZdZd dd„Zdd„Zdd„Zd d „Zd d „ZdS)ÚBinaryzWrapper for binary data.NcCs>|dkrd}n&t|ttfƒs,td|jjƒ‚t|ƒ}||_dS)Nóz#expected bytes or bytearray, not %s)r+ÚbytesÚ bytearrayr4rrr@)rr@r r r r€s zBinary.__init__cCs t|jdƒS)Nzlatin-1)r0r@)rr r r r�szBinary.__str__cCst|tƒr|j}|j|kS)N)r+rGr@)rr5r r r r<’s z Binary.__eq__cCstj|ƒ|_dS)N)Úbase64Ú decodebytesr@)rr@r r r rA—sz Binary.decodecCs4|jdƒtj|jƒ}|j|jdƒƒ|jdƒdS)Nz Úasciiz )rBrKÚ encodebytesr@rA)rrCÚencodedr r r rDšs  z Binary.encode)N) rrrrrrr<rArDr r r r rG}s  rGcCstƒ}|j|ƒ|S)N)rGrA)r@r&r r r Ú_binary s rPc@s$eZdZdd„Zdd„Zdd„ZdS)Ú ExpatParsercCsDtjddƒ|_}||_|j|_|j|_|j|_ d}|j |dƒdS)N) rZ ParserCreateÚ_parserÚ_targetÚstartZStartElementHandlerÚendZEndElementHandlerr@ZCharacterDataHandlerÚxml)rÚtargetÚparserÚencodingr r r r­szExpatParser.__init__cCs|jj|dƒdS)Nr)rRÚParse)rr@r r r Úfeed¶szExpatParser.feedc Cs8y |j}Wntk rYnX|`|`|jddƒdS)NrHT)rRÚAttributeErrorrSrZ)rrXr r r Úclose¹s  zExpatParser.closeN)rrrrr[r]r r r r rQ«s rQc@sþeZdZdZddd„ZiZdd„Zdd „Zd d „Zeee dƒ<d d „Z e ee <dd„Z e ee <e Zdd„Zeee<efdd„Zeee<dd„Zeee<eee<dd„Zeee<eee<efdd„Zeee<dd„Zeee<dd„Zeee<eee <eed<dS) Ú MarshalleravGenerate an XML-RPC params chunk from a Python data structure. Create a Marshaller instance for each set of parameters, and use the "dumps" method to convert your data (represented as a tuple) to an XML-RPC params chunk. To write a fault response, pass a Fault instance instead. You may prefer to use the "dumps" module function for this purpose. NFcCsi|_d|_||_||_dS)N)Úmemor@rYÚ allow_none)rrYr`r r r rÙszMarshaller.__init__cCs†g}|j}|j}t|tƒr@|dƒ||j|jdœ|ƒ|dƒn8|dƒx&|D]}|dƒ|||ƒ|dƒqNW|dƒdj|ƒ}|S) Nz )r#r$z z z z z Ú)ÚappendÚ_Marshaller__dumpr+r"r#r$Újoin)rÚvaluesrCrBÚdumpÚvÚresultr r r Údumpsás"      zMarshaller.dumpsc CsŽy|jt|ƒ}Wnjtk r|t|dƒs)r`r4)rr&rBr r r Údump_nilszMarshaller.dump_nilcCs$|dƒ||rdpdƒ|dƒdS)NzÚ1Ú0z r )rr&rBr r r Ú dump_boolszMarshaller.dump_boolcCs<|tks|tkrtdƒ‚|dƒ|tt|ƒƒƒ|dƒdS)Nzint exceeds XML-RPC limitsz z )ÚMAXINTÚMININTÚ OverflowErrorr0Úint)rr&rBr r r Ú dump_longs zMarshaller.dump_longcCs |dƒ|t|ƒƒ|dƒdS)Nzz )r)rr&rBr r r Ú dump_double%s zMarshaller.dump_doublecCs |dƒ|||ƒƒ|dƒdS)Nzz r )rr&rBr r r r Ú dump_unicode+s zMarshaller.dump_unicodecCs,|dƒtj|ƒ}||jdƒƒ|dƒdS)Nz rMz )rKrNrA)rr&rBrOr r r Ú dump_bytes1s zMarshaller.dump_bytescCs^t|ƒ}||jkrtdƒ‚d|j|<|j}|dƒx|D]}|||ƒq8W|dƒ|j|=dS)Nz"cannot marshal recursive sequencesz z )r>r_r4rc)rr&rBÚirfrgr r r Ú dump_array9s   zMarshaller.dump_arraycCs˜t|ƒ}||jkrtdƒ‚d|j|<|j}|dƒxP|jƒD]D\}}|dƒt|tƒs^tdƒ‚|d||ƒƒ|||ƒ|dƒq z zdictionary key must be stringz%s z z )r>r_r4rcÚitemsr+r0)rr&rBr r}rfÚkrgr r r Ú dump_structGs     zMarshaller.dump_structcCs |dƒ|t|ƒƒ|dƒdS)Nzz )r.)rr&rBr r r Ú dump_datetimeYs zMarshaller.dump_datetimecCs2|jtkr ||_|j|ƒ|`n|j|j|ƒdS)N)rÚWRAPPERSrBrDr�rj)rr&rBr r r Ú dump_instance_s   zMarshaller.dump_instancerk)NF)!rrrrrrlrircrqr3rtÚboolryrxZdump_intrzÚfloatr r{r0r|rIrJr~r,Úlistr�Údictr‚rr„r/rGr r r r r^Ìs<      r^c@sneZdZdZdEdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z iZ dd„Z e e d<dd„Zee d<dd„Zee d<ee d<ee d<ee d<ee d<ee d <d!d"„Zee d#<ee d$<d%d&„Zee d'<d(d)„Zee d*<ee d+<d,d-„Zee d.<d/d0„Zee d1<d2d3„Zee d4<d5d6„Zee d7<d8d9„Zee d:<d;d<„Zee d=<d>d?„Zee d@<dAdB„Zee dC<dDS)FÚ UnmarshalleraUnmarshal an XML-RPC response, based on incoming XML event messages (start, data, end). Call close() to get the resulting data structure. Note that this reader is fairly tolerant, and gladly accepts bogus XML-RPC data without complaining (but not bogus XML). FcCsHd|_g|_g|_g|_d|_d|_d|_|jj|_|p:||_||_ dS)NFzutf-8) Ú_typeÚ_stackÚ_marksÚ_dataÚ_valueÚ _methodnameÚ _encodingrbÚ _use_datetimeÚ _use_bytes)rÚ use_datetimeÚuse_builtin_typesr r r rs  zUnmarshaller.__init__cCs:|jdks|jrtƒ‚|jdkr0tf|jdŽ‚t|jƒS)NÚfaultr)rŠrŒr!r"r‹r,)rr r r r]‹s  zUnmarshaller.closecCs|jS)N)r�)rr r r Ú getmethodname“szUnmarshaller.getmethodnamecCs ||_dS)N)r�)rrYZ standaloner r r rV™szUnmarshaller.xmlcCshd|kr|jdƒd}|dks&|dkr8|jjt|jƒƒg|_|jrZ||jkrZtd|ƒ‚|dk|_dS)Nú:rÚarrayÚstructzunknown tag %rr&éÿÿÿÿ) ÚsplitrŒrbÚlenr‹r�rŽrlr!)rÚtagZattrsr r r rT�s zUnmarshaller.startcCs|jj|ƒdS)N)r�rb)rÚtextr r r r@¨szUnmarshaller.datacCspy|j|}WnNtk r\d|kr*dSy|j|jdƒd}Wntk rVdSXYnX||dj|jƒƒS)Nr—rrarš)rlrmr›rdr�)rr�rpr r r rU«s zUnmarshaller.endcCshy|j|}WnNtk r\d|kr*dSy|j|jdƒd}Wntk rVdSXYnX|||ƒS)Nr—rrš)rlrmr›)rr�r@rpr r r Ú end_dispatch»s zUnmarshaller.end_dispatchcCs|jdƒd|_dS)Nr)rbrŽ)rr@r r r Úend_nilÍs zUnmarshaller.end_nilZnilcCs:|dkr|jdƒn|dkr(|jdƒntdƒ‚d|_dS)NrsFrrTzbad boolean valuer)rbr4rŽ)rr@r r r Ú end_booleanÒs   zUnmarshaller.end_booleanÚbooleancCs|jt|ƒƒd|_dS)Nr)rbrxrŽ)rr@r r r Úend_intÜszUnmarshaller.end_intZi1Zi2Zi4Zi8rxZ bigintegercCs|jt|ƒƒd|_dS)Nr)rbr†rŽ)rr@r r r Ú end_doubleæszUnmarshaller.end_doubleZdoubler†cCs|jt|ƒƒd|_dS)Nr)rbrrŽ)rr@r r r Úend_bigdecimalìszUnmarshaller.end_bigdecimalZ bigdecimalcCs&|jr|j|jƒ}|j|ƒd|_dS)Nr)r�rArbrŽ)rr@r r r Ú end_stringñs  zUnmarshaller.end_stringÚstringÚnamecCs.|jjƒ}|j|d…g|j|d…<d|_dS)Nr)rŒÚpopr‹rŽ)rr@Úmarkr r r Ú end_arrayùs zUnmarshaller.end_arrayr˜cCsd|jjƒ}i}|j|d…}x,tdt|ƒdƒD]}||d|||<q.W|g|j|d…<d|_dS)Nrrr)rŒr©r‹ÚrangerœrŽ)rr@rªrˆrr}r r r Ú end_structs zUnmarshaller.end_structr™cCs6tƒ}|j|jdƒƒ|jr"|j}|j|ƒd|_dS)NrMr)rGrArDr’r@rbrŽ)rr@r&r r r Ú end_base64 s  zUnmarshaller.end_base64rKcCs,tƒ}|j|ƒ|jrt|ƒ}|j|ƒdS)N)r/rAr‘rFrb)rr@r&r r r Ú end_dateTimes  zUnmarshaller.end_dateTimezdateTime.iso8601cCs|jr|j|ƒdS)N)rŽr¦)rr@r r r Ú end_valueszUnmarshaller.end_valuer&cCs d|_dS)NÚparams)rŠ)rr@r r r Ú end_params#szUnmarshaller.end_paramsr±cCs d|_dS)Nr•)rŠ)rr@r r r Ú end_fault'szUnmarshaller.end_faultr•cCs"|jr|j|jƒ}||_d|_dS)NÚ methodName)r�rAr�rŠ)rr@r r r Úend_methodName+s zUnmarshaller.end_methodNamer´N)FF)rrrrrr]r–rVrTr@rUrŸrlr r¡r£r¤r¥r¦r«r­r®r¯r°r²r³rµr r r r r‰ssZ   r‰c@s$eZdZdd„Zdd„Zdd„ZdS)Ú_MultiCallMethodcCs||_||_dS)N)Ú_MultiCallMethod__call_listÚ_MultiCallMethod__name)rZ call_listr¨r r r r8sz_MultiCallMethod.__init__cCst|jd|j|fƒS)Nz%s.%s)r¶r·r¸)rr¨r r r Ú __getattr__;sz_MultiCallMethod.__getattr__cGs|jj|j|fƒdS)N)r·rbr¸)rÚargsr r r Ú__call__=sz_MultiCallMethod.__call__N)rrrrr¹r»r r r r r¶5sr¶c@s eZdZdZdd„Zdd„ZdS)ÚMultiCallIteratorzaIterates over the results of a multicall. Exceptions are raised in response to xmlrpc faults.cCs ||_dS)N)Úresults)rr½r r r rDszMultiCallIterator.__init__cCsR|j|}t|ƒtiƒkr.t|d|dƒ‚n t|ƒtgƒkrF|dStdƒ‚dS)Nr#r$rz#unexpected type in multicall result)r½r3r"Ú ValueError)rr}Úitemr r r Ú __getitem__Gs  zMultiCallIterator.__getitem__N)rrrrrrÀr r r r r¼@sr¼c@s4eZdZdZdd„Zdd„ZeZdd„Zdd „Zd S) Ú MultiCalla~server -> an 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)Ú_MultiCall__serverÚ_MultiCall__call_list)rÚserverr r r raszMultiCall.__init__cCsd|jjt|ƒfS)Nz <%s at %#x>)rrr>)rr r r r eszMultiCall.__repr__cCs t|j|ƒS)N)r¶rÃ)rr¨r r r r¹jszMultiCall.__getattr__cCs:g}x"|jD]\}}|j||dœƒq Wt|jjj|ƒƒS)N)r´r±)rÃrbr¼rÂÚsystemZ multicall)rZmarshalled_listr¨rºr r r r»mszMultiCall.__call__N) rrrrrr rr¹r»r r r r rÁPs rÁFcCsrtrHtrH|rt}tj}n|r&t}t}nt}t}tdd||tƒ}t|ƒ}n"t||d�}trbt|ƒ}nt |ƒ}||fS)z¥getparser() -> parser, unmarshaller Create an instance of the fastest available parser, and attach it to an unmarshalling object. Return both objects. TF)r“r”) Ú FastParserÚFastUnmarshallerrFrKrLrPrEr"r‰rQ)r“r”Z mkdatetimeZmkbytesrWrXr r r Ú getparsers    rÈcCsÂt|ttfƒstdƒ‚t|tƒr&d}n"|rHt|tƒrHt|ƒdksHtdƒ‚|sPd}tr^t|ƒ}n t||ƒ}|j|ƒ}|dkrˆdt|ƒ}nd}|r¢|d|d|d f}n|r´|d |d f}n|Sd j |ƒS) aÙdata [,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 byte strings in the data structure are assumed to use the packet encoding. Unicode strings are automatically converted, where necessary. z(argument must be tuple or Fault instancerz"response tuple must be a singletonzutf-8z$ z z z z z z ra) r+r,r"ÚAssertionErrorrœÚFastMarshallerr^rir0rd)r±Ú methodnameZmethodresponserYr`Úmr@Z xmlheaderr r r ri¦s6    ricCs2t||d�\}}|j|ƒ|jƒ|jƒ|jƒfS)zòdata -> 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“r”)rÈr[r]r–)r@r“r”ÚpÚur r r Úloadsñs  rÏc Cs<tst‚tƒ}tjd|dd��}|j|ƒWdQRX|jƒS)zhdata -> gzip encoded data Encode data using the gzip content encoding as described in RFC 1952 Úwbr)ÚmodeÚfileobjZ compresslevelN)ÚgzipÚNotImplementedErrorrÚGzipFilerBÚgetvalue)r@rpÚgzfr r r Ú gzip_encodes rØé@cCsˆtst‚tjdt|ƒd��H}y$|dkr0|jƒ}n|j|dƒ}Wntk r\tdƒ‚YnXWdQRX|dkr„t|ƒ|kr„tdƒ‚|S)zrgzip encoded data -> unencoded data Decode data using the gzip content encoding as described in RFC 1952 Úrb)rÑrÒrrz invalid dataNz#max gzipped payload length exceeded)rÓrÔrÕrÚreadÚOSErrorr¾rœ)r@Z max_decoder×Zdecodedr r r Ú gzip_decodes rÝc@s eZdZdZdd„Zdd„ZdS)ÚGzipDecodedResponsezha file-like object to decode a response encoded with the gzip method, as described in RFC 1952. cCs.tst‚t|jƒƒ|_tjj|d|jd�dS)NrÚ)rÑrÒ)rÓrÔrrÛÚiorÕr)rÚresponser r r r=szGzipDecodedResponse.__init__c Cs"ztjj|ƒWd|jjƒXdS)N)rÓrÕr]rß)rr r r r]EszGzipDecodedResponse.closeN)rrrrrr]r r r r rÞ9srÞc@s$eZdZdd„Zdd„Zdd„ZdS)Ú_MethodcCs||_||_dS)N)Ú _Method__sendÚ _Method__name)rÚsendr¨r r r rRsz_Method.__init__cCst|jd|j|fƒS)Nz%s.%s)rárârã)rr¨r r r r¹Usz_Method.__getattr__cGs|j|j|ƒS)N)rârã)rrºr r r r»Wsz_Method.__call__N)rrrrr¹r»r r r r ráOsrác@s~eZdZdZdeZdZdZddd„Zddd „Z dd d „Z d d „Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„ZdS)Ú Transportz1Handles an HTTP transaction to an XML-RPC server.zPython-xmlrpc/%sTNFcCs||_||_d|_g|_dS)N)NN)r‘Ú_use_builtin_typesÚ _connectionÚ_extra_headers)rr“r”r r r rnszTransport.__init__cCs~xxdD]p}y|j||||ƒStjjk r8|r4‚Yqtk rt}z"|sb|jtjtjtjfkrd‚WYdd}~XqXqWdS)Nrr)rr) Úsingle_requestÚhttpÚclientZRemoteDisconnectedrÜÚerrnoZ ECONNRESETZ ECONNABORTEDZEPIPE)rÚhostÚhandlerÚ request_bodyÚverboser}Úer r r Úrequest~s  zTransport.requestcCs y6|j||||ƒ}|jƒ}|jdkr4||_|j|ƒSWn2tk rL‚Yntk rh|jƒ‚YnX|jddƒr~|j ƒt |||j|j t |j ƒƒƒ‚dS)NéÈzcontent-lengthra)Ú send_requestZ getresponseZstatusrðÚparse_responser"Ú Exceptionr]Ú getheaderrÛrÚreasonrˆZ getheaders)rrírîrïrðZ http_connZrespr r r ré‹s"  zTransport.single_requestcCst|j|jd�S)N)r“r”)rÈr‘ræ)rr r r rȬszTransport.getparsercCsri}t|tƒr|\}}tjj|ƒ\}}|rdtjj|ƒ}tj|ƒjdƒ}dj |j ƒƒ}dd|fg}ng}|||fS)Nzutf-8raZ AuthorizationzBasic ) r+r,ÚurllibÚparseZ splituserZunquote_to_bytesrKrNrArdr›)rríÚx509ZauthZ extra_headersr r r Ú get_host_info»s  zTransport.get_host_infocCsL|jr||jdkr|jdS|j|ƒ\}|_}|tjj|ƒf|_|jdS)Nrr)rçrürèrêrëZHTTPConnection)rríÚchostrûr r r Úmake_connectionÕs  zTransport.make_connectioncCs |j\}}|rd|_|jƒdS)N)NN)rçr])rríÚ connectionr r r r]ãs zTransport.closecCsŽ|j|ƒ}|jdd…}|r&|jdƒ|jrLtrL|jd|dd�|jd ƒn |jd|ƒ|jd ƒ|jd |jfƒ|j||ƒ|j ||ƒ|S) NrZPOSTT)Zskip_accept_encodingúAccept-EncodingrÓú Content-Typeútext/xmlz User-Agent)rrÓ)rr) rþrèZset_debuglevelÚaccept_gzip_encodingrÓZ putrequestrbÚ user_agentÚ send_headersÚ send_content)rrírîrïÚdebugrÿrr r r rôòs        zTransport.send_requestcCs"x|D]\}}|j||ƒqWdS)N)Ú putheader)rrÿrÚkeyÚvalr r r r szTransport.send_headerscCsR|jdk r0|jt|ƒkr0tr0|jddƒt|ƒ}|jdtt|ƒƒƒ|j|ƒdS)NzContent-EncodingrÓzContent-Length)Úencode_thresholdrœrÓrrØr0Z endheaders)rrÿrïr r r rs  zTransport.send_contentcCsŽt|dƒr*|jddƒdkr$t|ƒ}q.|}n|}|jƒ\}}x2|jdƒ}|sLP|jr`tdt|ƒƒ|j|ƒq 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. NF)rc Csštjj|ƒ\} }| dkr tdƒ‚tjj|ƒ\|_|_|js@d|_|dkrz| dkr^t} d|i} nt} i} | f||dœ| —Ž}||_ |p†d|_ ||_ ||_ dS) NrêÚhttpszunsupported XML-RPC protocolz/RPC2r)r“r”zutf-8)rêr) rùrúZ splittyperÜZ splithostÚ_ServerProxy__hostÚ_ServerProxy__handlerrråÚ_ServerProxy__transportÚ_ServerProxy__encodingÚ_ServerProxy__verboseÚ_ServerProxy__allow_none) rZuriÚ transportrYrðr`r“r”rr3rîZ extra_kwargsr r r r‚s&  zServerProxy.__init__cCs|jjƒdS)N)rr])rr r r Z__closeŸszServerProxy.__closecCsPt|||j|jd�j|jdƒ}|jj|j|j||jd�}t |ƒdkrL|d}|S)N)rYr`Úxmlcharrefreplace)rðrr) rirrrDrròrrrrœ)rrËr±ròràr r r Z __request¢s   zServerProxy.__requestcCsd|jj|j|jfS)Nz <%s for %s%s>)rrrr)rr r r r ´szServerProxy.__repr__cCs t|j|ƒS)N)ráÚ_ServerProxy__request)rr¨r r r r¹¼szServerProxy.__getattr__cCs.|dkr|jS|dkr|jStd|fƒ‚dS)z|A workaround to get special attributes on the ServerProxy without interfering with the magic __getattr__ r]rzAttribute %r not foundN)Ú_ServerProxy__closerr\)rÚattrr r r r»Ãs zServerProxy.__call__cCs|S)Nr )rr r r Ú __enter__ÍszServerProxy.__enter__cGs |jƒdS)N)r)rrºr r r Ú__exit__ÐszServerProxy.__exit__)NNFFFF) rrrrrrrr rr¹r»r!r"r r r r rls rÚ__main__zhttp://localhost:8000ZERRORé liÿÿÿli€iD€ÿÿi¨€ÿÿi �ÿÿip�ÿÿiÔ�ÿÿiD€ÿÿiC€ÿÿiB€ÿÿi¨€ÿÿi§€ÿÿi¦€ÿÿi¥€ÿÿ)FF)NNNF)FF)rÙ)VrrKÚsysr-rÚdecimalrZ http.clientrêZ urllib.parserùZ xml.parsersrrìrßrrÓÚ ImportErrorr Ú version_inforrurvZ PARSE_ERRORZ SERVER_ERRORZAPPLICATION_ERRORZ SYSTEM_ERRORZTRANSPORT_ERRORZNOT_WELLFORMED_ERRORZUNSUPPORTED_ENCODINGZINVALID_ENCODING_CHARZINVALID_XMLRPCZMETHOD_NOT_FOUNDZINVALID_METHOD_PARAMSZINTERNAL_ERRORrörrr!r"r…r¢ZBooleanZ_day0r%r'r.r/rErFrGrPrƒrQr^r‰r¶r¼rÁrÊrÆrÇrÈrirÏrØrÝrÕÚobjectrÞrárårrZServerrrÄr Z currentTimeZgetCurrentTimergZmultiZgetDataÚpowÚaddràr r r r Ú�s¬           K #!(C '  ' J  d)i