;
Êâ"Ic               @   sJ  d  Z  d d d d d d d g Z d d	 l Z d d	 l Z d d
 l m Z d d	 l Z d „  Z d „  Z d „  Z	 d „  Z
 Gd „  d ƒ Z e j d e j ƒ Z d „  Z d „  Z e j d ƒ Z d „  Z d Z Gd „  d e ƒ Z Gd „  d e ƒ Z Gd „  d e ƒ Z Gd „  d e ƒ Z d d „ Z Gd „  d ƒ Z Gd  „  d! ƒ Z d	 S("   u  plistlib.py -- a tool to generate and parse MacOSX .plist files.

The PropertList (.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 writePlist(rootObject, pathOrFile)
function. 'rootObject' is the top level object, 'pathOrFile' is a
filename or a (writable) file object.

To parse a plist from a file, use the readPlist(pathOrFile) function,
with a file name or 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 readPlistFromBytes()
and writePlistToBytes().

Values can be strings, integers, floats, booleans, tuples, lists,
dictionaries, Data or datetime.datetime objects. String values (including
dictionary keys) may be unicode strings -- they will be written out as
UTF-8.

The <data> plist type is supported through the Data class. This is a
thin wrapper around a Python bytes object.

Generate Plist example:

    pl = dict(
        aString="Doodah",
        aList=["A", "B", 12, 32.1, [1, 2, 3]],
        aFloat = 0.1,
        anInt = 728,
        aDict=dict(
            anotherString="<hello & hi there!>",
            aUnicodeValue=u'MÃ¤ssig, MaÃŸ',
            aTrueValue=True,
            aFalseValue=False,
        ),
        someData = Data(b"<binary gunk>"),
        someMoreData = Data(b"<lots of binary gunk>" * 10),
        aDate = datetime.datetime.fromtimestamp(time.mktime(time.gmtime())),
    )
    # unicode keys are possible, but a little awkward to use:
    pl[u'Ã…benraa'] = "That was a unicode key."
    writePlist(pl, fileName)

Parse Plist example:

    pl = readPlist(pathOrFile)
    print pl["aKey"]
u	   readPlistu
   writePlistu   readPlistFromBytesu   writePlistToBytesu   Plistu   Datau   Dicti    N(   u   BytesIOc             C   s`   d } t |  t ƒ o t |  d ƒ }  d } n t ƒ  } | j |  ƒ } | o |  j ƒ  n | S(   u¥   Read a .plist file. 'pathOrFile' may either be a file name or a
    (readable) file object. Return the unpacked root object (which
    usually is a dictionary).
    u   rbFT(   u   Falseu
   isinstanceu   stru   openu   Trueu   PlistParseru   parseu   close(   u
   pathOrFileu   didOpenu   pu
   rootObject(    (    u%   /mit/python/lib/python3.0/plistlib.pyu	   readPlistB   s    
	c             C   s{   d } t | t ƒ o t | d ƒ } d } n t | ƒ } | j d ƒ | j |  ƒ | j d ƒ | o | j ƒ  n d S(   uq   Write 'rootObject' to a .plist file. 'pathOrFile' may either be a
    file name or a (writable) file object.
    u   wbu   <plist version="1.0">u   </plist>NFT(	   u   Falseu
   isinstanceu   stru   openu   Trueu   PlistWriteru   writelnu
   writeValueu   close(   u
   rootObjectu
   pathOrFileu   didOpenu   writer(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   writePlistR   s    
c             C   s   t  t |  ƒ ƒ S(   uC   Read a plist data from a bytes object. Return the root object.
    (   u	   readPlistu   BytesIO(   u   data(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   readPlistFromBytesb   s    c             C   s    t  ƒ  } t |  | ƒ | j ƒ  S(   u;   Return 'rootObject' as a plist-formatted bytes object.
    (   u   BytesIOu
   writePlistu   getvalue(   u
   rootObjectu   f(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   writePlistToBytesh   s    	c             B   sD   |  Ee  Z d  d d „ Z d „  Z d „  Z d d „ Z d „  Z d S(   i    u   	c             C   s(   | |  _  g  |  _ | |  _ | |  _ d  S(   N(   u   fileu   stacku   indentLevelu   indent(   u   selfu   fileu   indentLevelu   indent(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __init__q   s    			c             C   s4   |  j  j | ƒ |  j d | ƒ |  j d 7_ d  S(   Nu   <%s>i   (   u   stacku   appendu   writelnu   indentLevel(   u   selfu   element(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   beginElementw   s    c             C   sX   |  j  d k p t ‚ |  j j ƒ  | k p t ‚ |  j  d 8_  |  j d | ƒ d  S(   Ni    i   u   </%s>(   u   indentLevelu   AssertionErroru   stacku   popu   writeln(   u   selfu   element(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   endElement|   s    c             C   sL   | d  k	 o* t | ƒ } |  j d | | | f ƒ n |  j d | ƒ d  S(   Nu   <%s>%s</%s>u   <%s/>(   u   Noneu   _escapeu   writeln(   u   selfu   elementu   value(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   simpleElement‚   s    c             C   sl   | oQ t  | t ƒ o | j d ƒ } n |  j j |  j |  j ƒ |  j j | ƒ n |  j j d ƒ d  S(   Nu   utf-8s   
(   u
   isinstanceu   stru   encodeu   fileu   writeu   indentLevelu   indent(   u   selfu   line(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   writeln‰   s    N(   u   __name__u
   __module__u   __init__u   beginElementu
   endElementu   Noneu   simpleElementu   writeln(   u
   __locals__(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   DumbXMLWriterp   s
   
		u   DumbXMLWriteru{   (?P<year>\d\d\d\d)(?:-(?P<month>\d\d)(?:-(?P<day>\d\d)(?:T(?P<hour>\d\d)(?::(?P<minute>\d\d)(?::(?P<second>\d\d))?)?)?)?)?Zc             C   sn   d } t  j |  ƒ j ƒ  } g  } x= | D]5 } | | } | d  k o Pn | j t | ƒ ƒ q( Wt j | Œ  S(   Nu   yearu   monthu   dayu   houru   minuteu   second(   u   yearu   monthu   dayu   houru   minuteu   second(   u   _dateParseru   matchu	   groupdictu   Noneu   appendu   intu   datetime(   u   su   orderu   gdu   lstu   keyu   val(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   _dateFromString˜   s     
c             C   s,   d |  j  |  j |  j |  j |  j |  j f S(   Nu   %04d-%02d-%02dT%02d:%02d:%02dZ(   u   yearu   monthu   dayu   houru   minuteu   second(   u   d(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   _dateToString£   s    uv   [\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]c             C   sŠ   t  j |  ƒ } | d  k	 o t d ƒ ‚ n |  j d d ƒ }  |  j d d ƒ }  |  j d d ƒ }  |  j d d ƒ }  |  j d	 d
 ƒ }  |  S(   NuD   strings can't contains control characters; use plistlib.Data insteadu   
u   
u   u   &u   &amp;u   <u   &lt;u   >u   &gt;(   u   _controlCharPatu   searchu   Noneu
   ValueErroru   replace(   u   textu   m(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   _escape¯   s    s—   <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
c             B   sD   |  Ee  Z d  d d d „ Z d „  Z d „  Z d „  Z d „  Z d S(	   i    s   	i   c             C   s2   | o | j  t ƒ n t j |  | | | ƒ d  S(   N(   u   writeu   PLISTHEADERu   DumbXMLWriteru   __init__(   u   selfu   fileu   indentLevelu   indentu   writeHeader(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __init__Ã   s    c             C   s_  t  | t ƒ o |  j d | ƒ n8t  | t ƒ o) | o |  j d ƒ q[|  j d ƒ nÿ t  | t ƒ o |  j d d | ƒ n× t  | t ƒ o |  j d t | ƒ ƒ n­ t  | t ƒ o |  j | ƒ nŒ t  | t	 ƒ o |  j
 | ƒ nk t  | t j ƒ o |  j d t | ƒ ƒ n> t  | t t f ƒ o |  j | ƒ n t d t | ƒ ƒ ‚ d  S(	   Nu   stringu   trueu   falseu   integeru   %du   realu   dateu   unsuported type: %s(   u
   isinstanceu   stru   simpleElementu   boolu   intu   floatu   repru   dictu	   writeDictu   Datau	   writeDatau   datetimeu   _dateToStringu   tupleu   listu
   writeArrayu	   TypeErroru   type(   u   selfu   value(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   writeValueÈ   s&    c             C   s   |  j  d ƒ |  j d 8_ d t |  j j d d ƒ |  j ƒ } x8 | j | ƒ j d ƒ D] } | o |  j | ƒ q[ q[ W|  j d 7_ |  j d ƒ d  S(	   Nu   datai   iL   s   	s    i   s   
s           (	   u   beginElementu   indentLevelu   lenu   indentu   replaceu   asBase64u   splitu   writelnu
   endElement(   u   selfu   datau   maxlinelengthu   line(    (    u%   /mit/python/lib/python3.0/plistlib.pyu	   writeDataá   s     c             C   s„   |  j  d ƒ t | j ƒ  ƒ } xQ | D]I \ } } t | t ƒ p t d ƒ ‚ n |  j d | ƒ |  j | ƒ q& W|  j d ƒ d  S(   Nu   dictu   keys must be stringsu   key(	   u   beginElementu   sortedu   itemsu
   isinstanceu   stru	   TypeErroru   simpleElementu
   writeValueu
   endElement(   u   selfu   du   itemsu   keyu   value(    (    u%   /mit/python/lib/python3.0/plistlib.pyu	   writeDictì   s     c             C   s<   |  j  d ƒ x | D] } |  j | ƒ q W|  j d ƒ d  S(   Nu   array(   u   beginElementu
   writeValueu
   endElement(   u   selfu   arrayu   value(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   writeArrayö   s
     N(   u   __name__u
   __module__u   __init__u
   writeValueu	   writeDatau	   writeDictu
   writeArray(   u
   __locals__(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   PlistWriterÁ   s
   
			
u   PlistWriterc             B   s)   |  Ee  Z d  „  Z d „  Z d „  Z d S(   c          
   C   sR   y |  | } Wn  t  k
 o t | ƒ ‚ Yn Xd d l m } | d t ƒ | S(   Ni    (   u   warnuL   Attribute access from plist dicts is deprecated, use d[key] notation instead(   u   KeyErroru   AttributeErroru   warningsu   warnu   PendingDeprecationWarning(   u   selfu   attru   valueu   warn(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __getattr__  s    c             C   s+   d d l  m } | d t ƒ | |  | <d  S(   Ni    (   u   warnuL   Attribute access from plist dicts is deprecated, use d[key] notation instead(   u   warningsu   warnu   PendingDeprecationWarning(   u   selfu   attru   valueu   warn(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __setattr__  s    c          
   C   sO   y |  | =Wn  t  k
 o t | ƒ ‚ Yn Xd d l m } | d t ƒ d  S(   Ni    (   u   warnuL   Attribute access from plist dicts is deprecated, use d[key] notation instead(   u   KeyErroru   AttributeErroru   warningsu   warnu   PendingDeprecationWarning(   u   selfu   attru   warn(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __delattr__  s    N(   u   __name__u
   __module__u   __getattr__u   __setattr__u   __delattr__(   u
   __locals__(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   _InternalDictý   s   
	
	u   _InternalDictc                s   |  Ee  Z ‡  f d  †  Z ‡  S(   c                s1   d d l  m } | d t ƒ t ƒ  j |   d  S(   Ni    (   u   warnu?   The plistlib.Dict class is deprecated, use builtin dict instead(   u   warningsu   warnu   PendingDeprecationWarningu   superu   __init__(   u   selfu   kwargsu   warn(   u	   __class__(    u%   /mit/python/lib/python3.0/plistlib.pyu   __init__  s    (   u   __name__u
   __module__u   __init__(   u
   __locals__(    (   u	   __class__u%   /mit/python/lib/python3.0/plistlib.pyu   Dict  s   
c                sA   |  Ee  Z d  Z ‡  f d †  Z d „  Z e e ƒ Z d „  Z ‡  S(   u€   This class has been deprecated. Use readPlist() and writePlist()
    functions instead, together with regular dict objects.
    c                s1   d d l  m } | d t ƒ t ƒ  j |   d  S(   Ni    (   u   warnuU   The Plist class is deprecated, use the readPlist() and writePlist() functions instead(   u   warningsu   warnu   PendingDeprecationWarningu   superu   __init__(   u   selfu   kwargsu   warn(   u	   __class__(    u%   /mit/python/lib/python3.0/plistlib.pyu   __init__+  s    c             C   s&   t  | ƒ } |  ƒ  } | j | ƒ | S(   u1   Deprecated. Use the readPlist() function instead.(   u	   readPlistu   update(   u   clsu
   pathOrFileu
   rootObjectu   plist(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   fromFile1  s    	c             C   s   t  |  | ƒ d S(   u2   Deprecated. Use the writePlist() function instead.N(   u
   writePlist(   u   selfu
   pathOrFile(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   write9  s    (   u   __name__u
   __module__u   __doc__u   __init__u   fromFileu   classmethodu   write(   u
   __locals__(    (   u	   __class__u%   /mit/python/lib/python3.0/plistlib.pyu   Plist%  s
   
	iL   c             C   sn   | d d } g  } xJ t  d t |  ƒ | ƒ D]0 } |  | | | … } | j t j | ƒ ƒ q- Wd j | ƒ S(   Ni   i   i    s    (   u   rangeu   lenu   appendu   binasciiu
   b2a_base64u   join(   u   su   maxlinelengthu
   maxbinsizeu   piecesu   iu   chunk(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   _encodeBase64>  s     c             B   sJ   |  Ee  Z d  Z d „  Z e d „  ƒ Z d d „ Z d „  Z d „  Z d S(   u   Wrapper for binary data.c             C   s-   t  | t ƒ p t d ƒ ‚ n | |  _ d  S(   Nu   data must be as bytes(   u
   isinstanceu   bytesu	   TypeErroru   data(   u   selfu   data(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __init__K  s    c             C   s   |  t  j | ƒ ƒ S(   N(   u   binasciiu
   a2b_base64(   u   clsu   data(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   fromBase64P  s    iL   c             C   s   t  |  j | ƒ S(   N(   u   _encodeBase64u   data(   u   selfu   maxlinelength(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   asBase64V  s    c             C   s\   t  | |  j ƒ o |  j | j k St  | t ƒ o |  j | k St |  ƒ t | ƒ k Sd  S(   N(   u
   isinstanceu	   __class__u   datau   stru   id(   u   selfu   other(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __eq__Y  s
    c             C   s   d |  j  j t |  j ƒ f S(   Nu   %s(%s)(   u	   __class__u   __name__u   repru   data(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __repr__a  s    N(	   u   __name__u
   __module__u   __doc__u   __init__u   classmethodu
   fromBase64u   asBase64u   __eq__u   __repr__(   u
   __locals__(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   DataG  s   
		c             B   s¹   |  Ee  Z d  „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 d	 „  Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d S(   c             C   s   g  |  _  d  |  _ d  |  _ d  S(   N(   u   stacku   Noneu
   currentKeyu   root(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   __init__g  s    		c             C   sQ   d d l  m } | ƒ  } |  j | _ |  j | _ |  j | _ | j | ƒ |  j	 S(   Ni    (   u   ParserCreate(
   u   xml.parsers.expatu   ParserCreateu   handleBeginElementu   StartElementHandleru   handleEndElementu   EndElementHandleru
   handleDatau   CharacterDataHandleru	   ParseFileu   root(   u   selfu   fileobju   ParserCreateu   parser(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   parsel  s    	c             C   s>   g  |  _  t |  d | d  ƒ } | d  k	 o | | ƒ n d  S(   Nu   begin_(   u   datau   getattru   None(   u   selfu   elementu   attrsu   handler(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   handleBeginElementu  s    	c             C   s2   t  |  d | d  ƒ } | d  k	 o | ƒ  n d  S(   Nu   end_(   u   getattru   None(   u   selfu   elementu   handler(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   handleEndElement{  s    c             C   s   |  j  j | ƒ d  S(   N(   u   datau   append(   u   selfu   data(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   handleData€  s    c             C   s`   |  j  d  k	 o! | |  j d |  j  <d  |  _  n, |  j p | |  _ n |  j d j | ƒ d  S(   Niÿÿÿÿ(   u
   currentKeyu   Noneu   stacku   rootu   append(   u   selfu   value(    (    u%   /mit/python/lib/python3.0/plistlib.pyu	   addObjectƒ  s    
c             C   s   d j  |  j ƒ } g  |  _ | S(   Nu    (   u   joinu   data(   u   selfu   data(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   getData  s    	c             C   s*   t  ƒ  } |  j | ƒ |  j j | ƒ d  S(   N(   u   _InternalDictu	   addObjectu   stacku   append(   u   selfu   attrsu   d(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   begin_dict”  s    	c             C   s   |  j  j ƒ  d  S(   N(   u   stacku   pop(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_dict˜  s    c             C   s   |  j  ƒ  |  _ d  S(   N(   u   getDatau
   currentKey(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_key›  s    c             C   s'   g  } |  j  | ƒ |  j j | ƒ d  S(   N(   u	   addObjectu   stacku   append(   u   selfu   attrsu   a(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   begin_arrayž  s    c             C   s   |  j  j ƒ  d  S(   N(   u   stacku   pop(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu	   end_array¢  s    c             C   s   |  j  d ƒ d  S(   NT(   u	   addObjectu   True(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_true¥  s    c             C   s   |  j  d ƒ d  S(   NF(   u	   addObjectu   False(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu	   end_false§  s    c             C   s   |  j  t |  j ƒ  ƒ ƒ d  S(   N(   u	   addObjectu   intu   getData(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_integer©  s    c             C   s   |  j  t |  j ƒ  ƒ ƒ d  S(   N(   u	   addObjectu   floatu   getData(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_real«  s    c             C   s   |  j  |  j ƒ  ƒ d  S(   N(   u	   addObjectu   getData(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu
   end_string­  s    c             C   s)   |  j  t j |  j ƒ  j d ƒ ƒ ƒ d  S(   Nu   utf-8(   u	   addObjectu   Datau
   fromBase64u   getDatau   encode(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_data¯  s    c             C   s   |  j  t |  j ƒ  ƒ ƒ d  S(   N(   u	   addObjectu   _dateFromStringu   getData(   u   self(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   end_date±  s    N(   u   __name__u
   __module__u   __init__u   parseu   handleBeginElementu   handleEndElementu
   handleDatau	   addObjectu   getDatau
   begin_dictu   end_dictu   end_keyu   begin_arrayu	   end_arrayu   end_trueu	   end_falseu   end_integeru   end_realu
   end_stringu   end_datau   end_date(   u
   __locals__(    (    u%   /mit/python/lib/python3.0/plistlib.pyu   PlistParsere  s&   
							
												u   PlistParser(   u   __doc__u   __all__u   binasciiu   datetimeu   iou   BytesIOu   reu	   readPlistu
   writePlistu   readPlistFromBytesu   writePlistToBytesu   DumbXMLWriteru   compileu   ASCIIu   _dateParseru   _dateFromStringu   _dateToStringu   _controlCharPatu   _escapeu   PLISTHEADERu   PlistWriteru   dictu   _InternalDictu   Dictu   Plistu   _encodeBase64u   Datau   PlistParser(    (    (    u%   /mit/python/lib/python3.0/plistlib.pyu   <module>3   s2   				&				<		