o
    S۷i6                     @   s   d Z ddlZddlmZ er>ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 dd	lm
Z
 dd
lmZ ddlmZ ddlmZ edkrOddlmZ ndZzddlmZ W n eyh   ddlmZ Y nw dddZG dd dZe ZdS )zr
Copied from raven-python.

Despite being called "legacy" in some places this resolver is very much still
in use.
    N)TYPE_CHECKING)URLResolver)Dict)List)Optional)
URLPattern)Tuple)Union)Pattern)VERSION)   r   )RoutePattern)get_resolverresolver_or_patternUnion[URLPattern, URLResolver]returnPattern[str]c                 C   s*   z| j }W |S  ty   | jj }Y |S w )z5Utility method for django's deprecated resolver.regex)regexAttributeErrorpattern)r   r    r   a/home/ubuntu/vllm_env/lib/python3.10/site-packages/sentry_sdk/integrations/django/transactions.py	get_regex#   s   
r   c                	   @   s   e Zd ZU edZedZedZedZedZ	edZ
i Zded< d	d
defddZ	ddddeddddfddZ	ddeddddfddZdS )RavenResolverz<(?:([^>:]+):)?([^>]+)>z\(\?\:([^\)]+)\)z\(\?P<(\w+)>[^\)]+\)+z
\([^\)]+\)z\[([^\]]+)\|([^\]]+)\]z([A-Z]+)([a-z])zDict[URLPattern, str]_cacher   r   r   c                 C   s   t durt|drt|jt r| jdd t|jjS t|j}| j	dd |}| j
dd |}| jd|}| jdd |}|d	d
dd
dd
dd
dd
dddd
}|S )z
        Clean up urlpattern regexes into something readable by humans:

        From:
        > "^(?P<sport_slug>\w+)/athletes/(?P<athlete_slug>\w+)/$"

        To:
        > "{sport_slug}/athletes/{athlete_slug}/"
        Nr   c                 S      d|  d S )N{%s}r   groupmr   r   r   <lambda>K       z)RavenResolver._simplify.<locals>.<lambda>c                 S   r   )Nz%s   r   r   r   r   r   r!   T   r"   c                 S   r   )Nr   r#   r   r   r   r   r   r!   W   r"   z{var}c                 S   s
   |  dS )Nr#   r   r   r   r   r   r!   ]   s   
 ^ $?z\Az\Zz///\)r   hasattr
isinstancer   _new_style_group_matchersubstr_router   _optional_group_matcher_named_group_matcher_non_named_group_matcher_either_option_matcherreplace)selfr   resultr   r   r   	_simplify9   s,   



zRavenResolver._simplifyNresolverr   pathparentszOptional[List[URLResolver]]zOptional[str]c           
   	      s   t ||}|sd S |d u r|g}n	||vr||g }|| d  }|jD ]Q}|js: |||}|r9|  S q't ||sBq'z j| W   S  tyS   Y nw d fdd|D }| 	| }	|	
dspd|	 }	|	 j|< |	  S d S )Nr%   c                 3   s    | ]}  |V  qd S N)r7   ).0pr5   r   r   	<genexpr>   s    z)RavenResolver._resolve.<locals>.<genexpr>r(   )r   searchendurl_patternscallback_resolver   KeyErrorjoinr7   
startswith)
r5   r8   r9   r:   matchnew_pathr   match_prefixr6   r   r>   r   rD   l   s8   



zRavenResolver._resolveurlconfzJUnion[None, Tuple[URLPattern, URLPattern, URLResolver], Tuple[URLPattern]]c                 C   s   t |}| ||}|S r;   )r   rD   )r5   r9   rL   r8   rH   r   r   r   resolve   s   zRavenResolver.resolver;   )__name__
__module____qualname__recompiler,   r0   r1   r2   r3   	_camel_rer   __annotations__r.   r7   rD   rM   r   r   r   r   r   ,   s:   
 




7
,r   )r   r   r   r   )__doc__rQ   typingr   django.urls.resolversr   r   r   r   r   r   r	   r
   djangor   DJANGO_VERSIONr   django.urlsr   ImportErrordjango.core.urlresolversr   r   LEGACY_RESOLVERr   r   r   r   <module>   s0    
	
s