
    Hoh=                        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>                  jA                  d      Z!e!rd dl"Z"	 d dl"m#Z$  e&e!d      5 Z' e"jP                  e'e$      Z)ddd       g Z*e)d   D ]U  Z+e+d    Z,e+jA                  d!      Z-e+jA                  d"      Z.e+jA                  d#      Z/ e*j`                   e	e,e-e.e/             W g Z1e)d$   D ]y  Z2e2d    Z,e2jA                  d%      Z3e2jA                  d&      Z4e2jA                  d'      Z5e2jA                  d(      Z6e2jA                  d)      Z7 e1j`                   e
e,e3e4e5e6e7             { g Z8e)d*   D ]g  Z9e9d    Z,e9jA                  d+      Z:e9jA                  d,      Z;e9jA                  d-      Z<e9jA                  d.      Z= e8j`                   ee,e:e;e<e=             i [)["[$yd d/l>m8Z8m1Z1m*Z* y# e%$ r
 d dl"m$Z$ Y w xY w# 1 sw Y   ~xY w)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y)UserAgentParserNc                 b    t        j                  |      | _        || _        || _        || _        y)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        w/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/ua_parser/user_agent_parser.py__init__zUserAgentParser.__init__   s-      ZZ0"4,,    user_agent_stringreturnc                 Z   d\  }}}}| j                   j                  |      }|r| j                  rRt        j                  d| j                        r%t        j                  d|d   | j                        }n| j                  }n|d   }| j
                  r| j
                  }n$|j                  r|j                  dk\  r	|d   xs d }| j                  r| j                  }n$|j                  r|j                  dk\  r	|d   xs d }|j                  r|j                  dk\  r	|d   xs 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""))*;<&&99VT%<%<=VVFE!Hd6M6MNF!44Fq""((U__%91X%""((U__%91X%5??a#71X%r2r!!r   NNN__name__
__module____qualname__r   strr   r   r%    r   r   r   r      sE    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y)OSParserNc                 ~    t        j                  |      | _        || _        || _        || _        || _        || _        y)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__<   s=    &  ZZ0,!2!2!2!2r   r   r   c                    d\  }}}}}| j                   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   sC    *F&E5%""))*;<""!$"5"5u=1X%%$T%;%;UCU__%9a%%$T%;%;UCU__%9a%%$T%;%;UCU__%9a%%$T%;%;UCU__%9a5%--r   r6   r'   r,   r   r   r.   r.   ;   sZ     34%.!$%.			
%.r   r.   c                 d    fd}t        j                  d||       j                         }|xs d S )Nc                 n    t        | d         dz
  }j                         }|t        |      k  r||   S y)Nr    )intgroupslen)mindexgroupr$   s      r   _replzMultiReplace.<locals>._repl   s8    AaD	A3u:<r   z\$(\d))r
   r   strip)stringr$   rG   _strings    `  r   r8   r8   ~   s/     ffYv.446G?dr   c                   J    e Zd Z	 	 	 	 ddZdedeee   ee   ee   f   fdZy)DeviceParserNc                     t        j                  ||dk(  rt         j                  nd      | _        || _        || _        || _        y)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__   sA      ZZjC&7R]]Q
 #5!2!2r   r   r   c                 n   d\  }}}| j                   j                  |      }|r| j                  rt        | j                  |      }n|d   }| j                  rt        | j                  |      }| j
                  rt        | j
                  |      }n!t        |j                               dkD  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q%%$T%;%;UC%%$T%;%;UCU\\^$q(aue##r   r   r'   r,   r   r   rL   rL      sI     3*$!$$		
$r   rL      _PARSE_CACHEc                     t        | t              st        d|       t        j	                  |       }||S t        t              t        k\  rt        j                          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      sk    b#B2&IJJR E
<N*$b>)ARHr   c                 \    t        |       }|j                  |      }|s ||       x}||<   |S )N)rc   r]   )r`   keyfnra   rs        r   _cachedrh      s2    BKE		#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
5zQ 5 -.?@l501du&'89hLr   c                 `    |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      s.     7'	

 $lODDr   c                 ~    t         D ]  }|j                  |       \  }}}}|s n xs d}|xs d xs d xs d dS )NOther)r    majorminorpatch)USER_AGENT_PARSERSr%   )r   uaParserr    r!   r"   r#   s         r   rr   rr     s]    & %^^,=>B
 wFttt	 r   c                 `    |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     s.     7'	

 $dH55r   c                 j    t         D ]  }|j                  |       \  }}}}}|s n xs d}|dS )Nrz   )r    r{   r|   r}   patch_minor)
OS_PARSERSr%   )r   osParserr9   r:   r;   r<   r=   s          r   rs   rs   "  sU     )18I)J&E5% 
wB r   c                 `    |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  s.     7'	

 $h==r   c                 ^    t         D ]  }|j                  |       \  }}}|s n d}|dS )Nrz   )r    rV   rW   )DEVICE_PARSERSr%   )r   deviceParserrU   rV   rW   s        r   rt   rt   A  sH    & +112CDu
 ~uu==r   c                     |r,|d   j                         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==?XQrd!B4q--XQrd!B4t,,	2$at$$	2$Mr   c           	          |r|  d| d| d| d| 	S |r,|d   j                         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    QugQugQugQug668T5'5'5'22T5'5'%11	QugQug&&	QugIr   c                 j   t        j                  dt        d       ||dk7  r|}d }d }d }	||}||}|(|}	n%t        D ]  }
|
j	                  |       \  }}}}	|s n |rK|j                  d      dkD  r7| j                  d      dkD  r#dd	d
}t        |      }|d   }|d   }|d   }	xs 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     MM-/Aa
 ',@B,F%'!B'!B'!B( 	F!'.?!@FBB	 	 %%i025""=1B6+126 !56WWWWb"b((r   c                     t        j                  dt        d       |r,|d   j                         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    MM');J	a5==?XQrd!B4q--XQrd!B4t,,	2$at$$	2$Mr   c                     t        j                  dt        d       i }|||||d}|j                         D ]  \  }}	|		|	dk7  s|	||<    |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     sk     MM');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"f 1"h@.v @.F	-$6 -$` *,d3S#X&' ,<E 6 > 	>$ *)Z  2  01 $ 	3 
nd	# 3r$))Bz23 23 

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

G$$..)9:'^^,?@'^^,?@'^^,?@'^^,?@
""""		

( N!"23 
($((6,001EF+//0CD+//0CD#""	

( 	 G  $##$3 3s   -H; <I;I
	I
I