;isG UdZddlZddlZddlZddlZddlZej e e e e dfZej ejeejeeje efeje efefZeje efZejejdZeje ed<dZeje ed<dZeje ed<eeZeje ed <Gd d ejZej ej!ej"ej#ej$ej%ej&ej'ej(ej)ej*ej+d Z,ejeje efed <GddZ-dej.deje/ej0ejeje efffdZ1dej.de/fdZ2dej.de/fdZ3ddej4de de5fdZ6dej.de de fdZ7dS)z uritemplate.variable ==================== This module contains the URIVariable class which powers the URITemplate class. What treasures await you: - URIVariable class You see a hammer in front of you. What do you do? > Nz~-_._UNRESERVED_CHARACTERSz:/?#[]@ _GEN_DELIMSz !$&'()*+,;= _SUB_DELIMS_RESERVED_CHARACTERSceZdZdZdZdZdZdZdZdZ dZ d Z d Z d Z d Zd ZdefdZdefdZdefdZdedefdZdedefdZdejdefdZededdfdZdS)Operator+#./;?&=,!@|returnch|tjkr tdzS|tjkrtSdS)N%r )rreservedrfragmentselfs HC:\PYTHON\MyICR_Workspace\venv\Lib\site-packages\uritemplate/variable.pyreserved_characterszOperator.reserved_charactersGs6 8$ $ $'#- - 8$ $ $' 'rc|tjkrdS|tjkrdS|tjkrdS|tjks|tjkrdSdS)aCIdentify the separator used during expansion. Per `Section 3.2.1. Variable Expansion`_: ====== =========== ========= Type Separator ====== =========== ========= ``","`` (default) ``+`` ``","`` ``#`` ``","`` ``.`` ``"."`` ``/`` ``"/"`` ``;`` ``";"`` ``?`` ``"&"`` ``&`` ``"&"`` ====== =========== ========= .. _`Section 3.2.1. Variable Expansion`: https://www.rfc-editor.org/rfc/rfc6570#section-3.2.1 r r rrr)rlabel_with_dot_prefix path_segmentpath_style_parameterform_style_queryform_style_query_continuationrs rexpansion_separatorzOperator.expansion_separatorWse* 81 1 13 8( ( (3 80 0 03 H- - -x===3srcd|tjkrdStjt|jSNr )rrtcaststrvaluers rvariable_prefixzOperator.variable_prefixs) 8$ $ $2vc4:&&&rr,c"t|dSr(quoterr,s r _always_quotezOperator._always_quotesUBrcvtj||krt|tS|SN)urllibparseunquoter0rr1s r_only_quote_unquoted_charactersz(Operator._only_quote_unquoted_characterss3 <   & &% / / 455 5 rc>t|ttfst|}t|tr|}|tjks|tjkr||S||Sr4) isinstancer+bytesdecoderrrr8r2r1s rr0zOperator.quotes%#u.. JJE eU # # #LLNNE 8$ $ $0A(A(A77>> >!!%(((rscLt|tjSr4) _operatorsgetrdefault)r=s r from_stringzOperator.from_strings~~a!1222rN)__name__ __module__ __qualname__rArrr!r"r#r$r% reserved_eqreserved_comma reserved_bang reserved_at reserved_piper+rr&r-r2r8r)Anyr0 staticmethodrBrrrr+sIGHH L $'!KNMKMS "S""""h''''' 3 3    SS )15)S))))3s3z333\333rr) r r r r rrrrrrrrr?c eZdZdZdefdZdefdZdefdZddZd ed e d e d e j e de j ef d Zd ed e d e d e j e de j ef dZd ed e d e d e j e de j ef dZd ed e d e d e j e de j ef dZ dde j ede jeeffdZdS) URIVariableaThis object validates everything inside the URITemplate object. It validates template expansions and will truncate length as decided by the template. Please note that just like the :class:`URITemplate `, this object's ``__str__`` and ``__repr__`` methods do not return the same information. Calling ``str(var)`` will return the original variable. This object does the majority of the heavy lifting. The ``URITemplate`` object finds the variables in the URI and then creates ``URIVariable`` objects. Expansions of the URI are handled by each ``URIVariable`` object. ``URIVariable.expand()`` returns a dictionary of the original variable and the expanded value. Check that method's documentation for more information. varc||_tj|_g|_g|_i|_|dSr4)originalrrAoperator variablesvariable_namesdefaultsr6)rrPs r__init__zURIVariable.__init__sA  "*"2   ,.DF  rrc d|zS)NzURIVariable(%s)rMrs r__repr__zURIVariable.__repr__s  4''rc|jSr4)rRrs r__str__zURIVariable.__str__s }rNcz|j}|jdx}tvr.t||_|jdd}|d}|D]}d}|}d|vr&t |dd\}}|d}|d}d}d|vr6t |dd\}} t| d}|r ||j |<|j |||d fd |j D|_ dS) zParse the variable. This finds the: - operator, - set of safe characters, - variables, and - defaults. rNrr*: )explodeprefixcg|]\}}|SrMrM).0varname_s r z%URIVariable.parse.. sJJJ>DM=,L%%c**  CKDczz$)#))C*;*;$<$<!kmmC((G;;s##D&*Fd{{#(C););#<#< jZ,, 2&1 d# N ! !7f==>    KJ4>JJJrrrr,rarbc|dSt|\}}|j|jjt |r|s|sdSt jt jt|}|r9|j fd|DSd fd|D}d|St|s|r|sdSt jt j ttf|}|p t|}|r9|j fd|DSd fd|D}d|S|r=t jt j|}|r |d|n|}d|SdzS)z/Expansion method for the '?' and '&' operators.Nc38K|]}d|VdSrNrM)rdv_quoterrs r z/URIVariable._query_expansion..#sR@@./t))ffQii))@@@@@@rrc3.K|]}|VdSr4rM)rdrwrxs rryz/URIVariable._query_expansion..'s+ : :q : : : : : :rrc3ZK|]%\}}t|d|V&dSrvr/rdkrwrxsafes rryz/URIVariable._query_expansion..0s^@@8<1uQ~~33q 33@@@@@@rc3ZK|]%\}}t|d|V&dS)rNr/r|s rryz/URIVariable._query_expansion..4sV!!8<1uQ~~33q 33!!!!!!r)is_list_of_tuplesrSrr0 list_testr)r*SequenceScalarVariableValuer&join dict_testMappingr+sorteditemsText) rrrr,rarbtuplesrrxr~s ` @@r_query_expansionzURIVariable._query_expansions =4)%00 }0022$ U   )F ) tF1:&9:EBBE )}88::??@@@@@38@@@ : : : :E : : :::((((( U   )v ) tF19S*=%=>FFE2VEKKMM22E )}88::??@@@@@@E@@@!!!!!@E!!!(((((  -F165))E&,7E'6'NN%E,,VVE]],, ,czrc j}j |;t|tt t tfst|dkrdSt|\}}t|rW|sU|sd}tj tj t|}fd|D}|r||ndSt!|s|rtj tjttf|}|p t%|}d |sd d}| fd|D} | r| ndStj tj|}|r |d|n|}j|S)zSLabel and path expansion method. Expands for operators: '/', '.' NrrcHg|]}|j|Sr4rSr0rdrwrs rrgz5URIVariable._label_path_expansion..[s1+, ##A&&r%s=%s%s,%sc3|K|]6\}}|t|j|fzV7dSr4r0rS)rdr}rw format_strr~rs rryz4URIVariable._label_path_expansion..hsW%%Aq=eAtnndm.A.A!.D.DEE ===%%r)rSr&rr:r+rlfloatcomplexlenrrr)r*rrrrrrrrr0) rrrr,rarbjoin_strrr fragmentsexpandedrr~s ` @@r_label_path_expansionz!URIVariable._label_path_expansion?s=4466}0022 =53UG"<== E a4)%00  U   CF C F1:&9:EBBE05I09B8==+++d B U   2v 2F19S*=%=>FFE2VEKKMM22E J $ }}%%%%%%!%%%H (188T 1qvu%%"(3gvge}""5)))rc j}j |dSt|\}}t |r~|s|t jt jt|}|r(|  fd|D}|r|ndSd fd|D}d|St|s|rt jt j ttf|}|p t|}|r"| fd|DSd fd|D}d|St jt j|}|r |d|n|}|rdj|SS)z"Expansion method for ';' operator.Nc3FK|]}|dt|VdSNrr/)rdrwrrr~s rryz3URIVariable._semi_path_expansion..sB))34t..eAtnn..))rrc38K|]}t|VdSr4r/)rdrwr~s rryz3URIVariable._semi_path_expansion..s+ ? ?Aq$ ? ? ? ? ? ?rrc3|K|]6\}}|t|dj|V7dSrrrdr}rwr~rs rryz3URIVariable._semi_path_expansion..s[%%1}Q~~@@ (;(;A(>(>@@$}}}%%rc3|K|]6\}}|t|dj|V7dS)Nrrrs rryz3URIVariable._semi_path_expansion..s[$$1}Q~~@@ (;(;A(>(>@@$}}}$$r)rSr&rrrr)r*rrrrrr+rrrr0) rrrr,rarbrrrrr~s `` @r_semi_path_expansionz URIVariable._semi_path_expansionssQ=4466}0022 =4)%00  U   )F )F1:&9:EBBE )#==)))))8=)))$,5xx5 ? ? ? ? ? ? ???((((( U   ,v ,F19S*=%=>FFE2VEKKMM22E ,}}%%%%% %%%% 88$$$$$ %$$$ +++++qvu%%"(3gvge  :99T]007799 9 rc|dSt|\}}t|rM|sKtjtjt |}dfd|DSt|s|r|tjtjtt f|}|p t| }|rdnddfd|DStjtj |}|r |d|n|}j |S)Nrc3LK|]}j|VdSr4rrs rryz0URIVariable._string_expansion..s3BBqDM//22BBBBBBrrrc3K|]>\}}j|j|fzV?dSr4r)rdr}rwrrs rryz0URIVariable._string_expansion..seAqdm11!44dm6I6I!6L6LMMr)rrr)r*rrrrrr+rrrrSr0)rrrr,rarbrrrs` @r_string_expansionzURIVariable._string_expansionsY =4)%00  U   CF CF1:&9:EBBE88BBBBEBBBBB B U   v F19S*=%=>FFE2VEKKMM22E$+8J88!  qvu%%"(3gvge}""5)))rvar_dictcg}||j|jiS|jD]\}}||d}|s|dkr||jvr |j|}| {'/var': '/value'} # (2) v = URIVariable('?var,hello,x,y') expansion = v.expand({'var': 'value', 'hello': 'Hello World!', 'x': '1024', 'y': '768'}) print(expansion) # => {'?var,hello,x,y': # '?var=value&hello=Hello%20World%21&x=1024&y=768'} Nr rarb)rRrTr@rVrSrr"r!rr$r%rr#rrrmr-r&r)rr return_valuesrroptsr,r expansions rexpandzURIVariable.expands:  M4=1 1.% /% /JD$LLt,,E ,Ub[[TT]-B-B d+}H !666=H$BBB 6  !:::=H$JJJ 1 ("??? 5  2 !yud9otH~NNH#$$X...   --//-3355::=IIJ  u%%r)rNr4)rCrDrE__doc__r+rWrYr[r6 VariableValueboolr)OptionalrlrrrrVariableValueDictrrrMrrrOrOs$C (#(((((K(K(K(KT... .  3 . C ....`2*2*2* 2*  3 2* C 2*2*2*2*h222 2  3 2 C 2222h*** *  3 * C ****>9=N&N& #45N& 38 N&N&N&N&N&N&rrOr,rc||r5t|ttfrtd|DsdSd|fS)Nc3fK|],}t|tot|dkV-dS)N)r:rir)rdr)s rryz$is_list_of_tuples..s;GGA:a''7CFFaKGGGGGGr)FNT)r:listriallr,s rrrsT %$//GGGGGGG { ;rc:t|ttfSr4)r:rrirs rrr#s edE] + ++rcNt|ttjjfSr4)r:dict collectionsabcMutableMappingrs rrr's edKO$BC D DDrutf-8encodingcZt|tr||S|Sr4)r:r+encode)r,rs r_encoder+s+%&||H%%% Lrr~ct|ttfst|}tjt ||Sr4)r:r+r;r5r6r0r)r,r~s rr0r01sA ec5\ * *E  <  gennd 3 33r)r)8rcollections.abcrenumstringtypingr) urllib.parser5Unionrlrrr+rrListrTuplerDictr ascii_lettersdigitsrFinal__annotations__rrrEnumrrrr!r"r#r$r%rHrJrIrFrGr?rOrKrrrrrAnyStrr;rr0rMrrrs%" gc5'3<=J"#F Ic&&'GC$ $%  F3 -.0V]000 & QWS\%%%) QWS\)))(3%B[%B%BagclBBB~3~3~3~3~3ty~3~3~3D      '    &  "  /           . . AGAF3=) *    W&W&W&W&W&W&W&W&t  5 WT1:aj6I1I)JKL LM    ,QU,t,,,,EQUEtEEEE18s 44c4c444444r