o
    hW                     @   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 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_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)resolver_or_patternr    r   m/var/www/html/pro-man-master/venv/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 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>M       z)RavenResolver._simplify.<locals>.<lambda>c                 S   r   )Nz%s   r   r   r   r   r   r   V   r   c                 S   r   )Nr   r   r   r   r   r   r   r   Y   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   	_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)r3   ).0pr1   r   r   	<genexpr>   s    z)RavenResolver._resolve.<locals>.<genexpr>r$   )r   searchendurl_patternscallback_resolve_cacheKeyErrorjoinr3   
startswith)
r1   resolverpathparentsmatchnew_pathr   match_prefixr2   r   r7   r   r=   n   s8   



zRavenResolver._resolvec                 C   s   t |}| ||}|S r4   )r   r=   )r1   rC   urlconfrB   rE   r   r   r   resolve   s   zRavenResolver.resolver4   )__name__
__module____qualname__recompiler(   r,   r-   r.   r/   	_camel_rer>   r3   r=   rJ   r   r   r   r   r   -   s    





4)r   )__doc__rN   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    

r