o
    Zh                     @   s   d Z ddlmZ ddlZddlmZ erDd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rUddlmZ ndZzddlmZ W n eyn   ddlmZ Y nw dd ZG dd de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.
    )absolute_importN)TYPE_CHECKING)URLResolver)Dict)List)Optional)
URLPattern)Tuple)Union)Pattern)VERSION)   r   )RoutePattern)get_resolverc                 C   s*   z| j }W |S  ty   | jj }Y |S w )z5Utility method for django's deprecated resolver.regex)regexAttributeErrorpattern)Zresolver_or_patternr    r   b/var/www/html/lang_env/lib/python3.10/site-packages/sentry_sdk/integrations/django/transactions.py	get_regex%   s   
r   c                   @   sj   e Zd ZedZedZedZedZedZ	edZ
i Zdd Zdd
dZ		dddZd	S )RavenResolverz<(?:([^>:]+):)?([^>]+)>z\(\?\:([^\)]+)\)z\(\?P<(\w+)>[^\)]+\)+z
\([^\)]+\)z\[([^\]]+)\|([^\]]+)\]z([A-Z]+)([a-z])c                 C   s   t durt|drt|jt r| jdd |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>O       z)RavenResolver._simplify.<locals>.<lambda>c                 S   r   )Nz%s   r   r   r   r   r   r   X   r   c                 S   r   )Nr   r   r   r   r   r   r   r   [   r   z{var}c                 S   s
   |  dS )Nr   r   r   r   r   r   r   a   s   
 ^ $?z\Az\Zz///\)r   hasattr
isinstancer   _new_style_group_matchersubZ_router   _optional_group_matcher_named_group_matcher_non_named_group_matcher_either_option_matcherreplace)selfr   resultr   r   r   	_simplify<   s,   



zRavenResolver._simplifyNc           
   	      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)r1   ).0pr/   r   r   	<genexpr>   s    z)RavenResolver._resolve.<locals>.<genexpr>r$   )r   searchendZurl_patternscallback_resolve_cacheKeyErrorjoinr1   
startswith)
r/   resolverpathparentsmatchnew_pathr   Zmatch_prefixr0   r   r5   r   r:   p   s8   



zRavenResolver._resolvec                 C   s   t |}| ||}|S r2   )r   r:   )r/   r@   Zurlconfr?   rB   r   r   r   resolve   s   zRavenResolver.resolver2   )__name__
__module____qualname__recompiler(   r*   r+   r,   r-   Z	_camel_rer;   r1   r:   rE   r   r   r   r   r   /   s    





4)r   )__doc__
__future__r   rI   Zsentry_sdk._typesr   Zdjango.urls.resolversr   typingr   r   r   r   r	   r
   r   djangor   ZDJANGO_VERSIONr   Zdjango.urlsr   ImportErrorZdjango.core.urlresolversr   objectr   ZLEGACY_RESOLVERr   r   r   r   <module>   s2    

r