grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 ”qcB|ã @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ƒZ1d9d:d;d<d=d>d?d@iZ2e3ƒZ4GdAdB„dBƒZ5dCdD„Z6e7e8e9eje:fZ;GdEdF„dFe3ƒZ<dGdH„Z=e>edIe/dJe,dKe.ƒe?edIe=dJe5dKe<ƒiZ@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/python35/lib64/python3.5/plistlib.pyÚ __getattr__Vs  z_InternalDict.__getattr__cCstdtdƒ||||j|kStSdS)N)r)r(r=r@ÚNotImplemented)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))?)?)?)?)?ZcCsid}tj|ƒjƒ}g}x8|D]0}||}|dkrEP|jt|ƒƒq(Wtj|ŒS)NÚyearÚmonthÚdayÚhourÚminuteÚsecond)rZr[r\r]r^r_)Ú _dateParserÚmatchÚ groupdictrRÚintÚdatetime)rUÚorderZgdZlstÚkeyÚvalrrrÚ_date_from_strings   rhcCs,d|j|j|j|j|j|jfS)Nz%04d-%02d-%02dT%02d:%02d:%02dZ)rZr[r\r]r^r_)ÚdrrrÚ_date_to_string&srjcCs…tj|ƒ}|dk r'tdƒ‚|jddƒ}|jddƒ}|jddƒ}|jddƒ}|jd d ƒ}|S) Nzz>)Ú_controlCharPatÚsearchÚ ValueErrorÚreplace)ÚtextÚmrrrÚ_escape,s  rvc@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 ParseFilerz)rZfileobjrrrÚparse@s  z_PlistParser.parsecCs9g|_t|d|dƒ}|dk r5||ƒdS)NZbegin_)r=Úgetattr)rÚelementÚattrsÚhandlerrrrr~Hs  z!_PlistParser.handle_begin_elementcCs-t|d|dƒ}|dk r)|ƒdS)NZend_)r‚)rrƒr…rrrrNs z_PlistParser.handle_end_elementcCs|jj|ƒdS)N)r=rR)rr=rrrr€Ssz_PlistParser.handle_datacCsÀ|jdk rat|jdtiƒƒsAtd|jjƒ‚||jd|jr†)rxrRÚwritelnrŸ)rrƒrrrÚ begin_element§sz_DumbXMLWriter.begin_elementcCs$|jd8_|jd|ƒdS)Nr†z)rŸr¢)rrƒrrrÚ end_element¬sz_DumbXMLWriter.end_elementNcCsJ|dk r5t|ƒ}|jd|||fƒn|jd|ƒdS)Nz <%s>%sz<%s/>)rvr¢)rrƒrrrrÚsimple_element²s  z_DumbXMLWriter.simple_elementcCsb|rNt|tƒr$|jdƒ}|jj|j|jƒ|jj|ƒ|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†TFcCs?|r|jtƒtj||||ƒ||_||_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ÚtrueFÚfalser†é?é@Zintegerz%dÚrealZdatezunsupported type: %sr‡lûÿÿÿl)r)r*r¥rcÚ OverflowErrorr—rKÚdictÚ write_dictrÚ write_datar@Ú bytearrayÚ write_bytesrdrjÚ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ƒƒ}x3t||ƒjdƒD]}|rd|j|ƒqdW|jd7_|j dƒdS) Nr=r†érDs ó és s ) r£rŸÚmaxrQr rsrEÚsplitr¢r¤)rr=rFr¦rrrr·þs )z_PlistWriter.write_bytescCs¹|r¨|jdƒ|jr1t|jƒƒ}n |jƒ}xX|D]P\}}t|tƒsw|jrkqDtdƒ‚|jd|ƒ|j |ƒqDW|j dƒn |jdƒdS)Nr³zkeys must be stringsrf) r£r©ÚsortedÚitemsr)r*rªrAr¥r«r¤)rrirÁrfrrrrr´ 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]k\}}|j|ƒssqUxJ|D]B}||jdƒj|ƒ}|dt|ƒ…|krzdSqzWqUWdS) 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†rrNro)rÚrÞÚ_BINARY_FORMATrßrà)rÚtokenLrurUr?rrrÚ _get_sizews    z_BinaryPlistParser._get_sizecsr|jjˆ|ƒ‰ˆtkr>tjdtˆ|ˆƒSt‡‡fdd†tdˆ|ˆƒDƒƒSdS)Nroc3s/|]%}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 s‰ˆ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ƒ}n‚|dkr'tj dˆjjdƒƒd}nQ|dkrXtj dˆjjdƒƒd}n |dkr®tj dˆjjdƒƒd}t j dddƒt j d|ƒ}nÊ|dkrˆj |ƒ}ˆj rçˆjj|ƒ}qxtˆjj|ƒƒ}nv|dkrAˆj |ƒ}ˆjj|ƒjdƒ}|}n7|dkr~ˆj |ƒ}ˆjj|dƒjdƒ}nú|dkrÞˆj |ƒ}ˆj|ƒ} g}|ˆj|<|j‡fdd†| Dƒƒnš|d kroˆj |ƒ}ˆj|ƒ} ˆj|ƒ} ˆjƒ}|ˆj|frMé#z>dé3iÑZsecondsr°éPrÅé`rzutf-16beé c3s|]}ˆj|ƒVqdS)N)ræ)rõÚx)rrrr÷Ósz2_BinaryPlistParser._read_object..éÐ)rårärãrÚrÛrÞrcrôrßràrdZ timedeltaròr{rrËrùÚextendr|ÚziprærÒ) rÚrefÚresultÚoffsetÚtokenZtokenHrñr?rUZobj_refsZkey_refsÚkÚor)rrræŒsn             % % "     "  #   #  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)Nrsbplist00roz >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_sizeds # ) ) )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ƒƒq t |ƒ‚n&t|t ƒrˆjjtjdd|ƒƒnõt|t j ƒrj|t j dd d ƒjƒ}ˆjjtjdd|ƒƒn¢t|tƒr¨ˆjdt|jƒƒˆjj|jƒndt|ttfƒræˆjdt|ƒƒˆjj|ƒn&t|tƒroy)|jdƒ}ˆjdt|ƒƒWn;tk r[|jdƒ}ˆjdt|ƒd ƒYnXˆjj|ƒn�t|ttfƒrã‡fd!d"†|Dƒ}t|ƒ}ˆjd#|ƒˆjjtjd$ˆj||Œƒn)t|tƒrgg}}ˆjrt|jƒƒ} n |jƒ} xg| D]_\} } t| tƒscˆjrWq0t d%ƒ‚|j!ˆj| ƒƒ|j!ˆj| ƒƒq0Wt|ƒ}ˆ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-16berrcsg|]}ˆj|ƒ‘qSr)r)rõr )rrrú ­s z4_BinaryPlistWriter._write_object..rrozkeys 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)rrrts„    # " " " " )""  *      '*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–|dkrf|jdƒ}|jdƒxItjƒD]!}|d|ƒr5|d}Pq5Wtƒ‚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ÛÚ_FORMATSr rÒ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<FcCsP|tkrtd|fƒ‚t|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-rrr5)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¨ÚcompilerprErBÚASCIIr`rhrjrvrwrœr§rÑrrrÒrðÚobjecträrØrr*rcr—r@rrr*rr r-r r r r rrrrÚ/sv              0    h&d ! — Ò