From 0b1507000e5ec88b17f04342cf8f99ee2281023a Mon Sep 17 00:00:00 2001 From: Peter Bittner Date: Sun, 15 Oct 2017 19:46:44 +0200 Subject: [PATCH] Drop Python 3.2 support Refactor Travis CI configuration Add flake8 checks, address all complaints --- .travis.yml | 42 +++++----- README.rst | 7 +- analytical/templatetags/chartbeat.py | 4 +- analytical/templatetags/clicky.py | 14 ++-- analytical/templatetags/google_analytics.py | 16 ++-- analytical/templatetags/gosquared.py | 2 +- analytical/templatetags/hubspot.py | 6 +- analytical/templatetags/intercom.py | 2 +- analytical/templatetags/kiss_insights.py | 21 +++-- analytical/templatetags/kiss_metrics.py | 21 +++-- analytical/templatetags/mixpanel.py | 14 ++-- analytical/templatetags/olark.py | 35 ++++---- analytical/templatetags/performable.py | 14 ++-- analytical/templatetags/rating_mailru.py | 8 +- analytical/templatetags/snapengage.py | 61 +++++++------- analytical/templatetags/spring_metrics.py | 3 +- analytical/templatetags/uservoice.py | 4 +- analytical/templatetags/woopra.py | 2 +- analytical/templatetags/yandex_metrica.py | 2 +- analytical/tests/templatetags/dummy.py | 2 + analytical/tests/test_tag_analytical.py | 3 +- analytical/tests/test_tag_chartbeat.py | 34 ++++---- analytical/tests/test_tag_clicky.py | 21 +++-- analytical/tests/test_tag_gauges.py | 6 +- analytical/tests/test_tag_google_analytics.py | 48 ++++------- analytical/tests/test_tag_gosquared.py | 5 +- analytical/tests/test_tag_hubspot.py | 8 +- analytical/tests/test_tag_intercom.py | 44 ++++++---- analytical/tests/test_tag_kiss_insights.py | 6 +- analytical/tests/test_tag_kiss_metrics.py | 36 ++++---- analytical/tests/test_tag_mixpanel.py | 13 ++- analytical/tests/test_tag_olark.py | 21 ++--- analytical/tests/test_tag_rating_mailru.py | 3 - analytical/tests/test_tag_snapengage.py | 82 ++++++++++++------- analytical/tests/test_tag_spring_metrics.py | 22 +++-- analytical/tests/test_tag_uservoice.py | 2 +- analytical/tests/test_tag_woopra.py | 38 +++++---- analytical/tests/test_tag_yandex_metrica.py | 2 - analytical/tests/test_utils.py | 11 ++- docs/conf.py | 2 +- setup.py | 14 ++-- tox.ini | 28 ++++++- 42 files changed, 393 insertions(+), 336 deletions(-) diff --git a/.travis.yml b/.travis.yml index 989706d..be4166b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,27 @@ language: python -python: "3.5" +python: + - 2.7 + - 3.3 + - 3.4 + - 3.5 +# - 3.6 +env: + - DJANGO=1.7 + - DJANGO=1.8 + - DJANGO=1.9 +# - DJANGO=1.10 +# - DJANGO=1.11 +matrix: + exclude: + - python: 3.5 + env: DJANGO=1.7 + - python: 3.3 + env: DJANGO=1.9 + include: + - python: 2.7 + env: TOXENV=flake8 + install: - # continue to support Python 3.2 (see issue #84) - - pip install "virtualenv<14.0.0" - - pip install coveralls tox + - pip install tox-travis script: - tox -env: - # NOTE: To generate (update) the env list run - # $ tox -l | sort | xargs -I ITEM echo " - TOXENV="ITEM - - TOXENV=py27-django17 - - TOXENV=py27-django18 - - TOXENV=py27-django19 - - TOXENV=py32-django17 - - TOXENV=py32-django18 - - TOXENV=py33-django17 - - TOXENV=py33-django18 - - TOXENV=py34-django17 - - TOXENV=py34-django18 - - TOXENV=py34-django19 - - TOXENV=py35-django18 - - TOXENV=py35-django19 diff --git a/README.rst b/README.rst index 5ce9748..3fd5d4b 100644 --- a/README.rst +++ b/README.rst @@ -1,7 +1,7 @@ django-analytical |latest-version| ================================== -|travis-ci| |coveralls| |health| |python-support| |downloads| |license| |gitter| +|travis-ci| |coveralls| |health| |python-support| |license| |gitter| The django-analytical application integrates analytics services into a Django_ project. @@ -26,7 +26,7 @@ an asynchronous version of the Javascript code if possible. .. |latest-version| image:: https://img.shields.io/pypi/v/django-analytical.svg :alt: Latest version on PyPI :target: https://pypi.python.org/pypi/django-analytical -.. |travis-ci| image:: https://travis-ci.org/jcassee/django-analytical.svg +.. |travis-ci| image:: https://img.shields.io/travis/jcassee/django-analytical/master.svg :alt: Build status :target: https://travis-ci.org/jcassee/django-analytical .. |coveralls| image:: https://coveralls.io/repos/jcassee/django-analytical/badge.svg @@ -38,9 +38,6 @@ an asynchronous version of the Javascript code if possible. .. |python-support| image:: https://img.shields.io/pypi/pyversions/django-analytical.svg :target: https://pypi.python.org/pypi/django-analytical :alt: Python versions -.. |downloads| image:: https://img.shields.io/pypi/dm/django-analytical.svg - :alt: Monthly downloads from PyPI - :target: https://pypi.python.org/pypi/django-analytical .. |license| image:: https://img.shields.io/pypi/l/django-analytical.svg :alt: Software license :target: https://github.com/jcassee/django-analytical/blob/master/LICENSE.txt diff --git a/analytical/templatetags/chartbeat.py b/analytical/templatetags/chartbeat.py index 3b0e7d8..6168c13 100644 --- a/analytical/templatetags/chartbeat.py +++ b/analytical/templatetags/chartbeat.py @@ -35,7 +35,7 @@ SETUP_CODE = """ loadChartbeat : function() { oldonload(); loadChartbeat(); }; })(); -""" +""" # noqa DOMAIN_CONTEXT_KEY = 'chartbeat_domain' @@ -80,7 +80,7 @@ def chartbeat_bottom(parser, token): class ChartbeatBottomNode(Node): def __init__(self): self.user_id = get_required_setting('CHARTBEAT_USER_ID', USER_ID_RE, - "must be (a string containing) a number") + "must be (a string containing) a number") def render(self, context): config = {'uid': self.user_id} diff --git a/analytical/templatetags/clicky.py b/analytical/templatetags/clicky.py index bee7f07..f493684 100644 --- a/analytical/templatetags/clicky.py +++ b/analytical/templatetags/clicky.py @@ -29,8 +29,7 @@ TRACKING_CODE = """ })(); -""" - +""" # noqa register = Library() @@ -52,8 +51,9 @@ def clicky(parser, token): class ClickyNode(Node): def __init__(self): - self.site_id = get_required_setting('CLICKY_SITE_ID', SITE_ID_RE, - "must be a (string containing) a number") + self.site_id = get_required_setting( + 'CLICKY_SITE_ID', SITE_ID_RE, + "must be a (string containing) a number") def render(self, context): custom = {} @@ -66,8 +66,10 @@ class ClickyNode(Node): if identity is not None: custom.setdefault('session', {})['username'] = identity - html = TRACKING_CODE % {'site_id': self.site_id, - 'custom': json.dumps(custom, sort_keys=True)} + html = TRACKING_CODE % { + 'site_id': self.site_id, + 'custom': json.dumps(custom, sort_keys=True), + } if is_internal_ip(context, 'CLICKY'): html = disable_html(html, 'Clicky') return html diff --git a/analytical/templatetags/google_analytics.py b/analytical/templatetags/google_analytics.py index 4297c31..d7e7768 100644 --- a/analytical/templatetags/google_analytics.py +++ b/analytical/templatetags/google_analytics.py @@ -91,10 +91,12 @@ class GoogleAnalyticsNode(Node): source = DISPLAY_ADVERTISING_SOURCE else: source = DEFAULT_SOURCE - html = SETUP_CODE % {'property_id': self.property_id, - 'commands': " ".join(commands), - 'source_scheme': source[0], - 'source_url': source[1]} + html = SETUP_CODE % { + 'property_id': self.property_id, + 'commands': " ".join(commands), + 'source_scheme': source[0], + 'source_url': source[1], + } if is_internal_ip(context, 'GOOGLE_ANALYTICS'): html = disable_html(html, 'Google Analytics') return html @@ -109,8 +111,7 @@ class GoogleAnalyticsNode(Node): domain = get_domain(context, 'google_analytics') if domain is None: raise AnalyticalException( - "tracking multiple domains with Google Analytics" - " requires a domain name") + "tracking multiple domains with Google Analytics requires a domain name") commands.append(DOMAIN_CODE % domain) commands.append(NO_ALLOW_HASH_CODE) if tracking_type == TRACK_MULTIPLE_DOMAINS: @@ -157,7 +158,8 @@ class GoogleAnalyticsNode(Node): if siteSpeedSampleRate is not False: value = decimal.Decimal(siteSpeedSampleRate) if not 0 <= value <= 100: - raise AnalyticalException("'GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE' must be >= 0 and <= 100") + raise AnalyticalException( + "'GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE' must be >= 0 and <= 100") commands.append(SITE_SPEED_SAMPLE_RATE_CODE % value.quantize(TWOPLACES)) sessionCookieTimeout = getattr(settings, 'GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT', False) diff --git a/analytical/templatetags/gosquared.py b/analytical/templatetags/gosquared.py index 72edf6c..a42267e 100644 --- a/analytical/templatetags/gosquared.py +++ b/analytical/templatetags/gosquared.py @@ -26,7 +26,7 @@ TRACKING_CODE = """ w.addEventListener?w.addEventListener("load",gs,false):w.attachEvent("onload",gs); })(window); -""" +""" # noqa TOKEN_CODE = 'GoSquared.acct = "%s";' IDENTIFY_CODE = 'GoSquared.UserName = "%s";' diff --git a/analytical/templatetags/hubspot.py b/analytical/templatetags/hubspot.py index 5b6824d..fc011e3 100644 --- a/analytical/templatetags/hubspot.py +++ b/analytical/templatetags/hubspot.py @@ -23,7 +23,7 @@ TRACKING_CODE = """ })(document,"script","hs-analytics",300000); -""" +""" # noqa register = Library() @@ -44,8 +44,8 @@ def hubspot(parser, token): class HubSpotNode(Node): def __init__(self): - self.portal_id = get_required_setting('HUBSPOT_PORTAL_ID', - PORTAL_ID_RE, "must be a (string containing a) number") + self.portal_id = get_required_setting('HUBSPOT_PORTAL_ID', PORTAL_ID_RE, + "must be a (string containing a) number") def render(self, context): html = TRACKING_CODE % {'portal_id': self.portal_id} diff --git a/analytical/templatetags/intercom.py b/analytical/templatetags/intercom.py index 66aeffa..96a8dbe 100644 --- a/analytical/templatetags/intercom.py +++ b/analytical/templatetags/intercom.py @@ -18,7 +18,7 @@ TRACKING_CODE = """ window.intercomSettings = %(settings_json)s; -""" +""" # noqa register = Library() diff --git a/analytical/templatetags/kiss_insights.py b/analytical/templatetags/kiss_insights.py index 17c70a6..8381eb3 100644 --- a/analytical/templatetags/kiss_insights.py +++ b/analytical/templatetags/kiss_insights.py @@ -16,7 +16,7 @@ SITE_CODE_RE = re.compile(r'^[\w]+$') SETUP_CODE = """ -""" +""" # noqa IDENTIFY_CODE = "_kiq.push(['identify', '%s']);" SHOW_SURVEY_CODE = "_kiq.push(['showSurvey', %s]);" SHOW_SURVEY_CONTEXT_KEY = 'kiss_insights_show_survey' @@ -44,10 +44,11 @@ def kiss_insights(parser, token): class KissInsightsNode(Node): def __init__(self): self.account_number = get_required_setting( - 'KISS_INSIGHTS_ACCOUNT_NUMBER', ACCOUNT_NUMBER_RE, - "must be (a string containing) a number") - self.site_code = get_required_setting('KISS_INSIGHTS_SITE_CODE', - SITE_CODE_RE, "must be a string containing three characters") + 'KISS_INSIGHTS_ACCOUNT_NUMBER', ACCOUNT_NUMBER_RE, + "must be (a string containing) a number") + self.site_code = get_required_setting( + 'KISS_INSIGHTS_SITE_CODE', SITE_CODE_RE, + "must be a string containing three characters") def render(self, context): commands = [] @@ -55,12 +56,14 @@ class KissInsightsNode(Node): if identity is not None: commands.append(IDENTIFY_CODE % identity) try: - commands.append(SHOW_SURVEY_CODE - % context[SHOW_SURVEY_CONTEXT_KEY]) + commands.append(SHOW_SURVEY_CODE % context[SHOW_SURVEY_CONTEXT_KEY]) except KeyError: pass - html = SETUP_CODE % {'account_number': self.account_number, - 'site_code': self.site_code, 'commands': " ".join(commands)} + html = SETUP_CODE % { + 'account_number': self.account_number, + 'site_code': self.site_code, + 'commands': " ".join(commands), + } return html diff --git a/analytical/templatetags/kiss_metrics.py b/analytical/templatetags/kiss_metrics.py index 4288b1b..4706dbd 100644 --- a/analytical/templatetags/kiss_metrics.py +++ b/analytical/templatetags/kiss_metrics.py @@ -61,9 +61,9 @@ def kiss_metrics(parser, token): class KissMetricsNode(Node): def __init__(self): - self.api_key = get_required_setting('KISS_METRICS_API_KEY', - API_KEY_RE, - "must be a string containing a 40-digit hexadecimal number") + self.api_key = get_required_setting( + 'KISS_METRICS_API_KEY', API_KEY_RE, + "must be a string containing a 40-digit hexadecimal number") def render(self, context): commands = [] @@ -78,18 +78,23 @@ class KissMetricsNode(Node): pass try: name, properties = context[EVENT_CONTEXT_KEY] - commands.append(EVENT_CODE % {'name': name, - 'properties': json.dumps(properties, sort_keys=True)}) + commands.append(EVENT_CODE % { + 'name': name, + 'properties': json.dumps(properties, sort_keys=True), + }) except KeyError: pass try: properties = context[PROPERTY_CONTEXT_KEY] commands.append(PROPERTY_CODE % { - 'properties': json.dumps(properties, sort_keys=True)}) + 'properties': json.dumps(properties, sort_keys=True), + }) except KeyError: pass - html = TRACKING_CODE % {'api_key': self.api_key, - 'commands': " ".join(commands)} + html = TRACKING_CODE % { + 'api_key': self.api_key, + 'commands': " ".join(commands), + } if is_internal_ip(context, 'KISS_METRICS'): html = disable_html(html, 'KISSmetrics') return html diff --git a/analytical/templatetags/mixpanel.py b/analytical/templatetags/mixpanel.py index 0490f76..caab030 100644 --- a/analytical/templatetags/mixpanel.py +++ b/analytical/templatetags/mixpanel.py @@ -22,7 +22,7 @@ e,d])};b.__SV=1.2}})(document,window.mixpanel||[]); mixpanel.init('%(token)s'); %(commands)s -""" +""" # noqa IDENTIFY_CODE = "mixpanel.identify('%s');" IDENTIFY_PROPERTIES = "mixpanel.people.set(%s);" EVENT_CODE = "mixpanel.track('%(name)s', %(properties)s);" @@ -62,12 +62,16 @@ class MixpanelNode(Node): commands.append(IDENTIFY_CODE % identity) try: name, properties = context[EVENT_CONTEXT_KEY] - commands.append(EVENT_CODE % {'name': name, - 'properties': json.dumps(properties, sort_keys=True)}) + commands.append(EVENT_CODE % { + 'name': name, + 'properties': json.dumps(properties, sort_keys=True), + }) except KeyError: pass - html = TRACKING_CODE % {'token': self._token, - 'commands': " ".join(commands)} + html = TRACKING_CODE % { + 'token': self._token, + 'commands': " ".join(commands), + } if is_internal_ip(context, 'MIXPANEL'): html = disable_html(html, 'Mixpanel') return mark_safe(html) diff --git a/analytical/templatetags/olark.py b/analytical/templatetags/olark.py index 1d3a327..2b85648 100644 --- a/analytical/templatetags/olark.py +++ b/analytical/templatetags/olark.py @@ -18,7 +18,7 @@ SETUP_CODE = """ /*{literal}{/literal}*/ %(extra_code)s -""" +""" # noqa NICKNAME_CODE = "olark('api.chat.updateVisitorNickname', {snippet: '%s'});" NICKNAME_CONTEXT_KEY = 'olark_nickname' FULLNAME_CODE = "olark('api.visitor.updateFullName', {{fullName: '{0}'}});" @@ -28,14 +28,16 @@ EMAIL_CONTEXT_KEY = 'olark_email' STATUS_CODE = "olark('api.chat.updateVisitorStatus', {snippet: %s});" STATUS_CONTEXT_KEY = 'olark_status' MESSAGE_CODE = "olark.configure('locale.%(key)s', \"%(msg)s\");" -MESSAGE_KEYS = set(["welcome_title", "chatting_title", "unavailable_title", - "busy_title", "away_message", "loading_title", "welcome_message", - "busy_message", "chat_input_text", "name_input_text", - "email_input_text", "offline_note_message", "send_button_text", - "offline_note_thankyou_text", "offline_note_error_text", - "offline_note_sending_text", "operator_is_typing_text", - "operator_has_stopped_typing_text", "introduction_error_text", - "introduction_messages", "introduction_submit_button_text"]) +MESSAGE_KEYS = { + "welcome_title", "chatting_title", "unavailable_title", + "busy_title", "away_message", "loading_title", "welcome_message", + "busy_message", "chat_input_text", "name_input_text", + "email_input_text", "offline_note_message", "send_button_text", + "offline_note_thankyou_text", "offline_note_error_text", + "offline_note_sending_text", "operator_is_typing_text", + "operator_has_stopped_typing_text", "introduction_error_text", + "introduction_messages", "introduction_submit_button_text", +} register = Library() @@ -56,8 +58,9 @@ def olark(parser, token): class OlarkNode(Node): def __init__(self): - self.site_id = get_required_setting('OLARK_SITE_ID', SITE_ID_RE, - "must be a string looking like 'XXXX-XXX-XX-XXXX'") + self.site_id = get_required_setting( + 'OLARK_SITE_ID', SITE_ID_RE, + "must be a string looking like 'XXXX-XXX-XX-XXXX'") def render(self, context): extra_code = [] @@ -76,13 +79,15 @@ class OlarkNode(Node): except KeyError: pass try: - extra_code.append(STATUS_CODE % - json.dumps(context[STATUS_CONTEXT_KEY], sort_keys=True)) + extra_code.append(STATUS_CODE % json.dumps(context[STATUS_CONTEXT_KEY], + sort_keys=True)) except KeyError: pass extra_code.extend(self._get_configuration(context)) - html = SETUP_CODE % {'site_id': self.site_id, - 'extra_code': " ".join(extra_code)} + html = SETUP_CODE % { + 'site_id': self.site_id, + 'extra_code': " ".join(extra_code), + } return html def _get_nickname(self, user): diff --git a/analytical/templatetags/performable.py b/analytical/templatetags/performable.py index 847f9c9..3364e18 100644 --- a/analytical/templatetags/performable.py +++ b/analytical/templatetags/performable.py @@ -16,7 +16,7 @@ from analytical.utils import is_internal_ip, disable_html, get_identity, \ API_KEY_RE = re.compile(r'^\w+$') SETUP_CODE = """ -""" +""" # noqa IDENTIFY_CODE = """ -""" +""" # noqa register = Library() @@ -54,8 +54,9 @@ def performable(parser, token): class PerformableNode(Node): def __init__(self): - self.api_key = get_required_setting('PERFORMABLE_API_KEY', API_KEY_RE, - "must be a string looking like 'XXXXX'") + self.api_key = get_required_setting( + 'PERFORMABLE_API_KEY', API_KEY_RE, + "must be a string looking like 'XXXXX'") def render(self, context): html = SETUP_CODE % {'api_key': self.api_key} @@ -72,7 +73,10 @@ def performable_embed(hostname, page_id): """ Include a Performable landing page. """ - return mark_safe(EMBED_CODE % {'hostname': hostname, 'page_id': page_id}) + return mark_safe(EMBED_CODE % { + 'hostname': hostname, + 'page_id': page_id, + }) def contribute_to_analytical(add_node): diff --git a/analytical/templatetags/rating_mailru.py b/analytical/templatetags/rating_mailru.py index d495824..ba1da7e 100644 --- a/analytical/templatetags/rating_mailru.py +++ b/analytical/templatetags/rating_mailru.py @@ -4,10 +4,8 @@ Rating@Mail.ru template tags and filters. from __future__ import absolute_import -import json import re -from django.conf import settings from django.template import Library, Node, TemplateSyntaxError from analytical.utils import is_internal_ip, disable_html, \ @@ -30,7 +28,7 @@ COUNTER_CODE = """ -""" +""" # noqa register = Library() @@ -54,8 +52,8 @@ def rating_mailru(parser, token): class RatingMailruNode(Node): def __init__(self): self.counter_id = get_required_setting( - 'RATING_MAILRU_COUNTER_ID', COUNTER_ID_RE, - "must be (a string containing) a number'") + 'RATING_MAILRU_COUNTER_ID', COUNTER_ID_RE, + "must be (a string containing) a number'") def render(self, context): html = COUNTER_CODE % { diff --git a/analytical/templatetags/snapengage.py b/analytical/templatetags/snapengage.py index 57134c3..5881a50 100644 --- a/analytical/templatetags/snapengage.py +++ b/analytical/templatetags/snapengage.py @@ -12,7 +12,6 @@ from django.utils import translation from analytical.utils import get_identity, get_required_setting - BUTTON_LOCATION_LEFT = 0 BUTTON_LOCATION_RIGHT = 1 BUTTON_LOCATION_TOP = 2 @@ -33,7 +32,7 @@ SETUP_CODE = """ document.write(unescape("%%3Cscript src='" + ((document.location.protocol=="https:")?"https://snapabug.appspot.com":"http://www.snapengage.com") + "/snapabug.js' type='text/javascript'%%3E%%3C/script%%3E")); -""" +""" # noqa DOMAIN_CODE = 'SnapABug.setDomain("%s");' SECURE_CONNECTION_CODE = 'SnapABug.setSecureConnexion();' INIT_CODE = 'SnapABug.init("%s");' @@ -69,21 +68,22 @@ def snapengage(parser, token): class SnapEngageNode(Node): def __init__(self): - self.widget_id = get_required_setting('SNAPENGAGE_WIDGET_ID', - WIDGET_ID_RE, "must be a string looking like this: " - "'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'") + self.widget_id = get_required_setting( + 'SNAPENGAGE_WIDGET_ID', WIDGET_ID_RE, + "must be a string looking like this: 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'") def render(self, context): settings_code = [] domain = self._get_setting(context, 'snapengage_domain', - 'SNAPENGAGE_DOMAIN') + 'SNAPENGAGE_DOMAIN') if domain is not None: settings_code.append(DOMAIN_CODE % domain) secure_connection = self._get_setting(context, - 'snapengage_secure_connection', 'SNAPENGAGE_SECURE_CONNECTION', - False) + 'snapengage_secure_connection', + 'SNAPENGAGE_SECURE_CONNECTION', + False) if secure_connection: settings_code.append(SECURE_CONNECTION_CODE) @@ -92,41 +92,42 @@ class SnapEngageNode(Node): email = get_identity(context, 'snapengage', lambda u: u.email) if email is not None: if self._get_setting(context, 'snapengage_readonly_email', - 'SNAPENGAGE_READONLY_EMAIL', False): + 'SNAPENGAGE_READONLY_EMAIL', False): readonly_tail = ',true' else: readonly_tail = '' settings_code.append(SETEMAIL_CODE % (email, readonly_tail)) locale = self._get_setting(context, 'snapengage_locale', - 'SNAPENGAGE_LOCALE') + 'SNAPENGAGE_LOCALE') if locale is None: locale = translation.to_locale(translation.get_language()) settings_code.append(SETLOCALE_CODE % locale) form_position = self._get_setting(context, - 'snapengage_form_position', 'SNAPENGAGE_FORM_POSITION') + 'snapengage_form_position', 'SNAPENGAGE_FORM_POSITION') if form_position is not None: settings_code.append(FORM_POSITION_CODE % form_position) form_top_position = self._get_setting(context, - 'snapengage_form_top_position', 'SNAPENGAGE_FORM_TOP_POSITION') + 'snapengage_form_top_position', + 'SNAPENGAGE_FORM_TOP_POSITION') if form_top_position is not None: settings_code.append(FORM_TOP_POSITION_CODE % form_top_position) show_offline = self._get_setting(context, 'snapengage_show_offline', - 'SNAPENGAGE_SHOW_OFFLINE', True) + 'SNAPENGAGE_SHOW_OFFLINE', True) if not show_offline: settings_code.append(DISABLE_OFFLINE_CODE) screenshots = self._get_setting(context, 'snapengage_screenshots', - 'SNAPENGAGE_SCREENSHOTS', True) + 'SNAPENGAGE_SCREENSHOTS', True) if not screenshots: settings_code.append(DISABLE_SCREENSHOT_CODE) offline_screenshots = self._get_setting(context, - 'snapengage_offline_screenshots', - 'SNAPENGAGE_OFFLINE_SCREENSHOTS', True) + 'snapengage_offline_screenshots', + 'SNAPENGAGE_OFFLINE_SCREENSHOTS', True) if not offline_screenshots: settings_code.append(DISABLE_OFFLINE_SCREENSHOT_CODE) @@ -134,37 +135,41 @@ class SnapEngageNode(Node): settings_code.append(DISABLE_PROACTIVE_CHAT_CODE) sounds = self._get_setting(context, 'snapengage_sounds', - 'SNAPENGAGE_SOUNDS', True) + 'SNAPENGAGE_SOUNDS', True) if not sounds: settings_code.append(DISABLE_SOUNDS_CODE) button_effect = self._get_setting(context, 'snapengage_button_effect', - 'SNAPENGAGE_BUTTON_EFFECT') + 'SNAPENGAGE_BUTTON_EFFECT') if button_effect is not None: settings_code.append(BUTTONEFFECT_CODE % button_effect) button = self._get_setting(context, 'snapengage_button', - 'SNAPENGAGE_BUTTON', BUTTON_STYLE_DEFAULT) + 'SNAPENGAGE_BUTTON', BUTTON_STYLE_DEFAULT) if button == BUTTON_STYLE_NONE: settings_code.append(INIT_CODE % self.widget_id) else: if not isinstance(button, int): # Assume button as a URL to a custom image settings_code.append(SETBUTTON_CODE % button) - button_location = self._get_setting(context, - 'snapengage_button_location', 'SNAPENGAGE_BUTTON_LOCATION', - BUTTON_LOCATION_LEFT) - button_offset = self._get_setting(context, - 'snapengage_button_location_offset', - 'SNAPENGAGE_BUTTON_LOCATION_OFFSET', '55%') + button_location = self._get_setting( + context, + 'snapengage_button_location', 'SNAPENGAGE_BUTTON_LOCATION', + BUTTON_LOCATION_LEFT) + button_offset = self._get_setting( + context, + 'snapengage_button_location_offset', + 'SNAPENGAGE_BUTTON_LOCATION_OFFSET', '55%') settings_code.append(ADDBUTTON_CODE % { 'id': self.widget_id, 'location': button_location, 'offset': button_offset, 'dynamic_tail': ',true' if (button == BUTTON_STYLE_LIVE) else '', - }) - html = SETUP_CODE % {'widget_id': self.widget_id, - 'settings_code': " ".join(settings_code)} + }) + html = SETUP_CODE % { + 'widget_id': self.widget_id, + 'settings_code': " ".join(settings_code), + } return html def _get_setting(self, context, context_key, setting=None, default=None): diff --git a/analytical/templatetags/spring_metrics.py b/analytical/templatetags/spring_metrics.py index ed2f063..a3093ea 100644 --- a/analytical/templatetags/spring_metrics.py +++ b/analytical/templatetags/spring_metrics.py @@ -29,8 +29,7 @@ TRACKING_CODE = """ )(); %(custom_commands)s -""" - +""" # noqa register = Library() diff --git a/analytical/templatetags/uservoice.py b/analytical/templatetags/uservoice.py index d1ab6f7..68f59db 100644 --- a/analytical/templatetags/uservoice.py +++ b/analytical/templatetags/uservoice.py @@ -49,8 +49,8 @@ def uservoice(parser, token): class UserVoiceNode(Node): def __init__(self): - self.default_widget_key = get_required_setting('USERVOICE_WIDGET_KEY', - WIDGET_KEY_RE, "must be an alphanumeric string") + self.default_widget_key = get_required_setting( + 'USERVOICE_WIDGET_KEY', WIDGET_KEY_RE, "must be an alphanumeric string") def render(self, context): widget_key = context.get('uservoice_widget_key') diff --git a/analytical/templatetags/woopra.py b/analytical/templatetags/woopra.py index a18a71d..4c0124c 100644 --- a/analytical/templatetags/woopra.py +++ b/analytical/templatetags/woopra.py @@ -28,7 +28,7 @@ TRACKING_CODE = """ woopra.identify(woo_visitor); woopra.track(); -""" +""" # noqa register = Library() diff --git a/analytical/templatetags/yandex_metrica.py b/analytical/templatetags/yandex_metrica.py index e2ec20b..4e3270f 100644 --- a/analytical/templatetags/yandex_metrica.py +++ b/analytical/templatetags/yandex_metrica.py @@ -37,7 +37,7 @@ COUNTER_CODE = """ })(document, window, "yandex_metrika_callbacks"); -""" +""" # noqa register = Library() diff --git a/analytical/tests/templatetags/dummy.py b/analytical/tests/templatetags/dummy.py index 40d9781..f92bc98 100644 --- a/analytical/tests/templatetags/dummy.py +++ b/analytical/tests/templatetags/dummy.py @@ -18,6 +18,7 @@ def _location_node(location): return "" % location return DummyNode + _location_nodes = dict((l, _location_node(l)) for l in TAG_LOCATIONS) @@ -29,6 +30,7 @@ def _location_tag(location): return _location_nodes[location] return dummy_tag + for loc in TAG_LOCATIONS: register.tag('dummy_%s' % loc, _location_tag(loc)) diff --git a/analytical/tests/test_tag_analytical.py b/analytical/tests/test_tag_analytical.py index 8439197..e4e47a8 100644 --- a/analytical/tests/test_tag_analytical.py +++ b/analytical/tests/test_tag_analytical.py @@ -27,8 +27,7 @@ class AnalyticsTagTestCase(TagTestCase): def render_location_tag(self, location, vars=None): if vars is None: vars = {} - t = Template("{%% load analytical %%}{%% analytical_%s %%}" - % location) + t = Template("{%% load analytical %%}{%% analytical_%s %%}" % location) return t.render(Context(vars)) def test_location_tags(self): diff --git a/analytical/tests/test_tag_chartbeat.py b/analytical/tests/test_tag_chartbeat.py index 322fbd6..67ebd10 100644 --- a/analytical/tests/test_tag_chartbeat.py +++ b/analytical/tests/test_tag_chartbeat.py @@ -39,10 +39,8 @@ class ChartbeatTagTestCaseWithSites(TestCase): site = Site.objects.create(domain="test.com", name="test") with override_settings(SITE_ID=site.id): r = ChartbeatBottomNode().render(Context()) - self.assertTrue(re.search( - 'var _sf_async_config={.*"uid": "12345".*};', r), r) - self.assertTrue(re.search( - 'var _sf_async_config={.*"domain": "test.com".*};', r), r) + self.assertTrue(re.search('var _sf_async_config={.*"uid": "12345".*};', r), r) + self.assertTrue(re.search('var _sf_async_config={.*"domain": "test.com".*};', r), r) @override_settings(CHARTBEAT_AUTO_DOMAIN=False) def test_auto_domain_false(self): @@ -62,30 +60,26 @@ class ChartbeatTagTestCase(TagTestCase): """ def test_top_tag(self): - r = self.render_tag('chartbeat', 'chartbeat_top', - {'chartbeat_domain': "test.com"}) + r = self.render_tag('chartbeat', 'chartbeat_top', {'chartbeat_domain': "test.com"}) self.assertTrue('var _sf_startpt=(new Date()).getTime()' in r, r) def test_bottom_tag(self): - r = self.render_tag('chartbeat', 'chartbeat_bottom', - {'chartbeat_domain': "test.com"}) - self.assertTrue(re.search( - 'var _sf_async_config={.*"uid": "12345".*};', r), r) - self.assertTrue(re.search( - 'var _sf_async_config={.*"domain": "test.com".*};', r), r) + r = self.render_tag('chartbeat', 'chartbeat_bottom', {'chartbeat_domain': "test.com"}) + self.assertTrue(re.search('var _sf_async_config={.*"uid": "12345".*};', r), r) + self.assertTrue(re.search('var _sf_async_config={.*"domain": "test.com".*};', r), r) def test_top_node(self): - r = ChartbeatTopNode().render( - Context({'chartbeat_domain': "test.com"})) + r = ChartbeatTopNode().render(Context({ + 'chartbeat_domain': "test.com", + })) self.assertTrue('var _sf_startpt=(new Date()).getTime()' in r, r) def test_bottom_node(self): - r = ChartbeatBottomNode().render( - Context({'chartbeat_domain': "test.com"})) - self.assertTrue(re.search( - 'var _sf_async_config={.*"uid": "12345".*};', r), r) - self.assertTrue(re.search( - 'var _sf_async_config={.*"domain": "test.com".*};', r), r) + r = ChartbeatBottomNode().render(Context({ + 'chartbeat_domain': "test.com", + })) + self.assertTrue(re.search('var _sf_async_config={.*"uid": "12345".*};', r), r) + self.assertTrue(re.search('var _sf_async_config={.*"domain": "test.com".*};', r), r) @override_settings(CHARTBEAT_USER_ID=None) def test_no_user_id(self): diff --git a/analytical/tests/test_tag_clicky.py b/analytical/tests/test_tag_clicky.py index a2b3876..b2f2731 100644 --- a/analytical/tests/test_tag_clicky.py +++ b/analytical/tests/test_tag_clicky.py @@ -23,14 +23,12 @@ class ClickyTagTestCase(TagTestCase): def test_tag(self): r = self.render_tag('clicky', 'clicky') self.assertTrue('clicky_site_ids.push(12345678);' in r, r) - self.assertTrue('src="//in.getclicky.com/12345678ns.gif"' in r, - r) + self.assertTrue('src="//in.getclicky.com/12345678ns.gif"' in r, r) def test_node(self): r = ClickyNode().render(Context({})) self.assertTrue('clicky_site_ids.push(12345678);' in r, r) - self.assertTrue('src="//in.getclicky.com/12345678ns.gif"' in r, - r) + self.assertTrue('src="//in.getclicky.com/12345678ns.gif"' in r, r) @override_settings(CLICKY_SITE_ID=None) def test_no_site_id(self): @@ -43,9 +41,7 @@ class ClickyTagTestCase(TagTestCase): @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): r = ClickyNode().render(Context({'user': User(username='test')})) - self.assertTrue( - 'var clicky_custom = {"session": {"username": "test"}};' in r, - r) + self.assertTrue('var clicky_custom = {"session": {"username": "test"}};' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify_anonymous_user(self): @@ -53,10 +49,13 @@ class ClickyTagTestCase(TagTestCase): self.assertFalse('var clicky_custom = {"session": {"username":' in r, r) def test_custom(self): - r = ClickyNode().render(Context({'clicky_var1': 'val1', - 'clicky_var2': 'val2'})) - self.assertTrue(re.search('var clicky_custom = {.*' - '"var1": "val1", "var2": "val2".*};', r), r) + r = ClickyNode().render(Context({ + 'clicky_var1': 'val1', + 'clicky_var2': 'val2', + })) + self.assertTrue( + re.search(r'var clicky_custom = {.*"var1": "val1", "var2": "val2".*};', r), + r) @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): diff --git a/analytical/tests/test_tag_gauges.py b/analytical/tests/test_tag_gauges.py index a995a0c..8d80b80 100644 --- a/analytical/tests/test_tag_gauges.py +++ b/analytical/tests/test_tag_gauges.py @@ -32,8 +32,7 @@ class GaugesTagTestCase(TagTestCase): s.parentNode.insertBefore(t, s); })(); -""", - self.render_tag('gauges', 'gauges')) +""", self.render_tag('gauges', 'gauges')) def test_node(self): self.assertEqual( @@ -51,8 +50,7 @@ class GaugesTagTestCase(TagTestCase): s.parentNode.insertBefore(t, s); })(); -""", - GaugesNode().render(Context())) +""", GaugesNode().render(Context())) @override_settings(GAUGES_SITE_ID=None) def test_no_account_number(self): diff --git a/analytical/tests/test_tag_google_analytics.py b/analytical/tests/test_tag_google_analytics.py index 76e03ba..305e8de 100644 --- a/analytical/tests/test_tag_google_analytics.py +++ b/analytical/tests/test_tag_google_analytics.py @@ -14,7 +14,7 @@ from analytical.utils import AnalyticalException @override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7', - GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN) + GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_SINGLE_DOMAIN) class GoogleAnalyticsTagTestCase(TagTestCase): """ Tests for the ``google_analytics`` template tag. @@ -38,16 +38,15 @@ class GoogleAnalyticsTagTestCase(TagTestCase): def test_wrong_property_id(self): self.assertRaises(AnalyticalException, GoogleAnalyticsNode) - @override_settings( - GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS, - GOOGLE_ANALYTICS_DOMAIN='example.com') + @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_SUBDOMAINS, + GOOGLE_ANALYTICS_DOMAIN='example.com') def test_track_multiple_subdomains(self): r = GoogleAnalyticsNode().render(Context()) self.assertTrue("_gaq.push(['_setDomainName', 'example.com']);" in r, r) self.assertTrue("_gaq.push(['_setAllowHash', false]);" in r, r) @override_settings(GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS, - GOOGLE_ANALYTICS_DOMAIN='example.com') + GOOGLE_ANALYTICS_DOMAIN='example.com') def test_track_multiple_domains(self): r = GoogleAnalyticsNode().render(Context()) self.assertTrue("_gaq.push(['_setDomainName', 'example.com']);" in r, r) @@ -62,14 +61,10 @@ class GoogleAnalyticsTagTestCase(TagTestCase): 'google_analytics_var5': ('test5', 'qux', SCOPE_PAGE), }) r = GoogleAnalyticsNode().render(context) - self.assertTrue("_gaq.push(['_setCustomVar', 1, 'test1', 'foo', 3]);" - in r, r) - self.assertTrue("_gaq.push(['_setCustomVar', 2, 'test2', 'bar', 1]);" - in r, r) - self.assertTrue("_gaq.push(['_setCustomVar', 4, 'test4', 'baz', 2]);" - in r, r) - self.assertTrue("_gaq.push(['_setCustomVar', 5, 'test5', 'qux', 3]);" - in r, r) + self.assertTrue("_gaq.push(['_setCustomVar', 1, 'test1', 'foo', 3]);" in r, r) + self.assertTrue("_gaq.push(['_setCustomVar', 2, 'test2', 'bar', 1]);" in r, r) + self.assertTrue("_gaq.push(['_setCustomVar', 4, 'test4', 'baz', 2]);" in r, r) + self.assertTrue("_gaq.push(['_setCustomVar', 5, 'test5', 'qux', 3]);" in r, r) @override_settings(GOOGLE_ANALYTICS_SITE_SPEED=True) def test_track_page_load_time(self): @@ -117,14 +112,12 @@ class GoogleAnalyticsTagTestCase(TagTestCase): @override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE=-1) def test_exception_whenset_sample_rate_too_small(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) @override_settings(GOOGLE_ANALYTICS_SAMPLE_RATE=101) def test_exception_when_set_sample_rate_too_large(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=0.0) def test_set_site_speed_sample_rate_min(self): @@ -139,14 +132,12 @@ class GoogleAnalyticsTagTestCase(TagTestCase): @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=-1) def test_exception_whenset_site_speed_sample_rate_too_small(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) @override_settings(GOOGLE_ANALYTICS_SITE_SPEED_SAMPLE_RATE=101) def test_exception_when_set_site_speed_sample_rate_too_large(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) @override_settings(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT=0) def test_set_session_cookie_timeout_min(self): @@ -161,8 +152,7 @@ class GoogleAnalyticsTagTestCase(TagTestCase): @override_settings(GOOGLE_ANALYTICS_SESSION_COOKIE_TIMEOUT=-1) def test_exception_when_set_session_cookie_timeout_too_small(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) @override_settings(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT=0) def test_set_visitor_cookie_timeout_min(self): @@ -177,16 +167,14 @@ class GoogleAnalyticsTagTestCase(TagTestCase): @override_settings(GOOGLE_ANALYTICS_VISITOR_COOKIE_TIMEOUT=-1) def test_exception_when_set_visitor_cookie_timeout_too_small(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) @override_settings(GOOGLE_ANALYTICS_PROPERTY_ID='UA-123456-7', - GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS, - GOOGLE_ANALYTICS_DOMAIN=None, - ANALYTICAL_DOMAIN=None) + GOOGLE_ANALYTICS_TRACKING_STYLE=TRACK_MULTIPLE_DOMAINS, + GOOGLE_ANALYTICS_DOMAIN=None, + ANALYTICAL_DOMAIN=None) class NoDomainTestCase(TestCase): def test_exception_without_domain(self): context = Context() - self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, - context) + self.assertRaises(AnalyticalException, GoogleAnalyticsNode().render, context) diff --git a/analytical/tests/test_tag_gosquared.py b/analytical/tests/test_tag_gosquared.py index 9b946c0..844205c 100644 --- a/analytical/tests/test_tag_gosquared.py +++ b/analytical/tests/test_tag_gosquared.py @@ -36,8 +36,9 @@ class GoSquaredTagTestCase(TagTestCase): @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_auto_identify(self): - r = GoSquaredNode().render(Context({'user': User(username='test', - first_name='Test', last_name='User')})) + r = GoSquaredNode().render(Context({ + 'user': User(username='test', first_name='Test', last_name='User'), + })) self.assertTrue('GoSquared.UserName = "Test User";' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) diff --git a/analytical/tests/test_tag_hubspot.py b/analytical/tests/test_tag_hubspot.py index f7c7a0e..ee9d2ff 100644 --- a/analytical/tests/test_tag_hubspot.py +++ b/analytical/tests/test_tag_hubspot.py @@ -19,13 +19,13 @@ class HubSpotTagTestCase(TagTestCase): def test_tag(self): r = self.render_tag('hubspot', 'hubspot') - self.assertTrue("n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/1234.js';" - in r, r) + self.assertTrue("n.id=i;n.src='//js.hs-analytics.net/analytics/'" + "+(Math.ceil(new Date()/r)*r)+'/1234.js';" in r, r) def test_node(self): r = HubSpotNode().render(Context()) - self.assertTrue("n.id=i;n.src='//js.hs-analytics.net/analytics/'+(Math.ceil(new Date()/r)*r)+'/1234.js';" - in r, r) + self.assertTrue("n.id=i;n.src='//js.hs-analytics.net/analytics/'" + "+(Math.ceil(new Date()/r)*r)+'/1234.js';" in r, r) @override_settings(HUBSPOT_PORTAL_ID=None) def test_no_portal_id(self): diff --git a/analytical/tests/test_tag_intercom.py b/analytical/tests/test_tag_intercom.py index 0fc44f1..586df6a 100644 --- a/analytical/tests/test_tag_intercom.py +++ b/analytical/tests/test_tag_intercom.py @@ -31,7 +31,7 @@ class IntercomTagTestCase(TagTestCase): first_name='Firstname', last_name='Lastname', email="test@example.com", - date_joined=now) + date_joined=now), })) # Because the json isn't predictably ordered, we can't just test the whole thing verbatim. self.assertEqual(""" @@ -39,7 +39,7 @@ class IntercomTagTestCase(TagTestCase): window.intercomSettings = {"app_id": "abc123xyz", "created_at": 1397074500, "email": "test@example.com", "name": "Firstname Lastname"}; -""", rendered_tag) +""", rendered_tag) # noqa @override_settings(INTERCOM_APP_ID=None) def test_no_account_number(self): @@ -51,13 +51,18 @@ class IntercomTagTestCase(TagTestCase): def test_identify_name_email_and_created_at(self): now = datetime.datetime(2014, 4, 9, 15, 15, 0) - r = IntercomNode().render(Context({'user': User(username='test', - first_name='Firstname', last_name='Lastname', - email="test@example.com", date_joined=now)})) - self.assertTrue( - """window.intercomSettings = {"app_id": "abc123xyz", "created_at": 1397074500, "email": "test@example.com", "name": "Firstname Lastname"};"""\ - in r - ) + r = IntercomNode().render(Context({ + 'user': User( + username='test', + first_name='Firstname', + last_name='Lastname', + email="test@example.com", + date_joined=now), + })) + self.assertTrue('window.intercomSettings = {' + '"app_id": "abc123xyz", "created_at": 1397074500, ' + '"email": "test@example.com", "name": "Firstname Lastname"' + '};' in r) def test_custom(self): r = IntercomNode().render(Context({ @@ -68,10 +73,11 @@ class IntercomTagTestCase(TagTestCase): def test_identify_name_and_email(self): r = IntercomNode().render(Context({ - 'user': User(username='test', - first_name='Firstname', - last_name='Lastname', - email="test@example.com") + 'user': User( + username='test', + first_name='Firstname', + last_name='Lastname', + email="test@example.com"), })) self.assertTrue('"email": "test@example.com", "name": "Firstname Lastname"' in r) @@ -80,13 +86,17 @@ class IntercomTagTestCase(TagTestCase): self.assertTrue('"name": "test"' in r, r) def test_no_identify_when_explicit_name(self): - r = IntercomNode().render(Context({'intercom_name': 'explicit', - 'user': User(username='implicit')})) + r = IntercomNode().render(Context({ + 'intercom_name': 'explicit', + 'user': User(username='implicit'), + })) self.assertTrue('"name": "explicit"' in r, r) def test_no_identify_when_explicit_email(self): - r = IntercomNode().render(Context({'intercom_email': 'explicit', - 'user': User(username='implicit')})) + r = IntercomNode().render(Context({ + 'intercom_email': 'explicit', + 'user': User(username='implicit'), + })) self.assertTrue('"email": "explicit"' in r, r) def test_disable_for_anonymous_users(self): diff --git a/analytical/tests/test_tag_kiss_insights.py b/analytical/tests/test_tag_kiss_insights.py index ea58250..ffbba16 100644 --- a/analytical/tests/test_tag_kiss_insights.py +++ b/analytical/tests/test_tag_kiss_insights.py @@ -11,8 +11,7 @@ from analytical.tests.utils import TagTestCase from analytical.utils import AnalyticalException -@override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER='12345', - KISS_INSIGHTS_SITE_CODE='abc') +@override_settings(KISS_INSIGHTS_ACCOUNT_NUMBER='12345', KISS_INSIGHTS_SITE_CODE='abc') class KissInsightsTagTestCase(TagTestCase): """ Tests for the ``kiss_insights`` template tag. @@ -53,6 +52,5 @@ class KissInsightsTagTestCase(TagTestCase): self.assertFalse("_kiq.push(['identify', " in r, r) def test_show_survey(self): - r = KissInsightsNode().render( - Context({'kiss_insights_show_survey': 1234})) + r = KissInsightsNode().render(Context({'kiss_insights_show_survey': 1234})) self.assertTrue("_kiq.push(['showSurvey', 1234]);" in r, r) diff --git a/analytical/tests/test_tag_kiss_metrics.py b/analytical/tests/test_tag_kiss_metrics.py index 9c2c19d..506b635 100644 --- a/analytical/tests/test_tag_kiss_metrics.py +++ b/analytical/tests/test_tag_kiss_metrics.py @@ -12,8 +12,7 @@ from analytical.tests.utils import TagTestCase from analytical.utils import AnalyticalException -@override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef' - '01234567') +@override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef01234567') class KissMetricsTagTestCase(TagTestCase): """ Tests for the ``kiss_metrics`` template tag. @@ -21,25 +20,23 @@ class KissMetricsTagTestCase(TagTestCase): def test_tag(self): r = self.render_tag('kiss_metrics', 'kiss_metrics') - self.assertTrue("//doug1izaerwt3.cloudfront.net/0123456789abcdef012345" - "6789abcdef01234567.1.js" in r, r) + self.assertTrue("//doug1izaerwt3.cloudfront.net/" + "0123456789abcdef0123456789abcdef01234567.1.js" in r, r) def test_node(self): r = KissMetricsNode().render(Context()) - self.assertTrue("//doug1izaerwt3.cloudfront.net/0123456789abcdef012345" - "6789abcdef01234567.1.js" in r, r) + self.assertTrue("//doug1izaerwt3.cloudfront.net/" + "0123456789abcdef0123456789abcdef01234567.1.js" in r, r) @override_settings(KISS_METRICS_API_KEY=None) def test_no_api_key(self): self.assertRaises(AnalyticalException, KissMetricsNode) - @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef' - '0123456') + @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef0123456') def test_api_key_too_short(self): self.assertRaises(AnalyticalException, KissMetricsNode) - @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef' - '012345678') + @override_settings(KISS_METRICS_API_KEY='0123456789abcdef0123456789abcdef012345678') def test_api_key_too_long(self): self.assertRaises(AnalyticalException, KissMetricsNode) @@ -54,20 +51,23 @@ class KissMetricsTagTestCase(TagTestCase): self.assertFalse("_kmq.push(['identify', " in r, r) def test_event(self): - r = KissMetricsNode().render(Context({'kiss_metrics_event': - ('test_event', {'prop1': 'val1', 'prop2': 'val2'})})) + r = KissMetricsNode().render(Context({ + 'kiss_metrics_event': ('test_event', {'prop1': 'val1', 'prop2': 'val2'}), + })) self.assertTrue("_kmq.push(['record', 'test_event', " - '{"prop1": "val1", "prop2": "val2"}]);' in r, r) + '{"prop1": "val1", "prop2": "val2"}]);' in r, r) def test_property(self): - r = KissMetricsNode().render(Context({'kiss_metrics_properties': - {'prop1': 'val1', 'prop2': 'val2'}})) + r = KissMetricsNode().render(Context({ + 'kiss_metrics_properties': {'prop1': 'val1', 'prop2': 'val2'}, + })) self.assertTrue("_kmq.push([\'set\', " - '{"prop1": "val1", "prop2": "val2"}]);' in r, r) + '{"prop1": "val1", "prop2": "val2"}]);' in r, r) def test_alias(self): - r = KissMetricsNode().render(Context({'kiss_metrics_alias': - {'test': 'test_alias'}})) + r = KissMetricsNode().render(Context({ + 'kiss_metrics_alias': {'test': 'test_alias'}, + })) self.assertTrue("_kmq.push(['alias', 'test', 'test_alias']);" in r, r) @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) diff --git a/analytical/tests/test_tag_mixpanel.py b/analytical/tests/test_tag_mixpanel.py index b43a8d2..033c2c7 100644 --- a/analytical/tests/test_tag_mixpanel.py +++ b/analytical/tests/test_tag_mixpanel.py @@ -20,15 +20,11 @@ class MixpanelTagTestCase(TagTestCase): def test_tag(self): r = self.render_tag('mixpanel', 'mixpanel') - self.assertIn( - "mixpanel.init('0123456789abcdef0123456789abcdef');", r, - ) + self.assertIn("mixpanel.init('0123456789abcdef0123456789abcdef');", r) def test_node(self): r = MixpanelNode().render(Context()) - self.assertIn( - "mixpanel.init('0123456789abcdef0123456789abcdef');", r, - ) + self.assertIn("mixpanel.init('0123456789abcdef0123456789abcdef');", r) @override_settings(MIXPANEL_API_TOKEN=None) def test_no_token(self): @@ -53,8 +49,9 @@ class MixpanelTagTestCase(TagTestCase): self.assertFalse("mixpanel.register_once({distinct_id:" in r, r) def test_event(self): - r = MixpanelNode().render(Context({'mixpanel_event': - ('test_event', {'prop1': 'val1', 'prop2': 'val2'})})) + r = MixpanelNode().render(Context({ + 'mixpanel_event': ('test_event', {'prop1': 'val1', 'prop2': 'val2'}), + })) self.assertTrue("mixpanel.track('test_event', " '{"prop1": "val1", "prop2": "val2"});' in r, r) diff --git a/analytical/tests/test_tag_olark.py b/analytical/tests/test_tag_olark.py index ecc3f56..f65514b 100644 --- a/analytical/tests/test_tag_olark.py +++ b/analytical/tests/test_tag_olark.py @@ -35,10 +35,11 @@ class OlarkTestCase(TagTestCase): @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - r = OlarkNode().render(Context({'user': - User(username='test', first_name='Test', last_name='User')})) + r = OlarkNode().render(Context({ + 'user': User(username='test', first_name='Test', last_name='User'), + })) self.assertTrue("olark('api.chat.updateVisitorNickname', " - "{snippet: 'Test User (test)'});" in r, r) + "{snippet: 'Test User (test)'});" in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify_anonymous_user(self): @@ -48,18 +49,19 @@ class OlarkTestCase(TagTestCase): def test_nickname(self): r = OlarkNode().render(Context({'olark_nickname': 'testnick'})) self.assertTrue("olark('api.chat.updateVisitorNickname', " - "{snippet: 'testnick'});" in r, r) + "{snippet: 'testnick'});" in r, r) def test_status_string(self): r = OlarkNode().render(Context({'olark_status': 'teststatus'})) self.assertTrue("olark('api.chat.updateVisitorStatus', " - '{snippet: "teststatus"});' in r, r) + '{snippet: "teststatus"});' in r, r) def test_status_string_list(self): - r = OlarkNode().render(Context({'olark_status': - ['teststatus1', 'teststatus2']})) + r = OlarkNode().render(Context({ + 'olark_status': ['teststatus1', 'teststatus2'], + })) self.assertTrue("olark('api.chat.updateVisitorStatus', " - '{snippet: ["teststatus1", "teststatus2"]});' in r, r) + '{snippet: ["teststatus1", "teststatus2"]});' in r, r) def test_messages(self): messages = [ @@ -88,5 +90,4 @@ class OlarkTestCase(TagTestCase): vars = dict(('olark_%s' % m, m) for m in messages) r = OlarkNode().render(Context(vars)) for m in messages: - self.assertTrue("olark.configure('locale.%s', \"%s\");" % (m, m) - in r, r) + self.assertTrue("olark.configure('locale.%s', \"%s\");" % (m, m) in r, r) diff --git a/analytical/tests/test_tag_rating_mailru.py b/analytical/tests/test_tag_rating_mailru.py index 2e91a60..45d0309 100644 --- a/analytical/tests/test_tag_rating_mailru.py +++ b/analytical/tests/test_tag_rating_mailru.py @@ -2,9 +2,6 @@ Tests for the Rating@Mail.ru template tags and filters. """ -import re - -from django.contrib.auth.models import User, AnonymousUser from django.http import HttpRequest from django.template import Context from django.test.utils import override_settings diff --git a/analytical/tests/test_tag_snapengage.py b/analytical/tests/test_tag_snapengage.py index 07b96bc..02b37cc 100644 --- a/analytical/tests/test_tag_snapengage.py +++ b/analytical/tests/test_tag_snapengage.py @@ -50,16 +50,19 @@ class SnapEngageTestCase(TagTestCase): self.assertRaises(AnalyticalException, SnapEngageNode) def test_no_button(self): - r = SnapEngageNode().render(Context({'snapengage_button': BUTTON_STYLE_NONE})) - self.assertTrue('SnapABug.init("ec329c69-0bf0-4db8-9b77-3f8150fb977e")' - in r, r) + r = SnapEngageNode().render(Context({ + 'snapengage_button': BUTTON_STYLE_NONE, + })) + self.assertTrue('SnapABug.init("ec329c69-0bf0-4db8-9b77-3f8150fb977e")' in r, r) with override_settings(SNAPENGAGE_BUTTON=BUTTON_STYLE_NONE): r = SnapEngageNode().render(Context()) self.assertTrue( 'SnapABug.init("ec329c69-0bf0-4db8-9b77-3f8150fb977e")' in r, r) def test_live_button(self): - r = SnapEngageNode().render(Context({'snapengage_button': BUTTON_STYLE_LIVE})) + r = SnapEngageNode().render(Context({ + 'snapengage_button': BUTTON_STYLE_LIVE, + })) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",' '"55%",true);' in r, r) @@ -71,7 +74,8 @@ class SnapEngageTestCase(TagTestCase): def test_custom_button(self): r = SnapEngageNode().render(Context({ - 'snapengage_button': "http://www.example.com/button.png"})) + 'snapengage_button': "http://www.example.com/button.png", + })) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",' '"55%");' in r, r) @@ -89,12 +93,12 @@ class SnapEngageTestCase(TagTestCase): def test_button_location_right(self): r = SnapEngageNode().render(Context({ - 'snapengage_button_location': BUTTON_LOCATION_RIGHT})) + 'snapengage_button_location': BUTTON_LOCATION_RIGHT, + })) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","1",' '"55%");' in r, r) - with override_settings( - SNAPENGAGE_BUTTON_LOCATION=BUTTON_LOCATION_RIGHT): + with override_settings(SNAPENGAGE_BUTTON_LOCATION=BUTTON_LOCATION_RIGHT): r = SnapEngageNode().render(Context()) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","1",' @@ -102,7 +106,8 @@ class SnapEngageTestCase(TagTestCase): def test_button_location_top(self): r = SnapEngageNode().render(Context({ - 'snapengage_button_location': BUTTON_LOCATION_TOP})) + 'snapengage_button_location': BUTTON_LOCATION_TOP, + })) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","2",' '"55%");' in r, r) @@ -114,7 +119,8 @@ class SnapEngageTestCase(TagTestCase): def test_button_location_bottom(self): r = SnapEngageNode().render(Context({ - 'snapengage_button_location': BUTTON_LOCATION_BOTTOM})) + 'snapengage_button_location': BUTTON_LOCATION_BOTTOM, + })) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","3",' '"55%");' in r, r) @@ -127,7 +133,8 @@ class SnapEngageTestCase(TagTestCase): def test_button_offset(self): r = SnapEngageNode().render(Context({ - 'snapengage_button_location_offset': "30%"})) + 'snapengage_button_location_offset': "30%", + })) self.assertTrue( 'SnapABug.addButton("ec329c69-0bf0-4db8-9b77-3f8150fb977e","0",' '"30%");' in r, r) @@ -139,7 +146,8 @@ class SnapEngageTestCase(TagTestCase): def test_button_effect(self): r = SnapEngageNode().render(Context({ - 'snapengage_button_effect': "-4px"})) + 'snapengage_button_effect': "-4px", + })) self.assertTrue('SnapABug.setButtonEffect("-4px");' in r, r) with override_settings(SNAPENGAGE_BUTTON_EFFECT="-4px"): r = SnapEngageNode().render(Context()) @@ -147,7 +155,8 @@ class SnapEngageTestCase(TagTestCase): def test_form_position(self): r = SnapEngageNode().render(Context({ - 'snapengage_form_position': FORM_POSITION_TOP_LEFT})) + 'snapengage_form_position': FORM_POSITION_TOP_LEFT, + })) self.assertTrue('SnapABug.setChatFormPosition("tl");' in r, r) with override_settings(SNAPENGAGE_FORM_POSITION=FORM_POSITION_TOP_LEFT): r = SnapEngageNode().render(Context()) @@ -155,7 +164,8 @@ class SnapEngageTestCase(TagTestCase): def test_form_top_position(self): r = SnapEngageNode().render(Context({ - 'snapengage_form_top_position': 40})) + 'snapengage_form_top_position': 40, + })) self.assertTrue('SnapABug.setFormTopPosition(40);' in r, r) with override_settings(SNAPENGAGE_FORM_TOP_POSITION=40): r = SnapEngageNode().render(Context()) @@ -178,7 +188,9 @@ class SnapEngageTestCase(TagTestCase): self.assertTrue('SnapABug.setSecureConnexion();' in r, r) def test_show_offline(self): - r = SnapEngageNode().render(Context({'snapengage_show_offline': False})) + r = SnapEngageNode().render(Context({ + 'snapengage_show_offline': False, + })) self.assertTrue('SnapABug.allowOffline(false);' in r, r) with override_settings(SNAPENGAGE_SHOW_OFFLINE=False): r = SnapEngageNode().render(Context()) @@ -190,15 +202,18 @@ class SnapEngageTestCase(TagTestCase): self.assertTrue('SnapABug.allowProactiveChat(false);' in r, r) def test_screenshot(self): - r = SnapEngageNode().render(Context({'snapengage_screenshots': False})) + r = SnapEngageNode().render(Context({ + 'snapengage_screenshots': False, + })) self.assertTrue('SnapABug.allowScreenshot(false);' in r, r) with override_settings(SNAPENGAGE_SCREENSHOTS=False): r = SnapEngageNode().render(Context()) self.assertTrue('SnapABug.allowScreenshot(false);' in r, r) def test_offline_screenshots(self): - r = SnapEngageNode().render(Context( - {'snapengage_offline_screenshots': False})) + r = SnapEngageNode().render(Context({ + 'snapengage_offline_screenshots': False, + })) self.assertTrue('SnapABug.showScreenshotOption(false);' in r, r) with override_settings(SNAPENGAGE_OFFLINE_SCREENSHOTS=False): r = SnapEngageNode().render(Context()) @@ -213,30 +228,35 @@ class SnapEngageTestCase(TagTestCase): @override_settings(SNAPENGAGE_READONLY_EMAIL=False) def test_email(self): - r = SnapEngageNode().render(Context({'snapengage_email': - 'test@example.com'})) + r = SnapEngageNode().render(Context({ + 'snapengage_email': 'test@example.com', + })) self.assertTrue('SnapABug.setUserEmail("test@example.com");' in r, r) def test_email_readonly(self): - r = SnapEngageNode().render(Context({'snapengage_email': - 'test@example.com', 'snapengage_readonly_email': True})) - self.assertTrue('SnapABug.setUserEmail("test@example.com",true);' in r, - r) + r = SnapEngageNode().render(Context({ + 'snapengage_email': 'test@example.com', + 'snapengage_readonly_email': True, + })) + self.assertTrue('SnapABug.setUserEmail("test@example.com",true);' in r, r) with override_settings(SNAPENGAGE_READONLY_EMAIL=True): - r = SnapEngageNode().render(Context({'snapengage_email': - 'test@example.com'})) - self.assertTrue('SnapABug.setUserEmail("test@example.com",true);' - in r, r) + r = SnapEngageNode().render(Context({ + 'snapengage_email': 'test@example.com', + })) + self.assertTrue('SnapABug.setUserEmail("test@example.com",true);' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - r = SnapEngageNode().render(Context({'user': - User(username='test', email='test@example.com')})) + r = SnapEngageNode().render(Context({ + 'user': User(username='test', email='test@example.com'), + })) self.assertTrue('SnapABug.setUserEmail("test@example.com");' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify_anonymous_user(self): - r = SnapEngageNode().render(Context({'user': AnonymousUser()})) + r = SnapEngageNode().render(Context({ + 'user': AnonymousUser(), + })) self.assertFalse('SnapABug.setUserEmail(' in r, r) def test_language(self): diff --git a/analytical/tests/test_tag_spring_metrics.py b/analytical/tests/test_tag_spring_metrics.py index 5256d55..14aeb3c 100644 --- a/analytical/tests/test_tag_spring_metrics.py +++ b/analytical/tests/test_tag_spring_metrics.py @@ -2,8 +2,6 @@ Tests for the Spring Metrics template tags and filters. """ -import re - from django.contrib.auth.models import User, AnonymousUser from django.http import HttpRequest from django.template import Context @@ -38,10 +36,10 @@ class SpringMetricsTagTestCase(TagTestCase): @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify(self): - r = SpringMetricsNode().render(Context({'user': - User(email='test@test.com')})) - self.assertTrue("_springMetq.push(['setdata', " - "{'email': 'test@test.com'}]);" in r, r) + r = SpringMetricsNode().render(Context({ + 'user': User(email='test@test.com'), + })) + self.assertTrue("_springMetq.push(['setdata', {'email': 'test@test.com'}]);" in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify_anonymous_user(self): @@ -49,12 +47,12 @@ class SpringMetricsTagTestCase(TagTestCase): self.assertFalse("_springMetq.push(['setdata', {'email':" in r, r) def test_custom(self): - r = SpringMetricsNode().render(Context({'spring_metrics_var1': 'val1', - 'spring_metrics_var2': 'val2'})) - self.assertTrue("_springMetq.push(['setdata', {'var1': 'val1'}]);" in r, - r) - self.assertTrue("_springMetq.push(['setdata', {'var2': 'val2'}]);" in r, - r) + r = SpringMetricsNode().render(Context({ + 'spring_metrics_var1': 'val1', + 'spring_metrics_var2': 'val2', + })) + self.assertTrue("_springMetq.push(['setdata', {'var1': 'val1'}]);" in r, r) + self.assertTrue("_springMetq.push(['setdata', {'var2': 'val2'}]);" in r, r) @override_settings(ANALYTICAL_INTERNAL_IPS=['1.1.1.1']) def test_render_internal_ip(self): diff --git a/analytical/tests/test_tag_uservoice.py b/analytical/tests/test_tag_uservoice.py index 8dab644..9bce78d 100644 --- a/analytical/tests/test_tag_uservoice.py +++ b/analytical/tests/test_tag_uservoice.py @@ -58,7 +58,7 @@ class UserVoiceTagTestCase(TagTestCase): r = UserVoiceNode().render(Context(data)) self.assertIn("""UserVoice.push(['set', {"key1": "val2"}]);""", r) - def test_auto_trigger(self): + def test_auto_trigger_default(self): r = UserVoiceNode().render(Context()) self.assertTrue("UserVoice.push(['addTrigger', {}]);" in r, r) diff --git a/analytical/tests/test_tag_woopra.py b/analytical/tests/test_tag_woopra.py index 8eb4ec2..671e7de 100644 --- a/analytical/tests/test_tag_woopra.py +++ b/analytical/tests/test_tag_woopra.py @@ -37,22 +37,26 @@ class WoopraTagTestCase(TagTestCase): @override_settings(WOOPRA_IDLE_TIMEOUT=1234) def test_idle_timeout(self): r = WoopraNode().render(Context({})) - self.assertTrue('var woo_settings = {"domain": "example.com", ' - '"idle_timeout": "1234"};' in r, r) + self.assertTrue('var woo_settings = ' + '{"domain": "example.com", "idle_timeout": "1234"};' in r, r) def test_custom(self): - r = WoopraNode().render(Context({'woopra_var1': 'val1', - 'woopra_var2': 'val2'})) - self.assertTrue('var woo_visitor = {"var1": "val1", "var2": "val2"};' - in r, r) + r = WoopraNode().render(Context({ + 'woopra_var1': 'val1', + 'woopra_var2': 'val2', + })) + self.assertTrue('var woo_visitor = {"var1": "val1", "var2": "val2"};' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify_name_and_email(self): - r = WoopraNode().render(Context({'user': User(username='test', - first_name='Firstname', last_name='Lastname', - email="test@example.com")})) - self.assertTrue('var woo_visitor = {"email": "test@example.com", ' - '"name": "Firstname Lastname"};' in r, r) + r = WoopraNode().render(Context({ + 'user': User(username='test', + first_name='Firstname', + last_name='Lastname', + email="test@example.com"), + })) + self.assertTrue('var woo_visitor = ' + '{"email": "test@example.com", "name": "Firstname Lastname"};' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_identify_username_no_email(self): @@ -61,14 +65,18 @@ class WoopraTagTestCase(TagTestCase): @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_no_identify_when_explicit_name(self): - r = WoopraNode().render(Context({'woopra_name': 'explicit', - 'user': User(username='implicit')})) + r = WoopraNode().render(Context({ + 'woopra_name': 'explicit', + 'user': User(username='implicit'), + })) self.assertTrue('var woo_visitor = {"name": "explicit"};' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) def test_no_identify_when_explicit_email(self): - r = WoopraNode().render(Context({'woopra_email': 'explicit', - 'user': User(username='implicit')})) + r = WoopraNode().render(Context({ + 'woopra_email': 'explicit', + 'user': User(username='implicit'), + })) self.assertTrue('var woo_visitor = {"email": "explicit"};' in r, r) @override_settings(ANALYTICAL_AUTO_IDENTIFY=True) diff --git a/analytical/tests/test_tag_yandex_metrica.py b/analytical/tests/test_tag_yandex_metrica.py index f85924a..fa287db 100644 --- a/analytical/tests/test_tag_yandex_metrica.py +++ b/analytical/tests/test_tag_yandex_metrica.py @@ -2,9 +2,7 @@ Tests for the Yandex.Metrica template tags and filters. """ -import re -from django.contrib.auth.models import User, AnonymousUser from django.http import HttpRequest from django.template import Context from django.test.utils import override_settings diff --git a/analytical/tests/test_utils.py b/analytical/tests/test_utils.py index c3b8049..3b5e6dd 100644 --- a/analytical/tests/test_utils.py +++ b/analytical/tests/test_utils.py @@ -30,11 +30,11 @@ class SettingDeletedTestCase(TestCase): # available in python >= 3.2 if hasattr(self, 'assertRaisesRegex'): with self.assertRaisesRegex(AnalyticalException, "^USER_ID setting is not set$"): - user_id = get_required_setting("USER_ID", "\d+", "invalid USER_ID") + get_required_setting("USER_ID", "\d+", "invalid USER_ID") # available in python >= 2.7, deprecated in 3.2 elif hasattr(self, 'assertRaisesRegexp'): with self.assertRaisesRegexp(AnalyticalException, "^USER_ID setting is not set$"): - user_id = get_required_setting("USER_ID", "\d+", "invalid USER_ID") + get_required_setting("USER_ID", "\d+", "invalid USER_ID") else: self.assertRaises(AnalyticalException, get_required_setting, "USER_ID", "\d+", "invalid USER_ID") @@ -72,10 +72,9 @@ class GetDomainTestCase(TestCase): # FIXME: enable Django apps dynamically and enable test again -#@with_apps('django.contrib.sites') -#@override_settings(TEST_DOMAIN=SETTING_DELETED, -# ANALYTICAL_DOMAIN=SETTING_DELETED) -#class GetDomainTestCaseWithSites(TestCase): +# @with_apps('django.contrib.sites') +# @override_settings(TEST_DOMAIN=SETTING_DELETED, ANALYTICAL_DOMAIN=SETTING_DELETED) +# class GetDomainTestCaseWithSites(TestCase): # def test_get_domain_from_site(self): # site = Site.objects.create(domain="example.com", name="test") # with override_settings(SITE_ID=site.id): diff --git a/docs/conf.py b/docs/conf.py index e7dc08f..f84736b 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -9,7 +9,7 @@ import sys sys.path.append(os.path.join(os.path.abspath('.'), '_ext')) sys.path.append(os.path.dirname(os.path.abspath('.'))) -import analytical +import analytical # noqa # -- General configuration -------------------------------------------------- diff --git a/setup.py b/setup.py index 9361840..9c5d6a5 100644 --- a/setup.py +++ b/setup.py @@ -60,16 +60,16 @@ except ImportError: "This is fine, unless you intend to run unit tests." ) -import analytical +import analytical as package # noqa setup( name='django-analytical', - version=analytical.__version__, - license=analytical.__license__, + version=package.__version__, + license=package.__license__, description='Analytics service integration for Django projects', long_description=read('README.rst'), - author=analytical.__author__, - author_email=analytical.__email__, + author=package.__author__, + author_email=package.__email__, packages=[ 'analytical', 'analytical.templatetags', @@ -84,6 +84,8 @@ setup( 'Framework :: Django :: 1.7', 'Framework :: Django :: 1.8', 'Framework :: Django :: 1.9', + # 'Framework :: Django :: 1.10', + # 'Framework :: Django :: 1.11', 'Intended Audience :: Developers', 'License :: OSI Approved :: MIT License', 'Operating System :: OS Independent', @@ -93,10 +95,10 @@ setup( 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 2.7', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.2', 'Programming Language :: Python :: 3.3', 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', + # 'Programming Language :: Python :: 3.6', ], platforms=['any'], url='https://github.com/jcassee/django-analytical', diff --git a/tox.ini b/tox.ini index 5f71e15..dfb8fb9 100644 --- a/tox.ini +++ b/tox.ini @@ -1,19 +1,39 @@ [tox] envlist = - py{27,32,33,34}-django17, - py{27,32,33,34,35}-django18, + py{27,33,34}-django17 + py{27,33,34,35}-django18 py{27,34,35}-django19 +# py{27,34,35}-django110 +# py{27,34,35,36}-django111 + flake8 [testenv] commands = coverage run setup.py test sh -c 'coveralls | true' deps = - coverage==3.7.1 + coverage coveralls django17: Django>=1.7,<1.8 django18: Django>=1.8,<1.9 django19: Django>=1.9,<1.10 - virtualenv<14.0.0 + django110: Django>=1.10,<1.11 + django111: Django>=1.11,<2.0 passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH whitelist_externals = sh + +[testenv:flake8] +basepython = python2.7 +deps = flake8 +commands = flake8 + +[travis:env] +DJANGO = + 1.7: django17 + 1.8: django18 + 1.9: django19 + 1.10: django110 + 1.11: django111 + +[flake8] +max-line-length = 100