/Sc@s@dZddlZddlmZmZmZddlZdefdYZdefdYZ defd YZ d e d Z d efd YZ defdYZdefdYZdefdYZddZdejfdYZdZdZdZdejfdYZdS(sAccess and/or modify INI files * Compatiable with ConfigParser * Preserves order of sections & options * Preserves comments/blank lines/etc * More conveninet access to data Example: >>> from StringIO import StringIO >>> sio = StringIO('''# configure foo-application ... [foo] ... bar1 = qualia ... bar2 = 1977 ... [foo-ext] ... special = 1''') >>> cfg = INIConfig(sio) >>> print cfg.foo.bar1 qualia >>> print cfg['foo-ext'].special 1 >>> cfg.foo.newopt = 'hi!' >>> cfg.baz.enabled = 0 >>> print cfg # configure foo-application [foo] bar1 = qualia bar2 = 1977 newopt = hi! [foo-ext] special = 1 [baz] enabled = 0 iN(t DEFAULTSECTt ParsingErrortMissingSectionHeaderErrortLineTypecBs5eZdZddZdZdZdZRS(cCs%|dk r!|jd|_ndS(Ns (tNonetstriptline(tselfR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt__init__4s cCs$|jdk r|jS|jSdS(N(RRt to_string(R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt__str__:scCs0t||rd|jd[^]]+)\]\s*((?P;|#)(?P.*))?$icCs>tt|j|||_||_||_||_dS(N(tsuperRRR tcommenttcomment_separatortcomment_offset(RR RRRR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRQs    cCsQd|jd}|jdk rM|dj|j}||j|j}n|S(Nt[t]t (R RRtljustRR(Rtout((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR Ys cCsb|jj|j}|dkr(dS||jd|jd|jd|jd|S(NR Rtcsep(tregextmatchtrstripRtgrouptstart(tclsRtm((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytparseas  N( RRtretcompileRRRR R%t classmethod(((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRKs   t OptionLinecBsMeZddddddZdZejdZdZe eZRS(s = icCsPtt|j|||_||_||_||_||_||_dS(N( RR)RR Rt separatorRRR(RR RR*RRRR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRls     cCs\d|j|j|jf}|jdk rX|dj|j}||j|j}n|S(Ns%s%s%sR(R R*RRRRRR(RR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR vs s7^(?P[^:=\s[][^:=]*)(?P[:=]\s*)(?P.*)$c Cs |jj|j}|dkr(dS|jdj}|jd}|jdt||jd}|jd}|dkr||djr||d}||}|| j}|jd|}nd}d}d}||||||||S(NR Rtsept;ii( RRR RR!tlentfindtisspaceR"( R#RR$R RR+tcoffRR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR%s  &   N( RRRRR R&R'RR%R((((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR)ks   s%;#cCsRtjdd|}d|}|r2|d7}n|d7}tj|t_dS(Ns ([\]\-\^])s\\\1s^(?P[%s]s |[rR][eE][mM]s)(?P.*)$(R&tsubR't CommentLineR(t comment_charst allow_remR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytchange_comment_syntaxs    R2cBsGeZejdZddddZdZdZe eZRS(s.^(?P[;#]|[rR][eE][mM] +)(?P.*)$tt#cCs,tt|j|||_||_dS(N(RR2RRR*(RRR*R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRs cCs|j|jS(N(R*R(R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR scCsJ|jj|j}|dkr(dS||jd|jd|S(NRR(RRR RR!(R#RR$((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR%s N( RRR&R'RRRR R%R((((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR2s   t EmptyLinecBs5eZdZedZdZeeZRS(cCsdS(NR6((R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR scCsdS(NR6((t_((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytscCs|jrdS||S(N(RR(R#R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR%s (RRR tpropertyRR%R((((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR8s  tContinuationLinecBsDeZejdZdddZdZdZe eZRS(s^\s+(?P.*)$cCsAtt|j|||_|dkr4d}n||_dS(Ni(RR<RRRt value_offset(RRR=R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRs    cCsd|j|jS(NR(R=R(R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR scCsJ|jj|j}|dkr(dS||jd|jd|S(NR(RRR RR!R"(R#RR$((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR%s N( RRR&R'RRRR R%R((((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR<s   t LineContainercBseZd dZdZdZdZdZdZdZ e eeZ e ee Z dZ dZd ZRS( cCsKg|_d|_|rGt|tr7|j|qG|j|ndS(N(tcontentsRtorgvaluet isinstancetlisttextendtadd(Rtd((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRs   cCs|jj|dS(N(R?tappend(Rtx((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRDscCs"x|D]}|j|qWdS(N(RD(RRGti((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRCs cCs|jdjS(Ni(R?R (R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytget_namescCs||jd_dS(Ni(R?R (Rtdata((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytset_namescCsv|jdk r|jSt|jdkr9|jdjSdjg|jD]"}t|tsId|j^qISdS(Niis s%s(R@RR-R?RtjoinRAR2(RRG((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt get_values cCs||_d|jd}d}x-|jD]"}t|tr,|j}Pq,q,W|jdd!|_|d|jd_|d=xC|D];}|jr|j t||q|j t qWdS(Ns%ss ii( R@tsplitRR?RAR<R=RRRDR8(RRJtlinesR=tvR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt set_values    cCs/g|jD]}|j^q }dj|S(Ns (R?R RL(RRGts((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR s"ccsKxD|jdddD],}t|dr|j|kr|VqqWdS(NiR (R?R R (RtkeyRG((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytfinditerscCs+x|j|D]}|SWt|dS(N(RTtKeyError(RRSRG((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR.!sN(RRRRRDRCRIRKRMRQR;R RR RTR.(((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR>s        cs`|d|ddkr)|nfd}fd}t||S(NRtsourcecs9t|}|dk r(t|St|SdS(N(tgetattrR(Rtsrcobj(tprivate_attrnametprivate_srcnamet srcattrname(s0/usr/lib/python2.7/site-packages/iniparse/ini.pytgetfn-s  csBt|}|dk r.t||nt||dS(N(RWRtsetattr(RRRX(RYRZR[(s0/usr/lib/python2.7/site-packages/iniparse/ini.pytsetfn4s (RR;(t myattrnameR[R\R^((RYRZR[s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt_make_xform_property's    t INISectioncBseZdZdZdZdZdZeZ ddddZ e dZ dZ dZdZdZdZdZRS( cCs4|g|_||_||_||_i|_dS(N(t_linest _defaultst_optionxformvaluet_optionxformsourcet_options(Rtlineobjtdefaultstoptionxformvaluetoptionxformsource((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyREs     t _optionxformcCs|dkr|jdjS|jr5|j|}ny#|j|j}||jk}WnWtk r|jr||jjkr|jj|j}||jjk}qnX|rtj dd|}n|S(NRis +s ( RbR RkRfRt_compat_skip_empty_linesRURcR&R1(RRSRt del_empty((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt _compat_getOs   cCs|dkr|jdjS|jr5|j|}ny|j|jSWn@tk r|jr||jjkr|jj|jSnXdS(NRi(RbR RkRfRRURc(RRS((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt_getitembs   cCs|jr|j|}n|}||jkrC|jj|n||jkrtt|d}|jdj|||j|R)RbRDR(RRSRtxkeytobj((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt __setitem__ns cCs|jr|j|}n||jkr=|jj|nx|jD]}g}xp|jD]e}t|tr|j}|jr|j|}n||kr|j|qq]|j|q]W||_qGW|j |=dS(N( RkRlRpRbR?RAR>R RFRf(RRStlt remainingtotn((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt __delitem__|s      ccst}x|jD]t}xk|jD]`}t|tr#|jrV|j|j}n |j}||kr|V|j|qq#q#WqW|jrx5|jD]'}||kr|V|j|qqWndS(N( tsetRbR?RAR>RkR RDRc(RRERtRGtans((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt__iter__s      cCstd|dS(NsNo sub-sections allowed(R(RR ((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt_new_namespacesN(RRRRbRfRcRdReRyRlRR`RkRnRoRsRxR{R|(((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRa>s      cCst|jdS(Ns (R2R (R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt make_commentsccs^t}xQtrY|j}|s3|r/dVndS|jdrKt}nt}|Vq WdS(sCiterate over a file by only using the file object's readline methodR6Ns (tFalsetTruetreadlinetendswith(tft have_newlineR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pytreadline_iterators   cCs |jS(N(tlower(RG((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRst INIConfigcBseZd Zd Zd Zd Zd Zd Zd Z d Z e Z d d e ed d d dZeddZeddZdZdZdZdZdZd ZeZeeeeegZd Z d Z!RS( c Cst|_||_||_||_||_||_i|_|dkrWi}nt td||_ x'|j D]\}} | |j |t_datat _parse_excRdRet_sectionxformvaluet_sectionxformsourcet _sectionsRRaRct iteritemst_readfp( RtfpRht parse_excRiRjtsectionxformvaluetsectionxformsourceR R((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRs         Rkt optionxformt _sectionxformcCs9|tkr|jS|jr.|j|}n|j|S(N(RRcRR(RRS((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRos   cCstd||dS(NsValues must be inside sections(R(RRSR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRsscCsW|jr|j|}nx+|j|jD]}|jjj|q,W|j|=dS(N(RRRbRR?Rp(RRSR((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRxs  ccsmt}|jtxP|jjD]B}t|tr#|j|kre|jV|j|jqeq#q#WdS(N(RyRDRRR?RAR>R (RRERG((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR{s  cCs|jjr"|jjtntt|}|jj||jr_|j|}n||jkr|j|}|jj |n(t |d|j d|}||j|<|S(NRhRj( RR?RDR8R>RRRRbRFRaRc(RR Rrtns((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR|s     cCs)|jrd}nd}||jjS(Nu%ss%s(t_bomRR (Rtfmt((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyR s  cCs5x.|jD]}|j|}|r |Sq WdSdS(N(t _line_typesR%R(RRtlinetypeRg((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt_parses c Cs;d}d}d}d}g}t}y |j}Wntk rJd}nXd} d} d} xt|D]~} | dkrt| tr| ddkr| d} t|_qn|j | } | d7} | rt| t t t f r|j r t|| | qt| } n| dkrl|j r]| dkrJt|} n| j| | nt| } nt| tr|r|r|j|g}|r| jj|t}qn|j| q|j r| dkrt|} n| j| | nt| } nt| tr|rC|j|g}t}nt| }|j||jrz|j|j}n |j}|tkr|j} n |j|} || j|iuiRhRjis (!RR~R tAttributeErrorRRAtunicodeRRRR2R8RRRR}RRFR<RCRlRDR)R>RkRRcRRfRRbRRa(RRt cur_sectiont cur_optiontcur_section_nametcur_option_namet pending_linestpending_empty_linestfnamet linecounttexcRRgtoptobj((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRs                            N("RRRRRRcRdReRRRR~RRRRR`RkRRoRsRxR{R|R t __unicode__R8R2RR)R<RRR(((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyRs4        (t__doc__R&t ConfigParserRRRtconfigtobjectRRR)R~R5R2R8R<R>RR`tConfigNamespaceRaR}RRR(((s0/usr/lib/python2.7/site-packages/iniparse/ini.pyt&s"   : D d