Пример #1
0
def with_link_tracking(context, url):
    """
    Modifies the provided URL to ensure it is safe for usage in an email template and adds UTM parameters to it.

    The provided URL can be relative or absolute. If it is relative, it will be made absolute.

    All URLs will be augmented to include UTM parameters so that clicks can be tracked.

    Args:
        context (dict): The template context. Must include a "message". A request must be provided in this template
            context or be retrievable using crum.
        url (str): The url to rewrite.

    Returns:
        str: The URL as an absolute URL with appropriate query string parameters that allow clicks to be tracked.

    """
    site, _user, message = _get_variables_from_context(context, 'with_link_tracking')

    campaign = CampaignTrackingInfo(
        source=message.app_label,
        campaign=message.name,
        content=message.uuid,
    )
    course_ids = context.get('course_ids')
    if course_ids is not None and len(course_ids) > 0:
        campaign.term = course_ids[0]

    return mark_safe(
        modify_url_to_track_clicks(
            ensure_url_is_absolute(site, url),
            campaign=campaign
        )
    )
Пример #2
0
 def test_query_string_with_existing_utm_parameters(self):
     campaign = CampaignTrackingInfo(
         source='test_source',
         medium=None
     )
     self.assert_query_string_equal(
         'utm_source=test_source&utm_medium=custom_medium',
         campaign.to_query_string('utm_source=custom_source&utm_medium=custom_medium')
     )
Пример #3
0
 def test_query_string_with_existing_repeated_parameters(self):
     campaign = CampaignTrackingInfo(
         source='test_source',
         medium=None
     )
     self.assert_query_string_equal(
         'some_parameter=testing&utm_source=test_source&other=test2&some_parameter=baz',
         campaign.to_query_string('some_parameter=testing&other=test2&some_parameter=baz')
     )
Пример #4
0
 def test_to_query_string(self):
     campaign = CampaignTrackingInfo(source='test_source with spaces',
                                     medium='test_medium',
                                     campaign='test_campaign',
                                     term='test_term',
                                     content='test_content')
     self.assert_query_string_equal(
         'utm_source=test_source%20with%20spaces&utm_medium=test_medium&utm_campaign=test_campaign'
         '&utm_term=test_term&utm_content=test_content',
         campaign.to_query_string(),
     )
Пример #5
0
 def test_to_query_string(self):
     campaign = CampaignTrackingInfo(
         source='test_source with spaces',
         medium='test_medium',
         campaign='test_campaign',
         term='test_term',
         content='test_content'
     )
     self.assert_query_string_equal(
         'utm_source=test_source%20with%20spaces&utm_medium=test_medium&utm_campaign=test_campaign'
         '&utm_term=test_term&utm_content=test_content',
         campaign.to_query_string(),
     )
Пример #6
0
 def test_default_campaign_info(self):
     campaign = CampaignTrackingInfo()
     self.assertEqual(campaign.source, DEFAULT_CAMPAIGN_SOURCE)
     self.assertEqual(campaign.medium, DEFAULT_CAMPAIGN_MEDIUM)
     self.assertIsNone(campaign.campaign)
     self.assertIsNone(campaign.term)
     self.assertIsNone(campaign.content)
Пример #7
0
def modify_url_to_track_clicks(url, campaign=None):
    """
    Given a URL, this method modifies the query string parameters to include UTM tracking parameters.

    These UTM codes are used to by Google Analytics to identify the source of traffic. This will help us better
    understand how users behave when they come to the site by clicking a link in this email.

    Arguments:
        url (str): pass
        campaign (CampaignTrackingInfo): pass

    Returns:
        str: The url with appropriate query string parameters.
    """
    parsed_url = urlparse(url)
    if campaign is None:
        campaign = CampaignTrackingInfo()
    modified_url = parsed_url._replace(query=campaign.to_query_string(parsed_url.query))
    return modified_url.geturl()  # pylint: disable=no-member
Пример #8
0
def modify_url_to_track_clicks(url, campaign=None):
    """
    Given a URL, this method modifies the query string parameters to include UTM tracking parameters.

    These UTM codes are used to by Google Analytics to identify the source of traffic. This will help us better
    understand how users behave when they come to the site by clicking a link in this email.

    Arguments:
        url (str): pass
        campaign (CampaignTrackingInfo): pass

    Returns:
        str: The url with appropriate query string parameters.
    """
    parsed_url = urlparse(url)
    if campaign is None:
        campaign = CampaignTrackingInfo()
    modified_url = parsed_url._replace(query=campaign.to_query_string(parsed_url.query))
    return modified_url.geturl()
Пример #9
0
 def test_query_string_with_existing_utm_parameters(self):
     campaign = CampaignTrackingInfo(source='test_source', medium=None)
     self.assert_query_string_equal(
         'utm_source=test_source&utm_medium=custom_medium',
         campaign.to_query_string(
             'utm_source=custom_source&utm_medium=custom_medium'))
Пример #10
0
 def test_query_string_with_existing_repeated_parameters(self):
     campaign = CampaignTrackingInfo(source='test_source', medium=None)
     self.assert_query_string_equal(
         'some_parameter=testing&utm_source=test_source&other=test2&some_parameter=baz',
         campaign.to_query_string(
             'some_parameter=testing&other=test2&some_parameter=baz'))