
    2Bf`                         d dl Z d dlZd dlZddlmZ ej                  rd dlm	Z	  G d d      Z
 G d de
      Z G d	 d
e      Z G d de      Z G d de      Zy)    N   )	UserAgent)WSGIEnvironmentc            	          e Zd ZU dZej
                  ej                  ej                  eef         e	d<   dZ
ej
                  ej                  ej                  eef         e	d<   dZ ej                  d      Zdd	Zd
edej                  ej                   e   ej                   e   ej                   e   ej                   e   f   fdZy)_UserAgentParser))z cros chromeos)z
iphone|iosiphone)ipadr
   )zdarwin\b|mac\b|os\s*xmacos)winwindows)androidr   )netbsdr   )openbsdr   )freebsdr   )	dragonflydragonflybsd)z(sun|i86)ossolaris)zx11\b|lin(\b|ux)?linux)znintendo\s+wiiwii)irixr   )zhp-?uxhpux)aixr   )zsco|unix_svsco)bsdr   )amigar   )zblackberry|playbook
blackberry)symbianr   platform_rules))	googlebotgoogle)msnbotmsn)yahoor$   )z
ask jeevesask)zaol|america\s+online\s+browseraol)z	opera|opropera)zedge|edgedge)zchrome|crioschrome)	seamonkeyr*   )z"firefox|firebird|phoenix|iceweaselfirefox)galeonr,   )zsafari|versionsafari)webkitr.   )caminor/   )	konquerorr0   )zk-meleonkmeleon)netscaper2   )z4msie|microsoft\s+internet\s+explorer|trident/.+? rv:msie)lynxr4   )linksr5   )Baiduspiderbaidu)bingbotbing)mozillar:   browser_rulesz&(?:{pattern})[/\sa-z(]*(\d+[.\da-z]+)?za(?:;\s*|\s+)(\b\w{2}\b(?:-\b\w{2}\b)?)\s*;|(?:\(|\[|;)\s*(\b\w{2}\b(?:-\b\w{2}\b)?)\s*(?:\]|\)|;)returnNc           
      p   | j                   D cg c]+  \  }}|t        j                  |t        j                        f- c}}| _        | j
                  D cg c]E  \  }}|t        j                  | j                  j                  |      t        j                        fG c}}| _        y c c}}w c c}}w )N)pattern)	r   recompileI	platformsr;   _browser_version_reformatbrowsers)selfabs      S/var/www/highfloat_scraper/venv/lib/python3.12/site-packages/werkzeug/useragents.py__init__z_UserAgentParser.__init__C   s    ?C?R?RStq!1bjjBDD12S **
1 

433::1:ErttLM
 T
s   0B,A
B2
user_agentc                    | j                   D ]  \  }}|j                  |      }| n d }d}t        j                  dt        j                        j                  |      sd|v r|d   dk7  r|j                  d      }| j                  D ].  \  }}|j                  ||d        }||j                  d      } n d x}}| j                  j                  |      }|%|j                  d      xs |j                  d      }nd }||||fS )Nr   ztrident/.+? rv:)r      )	rB   searchr?   r@   rA   rindexrE   group_language_re)	rF   rK   platformregexmatchlast_closing_parenbrowserversionlanguages	            rI   __call__z_UserAgentParser.__call__J   s     $~~ 	OHeLL,E 	
 H 

-rtt4;;JGz!2#%!+!2!23!7"mm 	%NGULL,>,?!@AE ++a.		% !%$Gg!!((4{{1~7QHH'833    r<   N)__name__
__module____qualname__r   tClassVarIterableTuplestr__annotations__r;   rC   r?   r@   rS   rJ   Optionalr[    r\   rI   r   r      s    ANAJJqzz!''#s(*;<= .@M1::ajjc):;< 4 D2::	BL

$4$4	
C!**S/1::c?AJJsOS	T$4r\   r   c                   $     e Zd ZdZd fdZ xZS )UserAgentParserzA simple user agent parser.  Used by the `UserAgent`.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Use a dedicated parser library
        instead.
    c                 Z    t        j                  dt        d       t        |           y )Nzl'UserAgentParser' is deprecated and will be removed in Werkzeug 2.1. Use a dedicated parser library instead.rO   
stacklevel)warningswarnDeprecationWarningsuperrJ   )rF   	__class__s    rI   rJ   zUserAgentParser.__init__{   s(    E		
 	r\   r]   r^   r_   r`   __doc__rJ   __classcell__rr   s   @rI   rj   rj   s   s     r\   rj   c                        e Zd Zdej                  dgej
                  f   ddf fdZdej
                  dej
                  dej
                  f fdZ xZS )	_deprecated_propertyfget
_UserAgentr<   Nc                 N    t         |   |       d|j                  d| _        y )NzVThe built-in user agent parser is deprecated and will be removed in Werkzeug 2.1. The z property will be 'None'. Subclass 'werkzeug.user_agent.UserAgent' and set 'Request.user_agent_class' to use a different parser.)rq   rJ   r^   message)rF   ry   rr   s     rI   rJ   z_deprecated_property.__init__   s0    --1]],= > 	r\   argskwargsc                 n    t        j                  | j                  t        d       t	        |   |i |S )N   rl   )rn   ro   r|   rp   rq   __get__)rF   r}   r~   rr   s      rI   r   z_deprecated_property.__get__   s,    dll$61Ew///r\   )	r^   r_   r`   ra   CallableAnyrJ   r   ru   rv   s   @rI   rx   rx      sU    
QZZ(=> 
4 
0QUU 0aee 0 0 0r\   rx   c                        e Zd Z e       Zdeddf fdZedej                  e   fd       Z
edej                  e   fd       Zedej                  e   fd       Zedej                  e   fd       Z xZS )	rz   stringr<   Nc                 |    t         |   |       | j                  |      }|\  | _        | _        | _        | _        y N)rq   rJ   _parser	_platform_browser_version	_language)rF   r   inforr   s      rI   rJ   z_UserAgent.__init__   s4     ||F#GKDt}dnr\   c                     | j                   S r   )r   rF   s    rI   rT   z_UserAgent.platform       ~~r\   c                     | j                   S r   )r   r   s    rI   rX   z_UserAgent.browser       }}r\   c                     | j                   S r   )r   r   s    rI   rY   z_UserAgent.version   r   r\   c                     | j                   S r   )r   r   s    rI   rZ   z_UserAgent.language   r   r\   )r^   r_   r`   r   r   re   rJ   rx   ra   rg   rT   rX   rY   rZ   ru   rv   s   @rI   rz   rz      s     GLs Lt L
 !**S/   C   C   !**S/  r\   rz   c                   $     e Zd ZdZd fdZ xZS )r   a  Represents a parsed user agent header value.

    This uses a basic parser to try to extract some information from the
    header.

    :param environ_or_string: The header value to parse, or a WSGI
        environ containing the header.

    .. deprecated:: 2.0
        Will be removed in Werkzeug 2.1. Subclass
        :class:`werkzeug.user_agent.UserAgent` (note the new module
        name) to use a dedicated parser instead.

    .. versionchanged:: 2.0
        Passing a WSGI environ is deprecated and will be removed in 2.1.
    c                     t        |t              r/t        j                  dt        d       |j                  dd      }n|}t        j                  dt        d       t        |   |       y )NzzPassing an environ to 'UserAgent' is deprecated and will be removed in Werkzeug 2.1. Pass the header value string instead.rO   rl   HTTP_USER_AGENT zThe 'werkzeug.useragents' module is deprecated and will be removed in Werkzeug 2.1. The new base API is 'werkzeug.user_agent.UserAgent'.)
isinstancedictrn   ro   rp   getrq   rJ   )rF   environ_or_stringr   rr   s      rI   rJ   zUserAgent.__init__   si    '.MM) # '**+<bAF&F0 	
 	 r\   )r   zt.Union[str, WSGIEnvironment]r<   Nrs   rv   s   @rI   r   r      s    "! !r\   r   )r?   typingra   rn   rK   r   _BaseUserAgentTYPE_CHECKING_typeshed.wsgir   r   rj   propertyrx   rz   rh   r\   rI   <module>r      sY    	   3??.c4 c4P& $08 0$ 4&!
 &!r\   