
    \j6                        d Z ddlZddlmZ er0d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\  rddlmZ ndZ	 ddlmZ ddZ G d d      Z e       Zy# e$ r	 ddlmZ Y #w xY w)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                 l    	 | j                   }|S # t        $ r | j                  j                   }Y |S w xY w)z5Utility method for django's deprecated resolver.regex)regexAttributeErrorpattern)resolver_or_patternr   s     U/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/django/transactions.py	get_regexr   #   s@    2#)) L  2#++11L2s    33c            	       8   e Zd ZU  ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z ej                  d      Z	 ej                  d      Z
i Zded<   d	d
defdZ	 ddddeddddfdZ	 ddeddddfdZy)RavenResolverz<(?:([^>:]+):)?([^>]+)>z\(\?\:([^\)]+)\)z\(\?P<(\w+)>[^\)]+\)+z
\([^\)]+\)z\[([^\]]+)\|([^\]]+)\]z([A-Z]+)([a-z])zDict[URLPattern, str]_cacher   Union[URLPattern, URLResolver]returnc                    t         `t        |d      rTt        |j                  t               r:| j                  j                  d t        |j                  j                              S t        |      j                  }| j                  j                  d |      }| j                  j                  d |      }| j                  j                  d|      }| j                  j                  d |      }|j                  dd      j                  d	d      j                  d
d      j                  dd      j                  dd      j                  dd      j                  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}/"
        r   c                 *    d| j                  d      z  S )N{%s}r   groupms    r   <lambda>z)RavenResolver._simplify.<locals>.<lambda>K   s    &1771:-     c                 *    d| j                  d      z  S )Nz%s   r   r!   s    r   r#   z)RavenResolver._simplify.<locals>.<lambda>T   s    D1771:<M r$   c                 *    d| j                  d      z  S )Nr   r&   r   r!   s    r   r#   z)RavenResolver._simplify.<locals>.<lambda>W   s    !''!*9L r$   z{var}c                 $    | j                  d      S )Nr&   r   r!   s    r   r#   z)RavenResolver._simplify.<locals>.<lambda>]   s    1771: r$   ^ $?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   results      r   	_simplifyzRavenResolver._simplify9   s0    $+7??L90044-s7??3I3I/J  7#++ --112MvV **../LfU ..227FC ,,001EvN NN3#WS"WS"WUBWUBWT3WT2 	 r$   Nresolverr   pathparentszOptional[List[URLResolver]]zOptional[str]c                     t        |      j                  |      }|sy ||g}n
||vr||gz   }||j                         d  }|j                  D ]T  }|j                  s j                  |||      }|r|c S )t        |      j                  |      sD	  j                  |   c S  y # t        $ r Y nw xY wdj                   fd|D              }| j                  |      z   }	|	j                  d      sd|	z   }	|	 j                  |<   |	c S )Nr*   c              3   @   K   | ]  }j                  |        y wN)r<   ).0pr:   s     r   	<genexpr>z)RavenResolver._resolve.<locals>.<genexpr>   s     @1T^^A.@s   r-   )r   searchendurl_patternscallback_resolver   KeyErrorjoinr<   
startswith)
r:   r=   r>   r?   matchnew_pathr   match_prefixr;   s
   `         r   rJ   zRavenResolver._resolvel   s#    (#**40?jGW$
*G		&,, 	G##w'B!Mw'..x8{{7++	,    WW@@@FdnnW55F$$S)v#)DKK Ms   B&&	B21B2urlconfzJUnion[None, Tuple[URLPattern, URLPattern, URLResolver], Tuple[URLPattern]]c                 @    t        |      }| j                  ||      }|S rB   )r   rJ   )r:   r>   rR   r=   rN   s        r   resolvezRavenResolver.resolve   s#    
  (h-r$   rB   )__name__
__module____qualname__recompiler1   r5   r6   r7   r8   	_camel_rer   __annotations__r3   r<   rJ   rT    r$   r   r   r   ,   s    )rzz"  )bjj)<=%2::&>?)rzz-8'RZZ(AB

-.I&(F#(1!A 1c 1n 26	'' ' /	'
 
'X ae ^ 
	r$   r   )r   r   r   zPattern[str])__doc__rX   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   <module>rf      sx    
  10 ,V2L6(
p pf  /A  656s   A0 0A>=A>