U
    w	d                      @   s   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d Zd$ddZeddddgZd%ddZeddddgZd&ddZeddddgZdd ZG d d! d!eZd"d# ZdS )'    )
namedtuple)user_agent_parser   )string_types)ZiPhoneZiPodzGeneric SmartphonezGeneric Feature PhonezPlayStation Vitaz
iOS-Device)z
Windows 95z
Windows 98Solaris)Windows PhonezWindows Phone OSz
Symbian OSZBada
Windows CEWindows MobileMaemo)z	IE MobilezOpera Mobilez
Opera MinizChrome MobilezChrome Mobile WebViewzChrome Mobile iOS)	ZiPadBlackBerry PlaybookBlackberry PlaybookZKindleKindle FirezKindle Fire HDz
Galaxy TabZXoomzDell Streak)ZiOSAndroidr   r   r	   
Firefox OSZMeeGo)r   r   r   )OutlookWindows Live MailZAirMailz
Apple Mailr   ZThunderbirdZ	LightningZThunderBrowser   zThe Bat!zLotus Notesz	IBM NotesZBarcaZMailBarZkmail2ZYahooMobileMailc                 C   s   t | tr|  rt| S | S N)
isinstancer   isdigitint)	attribute r   7/tmp/pip-unpacked-wheel-e11r830a/user_agents/parsers.pyverify_attributeX   s    r   Nc                 C   s:   t | } t |}t |}t |}ttdd | |||fS )Nc                 S   s   | d k	S r   r   )xr   r   r   <lambda>g       zparse_version.<locals>.<lambda>)r   tuplefilter)majorminorpatchpatch_minorr   r   r   parse_version_   s    r#   Browserfamilyversionversion_stringc                 C   s,   t |||}ddd |D }t| ||S )N.c                 S   s   g | ]}t |qS r   str.0vr   r   r   
<listcomp>q   s     z!parse_browser.<locals>.<listcomp>)r#   joinr$   r%   r   r    r!   r"   r&   r'   r   r   r   parse_browsern   s    r1   OperatingSystemc                 C   s,   t |||}ddd |D }t| ||S )Nr(   c                 S   s   g | ]}t |qS r   r)   r+   r   r   r   r.   z   s     z*parse_operating_system.<locals>.<listcomp>)r#   r/   r2   r0   r   r   r   parse_operating_systemx   s    r3   Devicebrandmodelc                 C   s   t | ||S r   )r4   )r%   r5   r6   r   r   r   parse_device   s    r7   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
edd Zedd Zedd Zedd Zedd Zedd ZdS )	UserAgentc                 C   sD   t |}|| _tf |d | _tf |d | _tf |d | _d S )Nos
user_agentdevice)	r   Parse	ua_stringr3   r9   r1   browserr7   r;   )selfuser_agent_stringZua_dictr   r   r   __init__   s
    
zUserAgent.__init__c                 C   s   dj |  |  |  dS )Nz{device} / {os} / {browser})r;   r9   r>   )format
get_deviceget_osget_browserr?   r   r   r   __str__   s
    zUserAgent.__str__c                 C   s   t t| S r   )unicoder*   rF   r   r   r   __unicode__   s    zUserAgent.__unicode__c                 C   s   d| j kr| jjdkrdS dS )NzMobile SafarizFirefox MobileTF)r=   r>   r%   rF   r   r   r   _is_android_tablet   s
    

zUserAgent._is_android_tabletc                 C   s$   d| j jkrdS d| j jkr dS dS )NzBlackberry 99TzBlackberry 95Fr;   r%   rF   r   r   r   #_is_blackberry_touch_capable_device   s
    z-UserAgent._is_blackberry_touch_capable_devicec                 C   s   | j r
dp| jjS )NPC)is_pcr;   r%   rF   r   r   r   rC      s    zUserAgent.get_devicec                 C   s   d| j j| j jf  S Nz%s %s)r9   r%   r'   striprF   r   r   r   rD      s    zUserAgent.get_osc                 C   s   d| j j| j jf  S rO   )r>   r%   r'   rP   rF   r   r   r   rE      s    zUserAgent.get_browserc                 C   sf   | j jtkrdS | jjdkr(|  r(dS | jjdkrF| jjdrFdS | jjdkrbd| jjkrbdS dS )NTr   WindowsRTr   MobileF)r;   r%   TABLET_DEVICE_FAMILIESr9   rJ   r'   
startswithr>   rF   r   r   r   	is_tablet   s    zUserAgent.is_tabletc                 C   s   | j jtkrdS | jjtkr dS | jjdks8| jjdkrB| jsBdS | jjdkr^| j jdkr^dS | jjtkrndS d| jksd| jkrdS d| jkrdS d	| jkrdS | j jd
krd| jjkrdS d| jkrd| jkrdS dS )NTr   r   zBlackBerry OSr   ZJ2MEZMIDPziPhone;zGooglebot-MobileSpiderrS   ZNokiaBrowserF)	r;   r%   MOBILE_DEVICE_FAMILIESr>   MOBILE_BROWSER_FAMILIESr9   rV   MOBILE_OS_FAMILIESr=   rF   r   r   r   	is_mobile   s.    

zUserAgent.is_mobilec                 C   sv   | j jtkrdS | jjtkr dS | j jdkrZ| j jdr>dS | j jdrZd| jkrZdS d| j jkrr|  rrdS dS )NTrQ   )rR   ZCE8ZTouchZ
BlackBerryF)	r9   r%   TOUCH_CAPABLE_OS_FAMILIESr;   TOUCH_CAPABLE_DEVICE_FAMILIESr'   rU   r=   rL   rF   r   r   r   is_touch_capable   s    zUserAgent.is_touch_capablec                 C   s   d| j ks.| jjtks.| jjdkr2| jjdkr2dS | jjdkrLd| j krLdS d| j krZdS d	| jjkrjdS d
| j krd| j krdS dS )Nz
Windows NTrQ   ZMETzMac OS XZSilkr
   Fz	Chrome OSLinuxZX11)r=   r9   r%   PC_OS_FAMILIESr'   rF   r   r   r   rN      s    


zUserAgent.is_pcc                 C   s   | j jdkrdS dS )NrW   TFrK   rF   r   r   r   is_bot   s    zUserAgent.is_botc                 C   s   | j jtkrdS dS )NTF)r>   r%   EMAIL_PROGRAM_FAMILIESrF   r   r   r   is_email_client  s    zUserAgent.is_email_clientN)__name__
__module____qualname__rA   rG   rI   rJ   rL   rC   rD   rE   propertyrV   r[   r_   rN   rb   rd   r   r   r   r   r8      s(   	




r8   c                 C   s   t | S r   )r8   )r@   r   r   r   parse  s    ri   )NNNN)NNNN)NNNN)collectionsr   Z	ua_parserr   compatr   rX   ra   rZ   rY   rT   r]   r^   setrc   r   r#   r$   r1   r2   r3   r4   r7   objectr8   ri   r   r   r   r   <module>   s*   	
	



 