O [qM Sr/SQrSSKrSSKrSSKrSSKrSSKJr SSKrSSK r SSK r SSK r SSK J r \R"SS\S9r\"5R%\R&5 "S S 5rS r\ R,"S 5rS1S jrSr\ R,"S\ R45rSrSrSr"SS5r"SS5r "SS\ 5r!Sr""SS\#5r$SSSSS .r%\&"5r'"S!S"5r(S#r)\*\+\,\R\-4r."S$S%\&5r/S&r0\1\2"\"\\!S'9\3\2"\0\(\/S'90r4S\2S(S).S*jr5S\2S(S).S+jr6\1S,S(S(S-.S.jr7\1S(S,S(S/.S0jr8g)2a>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: import datetime import plistlib pl = dict( aString = "Doodah", aList = ["A", "B", 12, 32.1, [1, 2, 3]], aFloat = 0.1, anInt = 728, aDict = dict( anotherString = "", aThirdString = "M\xe4ssig, Ma\xdf", aTrueValue = True, aFalseValue = False, ), someData = b"", someMoreData = b"" * 10, aDate = datetime.datetime.now() ) print(plistlib.dumps(pl).decode()) Parse Plist example: import plistlib plist = b''' foo bar ''' pl = plistlib.loads(plist) print(pl["foo"]) )InvalidFileExceptionFMT_XML FMT_BINARYloaddumploadsdumpsUIDN)BytesIO) ParserCreate PlistFormatzFMT_XML FMT_BINARY)modulec8\rSrSrSrSrSrSrSrSr Sr g ) r Mc[U[5(d [S5eUS:a [S5eUS:a [S5eXlg)Nzdata must be an intzUIDs cannot be >= 2**64r UIDs must be positive) isinstanceint TypeError ValueErrordataselfrs //opt/alt/python313/lib64/python3.13/plistlib.py__init__ UID.__init__NsF$$$12 2 7?67 7 !845 5 cUR$Nrrs r __index__ UID.__index__Ws yyrcdURR<S[UR5<S3$)N()) __class____name__reprrr"s r__repr__ UID.__repr__Zs>>22DODDrc4URUR44$r )r(rr"s r __reduce__UID.__reduce__]s~~ |++rcj[U[5(d[$URUR:H$r )rr NotImplementedr)rothers r__eq__ UID.__eq__`s(%%%! !yyEJJ&&rc,[UR5$r )hashrr"s r__hash__ UID.__hash__esDIIrr!N) r) __module__ __qualname____firstlineno__rr#r+r.r3r7__static_attributes__rrr r Ms!E,' rr 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]cUS-S-n/n[S[U5U5H.nXXB-nUR[R"U55 M0 SR U5$)Nr r)rangelenappendbinascii b2a_base64join)s maxlinelength maxbinsizepiecesichunks r_encode_base64rMysa"A%J F 1c!fj )an% h))%01* 88F rc[U[5(a%[R"UR S55$[R"U5$)Nutf-8)rstrrD a2b_base64encode)rGs r_decode_base64rSs<!S""188G#455""1%%rz{(?P\d\d\d\d)(?:-(?P\d\d)(?:-(?P\d\d)(?:T(?P\d\d)(?::(?P\d\d)(?::(?P\d\d))?)?)?)?)?Zc$Sn[RU5R5n/nUH&nX5nUc OUR[ U55 M( U(a$[ R "US[ R 06$[ R "U6$)N)yearmonthdayhourminutesecondtzinfo) _dateParsermatch groupdictrCrdatetimeUTC)rGaware_datetimeordergdlstkeyvals r_date_from_stringrgs~ @E   1  ' ' )B Cg ;  3s8    #;hll;;   c ""rcU(aUR[R5nSURURUR UR URUR4-$)Nz%04d-%02d-%02dT%02d:%02d:%02dZ) astimezoner_r`rUrVrWrXrYrZ)dras r_date_to_stringrksO LL & +  !((/ rc[RU5nUb [S5eURSS5nURSS5nURSS5nURSS5nURS S 5nU$) Nz;strings can't contain control characters; use bytes insteadz   &z&z>)_controlCharPatsearchrreplace)textms r_escaperws~t$A}-. . << %D <<d #D <<W %D <<V $D <<V $D Krc\rSrSrSSjrSrSrSrSrSr Sr S r S r S r S rS rSrSrSrSrSrSrSrSrSrg) _PlistParsercF/UlSUlSUlXlX lgr )stack current_keyroot _dict_type_aware_datetimer dict_typeras rr_PlistParser.__init__s#  #-rcF[5UlURURlURURlUR URlURURl URRU5 UR$r ) r parserhandle_begin_elementStartElementHandlerhandle_end_elementEndElementHandler handle_dataCharacterDataHandlerhandle_entity_declEntityDeclHandler ParseFiler~)rfileobjs rparse_PlistParser.parseso"n *.*C*C '(,(?(? %+/+;+; ((,(?(? % g&yyrc[S5e)Nz8XML entity declarations are not supported in plist files)r)r entity_nameis_parameter_entityvaluebase system_id public_id notation_names rr_PlistParser.handle_entity_decls##]^^rcJ/Ul[USU-S5nUb U"U5 gg)Nbegin_)rgetattr)relementattrshandlers rr!_PlistParser.handle_begin_elements. $7 2D9   EN rc:[USU-S5nUbU"5 gg)Nend_)r)rrrs rr_PlistParser.handle_end_elements%$ 0$7   I rc:URRU5 gr )rrCrs rr_PlistParser.handle_datas rcURbg[URS[5(d"[ SUR R -5eXRSUR'SUlgUR(dXlg[URS[5(d"[ SUR R -5eURSRU5 g)Nzunexpected element at line %d) r}rr|dictrrCurrentLineNumberr~listrCrrs r add_object_PlistParser.add_objects    'djjnd33 !@!%!>!>"?@@/4JJrN4++ ,#D Idjjnd33 !@!%!>!>"?@@ JJrN ! !% (rcJSRUR5n/UlU$)N)rFrrs rget_data_PlistParser.get_datas wwtyy!  rc|UR5nURU5 URRU5 gr )rrr|rC)rrrjs r begin_dict_PlistParser.begin_dicts, OO   !rcUR(a.[SURURR4-5eURR 5 g)Nz%missing value for key '%s' at line %d)r}rrrr|popr"s rend_dict_PlistParser.end_dictsI   D"..t{{/L/LMNO O rcUR(d"[URS[5(d"[ SUR R -5eUR5Ulg)Nrzunexpected key at line %d)r}rr|rrrrrr"s rend_key_PlistParser.end_keysO   :djjnd#C#C8![[::;< <==?rc`/nURU5 URRU5 gr )rr|rC)rras r begin_array_PlistParser.begin_arrays%   !rc8URR5 gr )r|rr"s r end_array_PlistParser.end_arrays rc&URS5 g)NTrr"s rend_true_PlistParser.end_trues rc&URS5 g)NFrr"s r end_false_PlistParser.end_false s rcUR5nURS5(dURS5(aUR[US55 gUR[U55 g)N0x0X)r startswithrr)rraws r end_integer_PlistParser.end_integer sLmmo >>$  3>>$#7#7 OOCRL ) OOCH %rcTUR[UR555 gr )rfloatrr"s rend_real_PlistParser.end_reals dmmo./rcBURUR55 gr )rrr"s r end_string_PlistParser.end_strings  (rcTUR[UR555 gr )rrSrr"s rend_data_PlistParser.end_datas t}}78rcfUR[UR5URS95 g)N)ra)rrgrrr"s rend_date_PlistParser.end_dates) )$--/9=9M9MO Pr)rrr}rrr~r|NF)r)r9r:r;rrrrrrrrrrrrrrrrrrrrr<r=rrryrysh._   )   +  &0)9Prryc:\rSrSrS SjrSrSrS SjrSrSr g) _DumbXMLWriteri!c6Xl/UlX lX0lgr )filer| _indent_levelindent)rr indent_levelrs rr_DumbXMLWriter.__init__"s  ) rcURRU5 URSU-5 U=RS- slg)Nz<%s>)r|rCwritelnrrrs r begin_element_DumbXMLWriter.begin_element(s6 '" Vg%& arcURS:deURR5U:XdeU=RS-slURSU-5 g)Nr rz)rr|rrrs r end_element_DumbXMLWriter.end_element-sQ!!A%%%zz~~7*** a Ww&'rNc Ub*[U5nURSU<SU<SU<S35 gURSU-5 g)Nrprqz)rwr)rrrs rsimple_element_DumbXMLWriter.simple_element3s7  ENE LL'5'B C LL7* +rc.U(as[U[5(aURS5nURR UR UR -5 URR U5 URR S5 g)NrO )rrPrRrwriterr)rlines rr_DumbXMLWriter.writeln;sa $$${{7+ IIOOD..< = IIOOD ! r)rrrr|)r  r ) r)r9r:r;rrrrrr<r=rrrr!s  ( , rrc@\rSrSrS SjrSrSrSrSrSr Sr g ) _PlistWriteriGcU(aUR[5 [RXX#5 XPlX`lXplgr )r PLISTHEADERrr _sort_keys _skipkeysr)rrrr writeHeader sort_keysskipkeysras rr_PlistWriter.__init__Hs3  JJ{ #LA#!-rcjURS5 URU5 URS5 g)Nzz)r write_valuers rr_PlistWriter.writeSs) ./  Z rcV[U[5(aURSU5 gUSLaURS5 gUSLaURS5 g[U[5(a1SUs=::aS:aO OURSS U-5 g[ U5e[U[ 5(aURS [ U55 g[U[5(aURU5 g[U[[45(aURU5 g[U[R5(a&URS [XR55 g[U[[ 45(aUR#U5 g[%S ['U5-5e) NstringTtrueFfalselrintegerz%drealdatezunsupported type: %s)rrPrr OverflowErrorrr*r write_dictbytes bytearray write_bytesr_rkrtupler write_arrayrtypers rr_PlistWriter.write_valueXsF eS ! !   % 0 d]    ' e^    ( s # #5*7*##Ite|<#E** u % %   U 4 t $ $ OOE " y1 2 2   U # x00 1 1    /7K7K L Nt} - -   U #2T%[@A Arc URS5 U=RS-sl[SS[URR SS5UR-5- 5n[ X5RS5HnU(dM URU5 M U=RS- slURS5 g)NrrrL s r) rrmaxrBrrtrMsplitrr)rrrHrs rr_PlistWriter.write_bytes{s 6" a  T[[((9D6xBBQQQ)_fpseekosSEEK_ENDreadrBrstructunpack _ref_size _read_ints_object_offsets _undefined_objects _read_objectOSError IndexErrorerrorrr)rfptrailer offset_size num_objects top_objectoffset_table_offsets rr_BinaryPlistParser.parses ) H HHMM#r{{ +hhmmB'G7|r!*,, j'2 ^[# HHMM- .#'??;#LD 'L;6DM$$Z0 0V\\= )&( ( )s CC4D cUS:XadURRS5SS-nSU-nS[U-n[R"X@RRU55S$U$)z#return the size of the next object.rr r@rq)rFrJ_BINARY_FORMATrKrL)rtokenLrvrGfs r _get_size_BinaryPlistParser._get_sizesc S= a #c)AQAnQ''A==HHMM!$45a8 8 rc*^^URRTU-5mT[;a#[R"SU[T3T5$T(a[ T5TU-:wa [ 5e[UU4Sj[STU-T555$)Nrqc3Z># UH n[RTXT-S5v M" g7f)bigN)r from_bytes).0rKrsizes r 0_BinaryPlistParser._read_ints..s/<":QQD(95AA":s(+r ) rFrJr_rKrLrBrrrA)rnrirs `@rrN_BinaryPlistParser._read_intssxx}}TAX& > !==1QCt(<'=!>E E3t9q0*,,<"'4!8T":<< F Trrrfr@signed"z>fr?#z>d3r[)seconds@Pr'`r=utf-16be)rQrPrOrFrGrJrrgrKrLrBr_r` timedeltarbrBrr,r rorCrRrzipr)rrefresultoffsettokentokenHr`raepochrGrobj_refsxkey_refskos rrR_BinaryPlistParser._read_object s s#  #M%%c*  f a #ut| D=F d]F d]F d]F t^^^DHHMM!v+$>$)&A+$?Fd]]]4q)9:1=F d]]]4q)9:1=F d] dDHHMM!$45a8A!! ))$1X\\J ))$15X//::F t^v&AXX]]1%F6{a*,, t^v&A88==#D4yA~*,,[[)F t^v&*A88==#D4yA~*,,[[,F t^ a&j(A5IJF t^v&Aq)HF!'MM#  d//23t^v&Aq)Hq)H__&F!'MM#  -3DA373D3DQ3GF,,Q/04 '( (# c  -*,, -s /6QQ)rBrrFrOrQrMNr) r)r9r:r;__doc__rrrbrNrorRr<r=rrr@r@s&,)2<2grr@c.US:agUS:agUS:agg)Nrr=r?r>r=)counts r_count_to_sizerus% v~  rc<\rSrSrS SjrSrSrSrSrSr Sr g ) _BinaryPlistWriteric4XlX lX0lX@lgr )rFrrr)rrVrrras rr_BinaryPlistWriter.__init__s#!-rc/Ul0Ul0UlURU5 [ UR5nS/U-Ul[ U5Ul[URUl URRS5 URHnURU5 M URU5nURR5n[ U5nS[UU--nURR[R "U/UR Q765 SnXURUXE4n URR[R "S/U Q765 g)Nr bplist00rqz >5xBBBQQQ)_objlist _objtable _objidtable_flattenrBrOrrMr_ _ref_formatrFr _write_object _getrefnumtellrKpack) rrrYobjrZr[rX offset_format sort_versionrWs rr_BinaryPlistWriter.writes4  e$--( !s;' 4)$..9 {#==C   s #!__U+ "hhmmo$%89 n[9KGG  v{{=H43G3GHI t~~{   v{{;99:rc[U[5(a[U5U4UR;agO[ U5UR ;ag[ UR5nURRU5 [U[5(aX R[U5U4'OX R [ U5'[U[5(a/n/nUR5nUR(a [U5nUHZupg[U[5(dUR(aM-[S5eURU5 URU5 M\ [ R""X45HnUR%U5 M g[U[&[(45(aUHnUR%U5 M gg)Nr)r_scalarsrridrrBrrCrr!rr rPrr itertoolschainrrr) rrrefnumkeysvaluesr!rvrs rr_BinaryPlistWriter._flattensd eX & &U U#t~~56Y$** * T]]# U# eX & &39NNDK/ 0*0  RY ' eT " "DFKKMEu !!S))~~ #$:;; A a __T2 a 3e} - - a .rc[U[5(aUR[U5U4$UR[ U5$r )rrrrrrrs rr_BinaryPlistWriter._getrefnums< eX & &>>4;"67 7##BuI. .rcHUS:a3URR[R"SX-55 gUS:a6URR[R"SUS-SU55 gUS:a6URR[R"SUS-SU55 gUS :a6URR[R"S US-S U55 gURR[R"S US-S U55 g)Nr^z>Brz>BBBrrz>BBHrz>BBLz>BBQ)rFrrKr)rrris r _write_size_BinaryPlistWriter._write_sizes "9 HHNN6;;tU\: ; F] HHNN6;;vus{D$G H G^ HHNN6;;vus{D$G H G^ HHNN6;;vus{D$G H HHNN6;;vus{D$G Hrc FURU5nURR5URU'UcURR S5 gUSLaURR S5 gUSLaURR S5 g[ U[ 5(GaXUS:a3URR [R"SSU55 gUS :a2URR [R"S S U55 gUS :a2URR [R"S SU55 gUS:a2URR [R"SSU55 gUS:a2URR [R"SSU55 gUS:a.URR SURS SSS9-5 g[U5e[ U[5(a2URR [R"SSU55 g[ U[R5(aUR(aXUR[R 5nU[R"SSS[R S9- nUR#5nO)U[R"SSS5- R#5nURR [R"SSU55 g[ U[$[&45(a7UR)S[+U55 URR U5 g[ U[,5(aIUR/S5nUR)S [+U55 URR U5 g[ U[25(Ga.UR4S:a [7S$5eUR4S :a2URR [R"S S%U55 gUR4S :a2URR [R"S S&U55 gUR4S:a2URR [R"SS'U55 gUR4S:a2URR [R"SS(U55 g[U5e[ U[8[:45(a~UVs/sHopRU5PM nn[+U5n UR)S)U 5 URR [R"S*UR<U --/UQ765 g[ U[>5(GaZ//pUR@(a[CURE55n OURE5n U Hxup[ U [,5(dURF(aM-[IS+5eU RKURU 55 U RKURU55 Mz [+U 5n UR)S,U 5 URR [R"S*UR<U --/U Q765 URR [R"S*UR<U --/U Q765 g[IU5e![Ra [U5Sef=f![0a3 UR/S!5nUR)S"[+U5S#-5 GNf=fs snf)-NFTrr z>Bqrrz>BBrrz>BHrrz>BLrlz>BQrrfrtz>Bdrwryrrzrxr|r'r}rr~r=rrrrqrr)&rrFrrOrrrrKrrUrto_bytesrr_rrir` total_secondsrrrrBrPrRUnicodeEncodeErrorr rrrrrrrr r!rrrC)rrrdtrratrrefsrGkeyRefsvalRefs rootItemsrrs rr _BinaryPlistWriter._write_objectsdooe$$(HHMMOS! = HHNN7 # e^ HHNN7 # d] HHNN7 # s # #qy9HHNN6;;udE#BCv{{5$>?v{{5$>?v{{5$>?v{{5$>?wE$)OOP#E** u % % HHNN6;;udE: ; x00 1 1##%%hll3h//a8<<PP((*X..tQ::IIK HHNN6;;udA6 7 y1 2 2   T3u: . HHNN5 ! s # # 4LL)  s5z2 HHNN1  s # #zzA~ !899f$v{{5$>?g%v{{5$>?g%v{{5$>?g%v{{5$>?#E** e} - -0561OOA&D6D A   T1 % HHNN6;;sT-=-=-A'AIDI J t $ $!2W"5;;=1 !KKM !!!S))~~ #$:;;tq12tq12 "G A   T1 % HHNN6;;sT-=-=-A'ALGL M HHNN6;;sT-=-=-A'ALGL ME" "g||9'.D89F& 4LL,  s1v{3 4*7s$71\:,]^:!]9^^) rrFrOrrrrrMrrNr) r)r9r:r;rrrrrrr<r=rrrrs$. +;Z(!T/ I c#rrcUSSS:H$)Nr>rr=)r-s r_is_fmt_binaryr^s "1: $$r)detectrwriterFfmtrrac Uc^URS5nURS5 [R5HnUS"U5(dMUSn O [ 5e[USnU"X#S9nUR U5$)zRead a .plist file. 'fp' should be a readable and binary file object. Return the unpacked root object (which usually is a dictionary). rEr rr)rra)rJrG_FORMATSrrr)rVrrrar-infoPps rrrts {  OO%DH~f%%N& '( ( SM( # I=A 772;rc[U[5(a%U[:Xa [S5eUR 5n[ U5n[ XAX#S9$)ziRead a .plist file from a bytes object. Return the unpacked root object (which usually is a dictionary). z6value must be bytes-like object when fmt is FMT_BINARYr)rrPrrrRr r)rrrrarVs rrrsL% * )* *  B y PPrT)rrrrac|U[;a[SU<35e[US"XUUS9nURU5 g)zOWrite 'value' to a .plist file. 'fp' should be a writable, binary file object. zUnsupported format: r)rrraN)rrr)rrVrrrrars rrrsA  (3899 c]8 $Rx4BDF LLrrrrrac N[5n[XXUUS9 UR5$)z?Return a bytes object with the contents for a .plist file. r)r rgetvalue)rrrrrarVs rrrs( B)&( ;;=r)r)9r__all__rDr(r_enumior rrHrerKxml.parsers.expatr Enumr)r globalsupdate __members__r rcompilerrrMrSASCIIr\rgrkrwryrrr4rrr_objectrPr@rrPrrrrrrrrrrrrrrr=rrrs7p    *ii ';HM  (()B **IJ&jjXZ\ZbZbc  # mPmP`##L])>])@B+J+SSS1 X ccJ  eX.. 6W#&W#t% T !! D,U Q#dU  %4r