ó
Ò:\c           @   sƒ  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l Z d d l m Z m	 Z	 m
 Z
 m Z d d l m Z d d l Z d d l m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z y d d l m Z Wn! e k
 rd d l m Z n Xd e f d „  ƒ  YZ d e  f d „  ƒ  YZ! d a# d „  Z$ d „  Z% d „  Z& e' d k re& ƒ  n  d S(   s    
Google analytics tracker utilities.

Pages
-----

/home
/community
/environments

/environments/create
/environments/clone
/environments/remove
/login
/about

iÿÿÿÿ(   t   dequeN(   t   QObjectt   QThreadt   QTimert   Signal(   t   QDesktopWidget(   t   __version__(   t   AnacondaAPI(   t   CONF(   t   Tracker(   t   ensure_binary(   t   logger(   t   QT_VERSION_STRt   AnalyticsWorkerc           B   s;   e  Z d  Z e e e e ƒ Z d „  Z d „  Z d „  Z RS(   s    Google analytics tracker worker.c         C   s;   t  t |  ƒ j ƒ  | |  _ | |  _ | |  _ t |  _ d S(   s    Google analytics tracker worker.N(   t   superR   t   __init__t   methodt   argst   kwargst   Falset   _is_finished(   t   selfR   R   R   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR   >   s
    			c         C   s   |  j  S(   s@   Return True if the worker process has finished, otherwise False.(   R   (   R   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   is_finishedF   s    c         C   s­   d } d } y |  j |  j |  j Ž  } Wn_ t k
 r‰ } | } t |  j d d ƒ } t |  j d d ƒ } t j t | | | f ƒ ƒ n X|  j	 j
 |  | | ƒ t |  _ d S(   s   Start the worker process.t
   __module__t    t   __name__N(   t   NoneR   R   R   t	   Exceptiont   getattrR   t   debugt   strt   sig_finishedt   emitt   TrueR   (   R   t   errort   outputt   errt   modulet   method_name(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   startJ   s     (	   R   R   t   __doc__R   t   objectR   R   R   R'   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR   9   s
   		t
   _GATrackerc           B   sŒ   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z d „  Z d d „ Z
 d d „ Z d d	 „ Z d
 „  Z e d „  ƒ Z e d „  ƒ Z RS(   s   Google analytics tracker.s   UA-27761864-8c         C   sj   t  ƒ  |  _ g  |  _ g  |  _ t ƒ  |  _ t ƒ  |  _ |  j j d ƒ |  j j	 j
 |  j ƒ |  j ƒ  d S(   s   Google analytics tracker.iè  N(   R    t   _queuet   _threadst   _workersR   t   _timerR   t   apit   setIntervalt   timeoutt   connectt   _cleant   setup(   R   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR   _   s    		c         C   s>  y |  j  j ƒ  j d d ƒ } Wn t k
 r8 d } n X|  j  j ƒ  } | d | } t j t | ƒ ƒ j ƒ  } t	 j
 |  j d | d | ƒ|  _ |  j  j } d j g  t j d  D] } t | ƒ ^ q² ƒ } d j t j ƒ  d	 g t t j ƒ  d
 ƒ ƒ } | d d d d ƒ p9| d d d d ƒ p9| d d d d ƒ }	 | d d d d ƒ }
 |  j d d d | ƒ|  j d d d |  j ƒ  ƒ|  j d d d |  j ƒ  ƒ|  j d d d | ƒ|  j d d d t ƒ|  j d d d |  j  j ƒ  ƒi | d 6|  j ƒ  d 6| d 6t d 6|  j  j ƒ  d 6t d 6|	 d 6|
 d 6|  _ d S(   s(   Setup the tracker initial configuration.t   logins
   @anonymoust   /t	   client_idt   user_idt   .i   t   ;i    i   t   pkgt   pyqt5t   namet   roott   pyqt4t   pyqtt   condat   applications   python-versiont   labelt   languages   screen-resolutions   operating-systemt   versiont   platformt   pythont   ost   qtN(   R/   t   client_usert   getR   t   client_domaint   hashlibt   md5R
   t	   hexdigestR	   t   createt
   TRACKER_IDt   trackert   conda_package_versiont   joint   syst   version_infoR   RF   t   unamet   listt   track_eventt   get_languaget   get_screen_resolutiont   app_versiont   conda_platformt
   QT_VERSIONt   info(   R   t   usert   domaint   normalized_usert   hashed_usert   pkg_versiont   it   python_versiont   operating_systemt   pyqt_versiont   conda_version(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR4   m   sN    
	/*c         C   s   |  j  r? x3 |  j  D]% } | j ƒ  r |  j  j | ƒ q q Wn  |  j r~ x@ |  j D]% } | j ƒ  rR |  j j | ƒ qR qR Wn |  j j ƒ  d S(   s7   Check for inactive workers and remove their references.N(   R-   R   t   removeR,   t
   isFinishedR.   t   stop(   R   t   wt   t(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR3   ¦   s    		c         C   sB   t  |  j ƒ d k r> |  j j ƒ  } | j ƒ  |  j j ƒ  n  d S(   s(   Start the next item in the worker queue.i   N(   t   lenR+   t   popleftR'   R.   (   R   t   thread(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   _start´   s    
c         O   sº   t  j d d ƒ } t ƒ  } t | | | ƒ } | r¶ | j | ƒ | j j |  j ƒ | j j | j ƒ | j	 j | j
 ƒ |  j j | ƒ |  j j | ƒ |  j j | ƒ |  j ƒ  n  | S(   s?   Create a worker for this client to be run in a separate thread.t   maint   provide_analytics(   R   RK   R   R   t   moveToThreadR   R2   Rr   t   quitt   startedR'   R+   t   appendR,   R-   (   R   R   R   R   Rt   Rq   t   worker(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   _create_worker»   s    	c         C   s4   |  j  |  j j d d | d | d t | ƒ d t ƒS(   s   Track analytyics event.t   eventt   categoryt   actionRC   t   anonymizeIp(   Rz   RR   t   sendR   R!   (   R   R|   R}   RC   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyRY   Î   s    	c      	   C   sz   | d k r@ d j g  | j d ƒ D] } | r" | ^ q" ƒ } n | } | j ƒ  } |  j |  j j d d | d | d t ƒS(   su   
        Track analytyics page.

        Page in the context of Navigator is a tab, a dialog, a message box.
        t    R6   t   pageviewt   paget	   pagetitleR~   N(   R   RT   t   splitt
   capitalizeRz   RR   R   R!   (   R   R‚   Rƒ   Re   t   title(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt
   track_pageÙ   s    4	c         C   s"   t  j d d | d | ƒ|  _ d S(   s   Set the client tracker ID.s   UA-74661388-1R7   R8   N(   R	   RP   RR   (   R   R7   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   set_client_idí   s    c         C   se   y2 t  j d d |  j j ƒ  ƒ} | j ƒ  d } Wn, t k
 r` } t j t | ƒ ƒ d } n X| S(   sŒ   
        Return the current ip based on ipify.org.

        This method is used for testing not for collecting actual ip addresses.
        s"   https://api.ipify.org/?format=jsont   proxiest   ipN(
   t   requestsRK   R/   t   conda_load_proxy_configt   jsonR   R   R"   R   R   (   R   t   responseRŠ   R"   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   get_ipó   s    
c          C   sA   y t  j ƒ  d }  Wn t k
 r- d }  n X|  s= d }  n  |  S(   s   Return the locale language.i    t   enN(   t   localet   getdefaultlocaleR   R   (   t   lang(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyRZ     s    
	c          C   s^   y@ t  ƒ  }  |  j |  j ƒ  ƒ } d j | j ƒ  | j ƒ  ƒ } Wn t k
 rY d } n X| S(   s3   Return the screen resolution of the primary screen.s   {0}x{1}N(   R   t   availableGeometryt   primaryScreent   formatt   widtht   heightR   R   (   t   widgett   geometryt   value(    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR[     s    	"
N(   R   R   R(   RQ   R   R4   R3   Rr   Rz   R   RY   R‡   Rˆ   R   t   staticmethodRZ   R[   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyR*   Z   s   		9				c           C   s   t  d k r t ƒ  a  n  t  S(   s   Google Analytics Tracker.N(   t
   GA_TRACKERR   R*   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt	   GATracker"  s    c         C   s   | | f GHd S(   s   Print test output from worker.N(    (   Ry   R#   R"   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt
   print_test.  s    c          C   sj   d d l  m }  |  ƒ  } t ƒ  } | j d ƒ } | j j t ƒ | GH| j ƒ  GH| j ƒ  GH| j	 ƒ  d S(   s   Main local test.iÿÿÿÿ(   t   qapplications   /homeN(
   t"   anaconda_navigator.utils.qthelpersR    Rž   R‡   R   R2   RŸ   R[   RZ   t   exec_(   R    t   appRR   Ry   (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt
   local_test3  s    		t   __main__((   R(   t   collectionsR    RM   R‘   RF   RU   t   qtpy.QtCoreR   R   R   R   t   qtpy.QtWidgetsR   R‹   t   anaconda_navigatorR   R\   t#   anaconda_navigator.api.anaconda_apiR   t   anaconda_navigator.configR   t.   anaconda_navigator.external.UniversalAnalyticsR	   t!   anaconda_navigator.utils.encodingR
   t   anaconda_navigator.utils.logsR   R^   t   ImportErrorR   R   R)   R*   R   R   Rž   RŸ   R¤   R   (    (    (    sA   lib/python2.7/site-packages/anaconda_navigator/utils/analytics.pyt   <module>   s4   "!Å			