B _o9@sddlZddlmZddlmZddlmZmZeZGddde Z e Z dd Z ed dga Gd d d ZGd ddZGdddeeZGdddeZGdddeeZGdddeZGdddZGdddZGdddeejZGdddeejZGdd d eejZdS)!N)array)abc) MultiMappingMutableMultiMappingc@seZdZdZdZdS)istrzCase insensitive str.TN)__name__ __module__ __qualname____doc__Z __is_istr__r r J/opt/alt/python37/lib64/python3.7/site-packages/multidict/_multidict_py.pyr srcCst|tstd|jjS)Nz&Parameter should be multidict or proxy) isinstance_Base TypeError_impl_version)Zmdr r r getversions rQc@s4eZdZdZddZddZejjdkr0ddZ d S) _Impl)_itemsrcCsg|_|dS)N)r incr_version)selfr r r __init__ sz_Impl.__init__cCs"t}|dd7<|d|_dS)Nrr)r)rvr r r r$sz_Impl.incr_versionpypycCst|t|jS)N)object __sizeof__sys getsizeofr)rr r r r,sz_Impl.__sizeof__N) rr r __slots__rrrimplementationnamerr r r r rs  rc@s~eZdZddZefddZefddZddZdd d Zd d Z ddZ ddZ ddZ ddZ ddZddZddZd S)rcCs|S)Nr )rkeyr r r _title1sz _Base._titlecsH||fdd|jjD}|r(|S|s8|tk r8|Std|dS)z-Return a list of all values matching the key.csg|]\}}}|kr|qSr r ).0ikr)identityr r 7sz _Base.getall..zKey not found: %rN)r$rr_markerKeyError)rr#defaultZresr )r(r getall4s  z _Base.getallcCsJ||}x"|jjD]\}}}||kr|SqW|tk r:|Std|dS)z!Get first value matching the key.zKey not found: %rN)r$rrr*r+)rr#r,r(r&r'rr r r getone>s z _Base.getonecCs ||S)N)r.)rr#r r r __getitem__Jsz_Base.__getitem__NcCs |||S)zVGet first value matching the key. The method is alias for .getone(). )r.)rr#r,r r r getMsz _Base.getcCs t|S)N)iterkeys)rr r r __iter__Tsz_Base.__iter__cCs t|jjS)N)lenrr)rr r r __len__Wsz _Base.__len__cCs t|jS)z+Return a new view of the dictionary's keys.) _KeysViewr)rr r r r2Zsz _Base.keyscCs t|jS)zAReturn a new view of the dictionary's items *(key, value) pairs).) _ItemsViewr)rr r r items^sz _Base.itemscCs t|jS)z-Return a new view of the dictionary's values.) _ValuesViewr)rr r r valuesbsz _Base.valuesc Cst|tjstSt|trz|jj}|jj}t|t|kr>dSx6t||D](\\}}}\}}}||ksn||krJdSqJWdSt|jjt|krdSx,| D] \} } | | t } | | krdSqWdS)NFT) rrMappingNotImplementedrrrr4zipr8r0r*) rotherZlftZrhtZi1Zk2Zv1Zi2Zv2r'rZnvr r r __eq__fs$    z _Base.__eq__cCs2||}x"|jjD]\}}}||krdSqWdS)NTF)r$rr)rr#r(r&r'rr r r __contains__zs  z_Base.__contains__cCs(ddd|D}d|jj|S)Nz, css|]\}}d||VqdS)z '{}': {!r}N)format)r%r'rr r r sz!_Base.__repr__..z<{}({})>)joinr8rA __class__r)rbodyr r r __repr__sz_Base.__repr__)N)rr r r$r*r-r.r/r0r3r5r2r8r:r?r@rFr r r r r0s  rc@s(eZdZdZddZddZddZdS) MultiDictProxyz'Read-only proxy for MultiDict instance.cCs,t|ttfs tdt||j|_dS)Nz:ctor requires MultiDict or MultiDictProxy instance, not {})r MultiDictrGrrAtyper)rargr r r rs  zMultiDictProxy.__init__cCstd|jjdS)Nzcan't pickle {} objects)rrArDr)rr r r __reduce__szMultiDictProxy.__reduce__cCs t|S)zReturn a copy of itself.)rHr8)rr r r copyszMultiDictProxy.copyN)rr r r rrKrLr r r r rGs rGc@s(eZdZdZddZddZddZdS) CIMultiDictProxyz)Read-only proxy for CIMultiDict instance.cCs,t|ttfs tdt||j|_dS)Nz>ctor requires CIMultiDict or CIMultiDictProxy instance, not {})r CIMultiDictrMrrArIr)rrJr r r rs  zCIMultiDictProxy.__init__cCs|S)N)title)rr#r r r r$szCIMultiDictProxy._titlecCs t|S)zReturn a copy of itself.)rNr8)rr r r rLszCIMultiDictProxy.copyN)rr r r rr$rLr r r r rMs rMc@seZdZdZddZejjdkr(ddZddZ d d Z d d Z d dZ ddZ e ZddZddZddZddZddZddZd,ddZefd d!ZeZefd"d#Zd$d%Zd&d'Zd(d)Zd*d+ZdS)-rHz/Dictionary with the support for duplicate keys.cOs"t|_||||jj|jdS)N)rr_extendrDr _extend_items)rargskwargsr r r rszMultiDict.__init__rcCst|t|jS)N)rrrrr)rr r r rszMultiDict.__sizeof__cCs|jt|ffS)N)rDlistr8)rr r r rKszMultiDict.__reduce__cCs|S)Nr )rr#r r r r$szMultiDict._titlecCst|tr|StddS)Nz8MultiDict keys should be either str or subclasses of str)rstrr)rr#r r r _keys zMultiDict._keycCs2||}|jj||||f|jdS)N)r$rrappendrVr)rr#valuer(r r r adds z MultiDict.addcCs|j}||S)zReturn a copy of itself.)rDr8)rclsr r r rLszMultiDict.copycOs|||d|jdS)zhExtend current MultiDict with more values. This method must be used instead of update. extendN)rPrQ)rrRrSr r r r[szMultiDict.extendcst|dkr td|t||r|d}t|dttfrL|sL|jj}nt|dr^| }|r|t |}| t | g}xN|D]F}t|dkstd|| |d|d|dfqW||n|fdd| DdS) Nrz1{} takes at most 1 positional argument ({} given)rr8z3{} takes either dict or list of (key, value) tuplescs&g|]\}}|||fqSr )r$rV)r%r#rX)rr r r)sz%MultiDict._extend..)r4rrArrHrGrrhasattrr8rTr[rWr$rV)rrRrSr"methodrJr8itemr )rr rPs0     ,  zMultiDict._extendcCs$x|D]\}}}|||qWdS)N)rY)rr8r(r#rXr r r rQszMultiDict._extend_itemscCs|jj|jdS)z Remove all items from MultiDict.N)rrclearr)rr r r r`s zMultiDict.clearcCs|||dS)N)_replace)rr#rXr r r __setitem__ szMultiDict.__setitem__cCsj||}|jj}d}x6tt|dddD]}||d|kr,||=d}q,W|s\t|n |jdS)NFrrT)r$rrranger4r+r)rr#r(r8foundr&r r r __delitem__ s  zMultiDict.__delitem__NcCs>||}x"|jjD]\}}}||kr|SqW||||S)zAReturn value for key, set value to default if key is not present.)r$rrrY)rr#r,r(r&r'rr r r setdefaults   zMultiDict.setdefaultcCsz||}xTtt|jjD]@}|jj|d|kr|jj|d}|jj|=|j|SqW|tkrrt|n|SdS)zRemove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised. rr\N)r$rdr4rrrr*r+)rr#r,r(r&rXr r r popone"s    zMultiDict.poponecCsd}||}g}x^tt|jjdddD]B}|jj|}|d|kr,||d|jj|=|jd}q,W|s|tkrt|q|Sn | |SdS)zRemove all occurrences of key and return the list of corresponding values. If key is not found, default is returned if given, otherwise KeyError is raised. Frrcrr\TN) r$rdr4rrrWrr*r+reverse)rr#r,rer(Zretr&r_r r r popall7s       zMultiDict.popallcCs<|jjr0|jjd}|j|d|dfStddS)z1Remove and return an arbitrary (key, value) pair.rrr\zempty multidictN)rrpoprr+)rr&r r r popitemRs  zMultiDict.popitemcOs|||d|jdS)z>Update the dictionary from *other*, overwriting existing keys.updateN)rP _update_items)rrRrSr r r rm[szMultiDict.updatec Cs|sdSi}x|D]\}}}||d}xvt|t|jjD]<}|jj|}|d|kr<|d||<|||f|jj|<Pqs(   Vn