
:\c        	   @ s  d  Z  d d l m Z m Z m Z d d l Z d d l Z d d l Z d d l Z d d l	 m
 Z
 d d l m Z m Z d d l m Z d d l m Z m Z m Z m Z m Z d d l Z d d  Z d	 e j f d
     YZ d e f d     YZ d e f d     YZ d e f d     YZ d   Z d Z d Z  d Z! d Z" e j# e$ d d  e j# e d d d d  e j# e d d d  e j# e d d d d   e j# e d! d" d# d$  e j# e d% d& d' d(  e j# e d) d* d+  e j# e d, d- d. d/ d0  e j# e d1 d2  e j# e d3 d4  e j# e d5 d6 d7 d8  e j# e d9 d: d;  e j# e$ d< d= d>  e j# e d? d@ dA  e j# e$ dB dC dD dE  e j# e dF dG dH dI  e j# e dJ dK dL dM  e j# e dN dO dP dQ  e j# e dR dS dT dU  e j# e dV dW dX dY  e j# e dZ d[ d\ d]  e j# e d^ d_ d` da  e j# e db dc dd de  e j# e df dg dh di  e j# e$ dj dk dl dm  e j# e dn do dp dq  e j# e dr ds dt du  e j# e dv dw dx dy dz  e j# e d{ d| d} d~  e j# e d d d d d d  e j# e d d d  e j# e d d d d  e j# e d d d d  e j# e% d d d d  e j# e% d d d d  e j# e% d d d d  e j# e d d d d  e j# e d d d  e j# e% d d d  e j# e% d d d  e j# e d d d d  e j# e d d d d d  e j# e d d d d  e j# e d d d d  e j# e d d d d  e j# e$ d d d d  e j# e$ d d d d d  e j# e d d d  e j# e d d d  e j# e d d d  e j# e d d d d  e j# e$ d d d d  e j# e d d d  e j# e d d d  e j# e% d d d d  e j# e d d d  e j# e% d d d  e j# e% d d d  e j# e% d d d  e j# e d d d  e j# e d d d  xa e& d d  D]P Z' e j# e d j( e'  d j( e'   e j# e$ d j( e'  d j( e'   qWe j# e) d  e j# e) d  e j# e j* d  e j# e$ d  e j# e) d  e j# e) d  xe& d e!  D]Z+ e j# e) d j( e+   e j# e j* dj( e+   e j# e j* dj( e+   e j# e j* dj( e+   e j# e j* dj( e+   e j# e) dj( e+   e j# e$ dj( e+   e j# e) dj( e+   e j# e$ dj( e+   xL e& e  D]> Z, e j# e) d	j( e+ e,   e j# e$ d
j( e+ e,   qWx<e& d e   D]+Z- e j# e) dj( e- e+   e j# e j* dj( e- e+   e j# e j* dj( e- e+   e j# e j* dj( e- e+   e j# e j* dj( e- e+   e j# e$ dj( e- e+   e j# e$ dj( e- e+   xR e& e  D]D Z, e j# e) dj( e- e+ e,   e j# e$ dj( e- e+ e,   q	
Wq&	WqWx3 e& d e   D]" Z- e j# e j* dj( e-   qi
Wx~ e& d e"  D]m Z. e j# e) dj( e.   e j# e j* dj( e.   e j# e) dj( e.   e j# e) dj( e.   q
Wd  Z/ d S(  s   Universal Analytics Python.i(   t   divisiont   print_functiont   with_statementN(   t   http_client(   t	   HTTPErrort   URLError(   t	   urlencode(   t   HTTPSHandlert   Requestt   build_openert   install_openert   urlopenc         C s   |  d k r t t j    St |  t j  r t j |   j	   } d j
 | d d !| d d !| d d !| d d !| d d ! Sd S(	   si   
    Provide a _random_ UUID.

    If any input data is provided return a UUID4-format MD5 checksum.
    s   {0}-{1}-{2}-{3}-{4}i    i   i   i   i   i    N(   t   Nonet   strt   uuidt   uuid4t
   isinstancet   sixt   string_typest   hashlibt   md5t	   hexdigestt   format(   t   basedatat   checksum(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   generate_uuid$   s    (t   Timec           B sA   e  Z d  Z e d d   Z e d    Z e d d   Z RS(   sA   Wrappers and methods for processing various time representations.i    c         C s7   t  t j |   d d !} | j | d  |  |   S(   s@   Produce a full |datetime.datetime| object from a Unix timestamp.i    i   i  (   t   listt   timet   gmtimet   append(   t   clst   secondst   millisecondst   base(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt	   from_unix7   s    c         C s:   t  |  t j  s! t d   n  t j |  j    } | S(   s?   Wrapper over time module to produce Unix epoch time as a float.s+   Time.milliseconds expects a datetime object(   R   t   datetimet	   TypeErrorR   t   mktimet	   timetuple(   t	   timestampR"   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   to_unix>   s    c         C se   t  | t t f  r | } n  |  j |  } | | j d } | d k rY t j   } n  | | d S(   s=   Offset time (in ms) from a |datetime.datetime| object to now.i@B i  N(   R   t   intt   floatR)   t   microsecondR   R   (   R   R(   t   nowR"   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   milliseconds_offsetF   s    	N(	   t   __name__t
   __module__t   __doc__t   classmethodR#   t   staticmethodR)   R   R.   (    (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyR   4   s   t   HTTPRequestc           B sY   e  Z d  Z d Z d d  Z e d    Z e d    Z d   Z	 d   Z
 d   Z RS(	   s   
    URL Construction and request handling abstraction.

    This is not intended to be used outside this module.

    Automates mapping of persistent state (i.e. query parameters)
    onto transcient datasets for each query.
    s(   https://www.google-analytics.com/collectc         O s   d } | p | |  _  d S(   s   
        URL Construction and request handling abstraction.

        Parameter
        ---------
        user_agent: str
            User agent used.
        s-   Analytics Pros - Universal Analytics (Python)N(   t
   user_agent(   t   selfR5   t   argst   optst   local_user_agent(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   __init__`   s    	c          C sA   t  j r1 t d d  }  t |   } t |  n d t j _ d S(   s   Activate debugging on urllib2.t
   debugleveli   N(   R   t   PY2R   R	   R
   R   t   HTTPConnectionR;   (   t   handlert   opener(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   debugl   s
    	c         C sE   x> |  D]6 } t  |  | t j  r |  | j d  |  | <q q W|  S(   s   Convert all strings to UTF-8.s   utf-8(   R   R   R   t   encode(   t   datat   key(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   fixUTF8v   s    c         C sG   t  |  j d t |  j |   d i |  j d 6} |  j |  d S(   s   Send data as a get request.t   ?t   headerss
   User-AgentN(   R   t   endpointR   RD   R5   t   open(   R6   RB   t   request(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   send   s     c         C s]   y t  |  SWnH t k
 r. } t |  t St k
 rX } |  j |  t |  t SXd S(   s   Open request.N(   R   R   t   printt   FalseR   t   cache_request(   R6   RI   t   e(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyRH      s    

c         C s   d S(   s   Implement a cache mechanism for request.

        implement a proper caching mechanism here for re-transmitting
        hits.
        N(    (   R6   RI   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyRM      s    N(   R/   R0   R1   RG   R   R:   R3   R@   RD   RJ   RH   RM   (    (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyR4   S   s   

		t   HTTPPostc           B s   e  Z d  Z d   Z RS(   s>   Apply stored properties to dataset & POST configured endpoint.c         C sN   t  |  j d t |  j |   j d  d i |  j d 6} |  j |  d S(   s   Send data as a post request.RB   s   UTF-8RF   s
   User-AgentN(   R   RG   R   RD   RA   R5   RH   (   R6   RB   RI   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyRJ      s
    	(   R/   R0   R1   RJ   (    (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyRO      s   t   Trackerc           B s  e  Z d  Z i e j d f g d 6e j d f e j d f e j d f e d f g d 6e j d f e j d	 f e j d
 f g d 6e j d f e j d f e j d f e j d f g d 6Z d" Z i  Z	 d# Z
 e d    Z e d" d   Z e d    Z e d" d" d" d   Z d" d" e d" d" e d  Z d   Z d   Z d   Z e d    Z d   Z d   Z d    Z d" d!  Z RS($   s3   Primary tracking interface for Universal Analytics.t   dpt   pageviewt   ect   eat   elt   evt   eventt   snt   sat   stt   socialt   utct   utvt   uttt   utlt   timingt
   screenviewt   transactiont   itemt	   exceptionc         G s;   | | f |  j  | <x! | D] } | | f |  j  | <q Wd S(   s?   Declare an alternate name for a measurement protocol parameter.N(   t   parameter_alias(   R   t   typemapR"   t   namest   i(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   alias   s    c         C s   t  | t j  r6 | d d k r6 | d t |  f S| |  j k rm |  j j |  \ } } | | |  f St d j |    d S(   s   TODO.i    t   &i   s!   Parameter "{0}" is not recognizedN(   R   R   R   R   Re   t   gett   KeyErrorR   (   R   t   namet   valuet   typecastt
   param_name(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   coerceParameter   s    "c         C s   d } | | d <| |  j  k r x^ |  j  | D]L \ } } | t |  k  ro t | | |  ro | | | | <n  | d 7} q- Wn  d S(   s   
        Interpret sequential arguments related to known hittypes.

        Accomplished based on declared structures.
        i    t   ti   N(   t   option_sequencet   lenR   (   R   RB   t   hittypeR7   t   opt_positiont   expected_typet   optname(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   consume_options   s    
c         C s   t  |  t t f  r7 t t j t j |  d |   St  |  t j  r\ t t j |    St  | t t f  r t | d  | p d Sd S(   s   
        Return an integer represeting the milliseconds offset for a given hit.

        The value is calculated relative to now.
        R!   i  i    N(   R   R*   R+   R   R.   R#   R$   (   R(   t   ageR!   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   hittime   s    c         C s   | t  k r! t d |  |  _ n t d |  |  _ i d d 6| d 6|  _ | d k rb t   } n  | |  j d <| |  _ | d k	 r | |  j d <n  d S(   s  Primary tracking interface for Universal Analytics.

        Parameters
        ----------
        account: str
            TODO
        name: str
            TODO
        client_id: str
            TODO
        hash_client_id: Optional(bool)
            TODO
        user_id: Optional()
            TODO
        user_agent: Optional(str)
            TODO
        use_post: Optional(bool)
            TODO
        R5   i   t   vt   tidt   cidt   uidN(   RL   R4   t   httpRO   t   paramsR   R   t   hash_client_id(   R6   t   accountRm   t	   client_idR   t   user_idR5   t   use_post(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyR:      s    	c         C s(   |  j  | d  \ } } |  j j |  S(   s   TODO.N(   Rq   R   R   Rk   (   R6   Rm   t   paramRn   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   __getitem__(  s    c         C s)   |  j  | |  \ } } | |  j | <d S(   s   TODO.N(   Rq   R   (   R6   Rm   Rn   R   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   __setitem__-  s    c         C s8   |  j  | d  \ } } | |  j k r4 |  j | =n  d S(   s   TODO.N(   Rq   R   R   (   R6   Rm   R   Rn   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   __delitem__2  s    c         C s   |  j  j d  S(   s   TODO.R}   (   R   Rk   (   R6   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyR   8  s    c         c sP   xI t  j |  D]8 \ } } y |  j | |  VWq t k
 rG q q Xq Wd S(   s   TODO.N(   R   t	   iteritemsRq   Rl   (   R6   RB   RC   Rn   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   payload=  s
    c         C sf   d | k r1 |  j  d | j d d   | d <n  d | k rb |  j  d | j d d   | d <n  d S(   sA   Interpret time-related options, apply queue-time param as needed.R{   R(   t   qtt   hitageRz   N(   R{   t   popR   (   R6   RB   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   set_timestampE  s    %c   	      O s  | |  j  k r- t d j t |     n  |  j |  |  j | | |  xJ | D]B } t | t  rT x* |  j |  D] \ } } | | | <qy WqT qT Wx9 t	 j
 |  j  D]% \ } } | | k r | | | <q q Wt |  j |   } |  j rt | d  | d <n  |  j j |  d S(   s<   Transmit HTTP requests to GA using the measurement protocol.s-   Unsupported Universal Analytics Hit Type: {0}R~   N(   t   valid_hittypesRl   R   t   reprR   Ry   R   t   dictR   R   R   R   R   R   R   RJ   (	   R6   Ru   R7   RB   Rc   RC   t   valt   kR|   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyRJ   L  s"    	c         C s   t  | t  rl x | j   D]I \ } } y) |  j | |  \ } } | |  j | <Wq t k
 rd q Xq WnR t  | t j  r y) |  j | |  \ } } | |  j | <Wq t k
 r q Xn  d S(   so   
        Set persistent attibutes of the session/hit/etc.

        Includes custom dimensions/metrics.
        N(   R   R   R   Rq   R   Rl   R   R   (   R6   Rm   Rn   RC   R   (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   setj  s    N(   RR   RW   R[   Ra   Rb   Rc   Rd   R`   (   R/   R0   R1   R   R   R*   Rs   R   R   Re   R   R2   Ri   Rq   Ry   R3   R{   RL   t   TrueR:   R   R   R   t   propertyR   R   R   RJ   R   (    (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyRP      sB   " 
&						c         C s3   y t  j |   SWn t k
 r. |  j d  SXd S(   s<   Safe convertion to the Unicode string version of the object.s   utf-8N(   R   t	   text_typet   UnicodeDecodeErrort   decode(   t   obj(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   safe_unicode  s    i   i   R|   s   protocol-versionR~   s	   client-idt   clientIdt   clientidR}   t
   trackingIdR   R   s   user-idt   userIdt   useridt   uips   user-ipt   userIpt   ipaddrt   uat	   userAgentt   userAgentOverrides
   user-agentRQ   t   paget   patht   dtt   titlet	   pagetitlet	   pageTitles
   page-titlet   dlt   locationt   dht   hostnamet   sct   sessioncontrols   session-controlt   sessionControlt   drt   referrert   refererR   t	   queueTimes
   queue-timeRr   t   hitTypeRu   t   aipt   anonymizeIpt   anonIps   anonymize-ipt   cnt   campaignt   campaignNames   campaign-namet   cst   sourcet   campaignSources   campaign-sourcet   cmt   mediumt   campaignMediums   campaign-mediumt   ckt   keywordt   campaignKeywords   campaign-keywordt   cct   contentt   campaignContents   campaign-contentt   cit
   campaignIdt
   campaignIDs   campaign-idt   srt   screenResolutions   screen-resolutiont
   resolutiont   vpt   viewportt   viewportSizes   viewport-sizet   det   encodingt   documentEncodings   document-encodingt   sdt   colorst   screenColorss   screen-colorst   ult   languages   user-languaget   userLanguaget   ant   appNames   app-namet   appt   cdt   contentDescriptiont
   screenNames   screen-names   content-descriptiont   avt
   appVersions   app-versiont   versiont   aidt   appIDt   appIds   application-ids   app-idt   applicationIdt   aiidt   appInstallerIds   app-installer-idt   tat   affiliationt   transactionAffiliations   transaction-affiliationt   tiRb   t   transactionIds   transaction-idt   trt   revenuet   transactionRevenues   transaction-revenuet   tst   shippingt   transactionShippings   transaction-shippingt   ttt   taxt   transactionTaxs   transaction-taxt   cut   currencyt   transactionCurrencys   transaction-currencyt   ins	   item-namet   itemNamet   ips
   item-pricet	   itemPricet   iqs   item-quantityt   itemQuantityt   ics	   item-codet   skut   itemCodet   ivs   item-variations   item-categoryt   itemCategoryt   itemVariationRS   s   event-categoryt   eventCategoryt   categoryRT   s   event-actiont   eventActiont   actionRU   s   event-labelt
   eventLabelt   labelRV   s   event-valuet
   eventValueRn   t   nit   noninteractivet   nonInteractivet   noninteractiont   nonInteractionRY   s   social-actiont   socialActionRX   s   social-networkt   socialNetworkRZ   s   social-targett   socialTargett   exds   exception-descriptiont   exceptionDescriptiont   exDescriptiont   exfs   exception-fatalt   exceptionFatalt   exFatalR\   t   timingCategorys   timing-categoryR]   t   timingVariables   timing-variableR^   R   t
   timingTimes   timing-timeR_   t   timingLabels   timing-labelt   dnst	   timingDNSs
   timing-dnst   pdtt   timingPageLoads   timing-page-loadt   rrtt   timingRedirects   timing-redirectt   tcpt   timingTCPConnects   timing-tcp-connectt   srtt   timingServerResponses   timing-server-responsei    s   cd{0}s   dimension{0}s   cm{0}s	   metric{0}t   pat   tcct   palt   cost   colt   promoai   s   pr{0}ids   pr{0}nms   pr{0}brs   pr{0}cas   pr{0}vas   pr{0}prs   pr{0}qts   pr{0}ccs   pr{0}pss
   pr{0}cd{1}s
   pr{0}cm{1}s   il{0}pi{1}ids   il{0}pi{1}nms   il{0}pi{1}brs   il{0}pi{1}cas   il{0}pi{1}vas   il{0}pi{1}pss   il{0}pi{1}prs   il{0}pi{1}cd{2}s   il{0}pi{1}cm{2}s   il{0}nms
   promo{0}ids
   promo{0}nms
   promo{0}crs
   promo{0}psc         O s   t  |  | |  S(   s   Shortcut for creating trackers.(   RP   (   R   R7   t   kwargs(    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   createi  s    (0   R1   t
   __future__R    R   R   R$   R   R   R   t	   six.movesR   t   six.moves.urllib.errorR   R   t   six.moves.urllib.parseR   t   six.moves.urllib.requestR   R   R	   R
   R   R   R   R   R   t   objectR4   RO   RP   R   t   MAX_CUSTOM_DEFINITIONSt   MAX_EC_LISTSt   MAX_EC_PRODUCTSt   MAX_EC_PROMOTIONSRi   R*   R+   t   rangeRh   R   R   R   t   product_indext   custom_indext
   list_indext   promotion_indexR5  (    (    (    sU   lib/python2.7/site-packages/anaconda_navigator/external/UniversalAnalytics/Tracker.pyt   <module>   s<  (L		%) 		 