
    'j=                     X   U d dl Z d dlZd dlZd dlmZmZmZmZ  G d de          Z	 G d de          Z
d Z G d d	e          Zd
Zi Zeeeeef         f         ed<   d Zd Zd Zd Zd Zd Zd Zd Zd Zd0dZd1dZ	 	 	 	 	 d2dZd0dZ	 	 	 	 	 d2dZe j                             d          Z!e!rd dl"Z"	 d dl"m#Z$ n# e%$ r	 d dl"m$Z$ Y nw xY w e&e!d          5 Z' e"j(        e'e$          Z)ddd           n# 1 swxY w Y   g Z*e)d         D ]eZ+e+d          Z,e+                     d!          Z-e+                     d"          Z.e+                     d#          Z/ e*j0         e	e,e-e.e/                     fg Z1e)d$         D ]Z2e2d          Z,e2                     d%          Z3e2                     d&          Z4e2                     d'          Z5e2                     d(          Z6e2                     d)          Z7 e1j0         e
e,e3e4e5e6e7                     g Z8e)d*         D ]{Z9e9d          Z,e9                     d+          Z:e9                     d,          Z;e9                     d-          Z<e9                     d.          Z= e8j0         ee,e:e;e<e=                     |[)["[$dS d d/l>m8Z8m1Z1m*Z* dS )3    N)AnyDictOptionalTuplec            	       l    e Zd Z	 ddZdedeee         ee         ee         ee         f         fdZdS )UserAgentParserNc                 b    t          j        |          | _        || _        || _        || _        dS )aE  Initialize UserAgentParser.

        Args:
          pattern: a regular expression string
          family_replacement: a string to override the matched family (optional)
          v1_replacement: a string to override the matched v1 (optional)
          v2_replacement: a string to override the matched v2 (optional)
        N)recompileuser_agent_refamily_replacementv1_replacementv2_replacement)selfpatternr   r   r   s        _/home/ice/.hermes/hermes-agent/venv/lib/python3.11/site-packages/ua_parser/user_agent_parser.py__init__zUserAgentParser.__init__   s4      Z00"4,,    user_agent_stringreturnc                    d\  }}}}| j                             |          }|r| j        rDt          j        d| j                  r"t          j        d|d         | j                  }n| j        }n|d         }| j        r| j        }n|j        r|j        dk    r
|d         pd }| j        r| j        }n|j        r|j        dk    r
|d         pd }|j        r|j        dk    r
|d         pd }||||fS )NNNNNz\$1            )r   searchr   r
   subr   	lastindexr   )r   r   familyv1v2v3matchs          r   ParsezUserAgentParser.Parse   s'    4B"))*;<< 	&& "9VT%<== 5VFE!Hd6MNNFF!4FFq" &( &U_%9%91X%" &( &U_%9%91X% &5?a#7#71X%r2r!!r   NNN__name__
__module____qualname__r   strr   r   r%    r   r   r   r      su        TX- - - -  "!$ "		
 "  "  "  "  "  "r   r   c            
           e Zd Z	 	 	 	 	 ddZdedeee         ee         ee         ee         ee         f         fdZdS )OSParserNc                 ~    t          j        |          | _        || _        || _        || _        || _        || _        dS )a  Initialize UserAgentParser.

        Args:
          pattern: a regular expression string
          os_replacement: a string to override the matched os (optional)
          os_v1_replacement: a string to override the matched v1 (optional)
          os_v2_replacement: a string to override the matched v2 (optional)
          os_v3_replacement: a string to override the matched v3 (optional)
          os_v4_replacement: a string to override the matched v4 (optional)
        N)r
   r   r   os_replacementos_v1_replacementos_v2_replacementos_v3_replacementos_v4_replacement)r   r   r0   r1   r2   r3   r4   s          r   r   zOSParser.__init__<   sD    &  Z00,!2!2!2!2r   r   r   c                 j   d\  }}}}}| j                             |          }|r| j        rt          | j        |          }n|j        r|d         }| j        rt          | j        |          }n|j        r|j        dk    r|d         }| j        rt          | j        |          }n|j        r|j        dk    r|d         }| j        rt          | j        |          }n|j        r|j        dk    r|d         }| j        rt          | j        |          }n|j        r|j        dk    r|d         }|||||fS )NNNNNNr   r   r   r      )	r   r   r0   MultiReplacer   r1   r2   r3   r4   )r   r   osos_v1os_v2os_v3os_v4r$   s           r   r%   zOSParser.ParseV   so    *F&E5%"))*;<< 	!" !$"5u== 1X% !$T%;UCC !U_%9%9a% !$T%;UCC !U_%9%9a% !$T%;UCC !U_%9%9a% !$T%;UCC !U_%9%9a5%--r   r6   r'   r,   r   r   r.   r.   ;   s         3 3 3 34%.!$%.			
%. %. %. %. %. %.r   r.   c                 f    fd}t          j        d||                                           }|pd S )Nc                     t          | d                   dz
  }                                }|t          |          k     r||         S dS )Nr    )intgroupslen)mindexgroupr$   s      r   _replzMultiReplace.<locals>._repl   sC    AaD		A3u::<rr   z\$(\d))r
   r   strip)stringr$   rG   _strings    `  r   r8   r8   ~   sG         fYv..4466G?dr   c                   d    e Zd Z	 	 	 	 ddZdedeee         ee         ee         f         fdZdS )DeviceParserNc                     t          j        ||dk    rt           j        nd          | _        || _        || _        || _        dS )zInitialize UserAgentParser.

        Args:
          pattern: a regular expression string
          device_replacement: a string to override the matched device (optional)
        ir   N)r
   r   
IGNORECASEr   device_replacementbrand_replacementmodel_replacement)r   r   
regex_flagrP   rQ   rR   s         r   r   zDeviceParser.__init__   sM      ZjC&7&7R]]Q
 
 #5!2!2r   r   r   c                 f   d\  }}}| j                             |          }|r| j        rt          | j        |          }n|d         }| j        rt          | j        |          }| j        rt          | j        |          }n-t          |                                          dk    r|d         }|||fS )Nr&   r   r   )r   r   rP   r8   rQ   rR   rC   rB   )r   r   devicebrandmodelr$   s         r   r%   zDeviceParser.Parse   s      0u"))*;<< 	!& "%d&=uEEq% D$T%;UCC% !$T%;UCCU\\^^$$q((aue##r   r   r'   r,   r   r   rL   rL      sy         3 3 3 3*$!$$		
$ $ $ $ $ $r   rL      _PARSE_CACHEc                    t          | t                    st          d|           t                              |           }||S t          t                    t          k    rt                                           d| ix}t          | <   |S )Nz(Expected user agent to be a string, got rI   )
isinstancer+   	TypeErrorrY   getrC   MAX_CACHE_SIZEclear)uaentryvs      r   _lookuprc      s    b# KI2IIJJJR  E
<N**$b>)ARHr   c                 r    t          |           }|                    |          }|s ||           x}||<   |S )N)rc   r]   )r`   keyfnra   rs        r   _cachedrh      s?    BKKE		#A  BE#JHr   c                    |rt          j        dt          d           t          |           }t	          |          dk    r|S d|vrt          |           |d<   d|vrt          |           |d<   d|vrt          |           |d<   |S )zParse all the things
    Args:
      user_agent_string: the full user agent string
    Returns:
      A dictionary containing all parsed bits
    )javascript overrides are not used anymorer   category
stacklevelr   
user_agentr9   rU   )warningswarnDeprecationWarningrc   rC   _ParseUserAgent_ParseOS_ParseDevice)r   _jsParseBitsra   s      r   r%   r%      s      
7'	
 	
 	
 	
 %&&E
5zzQ 5  -.?@@l5011du&'899hLr   c                 j    |rt          j        dt          d           t          | dt                    S )zParses the user-agent string for user agent (browser) info.
    Args:
      user_agent_string: The full user-agent string.
    Returns:
      A dictionary containing parsed bits.
    rj   r   rk   rn   )ro   rp   rq   rh   rr   r   ru   s     r   ParseUserAgentrx      sC      
7'	
 	
 	
 	

 $lODDDr   c                 t    t           D ] }|                    |           \  }}}}|r n!|pd}||pd |pd |pd dS )NOther)r    majorminorpatch)USER_AGENT_PARSERSr%   )r   uaParserr    r!   r"   r#   s         r   rr   rr     sq    &  %^^,=>>B 	E	 wFttt	  r   c                 j    |rt          j        dt          d           t          | dt                    S )zParses the user-agent string for operating system info
    Args:
      user_agent_string: The full user-agent string.
    Returns:
      A dictionary containing parsed bits.
    rj   r   rk   r9   )ro   rp   rq   rh   rs   rw   s     r   ParseOSr     sC      
7'	
 	
 	
 	

 $dH555r   c                 l    t           D ]!}|                    |           \  }}}}}|r n"|pd}|||||dS )Nrz   )r    r{   r|   r}   patch_minor)
OS_PARSERSr%   )r   osParserr9   r:   r;   r<   r=   s          r   rs   rs   "  sg      )18I)J)J&E5% 	E		wB  r   c                 j    |rt          j        dt          d           t          | dt                    S )zParses the user-agent string for device info.
    Args:
        user_agent_string: The full user-agent string.
    Returns:
        A dictionary containing parsed bits.
    rj   r   rk   rU   )ro   rp   rq   rh   rt   rw   s     r   ParseDevicer   1  sC      
7'	
 	
 	
 	

 $h===r   c                 d    t           D ]}|                    |           \  }}}|r n |d}|||dS )Nrz   )r    rV   rW   )DEVICE_PARSERSr%   )r   deviceParserrU   rV   rW   s        r   rt   rt   A  sZ    &  +112CDDu 	E	 ~uu===r   c                     |r3|d                                          r|  d| d| d| S |  d| d| | S |r
|  d| d| S |r|  d| S | S )zPretty user agent string.r    .isdigitr    r!   r"   r#   s       r   PrettyUserAgentr   M  s    	  a5==?? 	---r--B-----,,r,,B,,,,	  $$2$$$$$	  2Mr   c           	          |r|  d| d| d| d| 	S |r3|d                                          r|  d| d| d| S |  d| d| | S |r
|  d| d| S |r|  d| S | S )zPretty os string.r   r   r   r   )r9   r:   r;   r<   r=   s        r   PrettyOSr   [  s     766u66u66u66u666 8 	22252252252221151151%111	 &&u&&u&&&	 uIr   c                    t          j        dt          d           ||dk    r|}d }d }d }	||}||}||}	n(t          D ] }
|
                    |           \  }}}}	|r n!|rb|                    d          dk    rI|                     d          dk    r0d|d	|d
}t          |          }|d         }|d         }|d         }	|pd|||	fS )Nz#Use Parse (or a specialised parser)r   rm   r@   zChrome/chromeframezChrome Frame (r   )r{   r|   r}   rz   )ro   rp   rq   r~   r%   findrx   )r   js_user_agent_stringjs_user_agent_familyjs_user_agent_v1js_user_agent_v2js_user_agent_v3r    r!   r"   r#   parserua_dicts               r   ParseWithJSOverridesr   k  s;    M-/Aa   
 ',@B,F,F%'!B'!B'!B( 	 	F!'.?!@!@FBB 
 		 %%i00255""=11B666+1662226 !566WWWWb"b((r   c                     t          j        dt          d           |r3|d                                         r|  d| d| d| S |  d| d| | S |r
|  d| d| S |r|  d| S | S )NzUse PrettyUserAgentr   r   r   r   r   )ro   rp   rq   r   r   s       r   Prettyr     s    M');JJJJ	  a5==?? 	---r--B-----,,r,,B,,,,	  $$2$$$$$	  2Mr   c                     t          j        dt          d           i }|||||d}|                                D ]\  }}	|	|	dk    r|	||<   |S )NzNo use case anymorer   r   )r   r   r   r   r   r@   )ro   rp   rq   items)
r   r   r   r   r   r   filters
filterdictre   values
             r   
GetFiltersr     s{     M');JJJJG 4 4,,, J !&&(( ! !
U" GCLNr   UA_PARSER_YAML)CSafeLoader)
SafeLoaderrb)Loaderuser_agent_parsersregexr   r   r   
os_parsersr0   r1   r2   r3   r4   device_parsersrS   rP   rQ   rR   )r   r   r~   r&   r   r6   )?r9   r
   ro   typingr   r   r   r   objectr   r.   r8   rL   r^   rY   r+   __annotations__rc   rh   r%   rx   rr   r   rs   r   rt   r   r   r   r   r   environr]   r   yamlr   r   ImportErroropenfploadregexesr~   
_ua_parser_regex_family_replacement_v1_replacement_v2_replacementappendr   
_os_parser_os_replacement_os_v1_replacement_os_v2_replacement_os_v3_replacement_os_v4_replacementr   _device_parser_regex_flag_device_replacement_brand_replacement_model_replacementua_parser_builtins.regexesr,   r   r   <module>r      s^   					 				  - - - - - - - - - - - -1" 1" 1" 1" 1"f 1" 1" 1"h@. @. @. @. @.v @. @. @.F	 	 	-$ -$ -$ -$ -$6 -$ -$ -$` *,d3S#X&' , , ,      <E E E   6 6 6   > > > 	> 	> 	>      $ *) *) *) *)Z        2  011 P KKK$ 	3222222 $ $ $########$ 
nd	#	# 3r$)Bz2223 3 3 3 3 3 3 3 3 3 3 3 3 3 3 23 
 

G$(nn-ABB$..)9::$..)9::!!O+_o 	
 	
 	
 	
 Jl+ 
 

G$$..)9::'^^,?@@'^^,?@@'^^,?@@'^^,?@@
H"""" 		
 		
 		
 		
 N!"23 
 
($((66,001EFF+//0CDD+//0CDDL#"" 	
 	
 	
 	
 	

           s$   ;C CCC>>DD