
    8Cfe1                         d dl Z d dlZd dlmZ d dlmZ ddlmZm	Z	 ddl
mZ ddlmZmZmZ  G d d	e      Z G d
 d      Zy)    N)SimpleNamespace)warn   )InvalidUsageParameterNameConflicts)	ParamInfo)	Immutableparts_to_pathpath_to_partsc                       e Zd Zd Zy)Requirementsc                 F    t        t        | j                                     S N)hash	frozensetitemsselfs    S/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/sanic_routing/route.py__hash__zRequirements.__hash__   s    Idjjl+,,    N)__name__
__module____qualname__r    r   r   r   r      s    -r   r   c                   $   e Zd ZU dZeed<   eed<   ej                  dej                  f   ed<   ej                  e
   ed<   e
ed<   ej                  e
df   ed<   e
ed	<   ej                  e
   ed
<   eed<   eed<   eed<   eed<   eed<   	 	 	 	 	 	 d,ddde
de
dej                  dej                  f   dej                  ej                   e
   ej                  e
   f   dej                  ej"                  e
ej                  f      dedededededefdZd Zde
fdZdefdZd Zd Zdefdede
de
de
dej4                  f
d Zd! Zd" Zd# Zd$ Ze d%        Z!e d&        Z"e dej                  e
df   fd'       Z#e d(        Z$defd)Z%d*e
fd+Z&y)-Route)_params	_raw_pathctxextrahandlerlabelsmethodsname
overloadedparamspartspathpatternpriorityregexrequirementsrouterstaticstrictunquoter    r!   .r"   r$   r%   r(   r)   r*   r,   r-   r/   r0   r1   Nr   )r+   raw_pathr&   r+   c                   || _         || _        || _        t        |      | _        t        |xs i       | _        || _        t               | _	        t               | _
        i | _        || _        | j                  |      }t        || j                   j                        }t!        || j                   j                        | _        || _        |	| _        |
| _        || _        d | _        || _        || _        d | _        | j5                          y )N)	delimiter)r.   r%   r"   r   r$   r   r-   r+   r   r    r!   r   r   _ingest_pathr   r4   r
   r)   r(   r/   r,   r&   r*   r0   r1   r#   _setup_params)r   r.   r2   r%   r"   r$   r-   r0   r1   r/   r,   r&   r+   ingested_pathr(   s                  r   __init__zRoute.__init__H   s      	 )();< "$$&
/1! ))(3 mT[[-B-BC!%4;;3H3HI	

$"$/3r   c                 <   | j                   rM| j                   | j                  k7  r4d| j                    d| j                  xs | j                  j                   n&d| j                  xs | j                  j                   }d| j                  j
                   d| dS )Nzname=z path=zpath=<z: >)r%   r)   r.   r4   	__class__r   )r   displays     r   __str__zRoute.__str__x   s     yyTYY$))3 DII;fTYY%G$++2G2G$HI;dkk&;&;<= 	
 4>>**+2gYa88r   returnc                     t        |       S r   )strr   s    r   __repr__zRoute.__repr__   s    4yr   c                     t        || j                        syt        | j                  | j                  f|j                  |j                  fk(  xr | j
                  |j
                  z        S )NF)
isinstancer<   boolsegmentsr-   r$   )r   others     r   __eq__zRoute.__eq__   sj    %0 !!
 ""	 / -

 
	
r   c                    g }|j                  | j                  j                        D ]3  }|j                  d      rd|vr|dd }d| d}|j	                  |       5 | j                  j                  j                  |      S )Nr:   :r   z:str>)splitr.   r4   
startswithappendjoin)r   r)   rF   partr%   s        r   r5   zRoute._ingest_path   s|    JJt{{445 	"Ds#4Abz4&OOD!		"
 {{$$))(33r   c           
         t        t        | j                  | j                  j                        | j                  j                        }| j
                  swt        || j                  j                        }t        |      D ]H  \  }}|j                  d      s| j                  |dd       \  }}}}}	| j                  |||||||	       J y y )Nr:   r   rK   )
r
   r   r2   r.   r4   r/   	enumeraterM   parse_parameter_stringadd_parameter)
r   key_pathr(   idxrP   r%   label_typer*   param_info_classs
             r   r6   zRoute._setup_params   s     $--)>)>?KK!!
 {{!(DKK,A,ABE&u- 	T??3' 33D2J?( && ( r   rV   rW   castc           	         |rQt        |t              rA|j                  d      sd| }|j                  d      s| d}t	        j
                  |      }|| j                  j                  v}|rdn;t        | j                  j                  j                               j                  |      }	 ||||||||	      | j                  |<   y )N^$r   )r%   r2   rW   rZ   r*   r,   r+   )rD   rA   rM   endswithrecompiler.   regex_typeslistkeysindexr   )
r   rV   r%   r2   rW   rZ   r*   rY   is_regexr+   s
             r   rT   zRoute.add_parameter   s     z'3/%%c*gY-##C($IQ-jj)G 7 77  dkk--2245;;EB 	
 -
Sr   c                 N    t         j                        }t        |j                         D cg c]  \  }}|j                  |f c}}      }|D cg c]  }|d   	 }}t        |      t        t        |            k7  rt        d j                         | _        t        t        |j                          fd             _
         j                  sCt        d  j                  j                         D              rt        d j                         y y c c}}w c c}w )Nr   zDuplicate named parameters in: c                 ,    j                  | d         S )Nr   )_sorting)paramr   s    r   <lambda>z(Route._finalize_params.<locals>.<lambda>   s    T]]585L r   )keyc              3   8   K   | ]  }d |j                   v   yw)rJ   N)rW   ).0ri   s     r   	<genexpr>z)Route._finalize_params.<locals>.<genexpr>   s      "
#(C5;;"
s   zInvalid parameter declaration: )dictr   setr   r%   lenr   r   r#   sortedr'   r,   anyvaluesr   r2   )r   r'   rV   ri   label_pairsitemr#   s   `      r   _finalize_paramszRoute._finalize_params   s    dll#v||~NeEJJ,NO&12d$q'22v;#c&k**(1$..1AB  6<<>'LM
 zzc "
,0KK,>,>,@"
 
 1$--A 
z O2s   D
D"c                    g }| j                   D ]x  }|j                  d      rR| j                  |      ^}}}}t        |t              s|j
                  j                  d      }t        j                  |      }|j                  dk(  r|j                  rUt        |j                        d   |k7  r(t        dt        |j                        d    d| d      |j                  |       |j                  d      dkD  rt        d	| d
| d      |j                  d      \  }}	|j                  | d| d|	        1|j                  dkD  rt        d|       |j                  d| d| d       h|j                  |       { | j                   j"                  | j                   j"                  j%                  |      z   | _        y )Nr:   z^$r   r   zNamed group (z#) must match your named parameter ()(zCould not compile pattern z(. Try using a named group instead: '(?P<z>your_matching_group)'z(?P<r;   zInvalid matching pattern )r(   rM   rS   rD   rA   r*   stripr_   r`   groups
groupindexrb   r   rN   countrL   r.   r4   rO   )
r   
componentsrP   r%   _r*   __compiled	beginningends
             r   _compile_regexzRoute._compile_regex   s   
JJ 	(Ds#(,(C(CD(I%q'2!'3/%oo33D9G::g.??a'** 3 34Q74?"."/X5H5H0I!0L/M NEEIF!!M#  #))'2"==-1"."<WI F((,v-C!E# 
 *1s);	3"))YKtD63%*HI__q(&)B7)'LMM%%TF!G9A&>?!!$';	(> {{,,t{{/D/D/I/I0
 
r   c                     | j                          | j                  r| j                          t        | j                        | _        y r   )rw   r,   r   r	   r-   r   s    r   finalizezRoute.finalize  s4    ::!%d&7&78r   c                 8    t        | j                        | _        y r   )ro   r-   r   s    r   resetzRoute.reset   s     !2!23r   c                     | j                   S r   )r   r   s    r   defined_paramszRoute.defined_params#  s    ||r   c                     | j                   S )z8
        The raw path from the route definition
        )r   r   s    r   r2   zRoute.raw_path'  s    
 ~~r   c                 R     t         fdt         j                        D              S )z
        Same as :py:attr:`~sanic_routing.route.Route.parts` except
        generalized so that any dynamic parts do not
        include param keys since they have no impact on routing.
        c              3   ~   K   | ]4  \  }}|j                   v rd j                   |   j                   dn| 6 yw)z<__dynamic__:r;   N)r   rW   )rm   rV   segmentr   s      r   rn   z!Route.segments.<locals>.<genexpr>5  sN      
 W dll" DLL-334A6
s   :=)tuplerR   r(   r   s   `r   rF   zRoute.segments.  s*      
 !*$** 5	
 
 	
r   c                 J    | j                   j                   | j                   S )z
        Since :py:attr:`~sanic_routing.route.Route.path` does NOT
        include a preceding '/', this adds it back.
        )r.   r4   r)   r   s    r   uriz	Route.uri<  s"     ++''(44r   c                    	 t        | j                  j                  j                               j	                  |j
                        S # t        $ r9 t        t        | j                  j                  j                                     cY S w xY wr   )rb   r.   ra   rc   rd   rW   
ValueErrorrq   )r   rv   s     r   rh   zRoute._sortingD  sf    	=//4467==djjII 	=tDKK3388:;<<	=s   AA ?B
	B
parameter_stringc                    |j                  d      }|}d}d|v r|j                  dd      \  }}d|v r|j                  dd      \  }}d|v r|j                  dd      \  }}|st        d|       |dk(  rt        d| d	t               n|d
k(  rt        d| dt               t
        |t        f}| j                  j                  j                  ||      }|\  }}}	|||||	fS )a  Parse a parameter string into its constituent name, type, and
        pattern

        For example:

        ```text
        parse_parameter_string('<param_one:[A-z]>')` -> ('param_one', '[A-z]', <class 'str'>, '[A-z]')
        ```

        :param parameter_string: String to parse
        :return: tuple containing
            (parameter_name, parameter_type, parameter_pattern)
        z<>rA   rJ   r   =zInvalid parameter syntax: stringzjUse of 'string' as a path parameter type is deprected, and will be removed in Sanic v21.12. Instead, use <z:str>.numberzjUse of 'number' as a path parameter type is deprected, and will be removed in Sanic v21.12. Instead, use <z:float>.)
r{   rL   r   r   DeprecationWarningrA   r   r.   ra   get)
r   r   r%   rW   r   defaultfoundrX   r*   rY   s
             r   rS   zRoute.parse_parameter_stringJ  s+    ,11$7""*00a8KD%e| ;;sA.qd{**S!,a 01A0BC   %%)F&2 '	 ("%%)F(4 '	 y) ''++E7;+0(w(UE7,<<<r   )NFFFFF)'r   r   r   	__slots__r   __annotations__tCallableAny	FrozenSetrA   TupleOptionalrE   r   UnionSequenceDictintr8   r>   rB   rH   r5   r6   r   TyperT   rw   r   r   r   propertyr   r2   rF   r   rh   rS   r   r   r   r   r      s_   I0 
ZZQUU
##[[
I 7738 IZZ_KLL M 8< . . . 	.
 CJ'. C!++c*::;. jjQUU
!34. . . . . . .`9# 
t 
,4D " 
 
  
 	 

  
 ff 
D*$
L94     
!''#s(+ 
 
 5 5= =2=s 2=r   r   )r_   typingr   typesr   warningsr   
exceptionsr   r   patternsr   utilsr	   r
   r   r   r   r   r   r   <module>r      s5    	  !  <  : :-9 -
k= k=r   