Ë
    Ìi™  ã                   óæ   — d dl Z d dlZd dlmZmZmZmZmZm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 d dlmZmZmZmZ d dlmZmZmZmZmZm Z  d d	l!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( 	  G d
„ d«      Z)y)é    N)ÚAnyÚOptionalÚUnionÚListÚDictÚSequence)Úwarn)ÚpayloadÚSelfDescribingJson)ÚSubject)Únon_empty_stringÚone_ofÚ	non_emptyÚform_element)ÚVERSIONÚDEFAULT_ENCODE_BASE64ÚBASE_SCHEMA_PATHÚ
SCHEMA_TAG)ÚEventÚPagePingÚPageViewÚSelfDescribingÚStructuredEventÚ
ScreenView)ÚJsonEncoderFunctionÚEmitterProtocolÚFORM_NODE_NAMESÚ
FORM_TYPESÚFormNodeNameÚElementClassesÚFormClassesc                   óX  — e Zd Zddedfdedeee   ef   dee	   dee   de
dee   ddfd	„Zedefd
„«       ZedWdee   defd„«       Z	 dedee   fd„Zdedej*                  fd„Z	 	 	 	 	 dXdedee   dee   deee      dee   dee	   dd fd„Z	 	 	 	 	 	 	 	 	 dYdedee   dee   dee   dee   dee   dee   deee      dee   dee	   dd fd„Z	 	 	 	 	 	 	 dZdedee   dee   dee   dee   deee      dee   dee	   dd fd „Z	 	 	 	 	 	 	 dZd!ed"ed#ee   d$ee   d%ee   d&ee   deee      dee   dee	   dd fd'„Z	 	 	 	 	 	 	 dZd!ed"ed#ee   d$ee   d%ee   d&ee   deee      dee   dee	   dd fd(„Z	 	 	 	 	 dXd)edee   d*ed+ee   d,ee   dee   deee      dee   dee	   dd fd-„Z	 	 	 	 	 dXd)ed.ee    d/eee!ee"f         deee      dee   dee	   dd fd0„Z#	 	 	 	 	 	 d[d1e$e   d2ee!eeee
f   f      d3ee   d4ee   deee      dee   dee	   dd fd5„Z%	 	 	 	 	 	 d[d6ed!ed7ed"ed#ee   d$ee   d&ee   deee      dee   dee	   dd fd8„Z&	 	 	 	 	 	 	 	 	 	 	 d\d6ed9ed:ee   d;ee   d<ee   d=ee   d>ee   d?ee   d&ee   d@eee!ee"f         deee      dee   dee	   dd fdA„Z'	 	 	 	 	 dXd#ee   dBee   deee      dee   dee	   dd fdC„Z(	 	 	 	 	 	 	 	 	 dYd#edBee   dDee   dEee   dFee   dGee   dHee   deee      dee   dee	   dd fdI„Z)	 	 	 	 	 	 d[d$edJedKee   dLee   d+eeeef      deee      dee   dee	   dd fdM„Z*	 	 	 d]dNedeee      dee   dee	   dd f
dO„Z+	 	 	 d]dNedeee      dee   dee	   dd f
dP„Z,d^dQe
dd fdR„Z-dee	   dd fdS„Z.dTedd fdU„Z/defdV„Z0y)_ÚTrackerNÚ	namespaceÚemittersÚsubjectÚapp_idÚencode_base64Újson_encoderÚreturnc                 óÈ   — |€
t        «       }t        |t        «      rt        |«       || _        n|g| _        || _        || _        || _        t        ||dœ| _	        d| _
        y)aÔ  
        :param namespace:        Identifier for the Tracker instance
        :type  namespace:        string
        :param emitters:         Emitters to which events will be sent
        :type  emitters:         list[>0](emitter) | emitter
        :param subject:          Subject to be tracked
        :type  subject:          subject | None
        :param app_id:           Application ID
        :type  app_id:           string_or_none
        :param encode_base64:    Whether JSONs in the payload should be base-64 encoded
        :type  encode_base64:    bool
        :param json_encoder:     Custom JSON serializer that gets called on non-serializable object
        :type  json_encoder:     function | None
        N)ÚtvÚtnaÚaid)r   Ú
isinstanceÚlistr   r%   r&   r(   r)   r   Ústandard_nv_pairsÚtimer)Úselfr$   r%   r&   r'   r(   r)   s          úY/var/www/html/strategist-ai/venv/lib/python3.12/site-packages/snowplow_tracker/tracker.pyÚ__init__zTracker.__init__9   s_   € ð. ˆ?Ü“iˆGä�h¤Ô%Ü�hÔØ$ˆD�Mà%˜JˆDŒMà*1ˆŒØ*ˆÔØ(ˆÔä(/¸	È&Ñ!QˆÔØˆ�
ó    c                  ó<   — t        t        j                  «       «      S )z…
        Set transaction ID for the payload once during the lifetime of the
        event.

        :rtype:           string
        )ÚstrÚuuidÚuuid4© r6   r4   Úget_uuidzTracker.get_uuid`   s   € ô ”4—:‘:“<Ó Ð r6   Útstampc                 ó„   — t        | t        t        f«      rt        | «      S t        t        j                  «       dz  «      S )z‹
        :param tstamp:    User-input timestamp or None
        :type  tstamp:    int | float | None
        :rtype:           int
        iè  )r/   ÚintÚfloatÚtime)r=   s    r4   Úget_timestampzTracker.get_timestampj   s<   € ô ØäÜðô
ô �v“;ÐÜ”4—9‘9“; Ñ%Ó&Ð&r6   Úeventc                 óÖ   — | j                  |¬«      }| j                  D ]  }|j                  |j                  «       Œ d|j                  j	                  «       v r|j                  d   S y)zÑ
        Send the event payload to a emitter. Returns the tracked event ID.
        :param  event:           Event
        :type   event:           events.Event
        :rtype:                  String
        ©rC   ÚeidN)Úcomplete_payloadr%   ÚinputÚnv_pairsÚkeys)r3   rC   r
   Úemitters       r4   ÚtrackzTracker.track   sp   € ð ×'Ñ'Øð (ó 
ˆð —}‘}ò 	,ˆGØ�M‰M˜'×*Ñ*Õ+ð	,ð �G×$Ñ$×)Ñ)Ó+Ñ+Ø×#Ñ# EÑ*Ð*àr6   c                 ó6  — |j                  | j                  | j                  | j                  ¬«      } |j                  dt
        j                  «       «        |j                  dt
        j                  «       «        |j                  | j                  «       |S )N)r(   r)   r&   rF   Údtm)
Úbuild_payloadr(   r)   r&   Úaddr#   r<   rB   Úadd_dictr1   )r3   rC   r
   s      r4   rG   zTracker.complete_payload–   s�   € ð ×%Ñ%Ø×,Ñ,Ø×*Ñ*Ø—L‘Lð &ó 
ˆð 	ˆ�‰�Eœ7×+Ñ+Ó-Ô.Øˆ�‰�Eœ7×0Ñ0Ó2Ô3Øˆ×Ñ˜×/Ñ/Ô0àˆr6   Úpage_urlÚ
page_titleÚreferrerÚcontextÚevent_subjectc                 óp   — t        dt        d¬«       t        ||||||¬«      }| j                  |¬«       | S )a½  
        :param  page_url:       URL of the viewed page
        :type   page_url:       non_empty_string
        :param  page_title:     Title of the viewed page
        :type   page_title:     string_or_none
        :param  referrer:       Referrer of the page
        :type   referrer:       string_or_none
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zitrack_page_view will be removed in future versions. Please use the new PageView class to track the event.é   ©Ú
stacklevel)rR   rS   rT   rV   rU   Útrue_timestamprE   )r	   ÚDeprecationWarningr   rL   )r3   rR   rS   rT   rU   r=   rV   Úpvs           r4   Útrack_page_viewzTracker.track_page_view¦   sH   € ô0 	ØwÜØõ	
ô ØØ!ØØ'ØØ!ô
ˆð 	�
‰
˜ˆ
ÔØˆr6   Úmin_xÚmax_xÚmin_yÚmax_yc                 óx   — t        dt        d¬«       t        |||||||||	|
¬«
      }| j                  |¬«       | S )aµ  
        :param  page_url:       URL of the viewed page
        :type   page_url:       non_empty_string
        :param  page_title:     Title of the viewed page
        :type   page_title:     string_or_none
        :param  referrer:       Referrer of the page
        :type   referrer:       string_or_none
        :param  min_x:          Minimum page x offset seen in the last ping period
        :type   min_x:          int | None
        :param  max_x:          Maximum page x offset seen in the last ping period
        :type   max_x:          int | None
        :param  min_y:          Minimum page y offset seen in the last ping period
        :type   min_y:          int | None
        :param  max_y:          Maximum page y offset seen in the last ping period
        :type   max_y:          int | None
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zitrack_page_ping will be removed in future versions. Please use the new PagePing class to track the event.rX   rY   )
rR   rS   rT   r_   r`   ra   rb   rU   r[   rV   rE   )r	   r\   r   rL   )r3   rR   rS   rT   r_   r`   ra   rb   rU   r=   rV   Úpps               r4   Útrack_page_pingzTracker.track_page_pingÐ   sU   € ôH 	ØwÜØõ	
ô ØØ!ØØØØØØØ!Ø'ô
ˆð 	�
‰
˜ˆ
ÔØˆr6   Ú
target_urlÚ
element_idÚelement_classesÚelement_targetÚelement_contentc	                 óä   — t        dt        d¬«       t        |«       i }	||	d<   |�||	d<   |�||	d<   |�||	d<   |�||	d<   t        t        ›d	t
        ›d
�|	«      }
| j                  |
|||¬«       | S )a  
        :param  target_url:         Target URL of the link
        :type   target_url:         non_empty_string
        :param  element_id:         ID attribute of the HTML element
        :type   element_id:         string_or_none
        :param  element_classes:    Classes of the HTML element
        :type   element_classes:    list(str) | tuple(str,\*) | None
        :param  element_target:     ID attribute of the HTML element
        :type   element_target:     string_or_none
        :param  element_content:    The content of the HTML element
        :type   element_content:    string_or_none
        :param  context:            Custom context for the event
        :type   context:            context_array | None
        :param  tstamp:             Optional event timestamp in milliseconds
        :type   tstamp:             int | float | None
        :param  event_subject:      Optional per event subject
        :type   event_subject:      subject | None
        :rtype:                     Tracker
        zptrack_link_click will be removed in future versions. Please use the new SelfDescribing class to track the event.rX   rY   Ú	targetUrlÚ	elementIdÚelementClassesÚelementTargetÚelementContentz/link_click/z/1-0-1©Ú
event_jsonrU   r=   rV   ©r	   r\   r   r   r   r   Útrack_self_describing_event)r3   rf   rg   rh   ri   rj   rU   r=   rV   Ú
propertiesrr   s              r4   Útrack_link_clickzTracker.track_link_click
  s¬   € ô< 	Ø~ÜØõ	
ô
 	˜Ô$à<>ˆ
Ø",ˆ
�;ÑØÐ!Ø&0ˆJ�{Ñ#ØÐ&Ø+:ˆJÐ'Ñ(ØÐ%Ø*8ˆJ�Ñ'ØÐ&Ø+:ˆJÐ'Ñ(ä'Þ(8¾*ÐEÀzó
ˆ
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   ÚskuÚquantityÚnameÚcategoryÚ
unit_priceÚcurrencyc
                 óî   — t        dt        d¬«       t        |«       i }
||
d<   ||
d<   |�||
d<   |�||
d<   |�||
d<   |�||
d	<   t        t        ›d
t
        ›d�|
«      }| j                  ||||	¬«       | S )áÌ  
        :param  sku:            Item SKU or ID
        :type   sku:            non_empty_string
        :param  quantity:       Number added to cart
        :type   quantity:       int
        :param  name:           Item's name
        :type   name:           string_or_none
        :param  category:       Item's category
        :type   category:       string_or_none
        :param  unit_price:     Item's price
        :type   unit_price:     int | float | None
        :param  currency:       Type of currency the price is in
        :type   currency:       string_or_none
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        z8track_add_to_cart will be deprecated in future versions.rX   rY   rw   rx   ry   rz   Ú	unitPricer|   z/add_to_cart/ú/1-0-0rq   rs   ©r3   rw   rx   ry   rz   r{   r|   rU   r=   rV   ru   rr   s               r4   Útrack_add_to_cartzTracker.track_add_to_cartF  sµ   € ôB 	ØFÜØõ	
ô
 	˜Ôà?Aˆ
Øˆ
�5ÑØ!)ˆ
�:ÑØÐØ!%ˆJ�vÑØÐØ%-ˆJ�zÑ"ØÐ!Ø&0ˆJ�{Ñ#ØÐØ%-ˆJ�zÑ"ä'Þ)9¾:ÐFÈ
ó
ˆ
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   c
                 óî   — t        dt        d¬«       t        |«       i }
||
d<   ||
d<   |�||
d<   |�||
d<   |�||
d<   |�||
d	<   t        t        ›d
t
        ›d�|
«      }| j                  ||||	¬«       | S )r~   z=track_remove_from_cart will be deprecated in future versions.rX   rY   rw   rx   ry   rz   r   r|   z/remove_from_cart/r€   rq   rs   r�   s               r4   Útrack_remove_from_cartzTracker.track_remove_from_cart†  sµ   € ôB 	ØKÜØõ	
ô
 	˜Ôà8:ˆ
Øˆ
�5ÑØ!)ˆ
�:ÑØÐØ!%ˆJ�vÑØÐØ%-ˆJ�zÑ"ØÐ!Ø&0ˆJ�{Ñ#ØÐØ%-ˆJ�zÑ"ä'Þ.>Æ
ÐKÈZó
ˆ
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   Úform_idÚ	node_nameÚvalueÚtype_c
                 óV  — t        dt        d¬«       t        |«       t        |t        «       |�t        |j                  «       t        «       t        «       }
||
d<   ||
d<   ||
d<   ||
d<   |�||
d<   |�||
d	<   t        t        ›d
t        ›d�|
«      }| j                  ||||	¬«       | S )a€  
        :param  form_id:            ID attribute of the HTML form
        :type   form_id:            non_empty_string
        :param  element_id:         ID attribute of the HTML element
        :type   element_id:         string_or_none
        :param  node_name:          Type of input element
        :type   node_name:          form_node_name
        :param  value:              Value of the input element
        :type   value:              string_or_none
        :param  type_:              Type of data the element represents
        :type   type_:              non_empty_string, form_type
        :param  element_classes:    Classes of the HTML element
        :type   element_classes:    list(str) | tuple(str,\*) | None
        :param  context:            Custom context for the event
        :type   context:            context_array | None
        :param  tstamp:             Optional event timestamp in milliseconds
        :type   tstamp:             int | float | None
        :param  event_subject:      Optional per event subject
        :type   event_subject:      subject | None
        :rtype:                     Tracker
        zqtrack_form_change will be removed in future versions. Please use the new SelfDescribing class to track the event.rX   rY   ÚformIdrm   ÚnodeNamer‡   Útypern   z/change_form/r€   rq   )r	   r\   r   r   r   Úlowerr   Údictr   r   r   rt   )r3   r…   rg   r†   r‡   rˆ   rh   rU   r=   rV   ru   rr   s               r4   Útrack_form_changezTracker.track_form_changeÆ  sÌ   € ôB 	ØÜØõ	
ô 	˜Ô!Üˆyœ/Ô*ØÐÜ�5—;‘;“=¤*Ô-äFJÃfˆ
Ø&ˆ
�8ÑØ",ˆ
�;ÑØ!*ˆ
�:ÑØ#ˆ
�7ÑØÐØ!&ˆJ�vÑØÐ&Ø+:ˆJÐ'Ñ(ä'Þ)9¾:ÐFÈ
ó
ˆ
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   Úform_classesÚelementsc                 ó   — t        dt        d¬«       t        |«       |xs g D ]  }t        |«       Œ t	        «       }||d<   |�||d<   |�t        |«      dkD  r||d<   t        t        ›dt        ›d	�|«      }	| j                  |	|||¬
«       | S )aå  
        :param  form_id:        ID attribute of the HTML form
        :type   form_id:        non_empty_string
        :param  form_classes:   Classes of the HTML form
        :type   form_classes:   list(str) | tuple(str,\*) | None
        :param  elements:       Classes of the HTML form
        :type   elements:       list(form_element) | None
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zqtrack_form_submit will be removed in future versions. Please use the new SelfDescribing class to track the event.rX   rY   rŠ   ÚformClassesr   r‘   z/submit_form/r€   rq   )
r	   r\   r   r   rŽ   Úlenr   r   r   rt   )
r3   r…   r�   r‘   rU   r=   rV   Úelementru   rr   s
             r4   Útrack_form_submitzTracker.track_form_submit  s¹   € ô0 	ØÜØõ	
ô
 	˜Ô!à’~ 2ò 	"ˆGÜ˜Õ!ð	"ô
 ‹Fð 	ð  'ˆ
�8ÑØÐ#Ø(4ˆJ�}Ñ%ØÐ¤C¨£M°AÒ$5Ø%-ˆJ�zÑ"ä'Þ)9¾:ÐFÈ
ó
ˆ
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   ÚtermsÚfiltersÚtotal_resultsÚpage_resultsc                 óÖ   — t        dt        d¬«       t        |«       i }||d<   |�||d<   |�||d<   |�||d<   t        t        ›dt
        ›d	�|«      }	| j                  |	|||¬
«       | S )a4  
        :param  terms:          Search terms
        :type   terms:          seq[>=1](str)
        :param  filters:        Filters applied to the search
        :type   filters:        dict(str:str|bool) | None
        :param  total_results:  Total number of results returned
        :type   total_results:  int | None
        :param  page_results:   Total number of pages of results
        :type   page_results:   int | None
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zqtrack_site_search will be removed in future versions. Please use the new SelfDescribing class to track the event.rX   rY   r—   r˜   ÚtotalResultsÚpageResultsz/site_search/r€   rq   )r	   r\   r   r   r   r   rt   )
r3   r—   r˜   r™   rš   rU   r=   rV   ru   rr   s
             r4   Útrack_site_searchzTracker.track_site_search?  s¡   € ô6 	ØÜØõ	
ô
 	�%Ôð ð 	ð $ˆ
�7ÑØÐØ$+ˆJ�yÑ!ØÐ$Ø)6ˆJ�~Ñ&ØÐ#Ø(4ˆJ�}Ñ%ä'Þ)9¾:ÐFÈ
ó
ˆ
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   Úorder_idÚpricec                 óV  — t        dt        d¬«       t        |«       t        |«       t        |
||	¬«      }|j                  j                  dd«       |j                  j                  d|«       |j                  j                  d|«       |j                  j                  d	|«       |j                  j                  d
|«       |j                  j                  d|«       |j                  j                  d|«       |j                  j                  d|«       | j                  |¬«       | S )a  
        This is an internal method called by track_ecommerce_transaction.
        It is not for public use.

        :param  order_id:       Order ID
        :type   order_id:       non_empty_string
        :param  sku:            Item SKU
        :type   sku:            non_empty_string
        :param  price:          Item price
        :type   price:          int | float
        :param  quantity:       Item quantity
        :type   quantity:       int
        :param  name:           Item name
        :type   name:           string_or_none
        :param  category:       Item category
        :type   category:       string_or_none
        :param  currency:       The currency the price is expressed in
        :type   currency:       string_or_none
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zGtrack_ecommerce_transaction_item will be deprecated in future versions.rX   rY   ©rV   rU   r[   ÚeÚtiÚti_idÚti_skÚti_nmÚti_caÚti_prÚti_quÚti_curE   )r	   r\   r   r   r
   rP   rL   )r3   rŸ   rw   r    rx   ry   rz   r|   rU   r=   rV   rC   s               r4   Ú track_ecommerce_transaction_itemz(Tracker.track_ecommerce_transaction_itemx  sî   € ôN 	ØUÜØõ	
ô
 	˜Ô"Ü˜ÔäØ'°Èô
ˆð 	�‰×Ñ˜#˜tÔ$Ø�‰×Ñ˜' 8Ô,Ø�‰×Ñ˜' 3Ô'Ø�‰×Ñ˜' 4Ô(Ø�‰×Ñ˜' 8Ô,Ø�‰×Ñ˜' 5Ô)Ø�‰×Ñ˜' 8Ô,Ø�‰×Ñ˜' 8Ô,à�
‰
˜ˆ
ÔØˆr6   Útotal_valueÚaffiliationÚ	tax_valueÚshippingÚcityÚstateÚcountryÚitemsc                 óF  — t        dt        d¬«       t        |«       t        |||¬«      }|j                  j                  dd«       |j                  j                  d|«       |j                  j                  d|«       |j                  j                  d	|«       |j                  j                  d
|«       |j                  j                  d|«       |j                  j                  d|«       |j                  j                  d|«       |j                  j                  d|«       |j                  j                  d|	«       t        j                  |«      }| j                  |¬«       |
€g }
|
D ]-  }||d<   |	|d<   ||d<   ||d<   ||d<    | j                  di |¤Ž Œ/ | S )a·  
        :param  order_id:       ID of the eCommerce transaction
        :type   order_id:       non_empty_string
        :param  total_value:    Total transaction value
        :type   total_value:    int | float
        :param  affiliation:    Transaction affiliation
        :type   affiliation:    string_or_none
        :param  tax_value:      Transaction tax value
        :type   tax_value:      int | float | None
        :param  shipping:       Delivery cost charged
        :type   shipping:       int | float | None
        :param  city:           Delivery address city
        :type   city:           string_or_none
        :param  state:          Delivery address state
        :type   state:          string_or_none
        :param  country:        Delivery address country
        :type   country:        string_or_none
        :param  currency:       The currency the price is expressed in
        :type   currency:       string_or_none
        :param  items:          The items in the transaction
        :type   items:          list(dict(str:\*)) | None
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zBtrack_ecommerce_transaction will be deprecated in future versions.rX   rY   r¢   r£   ÚtrÚtr_idÚtr_ttÚtr_afÚtr_txÚtr_shÚtr_ciÚtr_stÚtr_coÚtr_curE   rŸ   r|   r=   rV   rU   r;   )
r	   r\   r   r   r
   rP   r#   rB   rL   r¬   )r3   rŸ   r­   r®   r¯   r°   r±   r²   r³   r|   r´   rU   r=   rV   rC   Úitems                   r4   Útrack_ecommerce_transactionz#Tracker.track_ecommerce_transaction¶  s|  € ôZ 	ØPÜØõ	
ô
 	˜Ô"äØ'°Èô
ˆð 	�‰×Ñ˜#˜tÔ$Ø�‰×Ñ˜' 8Ô,Ø�‰×Ñ˜' ;Ô/Ø�‰×Ñ˜' ;Ô/Ø�‰×Ñ˜' 9Ô-Ø�‰×Ñ˜' 8Ô,Ø�‰×Ñ˜' 4Ô(Ø�‰×Ñ˜' 5Ô)Ø�‰×Ñ˜' 7Ô+Ø�‰×Ñ˜' 8Ô,ä×&Ñ& vÓ.ˆà�
‰
˜ˆ
Ôàˆ=ØˆEØò 	:ˆDØ'ˆD�ÑØ'ˆD�ÑØ#ˆD�‰NØ$1ˆD�Ñ!Ø%ˆD�‰OØ1ˆD×1Ñ1Ñ9°DÓ9ð	:ð ˆr6   Úid_c                 ó¨   — t        dt        d¬«       i }|�||d<   |�||d<   t        t        ›dt        ›d�|«      }| j                  ||||¬«       | S )	aX  
        :param  name:           The name of the screen view event
        :type   name:           string_or_none
        :param  id_:            Screen view ID
        :type   id_:            string_or_none
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zmtrack_screen_view will be removed in future versions. Please use the new ScreenView class to track the event.rX   rY   ry   Úidz/screen_view/r€   rq   )r	   r\   r   r   r   rt   )r3   ry   rÂ   rU   r=   rV   Úscreen_view_propertiesrr   s           r4   Útrack_screen_viewzTracker.track_screen_view  s{   € ô* 	Ø{ÜØõ	
ð
 "$ÐØÐØ-1Ð" 6Ñ*Øˆ?Ø+.Ð" 4Ñ(ä'Þ)9¾:ÐFØ"ó
ˆ
ð
 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   rŒ   Úprevious_nameÚprevious_idÚprevious_typeÚtransition_typec                 óœ   — t        dt        d¬«       |€| j                  «       }t        ||||||||
||	¬«
      }| j	                  |¬«       | S )aç  
        :param  name:           The name of the screen view event
        :type   name:           string_or_none
        :param  id_:            Screen view ID. This must be of type UUID.
        :type   id_:            string | None
        :param  type:           The type of screen that was viewed e.g feed / carousel.
        :type   type:           string | None
        :param  previous_name:  The name of the previous screen.
        :type   previous_name:  string | None
        :param  previous_id:    The screenview ID of the previous screenview.
        :type   previous_id:    string | None
        :param  previous_type   The screen type of the previous screenview
        :type   previous_type   string | None
        :param  transition_type The type of transition that led to the screen being viewed.
        :type   transition_type string | None
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zttrack_mobile_screen_view will be removed in future versions. Please use the new ScreenView class to track the event.rX   rY   )
ry   rÂ   rŒ   rÇ   rÈ   rÉ   rÊ   rV   rU   r[   rE   )r	   r\   r<   r   rL   )r3   ry   rÂ   rŒ   rÇ   rÈ   rÉ   rÊ   rU   r=   rV   Úsvs               r4   Útrack_mobile_screen_viewz Tracker.track_mobile_screen_view5  sh   € ôH 	ð CÜØõ	
ð
 ˆ;Ø—-‘-“/ˆCäØØØØ'Ø#Ø'Ø+Ø'ØØ!ô
ˆð 	�
‰
˜ˆ
ÔØˆr6   ÚactionÚlabelÚ	property_c	           
      ót   — t        dt        d¬«       t        ||||||||¬«      }	| j                  |	¬«       | S )a  
        :param  category:       Category of the event
        :type   category:       non_empty_string
        :param  action:         The event itself
        :type   action:         non_empty_string
        :param  label:          Refer to the object the action is
                                performed on
        :type   label:          string_or_none
        :param  property_:      Property associated with either the action
                                or the object
        :type   property_:      string_or_none
        :param  value:          A value associated with the user action
        :type   value:          int | float | None
        :param  context:        Custom context for the event
        :type   context:        context_array | None
        :param  tstamp:         Optional event timestamp in milliseconds
        :type   tstamp:         int | float | None
        :param  event_subject:  Optional per event subject
        :type   event_subject:  subject | None
        :rtype:                 Tracker
        zntrack_struct_event will be removed in future versions. Please use the new Structured class to track the event.rX   rY   )rz   rÎ   rÏ   rÐ   r‡   rU   r[   rV   rE   )r	   r\   r   rL   )
r3   rz   rÎ   rÏ   rÐ   r‡   rU   r=   rV   Úses
             r4   Útrack_struct_eventzTracker.track_struct_eventq  sW   € ô@ 	Ø|ÜØõ	
ô
 ØØØØØØØ!Ø'ô	
ˆð 	�
‰
Øð 	ô 	
ð ˆr6   rr   c                 ól   — t        dt        d¬«       t        ||||¬«      }| j                  |¬«       | S )áÔ  
        :param  event_json:      The properties of the event. Has two field:
                                 A "data" field containing the event properties and
                                 A "schema" field identifying the schema against which the data is validated
        :type   event_json:      self_describing_json
        :param  context:         Custom context for the event
        :type   context:         context_array | None
        :param  tstamp:          Optional event timestamp in milliseconds
        :type   tstamp:          int | float | None
        :param  event_subject:   Optional per event subject
        :type   event_subject:   subject | None
        :rtype:                  Tracker
        z{track_self_describing_event will be removed in future versions. Please use the new SelfDescribing class to track the event.rX   rY   )rr   rU   r[   rV   rE   )r	   r\   r   rL   )r3   rr   rU   r=   rV   Úsds         r4   rt   z#Tracker.track_self_describing_event¦  sM   € ô( 	ð JÜØõ	
ô Ø!ØØ!Ø'ô	
ˆð 	�
‰
Øð 	ô 	
ð ˆr6   c                 óT   — t        dt        d¬«       | j                  ||||¬«       | S )rÕ   zctrack_unstruct_event will be deprecated in future versions. Please use track_self_describing_event.rX   rY   rq   )r	   r\   rt   )r3   rr   rU   r=   rV   s        r4   Útrack_unstruct_eventzTracker.track_unstruct_eventÌ  s=   € ô( 	ØqÜØõ	
ð 	×(Ñ(Ø!ØØØ'ð	 	)ô 	
ð ˆr6   Úis_asyncc                 ó¢   — | j                   D ]?  }|rt        |d«      sŒ|j                  «        Œ#t        |d«      sŒ0|j                  «        ŒA | S )zº
        Flush the emitter

        :param  is_async:  Whether the flush is done asynchronously. Default is False
        :type   is_async:  bool
        :rtype:         tracker
        ÚflushÚ
sync_flush)r%   ÚhasattrrÛ   rÜ   )r3   rÙ   rK   s      r4   rÛ   zTracker.flushî  sJ   € ð —}‘}ò 	)ˆGÙÜ˜7 GÕ,Ø—M‘M•Oä˜7 LÕ1Ø×&Ñ&Õ(ð	)ð ˆr6   c                 ó   — || _         | S )zº
        Set the subject of the events fired by the tracker

        :param subject: Subject to be tracked
        :type  subject: subject | None
        :rtype:         tracker
        )r&   )r3   r&   s     r4   Úset_subjectzTracker.set_subjectÿ  s   € ð ˆŒØˆr6   rK   c                 ó<   — | j                   j                  |«       | S )z©
        Add a new emitter to which events should be passed

        :param emitter: New emitter
        :type  emitter: emitter
        :rtype:         tracker
        )r%   Úappend)r3   rK   s     r4   Úadd_emitterzTracker.add_emitter
  s   € ð 	�‰×Ñ˜WÔ%Øˆr6   c                 ó    — | j                   d   S )Nr-   )r1   )r3   s    r4   Úget_namespacezTracker.get_namespace  s   € ð ×%Ñ% eÑ,Ð,r6   )N)NNNNN)	NNNNNNNNN)NNNNNNN)NNNNNN)NNNNNNNNNNN)NNN)F)1Ú__name__Ú
__module__Ú__qualname__r   r8   r   r   r   r   r   Úboolr   r5   Ústaticmethodr<   r@   r?   rB   r   rL   r
   ÚPayloadrG   r   r^   re   r    rv   r‚   r„   r   r�   r!   r   r   r–   r   rž   r¬   rÁ   rÆ   rÍ   rÓ   rt   rØ   rÛ   rß   râ   rä   r;   r6   r4   r#   r#   8   s7
  „ ð
 &*Ø $Ø3Ø6:ñ%àð%ð ˜˜_Ñ-¨Ð>Ñ?ð%ð ˜'Ñ"ð	%ð
 ˜‘ð%ð ð%ð Ð2Ñ3ð%ð 
ó%ðN ð!�cò !ó ð!ð ñ'˜h u™oð '¸ò 'ó ð'ð ðàðð 
�#‰óð.àðð 
�‰óð& %)Ø"&Ø6:Ø"&Ø+/ñ(àð(ð ˜S‘Mð(ð ˜3‘-ð	(ð
 ˜$Ð1Ñ2Ñ3ð(ð ˜‘ð(ð   Ñ(ð(ð 
ó(ðZ %)Ø"&Ø#Ø#Ø#Ø#Ø6:Ø"&Ø+/ñ8àð8ð ˜S‘Mð8ð ˜3‘-ð	8ð
 ˜‰}ð8ð ˜‰}ð8ð ˜‰}ð8ð ˜‰}ð8ð ˜$Ð1Ñ2Ñ3ð8ð ˜‘ð8ð   Ñ(ð8ð 
ó8ðz %)Ø48Ø(,Ø)-Ø6:Ø"&Ø+/ñ:àð:ð ˜S‘Mð:ð " .Ñ1ð	:ð
 ! ™ð:ð " #™ð:ð ˜$Ð1Ñ2Ñ3ð:ð ˜‘ð:ð   Ñ(ð:ð 
ó:ð@ #Ø"&Ø&*Ø"&Ø6:Ø"&Ø+/ñ>àð>ð ð>ð �s‰mð	>ð
 ˜3‘-ð>ð ˜U‘Oð>ð ˜3‘-ð>ð ˜$Ð1Ñ2Ñ3ð>ð ˜‘ð>ð   Ñ(ð>ð 
ó>ðH #Ø"&Ø&*Ø"&Ø6:Ø"&Ø+/ñ>àð>ð ð>ð �s‰mð	>ð
 ˜3‘-ð>ð ˜U‘Oð>ð ˜3‘-ð>ð ˜$Ð1Ñ2Ñ3ð>ð ˜‘ð>ð   Ñ(ð>ð 
ó>ðL  $Ø48Ø6:Ø"&Ø+/ñ@àð@ð ˜S‘Mð@ð  ð	@ð
 ˜‰}ð@ð ˜‰}ð@ð " .Ñ1ð@ð ˜$Ð1Ñ2Ñ3ð@ð ˜‘ð@ð   Ñ(ð@ð 
ó@ðJ /3Ø37Ø6:Ø"&Ø+/ñ5àð5ð ˜{Ñ+ð5ð ˜4  S¨# X¡Ñ/Ñ0ð	5ð
 ˜$Ð1Ñ2Ñ3ð5ð ˜‘ð5ð   Ñ(ð5ð 
ó5ðt :>Ø'+Ø&*Ø6:Ø"&Ø+/ñ7à˜‰}ð7ð ˜$˜s E¨#¨t¨)Ñ$4Ð4Ñ5Ñ6ð7ð   ‘}ð	7ð
 ˜s‘mð7ð ˜$Ð1Ñ2Ñ3ð7ð ˜‘ð7ð   Ñ(ð7ð 
ó7ð~ #Ø"&Ø"&Ø6:Ø"&Ø+/ñ<àð<ð ð<ð ð	<ð
 ð<ð �s‰mð<ð ˜3‘-ð<ð ˜3‘-ð<ð ˜$Ð1Ñ2Ñ3ð<ð ˜‘ð<ð   Ñ(ð<ð 
ó<ðD &*Ø%)Ø$(Ø"Ø#Ø!%Ø"&Ø04Ø6:Ø"&Ø+/ñPàðPð ðPð ˜c‘]ð	Pð
 ˜E‘?ðPð ˜5‘/ðPð �s‰mðPð ˜‰}ðPð ˜#‘ðPð ˜3‘-ðPð ˜˜T # s (™^Ñ,Ñ-ðPð ˜$Ð1Ñ2Ñ3ðPð ˜‘ðPð   Ñ(ðPð 
óPðh #Ø!Ø6:Ø"&Ø+/ñ+à�s‰mð+ð �c‰]ð+ð ˜$Ð1Ñ2Ñ3ð	+ð
 ˜‘ð+ð   Ñ(ð+ð 
ó+ð` "Ø"Ø'+Ø%)Ø'+Ø)-Ø6:Ø"&Ø+/ñ:àð:ð �c‰]ð:ð �s‰mð	:ð
   ‘}ð:ð ˜c‘]ð:ð   ‘}ð:ð " #™ð:ð ˜$Ð1Ñ2Ñ3ð:ð ˜‘ð:ð   Ñ(ð:ð 
ó:ð@  $Ø#'Ø-1Ø6:Ø"&Ø+/ñ3àð3ð ð3ð ˜‰}ð	3ð
 ˜C‘=ð3ð ˜˜c 5˜jÑ)Ñ*ð3ð ˜$Ð1Ñ2Ñ3ð3ð ˜‘ð3ð   Ñ(ð3ð 
ó3ðp 7;Ø"&Ø+/ñ#à&ð#ð ˜$Ð1Ñ2Ñ3ð#ð ˜‘ð	#ð
   Ñ(ð#ð 
ó#ðR 7;Ø"&Ø+/ñ à&ð ð ˜$Ð1Ñ2Ñ3ð ð ˜‘ð	 ð
   Ñ(ð ð 
ó ñD˜dð ¨yó ð"	 8¨GÑ#4ð 	¸ó 	ð	 ?ð 	°yó 	ð-˜sô -r6   r#   )*rA   r9   Útypingr   r   r   r   r   r   Úwarningsr	   Úsnowplow_trackerr
   r   Úsnowplow_tracker.subjectr   Úsnowplow_tracker.contractsr   r   r   r   Úsnowplow_tracker.constantsr   r   r   r   Úsnowplow_tracker.eventsr   r   r   r   r   r   Úsnowplow_tracker.typingr   r   r   r   r   r    r!   r#   r;   r6   r4   ú<module>ró      sV   ðó$ Û ß =× =Ý ç 8Ý ,ß XÓ X÷ó ÷÷ ÷÷ ñ ð÷
c-ò c-r6   