示例#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
        )
    )
 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')
     )
 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(),
     )
 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'))