
    Hoh                          d dl mZ d dlmZ ddlmZ dZdZdZdZ	d	Z
d
ZdZ ed      Zd ZddZ edg d      ZddZ edg d      ZddZ edg d      Zd Z G d de      Zd Zy)    )
namedtuple)user_agent_parser   )string_types)iPhoneiPodzGeneric SmartphonezGeneric Feature PhonezPlayStation Vitaz
iOS-Device)z
Windows 95z
Windows 98Solaris)Windows PhonezWindows Phone OSz
Symbian OSBada
Windows CEWindows MobileMaemo)z	IE MobilezOpera Mobilez
Opera MinizChrome MobilezChrome Mobile WebViewzChrome Mobile iOS)	iPadBlackBerry PlaybookBlackberry PlaybookKindleKindle FirezKindle Fire HDz
Galaxy TabXoomzDell Streak)iOSAndroidr
   r   r   
Firefox OSMeeGo)r   r   r   )OutlookWindows Live MailAirMailz
Apple Mailr   Thunderbird	LightningThunderBrowser   zThe Bat!zLotus Notesz	IBM NotesBarcaMailBarkmail2YahooMobileMailc                 \    t        | t              r| j                         rt        |       S | S N)
isinstancer   isdigitint)	attributes    o/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/user_agents/parsers.pyverify_attributer*   X   s'    )\*y/@/@/B9~    Nc           	          t        |       } t        |      }t        |      }t        |      }t        t        d | |||f            S )Nc                 
    | d uS r$    )xs    r)   <lambda>zparse_version.<locals>.<lambda>g   s
    $ r+   )r*   tuplefilter)majorminorpatchpatch_minors       r)   parse_versionr7   _   sK    U#EU#EU#E";/K&uk(JK r+   Browser)familyversionversion_stringc                     t        |||      }dj                  |D cg c]  }t        |       c}      }t        | ||      S c c}w N.)r7   joinstrr8   r9   r3   r4   r5   r6   r:   vr;   s           r)   parse_browserrC   n   sA    E5%0GXXw7!s1v78N67N33 8   AOperatingSystemc                     t        |||      }dj                  |D cg c]  }t        |       c}      }t        | ||      S c c}w r=   )r7   r?   r@   rE   rA   s           r)   parse_operating_systemrG   x   sA    E5%0GXXw7!s1v78N67N;; 8rD   Devicer9   brandmodelc                     t        | ||      S r$   )rH   rI   s      r)   parse_devicerM      s    &%''r+   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ed	        Zed
        Zed        Zed        Zed        Zed        Zy)	UserAgentc                     t        j                  |      }|| _        t        di |d   | _        t        di |d   | _        t        di |d   | _        y )Nos
user_agentdevicer.   )	r   Parse	ua_stringrG   rQ   rC   browserrM   rS   )selfuser_agent_stringua_dicts      r)   __init__zUserAgent.__init__   sU    #))*;<*(974=9$=w|'<="7WX%67r+   c                 ~    dj                  | j                         | j                         | j                               S )Nz{device} / {os} / {browser})rS   rQ   rV   )format
get_deviceget_osget_browserrW   s    r)   __str__zUserAgent.__str__   s9    ,33??${{}$$& 4 
 	
r+   c                 *    t        t        |             S r$   )unicoder@   r`   s    r)   __unicode__zUserAgent.__unicode__   s    s4y!!r+   c                 T    d| j                   vr| j                  j                  dk7  ryy)NzMobile SafarizFirefox MobileTF)rU   rV   r9   r`   s    r)   _is_android_tabletzUserAgent._is_android_tablet   s)     4>>1##'77r+   c                 h    d| j                   j                  v ryd| j                   j                  v ryy)NzBlackberry 99TzBlackberry 95FrS   r9   r`   s    r)   #_is_blackberry_touch_capable_devicez-UserAgent._is_blackberry_touch_capable_device   s1     dkk000dkk000r+   c                 R    | j                   xr dxs | j                  j                  S )NPC)is_pcrS   r9   r`   s    r)   r]   zUserAgent.get_device   s     zz"d8dkk&8&88r+   c                 |    | j                   j                  d| j                   j                  j                         S N )rQ   r9   r;   stripr`   s    r)   r^   zUserAgent.get_os   s(    77>>477+A+ABIIKKr+   c                 |    | j                   j                  d| j                   j                  j                         S rn   )rV   r9   r;   rp   r`   s    r)   r_   zUserAgent.get_browser   s*    <<..0K0KLSSUUr+   c                 t   | j                   j                  t        v ry| j                  j                  dk(  r| j	                         ry| j                  j                  dk(  r&| j                  j
                  j                  d      ry| j                  j                  dk(  rd| j                  j                  vryy)NTr   WindowsRTr   MobileF)rS   r9   TABLET_DEVICE_FAMILIESrQ   rf   r;   
startswithrV   r`   s    r)   	is_tabletzUserAgent.is_tablet   s    ;;!77GGNNi'D,C,C,E77>>Y&477+A+A+L+LT+R77>>\)hdll>Q>Q.Qr+   c                    | j                   j                  t        v ry| j                  j                  t        v ry| j
                  j                  dk(  s| j
                  j                  dk(  r| j                  sy| j
                  j                  dk(  r| j                   j                  dk7  ry| j
                  j                  t        v ryd| j                  v sd| j                  v ryd| j                  v ryd	| j                  v ry| j                   j                  d
k(  rd| j                  j                  v ryd| j                  v rd| j                  v ryy)NTr   r   zBlackBerry OSr   J2MEMIDPziPhone;zGooglebot-MobileSpiderru   NokiaBrowserF)	rS   r9   MOBILE_DEVICE_FAMILIESrV   MOBILE_BROWSER_FAMILIESrQ   rx   MOBILE_OS_FAMILIESrU   r`   s    r)   	is_mobilezUserAgent.is_mobile   s    ;;!77<<"99 WW^^y(DGGNNl,JNN77>>_,1C1CG\1\77>>//T^^#v'?&/;;)h$,,:M:M.MT^^+DNN0Jr+   c                    | j                   j                  t        v ry| j                  j                  t        v ry| j                   j                  dk(  rZ| j                   j
                  j                  d      ry| j                   j
                  j                  d      rd| j                  v ryd| j                   j                  v r| j                         ryy)NTrs   )rt   CE8Touch
BlackBerryF)	rQ   r9   TOUCH_CAPABLE_OS_FAMILIESrS   TOUCH_CAPABLE_DEVICE_FAMILIESr;   rw   rU   ri   r`   s    r)   is_touch_capablezUserAgent.is_touch_capable   s     77>>66;;!>>77>>Y&ww%%00>ww%%005'T^^:S477>>)d.V.V.Xr+   c                    d| j                   v sN| j                  j                  t        v s2| j                  j                  dk(  r| j                  j                  dk(  ry| j                  j                  dk(  rd| j                   vryd| j                   v ryd	| j                  j                  v ryd
| j                   v rd| j                   v ryy)Nz
Windows NTrs   METzMac OS XSilkr   Fz	Chrome OSLinuxX11)rU   rQ   r9   PC_OS_FAMILIESr;   r`   s    r)   rl   zUserAgent.is_pc   s     4>>)TWW^^~-M77>>Y&477+A+AT+I77>>Z'F$..,Hdnn$$''..(dnn$$..)@r+   c                 <    | j                   j                  dk(  rdS dS )Nr|   TFrh   r`   s    r)   is_botzUserAgent.is_bot   s    {{))X5t@5@r+   c                 >    | j                   j                  t        v ryy)NTF)rV   r9   EMAIL_PROGRAM_FAMILIESr`   s    r)   is_email_clientzUserAgent.is_email_client  s    <<"88r+   N)__name__
__module____qualname__rZ   ra   rd   rf   ri   r]   r^   r_   propertyrx   r   r   rl   r   r   r.   r+   r)   rO   rO      s    8
"9LV 	 	  >    " A A  r+   rO   c                     t        |       S r$   )rO   )rX   s    r)   parser     s    &''r+   )NNNN)collectionsr   	ua_parserr   compatr   r~   r   r   r   rv   r   r   setr   r*   r7   r8   rC   rE   rG   rH   rM   objectrO   r   r.   r+   r)   <module>r      s    " '     
  !     &	 Y G
H4 .0WX< 
H:	;(C CL(r+   