Ñò ñG“Ic @sdZddkZddkZddkZddklZyeWn#ej oddklZnXddddgZ defd „ƒYZ defd „ƒYZ e ƒZ de fd „ƒYZde fd „ƒYZhd d6ZedjoddkZeiƒndS(sI Gives a multi-value dictionary object (MultiDict) plus several wrappers iÿÿÿÿN(t DictMixin(treversedt MultiDicttUnicodeMultiDicttNestedMultiDicttNoVarscBs"eZdZd„Zd„ZeeƒZd„ZeeƒZd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „ZeZd „Zd„Zdd„Zd„Zd„Zdd„Zd„Zd„Zd„Zd„ZeZd„Zd„Zd„Zd„Z RS(s§ An ordered dictionary that can have multiple values for each key. Adds the methods getall, getone, mixed, and add to the normal dictionary interface. cOsËt|ƒdjotdƒ‚n|ost|ddƒot|diƒƒ}n9t|ddƒo|diƒ}nt|dƒ}||_n g|_|o|ii|iƒƒndS(Nis9MultiDict can only be called with one positional argumentit iteritemstitems(tlent TypeErrorthasattrtlistRRt_itemstextend(tselftargstkwR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt__init__s   cCsCt|tƒptd|i|fƒ‚n|ƒ}||_|S(s@ Create a dict that is a view on the given list s8%s.view_list(obj) takes only actual list objects, not %r(t isinstanceR R t__name__R (tclstlsttobj((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt view_list+s  cCsf|ƒ}|ioOxL|iD]=}|io|i|i|ƒq|i|i|iƒqWn|S(s@ Create a dict from a cgi.FieldStorage instance (R tfilenametaddtnametvalue(RtfsRtfield((s3/usr/lib/python2.6/site-packages/webob/multidict.pytfrom_fieldstorage:s    cCsBx/t|iƒD]\}}||jo|SqWt|ƒ‚dS(N(RR tKeyError(Rtkeytktv((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt __getitem__Js    cCs;y ||=Wntj onX|ii||fƒdS(N(RR tappend(RR R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt __setitem__Ps  cCs|ii||fƒdS(sL Add the key and value, not overwriting any previous value. N(R R$(RR R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRWscCsBg}x5|iD]*\}}||jo|i|ƒqqW|S(sU Return a list of all values matching the key (may be an empty list) (R R$(RR tresultR!R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pytgetall]s   cCs_|i|ƒ}|ptd|ƒ‚nt|ƒdjotd||fƒ‚n|dS(sk Get one value matching the key, raising a KeyError if multiple values were found. sKey not found: %risMultiple values match %r: %ri(R'RR(RR R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pytgetonegs cCsˆh}h}xu|iƒD]g\}}||joD||jo||i|ƒq€|||g||}|i|d|jo |i|d}|i|=|SqJW|o |dSt|ƒ‚dS(Nis&pop expected at most 2 arguments, got i(RR treprR.R R(RR RR1R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pytpop¶s   cCs |iiƒS(N(R R:(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pytpopitemÄscKsÉ|djont|dƒo|ii|iƒƒnst|dƒo5x_|iƒD] }|ii|||fƒqXWn.x*|D]"\}}|ii||fƒq‡W|o|i|ƒndS(NRtkeys(R)R R R RR<R$tupdate(RtothertkwargsR!R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR=Çs  " cCsHdig}|iƒD]}|d|q~ƒ}d|ii|fS(Ns, s(%r, %r)s%s([%s])(tjoinRR5R(Rt_[1]R"R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt__repr__Õs4cCs t|iƒS(N(RR (R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt__len__ÙscCs(g}|iD]\}}||q~S(N(R (RRAR!R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR<àsccs#x|iD]\}}|Vq WdS(N(R (RR!R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pytiterkeysãs cCs|iS(N(R (R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRéscCs t|iƒS(N(titerR (R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRìscCs(g}|iD]\}}||q~S(N(R (RRAR!R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pytvaluesïsccs#x|iD]\}}|Vq WdS(N(R (RR!R"((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt itervaluesòs N(!Rt __module__t__doc__RRt classmethodRR#R%RR'R(R+R,R2R3thas_keyR4R6R)R8R:R;R=RBRCR<RDt__iter__RRRFRG(((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRs>                      cBseZdZddded„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd „Zd „Zd„Zd„ZeZd„Zd„Zdd„Zd„Zd„Zd„Zd„Zd„Zd„ZeZd„Zd„Zd„Z d„Z!RS(s A MultiDict wrapper that decodes returned values to unicode on the fly. Decoding is not applied to assigned values. The key/value contents are assumed to be ``str``/``strs`` or ``str``/``FieldStorages`` (as is returned by the ``paste.request.parse_`` functions). Can optionally also decode keys when the ``decode_keys`` argument is True. ``FieldStorage`` instances are cloned, and the clone's ``filename`` variable is decoded. Its ``name`` variable is decoded when ``decode_keys`` is enabled. tstrictcCsE||_|djotiƒ}n||_||_||_dS(N(R*R)tsystgetdefaultencodingtencodingterrorst decode_keys(RR*RPRQRR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRs     cCsD|io6y|i|i|iƒ}Wq@tj oq@Xn|S(N(RRtdecodeRPRQtAttributeError(RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt _decode_keys   cCs5|io't|tƒo|i|i|iƒS|S(N(RRRtunicodetencodeRPRQ(RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt _encode_keyscCsÈt|tiƒokti|ƒ}|io"|ii|i|iƒ|_n|i o"|i i|i|iƒ|_ qÄnGt|t ƒp6y|i|i|iƒ}WqÄt j oqÄXn|S(s¯ Decode the specified value to unicode. Assumes value is a ``str`` or `FieldStorage`` object. ``FieldStorage`` objects are specially handled. ( Rtcgit FieldStorageR6RRRRSRPRQRRVRT(RR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt _decode_values "  cCs0t|tƒo|i|i|iƒ}n|S(N(RRVRWRPRQ(RR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt _encode_value3scCs"|i|ii|i|ƒƒƒS(N(R[R*R#RX(RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR#9scCs)|ii|i|ƒ|i|ƒƒdS(N(R*R%RXR\(RR R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR%<scCs)|ii|i|ƒ|i|ƒƒdS(sL Add the key and value, not overwriting any previous value. N(R*RRXR\(RR R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR?scCs=g}|ii|i|ƒƒD]}||i|ƒq ~S(sU Return a list of all values matching the key (may be an empty list) (R*R'RXR[(RR RAR"((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR'EscCs"|i|ii|i|ƒƒƒS(sk Get one value matching the key, raising a KeyError if multiple values were found. (R[R*R(RX(RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR(KscCsh}xƒ|iiƒiƒD]l\}}t|tƒo.g}|D]}||i|ƒqC~}n|i|ƒ}|||i|ƒ                          cBsÈeZdZd„Zd„Zd„ZeZeZeZeZ eZ eZ eZ eZ d„Zd„Zd„ZeZd„Zd„Zd „Zd „Zd „Zd „Zd „Zd„ZeZRS(sM Wraps several MultiDict objects, treating it as one large MultiDict cGs ||_dS(N(tdicts(RR_((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR°scCsHx5|iD]*}|i|tƒ}|tj o|Sq Wt|ƒ‚dS(N(R_tgett_dummyR(RR tdR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR#³s    cOstdƒ‚dS(Ns%NestedMultiDict objects are read-only(R(RRR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt _readonlyºscCs4g}x'|iD]}|i|i|ƒƒqW|S(N(R_R R'(RR R&Rb((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR'Ås  cCs t|ƒS(N(R(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR6ÐscCs*x#|iD]}||jotSq WtS(N(R_R/R-(RR Rb((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR3Ós    cCs.d}x!|iD]}|t|ƒ7}qW|S(Ni(R_R(RR"Rb((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRCÛs  cCs$x|iD]}|otSq WtS(N(R_R/R-(RRb((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt __nonzero__ás   cCst|iƒƒS(N(R R(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRçsccs4x-|iD]"}x|iƒD] }|VqWq WdS(N(R_R(RRbtitem((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRês   cCst|iƒƒS(N(R RG(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRFïsccs4x-|iD]"}x|iƒD] }|VqWq WdS(N(R_RG(RRbR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRGòs   cCst|iƒƒS(N(R RD(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR<÷sccs.x'|iD]}x|D] }|VqWq WdS(N(R_(RRbR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRLús  (RRHRIRR#RcR%RR2R4R8R:R;R=R'R6R3RKRCRdRRRFRGR<RLRD(((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR«s2             cBséeZdZdd„Zd„Zd„ZeZeZeZ d„Z e Z e Z e Z dd„Zd„Zd„Zd„ZeZd „ZeZd „Zd „Zd „Zd „Zd„Zd„ZeZeZeZeZeZRS(sd Represents no variables; used when no variables are applicable. This is read-only cCs|pd|_dS(NsN/A(treason(RRf((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR scCstd||ifƒ‚dS(Ns No key %r: %s(RRf(RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR# scOstd|iƒ‚dS(NsCannot add variables: %s(RRf(RRR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR%scOstd|iƒ‚dS(NsNo keys to delete: %s(RRf(RRR((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR2scCs|S(N((RR R7((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR`scCsgS(N((RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR'scCs||S(N((RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR("scCshS(N((R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR+%scCstS(N(R-(RR ((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR3)scCs|S(N((R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR6-scCsd|ii|ifS(Ns<%s: %s>(R5RRf(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRB0s cCsdS(Ni((R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRC4scCs th|ƒS(N(tcmp(RR>((s3/usr/lib/python2.6/site-packages/webob/multidict.pyt__cmp__7scCsgS(N((R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyR<:scCs tgƒS(N(RE(R((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRD<sN( RRHRIR)RR#R%RR8R=R2R4R:R;R`R'R(R+R,R3RKR6RBRCRhR<RDRLRRRFRG(((s3/usr/lib/python2.6/site-packages/webob/multidict.pyRs:               s­ >>> d = MultiDict(a=1, b=2) >>> d['a'] 1 >>> d.getall('c') [] >>> d.add('a', 2) >>> d['a'] 2 >>> d.getall('a') [1, 2] >>> d['b'] = 4 >>> d.getall('b') [4] >>> d.keys() ['a', 'a', 'b'] >>> d.items() [('a', 1), ('a', 2), ('b', 4)] >>> d.mixed() == {'a': [1, 2], 'b': 4} True >>> MultiDict([('a', 'b')], c=2) MultiDict([('a', 'b'), ('c', 2)]) tgeneralt__main__(RIRYR6RNtwebob.util.dictmixinRRt NameErrortwebob.util.reversedt__all__RRtobjectRaRRt__test__Rtdoctestttestmod(((s3/usr/lib/python2.6/site-packages/webob/multidict.pyts&   å³ VC