
    >i%                     <   d dl Z d dlmZmZ d dlmZmZ  e j                  d      Z e j                  d      Z	g dZ
dZdd	d
dddd
dZddddddddZddddddddZdddddZdddddddd Zg d!Z eh d"      Zd#d$d%d&d&d'Ze G d( d)             Z G d* d+      Zy),    N)	dataclassfield)UserAgentBrandVersionUserAgentMetadataz!Chrome/(\d+)\.(\d+)\.(\d+)\.(\d+)zEdg/(\d+)\.(\d+)\.(\d+)\.(\d+))zNot/A)BrandzNot A;BrandzNot.A/BrandzNot)A;BrandzNot=A?Brandd   Win32MacIntelzLinux x86_64zLinux armv81iPhoneiPad)windows	macintoshlinuxandroidiphoneipadcrosWindowsmacOSLinuxAndroidiOSz	Chrome OSx86armz0.1.0z0.2.0z0.3.015.0.0)z6.1z6.2z6.3z10.0z14.0.0z17.0.0z6.1.0z	14541.0.0)r   r   r   r   r   r   r   ))r   r   )r   r   )r   r   )r   r   )r   r   )r   r   )zmac os xr   )r   r   >   r   r   mobiler   )Windows NT (\d+\.\d+)N)z"Mac OS X (\d+)[_.](\d+)[_.]?(\d+)?N)Android (\d+(?:\.\d+)*)N)zOS (\d+)[_.](\d+)[_.]?(\d+)?N)r   r   r   r   r   c                   X    e Zd ZU dZeed<   eed<   eed<   eed<    edd      Zeed	<   y
)ParsedUserAgentz?Result of parsing a User-Agent string into consistent metadata.platformvendorapp_versionuser_agent_metadata F)defaultreprnavigator_override_jsN)	__name__
__module____qualname____doc__str__annotations__r   r   r'        d/var/www/python/tenders/Scrapper/venv/lib/python3.12/site-packages/pydoll/utils/user_agent_parser.pyr   r   X   s-    IMK**!&r!>3>r/   r   c                      e Zd ZdZededefd       Zedededededed	ede	fd
       Z
ededefd       Zededeeeef   fd       Zededefd       Zededefd       Zedededefd       Zedededefd       Zededededefd       Zededeeeef   fd       Zedededee   fd       Zedededee   fd       Zededefd       Zedededefd       Zy)UserAgentParsera  Stateless parser that extracts consistent metadata from a User-Agent string.

    Given a UA string like:
        Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
        (KHTML, like Gecko) Chrome/120.0.6099.109 Safari/537.36

    It produces all the metadata needed for CDP Emulation.setUserAgentOverride
    and JavaScript navigator property overrides, ensuring full consistency
    between HTTP headers and JS properties.
    
user_agentreturnc           
      Z   t         j                  |       }t         j                  |       \  }}}t         j                  |       }t         j	                  | |||||      }d}t         j                  |       }t        t        j                  |d      |||t         j                  ||            S )a  Parse a User-Agent string into consistent browser metadata.

        Args:
            user_agent: Full User-Agent string.

        Returns:
            ParsedUserAgent with platform, vendor, appVersion,
            userAgentMetadata, and JS override script.
        zGoogle Inc.r   )r    r!   r"   r#   r'   )
r2   _detect_os_key_detect_browser_detect_mobile_build_metadata_build_app_versionr   _PLATFORM_MAPget_build_navigator_override_js)	r3   os_keybrowser_namemajor_versionfull_version	is_mobilemetadatar!   r"   s	            r0   parsezUserAgentParser.parseo   s     !//
;4C4S4ST^4_1m\#22:>	"22m\9
 %88D"&&vw7# ("1"N"NvWb"c
 	
r/   r>   r?   r@   rA   rB   c                     t        t        j                  |d      t        j	                  | |      t
        j                  |d      |rt        j                  |       nd|t        j                  ||      t        j                  ||      dd	      S )Nr   r   r$   64F)	r    platformVersionarchitecturemodelr   brandsfullVersionListbitnesswow64)	r   _UA_PLATFORM_MAPr<   r2   _get_platform_version_ARCHITECTURE_MAP_extract_model_build_brands_build_full_version_list)r3   r>   r?   r@   rA   rB   s         r0   r9   zUserAgentParser._build_metadata   s}     !%))&)<+AA*fU*..vu=@I/00<r"00}M+DD\S_`

 
	
r/   c                 P    | j                         }t        D ]  \  }}||v s|c S  y)Nr   )lower_OS_KEYWORDS)r3   ua_lowerkeywordr>   s       r0   r6   zUserAgentParser._detect_os_key   s5    ##%+ 	OGV("	 r/   c                 $   t         j                  |       }|r1d|j                  d      dj                  |j	                               fS t
        j                  |       }|r1d|j                  d      dj                  |j	                               fS y)NMicrosoft Edge   .Google Chrome)r]   120z	120.0.0.0)_EDGE_REsearchgroupjoingroups
_CHROME_RE)r3   
edge_matchchrome_matchs      r0   r7   zUserAgentParser._detect_browser   s    __Z0
#Z%5%5a%8#((:CTCTCV:WWW!((4""1%,,./  3r/   c                 T    | j                         t        fdt        D              S )Nc              3   &   K   | ]  }|v  
 y w)Nr.   ).0rX   rW   s     r0   	<genexpr>z1UserAgentParser._detect_mobile.<locals>.<genexpr>   s     G77h&Gs   )rU   any_MOBILE_KEYWORDS)r3   rW   s    @r0   r8   zUserAgentParser._detect_mobile   s#    ##%G6FGGGr/   c                 D    | j                  d      r| t        d      d  S | S )NzMozilla/)
startswithlen)r3   s    r0   r:   z"UserAgentParser._build_app_version   s(      ,c*o/00r/   c                    t         j                  |d      }|dk(  rt        j                  | |      S |dv r#t        |   d   }t        j                  | ||      S |dk(  r+t        j                  d|       }|r|j                  d      S |S |S )Nz0.0.0r   >   r   r   r   r   r   r   r[   )	_DEFAULT_PLATFORM_VERSIONSr<   r2   _parse_windows_version_VERSION_PATTERNS_parse_dotted_versionrer`   ra   )r3   r>   r%   patternmatchs        r0   rO   z%UserAgentParser._get_platform_version   s    ,00AY"99*gNN44'/2G"88WgVVYII8*EE%*5;;q>77r/   r%   c                     t        j                  d|       }|s|S t        j                  |j	                  d      d      S )Nr   r[   r   )ru   r`   _WINDOWS_VERSION_MAPr<   ra   )r3   r%   rw   s      r0   rr   z&UserAgentParser._parse_windows_version   s6    		2J?N#''AAAr/   rv   c                     t        j                  ||       }|s|S |j                  d      }|j                  d      }|j                  d      xs d}| d| d| S )Nr[         0r\   )ru   r`   ra   )r3   rv   r%   rw   majorminorpatchs          r0   rt   z%UserAgentParser._parse_dotted_version   s]    		':.NAAA%#%%))r/   	major_intc                     | t        t              z  }t        |   }| t        k\  rt        | t        z        nd}| t        k\  r| t        z   dnd}|||fS )z4Build GREASE brand, short version, and full version.99z.0.0.0z99.0.0.0)ro   _GREASE_BRANDS_GREASE_MODULOr,   )r   grease_indexbrand	short_verfull_vers        r0   _build_greasezUserAgentParser._build_grease   sd     !3~#66|,7@N7RC	N23X\	5>.5Py>)*&1V` 	 i))r/   c                     |j                         rt        |      nd}t        j                  |      \  }}}t	        ||      t	        d|      g}| dv r|j                  t	        | |             |S )Nx   r   versionChromium   r]   rZ   )isdigitintr2   r   r   append)r?   r@   r   grease_brandgrease_version_rJ   s          r0   rR   zUserAgentParser._build_brands   sq    *7*?*?*AC&s	*9*G*G	*R'na "nM!
MJ/

 >>MM/lMZ[r/   c                    d|v r|j                  d      d   n|}|j                         rt        |      nd}t        j	                  |      \  }}}t        ||      t        d|      g}| dv r|j                  t        | |             |S )Nr\   r   r   r   r   r   )splitr   r   r2   r   r   r   )r?   rA   r~   r   r   r   grease_full_versionversionss           r0   rS   z(UserAgentParser._build_full_version_list   s     /2\.A""3'*|"'--/CJs	/>/L/LY/W,a, ">QR!
LI1

 >>OO1l[\r/   c                 r    t        j                  d|       }|r|j                  d      j                         S y)Nz;\s*([A-Za-z0-9_ ]+)\s*Build/r[   r$   )ru   r`   ra   strip)r3   rw   s     r0   rQ   zUserAgentParser._extract_model  s0    		:JG;;q>''))r/   r!   r"   c                 |    | j                  dd      }|j                  dd      j                  dd      }d| d| dS )N'z\'\z\\zBObject.defineProperty(Navigator.prototype, 'vendor', {get: () => 'zK'});
Object.defineProperty(Navigator.prototype, 'appVersion', {get: () => 'z'});)replace)r!   r"   safe_vendorsafe_app_versions       r0   r=   z,UserAgentParser._build_navigator_override_js  sS    nnS%0&..tV<DDS%P(M *-.e5	
r/   N)r(   r)   r*   r+   staticmethodr,   r   rD   boolr   r9   r6   tupler7   r8   r:   rO   rr   rt   r   r   listr   rR   rS   rQ   r=   r.   r/   r0   r2   r2   c   sv   	 
# 
/ 
 
6 


 
 	

 
 
 

 
( 3 3   3C 3E#sC-,@ 3 3 H3 H4 H H s s  
 # s s    B3 B B B B *# * *c *c * * * *sC})= * * C  EZ@[   ),	#	$ " 3 3   
S 
s 
s 
 
r/   r2   )ru   dataclassesr   r   pydoll.protocol.emulation.typesr   r   compilerd   r_   r   r   r;   rN   rP   ry   rq   rV   	frozensetrl   rs   r   r2   r.   r/   r0   <module>r      s"   	 ( TRZZ<=
2::78       	   	 DE  0>153  ? ? ?~
 ~
r/   