grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026î   f/|ã @s™dZddddddddd d d d d g ZddlZddlZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl Z ddl mZddlmZejdddeƒZeƒjejƒGdd„deƒZGdd„deƒZejdd„ƒZGdd„deƒZdd„Zdd„Zdd„Zdd„Z Gd d„dƒZ!d!Z"e j#d"ƒZ$d#d$d%„Z%d&d'„Z&e j#d(e j'ƒZ(d)d*„Z)d+d,„Z*d-d.„Z+Gd/d0„d0ƒZ,Gd1d2„d2ƒZ-Gd3d4„d4e-ƒZ.d5d6„Z/Gd7d8„d8e0ƒZ1id9d:6d;d<6d=d>6d?d@6Z2e3ƒZ4GdAdB„dBƒZ5dCdD„Z6e7e8e9eje:fZ;GdEdF„dFe3ƒZ<dGdH„Z=iedIe/dJe,dKe.ƒe>6edIe=dJe5dKe<ƒe?6Z@dLddMdNdOedPd „ZAdLddMdNdOedQd „ZBdLe>dRdNdSdTdUd „ZCdLe>dSdTdRdNdVd „ZDdS)WaÕplistlib.py -- a tool to generate and parse MacOSX .plist files. The property list (.plist) file format is a simple XML pickle supporting basic object types, like dictionaries, lists, numbers and strings. Usually the top level object is a dictionary. To write out a plist file, use the dump(value, file) function. 'value' is the top level object, 'file' is a (writable) file object. To parse a plist from a file, use the load(file) function, with a (readable) file object as the only argument. It returns the top level object (again, usually a dictionary). To work with plist data in bytes objects, you can use loads() and dumps(). Values can be strings, integers, floats, booleans, tuples, lists, dictionaries (but only with string keys), Data, bytes, bytearray, or datetime.datetime objects. Generate Plist example: pl = dict( aString = "Doodah", aList = ["A", "B", 12, 32.1, [1, 2, 3]], aFloat = 0.1, anInt = 728, aDict = dict( anotherString = "", aUnicodeValue = "M\xe4ssig, Ma\xdf", aTrueValue = True, aFalseValue = False, ), someData = b"", someMoreData = b"" * 10, aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())), ) with open(fileName, 'wb') as fp: dump(pl, fp) Parse Plist example: with open(fileName, 'rb') as fp: pl = load(fp) print(pl["aKey"]) Ú readPlistÚ writePlistÚreadPlistFromBytesÚwritePlistToBytesÚPlistÚDataÚDictÚFMT_XMLÚ FMT_BINARYÚloadÚdumpÚloadsÚdumpséN)ÚBytesIO)Úwarn)Ú ParserCreateÚ PlistFormatzFMT_XML FMT_BINARYÚmodulec@s:eZdZfZdd„Zdd„Zdd„ZdS)Ú _InternalDictc CsCy||}Wntk r.t|ƒ‚YnXtdtdƒ|S)NzLAttribute access from plist dicts is deprecated, use d[key] notation insteadé)ÚKeyErrorÚAttributeErrorrÚDeprecationWarning)ÚselfÚattrÚvalue©rú-/opt/alt/python34/lib64/python3.4/plistlib.pyÚ __getattr__Vs  z_InternalDict.__getattr__cCstdtdƒ|||t|dƒ�}t|ƒ}WdQX|ƒ}|j|ƒ|S)z,Deprecated. Use the load() function instead.ÚrbN)r/r Úupdate)Úclsr,r.rZplistrrrÚfromFile‰s   zPlist.fromFilec Cs)t|dƒ�}t||ƒWdQXdS)z,Deprecated. Use the dump() function instead.ÚwbN)r/r )rr,r.rrrÚwrite’sz Plist.write)r!r"r#Ú__doc__r&Ú classmethodr3r5rr)r(rrs  cCsHtdtdƒt|dƒ�#}t|dddddtƒSWdQXdS) z¯ Read a .plist from a path or file. pathOrFile should either be a file name, or a readable binary file object. This function is deprecated, use load instead. z8The readPlist function is deprecated, use load() insteadrr0ÚfmtNÚuse_builtin_typesFÚ dict_type)rrr/r r)r,r.rrrr˜s  cCsKtdtdƒt|dƒ�&}t||dtddddƒWd QXd S) z¥ Write 'value' to a .plist file. 'pathOrFile' may either be a file name or a (writable) file object. This function is deprecated, use dump instead. z9The writePlist function is deprecated, use dump() insteadrr4r8Ú sort_keysTÚskipkeysFN)rrr/r r)rr,r.rrrr¦s cCs2tdtdƒtt|ƒdddddtƒS)z} Read a plist data from a bytes object. Return the root object. This function is deprecated, use loads instead. zBThe readPlistFromBytes function is deprecated, use loads() insteadrr8Nr9Fr:)rrr rr)Údatarrrr³s c CsBtdtdƒtƒ}t||dtddddƒ|jƒS)zp Return 'value' as a plist-formatted bytes object. This function is deprecated, use dumps instead. zAThe writePlistToBytes function is deprecated, use dumps() insteadrr8r;Tr<F)rrrr rÚgetvalue)rÚfrrrr¿s   c@s[eZdZdZdd„Zedd„ƒZddd„Zd d „Zd d „Z d S)rz] Wrapper for binary data. This class is deprecated, use a bytes object instead. cCs+t|tƒstdƒ‚n||_dS)Nzdata must be as bytes)r)ÚbytesÚ TypeErrorr=)rr=rrrr&Ósz Data.__init__cCs|t|ƒƒS)N)Ú_decode_base64)r2r=rrrÚ fromBase64ØszData.fromBase64éLcCst|j|ƒS)N)Ú_encode_base64r=)rÚ maxlinelengthrrrÚasBase64Þsz Data.asBase64cCsXt||jƒr"|j|jkSt|tƒr>|j|kSt|ƒt|ƒkSdS)N)r)r(r=r*Úid)rÚotherrrrÚ__eq__ás  z Data.__eq__cCsd|jjt|jƒfS)Nz%s(%s))r(r!Úreprr=)rrrrÚ__repr__ész Data.__repr__N) r!r"r#r6r&r7rCrGrJrLrrrrrÌs   sŽ zv[\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0b\x0c\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f]rDcCsn|dd}g}xJtdt|ƒ|ƒD]0}||||…}|jtj|ƒƒq-Wdj|ƒS)Nééró)ÚrangeÚlenÚappendÚbinasciiZ b2a_base64Újoin)ÚsrFZ maxbinsizeÚpiecesÚiÚchunkrrrrEs rEcCs6t|tƒr%tj|jdƒƒStj|ƒSdS)Nzutf-8)r)r*rSZ a2b_base64Úencode)rUrrrrB srBz{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?ZcCsld}tj|ƒjƒ}g}x;|D]3}||}|dkrHPn|jt|ƒƒq(Wtj|ŒS)NÚyearÚmonthÚdayÚhourÚminuteÚsecond)zyearzmonthzdayzhourzminutezsecond)Ú _dateParserÚmatchÚ groupdictrRÚintÚdatetime)rUZorderZgdZlstÚkeyÚvalrrrÚ_date_from_strings   rgcCs,d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZ)rZr[r\r]r^r_)ÚdrrrÚ_date_to_string&sricCsˆtj|ƒ}|dk r*tdƒ‚n|jddƒ}|jddƒ}|jddƒ}|jddƒ}|jd d ƒ}|S) Nzz>)Ú_controlCharPatÚsearchÚ ValueErrorÚreplace)ÚtextÚmrrrÚ_escape,s ruc@sôeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'S)(Ú _PlistParsercCs1g|_d|_d|_||_||_dS)N)ÚstackÚ current_keyÚrootÚ_use_builtin_typesÚ _dict_type)rr9r:rrrr&9s     z_PlistParser.__init__cCsPtƒ|_|j|j_|j|j_|j|j_|jj|ƒ|j S)N) rÚparserÚhandle_begin_elementZStartElementHandlerÚhandle_end_elementZEndElementHandlerÚ handle_dataZCharacterDataHandlerZ ParseFilery)rZfileobjrrrÚparse@s  z_PlistParser.parsecCs<g|_t|d|dƒ}|dk r8||ƒndS)NZbegin_)r=Úgetattr)rÚelementÚattrsÚhandlerrrrr}Hs  z!_PlistParser.handle_begin_elementcCs0t|d|dƒ}|dk r,|ƒndS)NZend_)r�)rr‚r„rrrr~Ns z_PlistParser.handle_end_elementcCs|jj|ƒdS)N)r=rR)rr=rrrrSsz_PlistParser.handle_datacCsÆ|jdk rdt|jdtiƒƒsDtd|jjƒ‚n||jd|jr…)rwrRÚwritelnrž)rr‚rrrÚ begin_element§sz_DumbXMLWriter.begin_elementcCsT|jdkst‚|jjƒ|ks0t‚|jd8_|jd|ƒdS)Nrr…z)ržÚAssertionErrorrwr�r¡)rr‚rrrÚ end_element¬sz_DumbXMLWriter.end_elementNcCsJ|dk r5t|ƒ}|jd|||fƒn|jd|ƒdS)Nz <%s>%sz<%s/>)rur¡)rr‚rrrrÚsimple_element²s  z_DumbXMLWriter.simple_elementcCsh|rTt|tƒr'|jdƒ}n|jj|j|jƒ|jj|ƒn|jjdƒdS)Nzutf-8s )r)r*rYr�r5ržrŸ)rÚlinerrrr¡ºs z_DumbXMLWriter.writeln)r!r"r#r&r¢r¤r¥r¡rrrrr› s   r›c@sseZdZddddddd„Zdd „Zd d „Zd d „Zdd„Zdd„Zdd„Z dS)Ú _PlistWriterrs r…TFcCsB|r|jtƒntj||||ƒ||_||_dS)N)r5Ú PLISTHEADERr›r&Ú _sort_keysÚ _skipkeys)rr�r rŸZ writeHeaderr;r<rrrr&Çs  z_PlistWriter.__init__cCs+|jdƒ|j|ƒ|jdƒdS)Nzz)r¡Ú write_value)rrrrrr5Ñs  z_PlistWriter.writecCs t|tƒr"|jd|ƒnz|dkr>|jdƒn^|dkrZ|jdƒnBt|tƒr«d|ko€dknrœ|jd d |ƒqœt|ƒ‚nñt|tƒrÓ|jd t|ƒƒnÉt|tƒrò|j|ƒnªt|t ƒr|j |ƒn‹t|t t fƒr6|j |ƒnft|tjƒra|jd t|ƒƒn;t|ttfƒr†|j|ƒntd t|ƒƒ‚dS)NÚstringTÚtrueFZfalser…é?é@Zintegerz%dÚrealZdatezunsupported type: %sr†lûÿÿÿl)r)r*r¥rcÚ OverflowErrorr–rKÚdictÚ write_dictrÚ write_datar@Ú bytearrayÚ write_bytesrdriÚtupleÚlistÚ write_arrayrAr‡)rrrrrr«Ös.  z_PlistWriter.write_valuecCs|j|jƒdS)N)r¶r=)rr=rrrr´ûsz_PlistWriter.write_datacCs¤|jdƒ|jd8_tddt|jjdd ƒ|jƒƒ}x6t||ƒjdƒD]}|rd|j|ƒqdqdW|jd7_|j dƒdS) Nr=r…érDs ó és s ) r¢ržÚmaxrQrŸrrrEÚsplitr¡r¤)rr=rFr¦rrrr¶þs )z_PlistWriter.write_bytescCs¿|r®|jdƒ|jr1t|jƒƒ}n |jƒ}x^|D]V\}}t|tƒs}|jrnqDntdƒ‚n|jd|ƒ|j |ƒqDW|j dƒn |jdƒdS)Nr²zkeys must be stringsre) r¢r©ÚsortedÚitemsr)r*rªrAr¥r«r¤)rrhrÀrerrrrr³ s    z_PlistWriter.write_dictcCsR|rA|jdƒx|D]}|j|ƒqW|jdƒn |jdƒdS)NÚarray)r¢r«r¤r¥)rrÁrrrrr¹s   z_PlistWriter.write_arrayN) r!r"r#r&r5r«r´r¶r³r¹rrrrr§Æs    %  r§cCsËd }x!|D]}|j|ƒr dSq WxštjdftjdftjdffD]n\}}|j|ƒsvqUnxJ|D]B}||jdƒj|ƒ}|dt|ƒ…|kr}dSq}WqUWdS) Nó6xBBQQQiàÿÿÿ)Ú_fpÚseekÚosÚSEEK_ENDÚreadrQrÑÚstructÚunpackÚ _ref_sizeÚ _read_intsÚ_object_offsetsÚ _undefinedÚ_objectsÚ _read_objectÚOSErrorÚ IndexErrorÚerror)rr.ÚtrailerÚ offset_sizeÚ num_objectsÚ top_objectÚoffset_table_offsetrrrr€_s  $z_BinaryPlistParser.parsecCsb|dkr^|jjdƒdd@}d|>}dt|}tj||jj|ƒƒdS|S)z$ return the size of the next object.ér…rrNrn)rÙrÝÚ_BINARY_FORMATrÞrß)rÚtokenLrtrUr?rrrÚ _get_sizews    z_BinaryPlistParser._get_sizecsr|jjˆ|ƒ‰ˆtkr>tjdtˆ|ˆƒSt‡‡fdd†tdˆ|ˆƒDƒƒSdS)Nrnc3s/|]%}tjˆ||ˆ…dƒVqdS)ÚbigN)rcÚ from_bytes)Ú.0rW)r=Úsizerrú †sz0_BinaryPlistParser._read_ints..r)rÙrÝrïrÞrßr·rP)rÚnrõr)r=rõrrá�s  z_BinaryPlistParser._read_intscCs|j||jƒS)N)rárà)rr÷rrrÚ _read_refs‰sz_BinaryPlistParser._read_refsc szˆj|}|tk r|Sˆj|}ˆjj|ƒˆjjdƒd}|d@|d@}}|dkrzd}nï|dkr�d}nÚ|dkr¤d }nÅ|dkr¹d }n°|d krötjˆjjd|>ƒd d |dkƒ}ns|dkr'tj dˆjjdƒƒd}nB|dkrXtj dˆjjdƒƒd}n|dkrŸtj dˆjjdƒƒd}t j j |d$ƒ}nÊ|dkróˆj |ƒ}ˆj r؈jj|ƒ}qitˆjj|ƒƒ}nv|dkr2ˆj |ƒ}ˆjj|ƒjdƒ}|}n7|dkroˆj |ƒ}ˆjj|dƒjdƒ}nú|dkrψj |ƒ}ˆj|ƒ} g}|ˆj|<|j‡fdd †| Dƒƒnš|d!kr`ˆj |ƒ}ˆj|ƒ} ˆj|ƒ} ˆjƒ}|ˆj|frMé#z>dé3éimi€Qr¯éPrÄé`rzutf-16beé c3s|]}ˆj|ƒVqdS)N)rå)rôÚx)rrrröÒsz2_BinaryPlistParser._read_object..éÐi3,i;,i€ÈO:)rärãrârÙrÚrÝrcrórÞrßrdZutcfromtimestamprñrzrrÊrøÚextendr{ÚziprårÑ) rÚrefÚresultÚoffsetÚtokenZtokenHrðr?rUZobj_refsZkey_refsÚkÚor)rrråŒsl             % % "     "  #   #  z_BinaryPlistParser._read_objectN) r!r"r#r6r&r€rñrárørårrrrr×Ss     r×cCs:|dkrdS|dkr dS|d>d>r2dSdSdS) Nr…r¼rºrrØrMéir)ÚcountrrrÚ_count_to_sizeés  rc@sXeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd S)Ú_BinaryPlistWritercCs||_||_||_dS)N)rÙr©rª)rr.r;r<rrrr&ùs  z_BinaryPlistWriter.__init__c Cs3g|_i|_i|_|j|ƒt|jƒ}dg||_t|ƒ|_t|j|_ |j j dƒx|jD]}|j |ƒq€W|j |ƒ}|j jƒ}t|ƒ}dt||}|j j tj||jŒƒd}|||j|||f} |j j tjd| ŒƒdS)Nrsbplist00rnz >5xBBBQQQ)Ú_objlistÚ _objtableÚ _objidtableÚ_flattenrQrârràrïÚ _ref_formatrÙr5Ú _write_objectÚ _getrefnumÚtellrÞÚpack) rrrëÚobjrìrírêZ offset_formatZ sort_versionrérrrr5þs(      z_BinaryPlistWriter.writec Cst|tƒr1t|ƒ|f|jkr�dSnPt|tƒrht|jƒ|jf|jkr�dSnt|ƒ|jkr�dSt|j ƒ}|j j |ƒt|tƒrË||jt|ƒ|fBr…r¼z>BBBrºz>BBHérØz>BBLéz>BBQér il)rÙr5rÞr)rr rõrrrÚ _write_sizecs # ) ) )z_BinaryPlistWriter._write_sizec sˆj|ƒ}ˆjjƒˆj|<|dkrDˆjjdƒnÊ|dkrcˆjjdƒn«|dkr‚ˆjjdƒnŒt|tƒræ|dkrêy#ˆjjtjdd|ƒƒWqãtj k ræt |ƒd‚YqãXq|d&krˆjjtjd d |ƒƒq|d'krFˆjjtjd d|ƒƒq|d(krtˆjjtjdd|ƒƒq|d)kr¢ˆjjtjdd|ƒƒq|d*kr׈jjd|j d dddƒƒqt |ƒ‚n(t|t ƒrˆjjtjdd|ƒƒn÷t|t j ƒrj|t j dd d ƒjƒ}ˆjjtjdd|ƒƒn¤t|tƒr¨ˆjdt|jƒƒˆjj|jƒnft|ttfƒræˆjdt|ƒƒˆjj|ƒn(t|tƒrky)|jdƒ}ˆjdt|ƒƒWn7tk rW|jdƒ}ˆjdt|ƒƒYnXˆjj|ƒn£t|ttfƒr߇fd d!†|Dƒ}t|ƒ}ˆjd"|ƒˆjjtjd#ˆj||Œƒn/t|tƒrgg}}ˆjrt|jƒƒ} n |jƒ} xm| D]e\} } t| tƒseˆjrVq,nt d$ƒ‚n|j!ˆj| ƒƒ|j!ˆj| ƒƒq,Wt|ƒ}ˆjd%|ƒˆjjtjd#ˆj||Œƒˆjjtjd#ˆj||Œƒn t |ƒ‚dS)+NsFsTs rz>Bqr#r…r¼z>BBrºz>BHr!rØz>BLr"r®z>BQr¯sròrûz>BdrýiÑrþrÄrzutf-16bercsg|]}ˆj|ƒ‘qSr)r)rôr )rrrú ¬s z4_BinaryPlistWriter._write_object..rrnzkeys must be stringsrr illl)"rrÙrrâr5r)rcrÞrrèr±Úto_bytesr–rdZ total_secondsrr$rQr=r@rµr*rYÚUnicodeEncodeErrorr¸r·rr²r©r¿rÀrªrArR) rrrr?ÚtZrefsrUZkeyRefsZvalRefsZ rootItemsr r r)rrrss„    # " " " " )""  *     '*z _BinaryPlistWriter._write_objectN) r!r"r#r&r5rrr$rrrrrrøs   - 0  rcCs|dd…dkS)Nr¼sbplist00r)rËrrrÚ_is_fmt_binaryÊsr)Údetectr|Úwriterr8r9Tr:cCs™|dkri|jdƒ}|jdƒxLtjƒD]$}|d|ƒr5|d}Pq5q5Wtƒ‚nt|d}|d|d|ƒ}|j|ƒS)z„Read a .plist file. 'fp' should be (readable) file object. Return the unpacked root object (which usually is a dictionary). NrØrr*r|r9r:)rÝrÚÚ_FORMATSrrÑr€)r.r8r9r:rËÚinfoÚPÚprrrr às    cCs(t|ƒ}t|d|d|d|ƒS)zqRead a .plist file from a bytes object. Return the unpacked root object (which usually is a dictionary). r8r9r:)rr )rr8r9r:r.rrrr ös r;r<FcCsS|tkr"td|fƒ‚nt|d|d|d|ƒ}|j|ƒdS)zQWrite 'value' to a .plist file. 'fp' should be a (writable) file object. zUnsupported format: %rr+r;r<N)r,rqr5)rr.r8r;r<r+rrrr ÿs  c Cs2tƒ}t||d|d|d|ƒ|jƒS)z?Return a bytes object with the contents for a .plist file. r8r<r;)rr r>)rr8r<r;r.rrrr s )Er6Ú__all__rSrÆÚ contextlibrdZenumÚiorrrÛÚrerÞÚwarningsrZxml.parsers.expatrZEnumr!rÚglobalsr1Z __members__r²rrÚcontextmanagerr/rrrrrrr¨ÚcompilerorErBÚASCIIr`rgrirurvr›r§rÐrqrÑrïÚobjectrãr×rr*rcr–r@rrr)rr r,r r r r rrrrÚ/sx              0    h&d !" – Ò