"""trigger.py"""
import gtm_manager.base
import gtm_manager.parameter
from gtm_manager.utils import param_dict
[docs]class GTMTrigger(gtm_manager.base.GTMBase):
"""Open a specific GTM Trigger.
Args:
trigger (dict): An API representation of the GTM Trigger. If provided, the resource will be
not be loaded from the API. :code:`trigger` or :code:`path` argument must be set.
path (str): The API path to the resource, i.e.
"accounts/1234/containers/1234/workspaces/1234/trigger/123". If provided instead of
:code:`trigger`, the representation will be loaded from the API. :code:`path` or
:code:`trigger` argument must be set.
parent (str): Required, when the instance is initialized with a :code:`trigger` argument to
explizitly set the parent path, i.e. "accounts/1234/containers/1234/workspaces/1234"
**kwargs: Additional keyword args to initialize the base class.
"""
def __init__(self, trigger=None, path=None, parent=None, **kwargs):
super().__init__(**kwargs)
self.triggers_service = (
self.service.accounts().containers().workspaces().triggers()
) # pylint: disable=E1101
if trigger:
pass
elif path:
trigger = self._get_trigger(path)
else:
raise ValueError("Please pass either a container obj or container path.")
self._maxTimerLengthSeconds = trigger.get("maxTimerLengthSeconds")
self._totalTimeMinMilliseconds = trigger.get("totalTimeMinMilliseconds")
self._uniqueTriggerId = trigger.get("uniqueTriggerId")
self._verticalScrollPercentageList = trigger.get("verticalScrollPercentageList")
self._horizontalScrollPercentageList = trigger.get(
"horizontalScrollPercentageList"
)
self._containerId = trigger.get("containerId")
self._waitForTagsTimeout = trigger.get("waitForTagsTimeout")
self._accountId = trigger.get("accountId")
self._waitForTags = trigger.get("waitForTags")
self._intervalSeconds = trigger.get("intervalSeconds")
self._eventName = trigger.get("eventName")
self._visibilitySelector = trigger.get("visibilitySelector")
self._workspaceId = trigger.get("workspaceId")
self._customEventFilter = trigger.get("customEventFilter")
self._parameter = trigger.get("parameter") or []
self._parentFolderId = trigger.get("parentFolderId")
self._continuousTimeMinMilliseconds = trigger.get(
"continuousTimeMinMilliseconds"
)
self._selector = trigger.get("selector")
self._triggerId = trigger.get("triggerId")
self._tagManagerUrl = trigger.get("tagManagerUrl")
self._fingerprint = trigger.get("fingerprint")
self._visiblePercentageMax = trigger.get("visiblePercentageMax")
self._name = trigger.get("name")
self._visiblePercentageMin = trigger.get("visiblePercentageMin")
self._type = trigger.get("type")
self._notes = trigger.get("notes")
self._interval = trigger.get("interval")
self._filter = trigger.get("filter")
self._autoEventFilter = trigger.get("autoEventFilter")
self._limit = trigger.get("limit")
self._checkValidation = trigger.get("checkValidation")
self._path = path or "{}/triggers/{}".format(parent, self._triggerId)
self._parameter = [
gtm_manager.parameter.GTMParameter(x) for x in self._parameter
]
@property
def maxTimerLengthSeconds(self):
"""obj: Represents a Google Tag Manager Parameter. - Max time to fire Timer Events (in
seconds). Only valid for AMP Timer trigger.
"""
return self._maxTimerLengthSeconds
@property
def totalTimeMinMilliseconds(self):
"""obj: Represents a Google Tag Manager Parameter. - A visibility trigger minimum total
visible time (in milliseconds). Only valid for AMP Visibility trigger.
"""
return self._totalTimeMinMilliseconds
@property
def uniqueTriggerId(self):
"""obj: Represents a Google Tag Manager Parameter. - Globally unique id of the trigger that
auto-generates this (a Form Submit, Link Click or Timer listener) if any. Used to make
incompatible auto-events work together with trigger filtering based on trigger ids. This
value is populated during output generation since the tags implied by triggers don"t exist
until then. Only valid for Form Submit, Link Click and Timer triggers.
"""
return self._uniqueTriggerId
@property
def verticalScrollPercentageList(self):
"""obj: Represents a Google Tag Manager Parameter. - List of integer percentage values for
scroll triggers. The trigger will fire when each percentage is reached when the view is
scrolled vertically. Only valid for AMP scroll triggers.
"""
return self._verticalScrollPercentageList
@property
def horizontalScrollPercentageList(self):
"""obj: Represents a Google Tag Manager Parameter. - List of integer percentage values for
scroll triggers. The trigger will fire when each percentage is reached when the view is
scrolled horizontally. Only valid for AMP scroll triggers.
"""
return self._horizontalScrollPercentageList
@property
def containerId(self):
"""str: GTM Container ID.
"""
return self._containerId
@property
def waitForTagsTimeout(self):
"""obj: Represents a Google Tag Manager Parameter. - How long to wait (in milliseconds) for
tags to fire when "waits_for_tags" above evaluates to true. Only valid for Form Submission
and Link Click triggers.
"""
return self._waitForTagsTimeout
@property
def accountId(self):
"""str: GTM Account ID.
"""
return self._accountId
@property
def waitForTags(self):
"""str: Represents a Google Tag Manager Parameter. - Whether or not we should delay the form
submissions or link opening until all of the tags have fired (by preventing the default
action and later simulating the default action). Only valid for Form Submission and Link
Click triggers.
"""
return self._waitForTags
@property
def intervalSeconds(self):
"""obj: Represents a Google Tag Manager Parameter. - Time between Timer Events to fire (in
seconds). Only valid for AMP Timer trigger.
"""
return self._intervalSeconds
@property
def eventName(self):
"""obj: Represents a Google Tag Manager Parameter. - Name of the GTM event that is fired.
Only valid for Timer triggers.
"""
return self._eventName
@property
def visibilitySelector(self):
"""obj: Represents a Google Tag Manager Parameter. - A visibility trigger CSS selector (i.e.
"-id"). Only valid for AMP Visibility trigger.
"""
return self._visibilitySelector
@property
def workspaceId(self):
"""str: GTM Workspace ID.
"""
return self._workspaceId
@property
def customEventFilter(self):
"""list: Used in the case of custom event, which is fired iff all Conditions are true.
"""
return self._customEventFilter
@property
def parameter(self):
"""list: Additional parameters.
"""
return self._parameter
@property
def parentFolderId(self):
"""str: Parent folder id.
"""
return self._parentFolderId
@property
def continuousTimeMinMilliseconds(self):
"""obj: Represents a Google Tag Manager Parameter. - A visibility trigger minimum continuous
visible time (in milliseconds). Only valid for AMP Visibility trigger.
"""
return self._continuousTimeMinMilliseconds
@property
def selector(self):
"""obj: Represents a Google Tag Manager Parameter. - A click trigger CSS selector (i.e. "a",
"button" etc.). Only valid for AMP Click trigger.
"""
return self._selector
@property
def triggerId(self):
"""str: The Trigger ID uniquely identifies the GTM Trigger.
"""
return self._triggerId
@property
def tagManagerUrl(self):
"""str: Auto generated link to the tag manager UI
"""
return self._tagManagerUrl
@property
def fingerprint(self):
"""str: The fingerprint of the GTM Trigger as computed at storage time. This value is
recomputed whenever the trigger is modified.
"""
return self._fingerprint
@property
def visiblePercentageMax(self):
"""obj: Represents a Google Tag Manager Parameter. - A visibility trigger maximum percent
visibility. Only valid for AMP Visibility trigger.
"""
return self._visiblePercentageMax
@property
def path(self):
"""str: GTM Trigger"s API relative path.
"""
return self._path
@property
def name(self):
"""str: Trigger display name.
"""
return self._name
@property
def visiblePercentageMin(self):
"""obj: Represents a Google Tag Manager Parameter. - A visibility trigger minimum percent
visibility. Only valid for AMP Visibility trigger.
"""
return self._visiblePercentageMin
@property
def type(self):
"""str: Defines the data layer event that causes this trigger.
"""
return self._type
@property
def notes(self):
"""str: User notes on how to apply this trigger in the container.
"""
return self._notes
@property
def interval(self):
"""obj: Represents a Google Tag Manager Parameter. - Time between triggering recurring Timer
Events (in milliseconds). Only valid for Timer triggers.
"""
return self._interval
@property
def filter(self):
"""list: The trigger will only fire iff all Conditions are true.
"""
return self._filter
@property
def autoEventFilter(self):
"""list: Used in the case of auto event tracking.
"""
return self._autoEventFilter
@property
def limit(self):
"""obj: Represents a Google Tag Manager Parameter. - Limit of the number of GTM events this
Timer Trigger will fire. If no limit is set, we will continue to fire GTM events until the
user leaves the page. Only valid for Timer triggers.
"""
return self._limit
@property
def checkValidation(self):
"""obj: Represents a Google Tag Manager Parameter. - Whether or not we should only fire tags
if the form submit or link click event is not cancelled by some other event handler (e.g.
because of validation). Only valid for Form Submission and Link Click triggers.
"""
return self._checkValidation
[docs] def update(self, refresh=False, parameter=None, **kwargs):
"""Update the current trigger. The GTM API does not support a partial update. Therfore, this
method will send all fields expliztily set in the method arguments and those cached in the
instance properties.
GTMParameters passed in a list as the :code:`parameter` argument, will be merged recursivly
with the exsisting parameters based on their parameter key.
All other API resource properties can be overwritten by specifying the property name as
keyword arguments on the method call.
Args:
refresh (bool): Force a refresh of the entire GTMTrigger instance to prevent implicitly
sending stale property data.
parameter (list): :class:`gtm_manager.parameter.GTMParameter` list to be merged
recursivly with the exsisting parameters based on their parameter key.
**kwargs: Additional resource properties to update with this call.
Raises:
ValueError
"""
if refresh:
self.__init__(path=self._path, service=self.service)
default_asset = {
"maxTimerLengthSeconds": self._maxTimerLengthSeconds,
"totalTimeMinMilliseconds": self._totalTimeMinMilliseconds,
"uniqueTriggerId": self._uniqueTriggerId,
"verticalScrollPercentageList": self._verticalScrollPercentageList,
"horizontalScrollPercentageList": self._horizontalScrollPercentageList,
"containerId": self._containerId,
"waitForTagsTimeout": self._waitForTagsTimeout,
"accountId": self._accountId,
"waitForTags": self._waitForTags,
"intervalSeconds": self._intervalSeconds,
"eventName": self._eventName,
"visibilitySelector": self._visibilitySelector,
"workspaceId": self._workspaceId,
"customEventFilter": self._customEventFilter,
"parentFolderId": self._parentFolderId,
"continuousTimeMinMilliseconds": self._continuousTimeMinMilliseconds,
"selector": self._selector,
"triggerId": self._triggerId,
"tagManagerUrl": self._tagManagerUrl,
"fingerprint": self._fingerprint,
"visiblePercentageMax": self._visiblePercentageMax,
"path": self._path,
"name": self._name,
"visiblePercentageMin": self._visiblePercentageMin,
"type": self._type,
"notes": self._notes,
"interval": self._interval,
"filter": self._filter,
"autoEventFilter": self._autoEventFilter,
"limit": self._limit,
"checkValidation": self._checkValidation,
}
update_asset = {**default_asset, **kwargs}
if parameter:
parameter_dict = {**param_dict(self._parameter), **param_dict(parameter)}
parameter = list(parameter_dict.values())
else:
parameter = self._parameter
update_asset["parameter"] = [x.to_obj() for x in parameter]
update_asset = {k: v for k, v in update_asset.items() if v is not None}
request = self.triggers_service.update(path=self.path, body=update_asset)
response = request.execute()
self.__init__(trigger=response, service=self.service)
def _get_trigger(self, path):
"""_get_trigger"""
request = self.triggers_service.get(path=path)
response = request.execute()
return response
[docs] def delete(self):
"""Delete the current trigger.
"""
request = self.triggers_service.delete(path=self._path)
request.execute()