Codestyle fixes (flake8)
This also adds the flake8 dependencies to the test extras for installation.
This commit is contained in:
@ -11,6 +11,8 @@ line_length = 79
|
||||
multi_line_output = 4
|
||||
balanced_wrapping = true
|
||||
use_parentheses = true
|
||||
default_section = THIRDPARTY
|
||||
known_first_party = wagtail_personalisation,tests
|
||||
|
||||
[*.json, *.yml, *rc]
|
||||
indent_size = 2
|
||||
|
7
Makefile
7
Makefile
@ -10,7 +10,7 @@ clean:
|
||||
find . -name '*.egg-info' -delete
|
||||
|
||||
requirements:
|
||||
pip install --upgrade -e .[test]
|
||||
pip install --upgrade -e .[docs,test]
|
||||
|
||||
install: develop
|
||||
|
||||
@ -28,18 +28,15 @@ coverage:
|
||||
lint: flake8 isort
|
||||
|
||||
flake8:
|
||||
pip install flake8 flake8-debugger flake8-blind-except
|
||||
flake8 src/
|
||||
flake8 src/ tests/
|
||||
|
||||
isort:
|
||||
pip install isort
|
||||
isort --recursive src tests
|
||||
|
||||
|
||||
dist:
|
||||
./setup.py sdist bdist_wheel
|
||||
|
||||
|
||||
sandbox:
|
||||
pip install -r sandbox/requirements.txt
|
||||
sandbox/manage.py migrate
|
||||
|
10
setup.py
10
setup.py
@ -7,12 +7,16 @@ install_requires = [
|
||||
]
|
||||
|
||||
tests_require = [
|
||||
'pytest==3.1.0',
|
||||
'factory_boy==2.8.1',
|
||||
'flake8',
|
||||
'flake8-blind-except',
|
||||
'flake8-debugger',
|
||||
'flake8-imports',
|
||||
'freezegun==0.3.8',
|
||||
'pytest-cov==2.4.0',
|
||||
'pytest-django==3.1.2',
|
||||
'pytest-sugar==0.7.1',
|
||||
'freezegun==0.3.8',
|
||||
'factory_boy==2.8.1',
|
||||
'pytest==3.1.0',
|
||||
'wagtail_factories==0.3.0',
|
||||
]
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.db.models import F
|
||||
|
||||
from wagtail_personalisation.models import Segment
|
||||
from wagtail_personalisation.rules import AbstractBaseRule
|
||||
from wagtail_personalisation.utils import create_segment_dictionary
|
||||
|
@ -1,6 +1,7 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
from wagtail_personalisation import models, rules
|
||||
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.conf.urls import url
|
||||
|
||||
from wagtail_personalisation import views
|
||||
|
||||
app_name = 'segment'
|
||||
|
@ -1,9 +1,10 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from wagtail_personalisation.models import Segment
|
||||
from wagtail.wagtailcore import blocks
|
||||
|
||||
from wagtail_personalisation.models import Segment
|
||||
|
||||
|
||||
def list_segment_choices():
|
||||
for segment in Segment.objects.all():
|
||||
|
@ -1,4 +1,5 @@
|
||||
from django.template import Library
|
||||
|
||||
from wagtail_personalisation.app_settings import segments_adapter
|
||||
|
||||
register = Library()
|
||||
|
@ -1,6 +1,6 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.http import HttpResponseRedirect, HttpResponseForbidden
|
||||
from django.http import HttpResponseForbidden, HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404, reverse
|
||||
from wagtail.contrib.modeladmin.options import ModelAdmin, modeladmin_register
|
||||
from wagtail.contrib.modeladmin.views import IndexView
|
||||
@ -13,6 +13,7 @@ class SegmentModelIndexView(IndexView):
|
||||
pass
|
||||
|
||||
|
||||
@modeladmin_register
|
||||
class SegmentModelAdmin(ModelAdmin):
|
||||
"""The model admin for the Segments administration interface."""
|
||||
model = Segment
|
||||
@ -25,8 +26,6 @@ class SegmentModelAdmin(ModelAdmin):
|
||||
form_view_extra_js = ['js/commons.js', 'js/form.js']
|
||||
form_view_extra_css = ['css/form.css']
|
||||
|
||||
modeladmin_register(SegmentModelAdmin)
|
||||
|
||||
|
||||
def toggle(request, segment_id):
|
||||
"""Toggle the status of the selected segment.
|
||||
|
@ -181,9 +181,10 @@ def page_listing_more_buttons(page, page_perms, is_parent=False):
|
||||
|
||||
"""
|
||||
segments = Segment.objects.all()
|
||||
available_segments = [item for item in segments
|
||||
if not PersonalisablePage.objects.filter(
|
||||
segment=item, pk=page.pk)]
|
||||
available_segments = [
|
||||
item for item in segments
|
||||
if not PersonalisablePage.objects.filter(segment=item, pk=page.pk)
|
||||
]
|
||||
|
||||
for segment in available_segments:
|
||||
yield Button(segment.name,
|
||||
|
@ -1,11 +1,9 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import factory
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from wagtail_factories import PageFactory
|
||||
|
||||
from wagtail_personalisation.models import PersonalisablePage
|
||||
from tests.sandbox.pages.models import HomePage
|
||||
from wagtail_personalisation.models import PersonalisablePage
|
||||
|
||||
|
||||
class PersonalisablePageFactory(PageFactory):
|
||||
|
@ -2,8 +2,6 @@ from __future__ import absolute_import, unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
import django
|
||||
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': os.environ.get('DATABASE_ENGINE', 'django.db.backends.sqlite3'),
|
@ -1 +0,0 @@
|
||||
from .base import * # noqa
|
@ -1,6 +1,5 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.conf import settings
|
||||
from django.conf.urls import include, url
|
||||
from django.contrib import admin
|
||||
from wagtail.wagtailadmin import urls as wagtailadmin_urls
|
||||
|
@ -4,34 +4,43 @@ import datetime
|
||||
|
||||
import pytest
|
||||
|
||||
from tests.factories.rule import (
|
||||
DayRuleFactory, DeviceRuleFactory, ReferralRuleFactory, TimeRuleFactory)
|
||||
from tests.factories.segment import SegmentFactory
|
||||
from wagtail_personalisation.models import Segment
|
||||
from wagtail_personalisation.rules import TimeRule
|
||||
from tests.factories.rule import (
|
||||
DayRuleFactory, DeviceRuleFactory, QueryRuleFactory, ReferralRuleFactory,
|
||||
TimeRuleFactory, VisitCountRuleFactory)
|
||||
from tests.factories.segment import SegmentFactory
|
||||
|
||||
"""Factory tests"""
|
||||
|
||||
# Factory tests
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_segment_factory():
|
||||
factoried_segment = SegmentFactory()
|
||||
segment = Segment(name='TestSegment', status='enabled')
|
||||
time_rule = TimeRule(start_time=datetime.time(8,0,0), end_time=datetime.time(23,0,0), segment=segment)
|
||||
TimeRule(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=segment)
|
||||
|
||||
assert factoried_segment.name == segment.name
|
||||
assert factoried_segment.status == segment.status
|
||||
|
||||
|
||||
"""TimeRuleFactory tests"""
|
||||
# TimeRuleFactory tests
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_segment_with_time_rule():
|
||||
segment = SegmentFactory(name='TimeSegment')
|
||||
time_rule = TimeRuleFactory(start_time=datetime.time(8, 0, 0), end_time=datetime.time(23, 0, 0), segment=segment)
|
||||
time_rule = TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=segment)
|
||||
|
||||
assert time_rule.start_time == datetime.time(8,0,0)
|
||||
assert time_rule.start_time == datetime.time(8, 0, 0)
|
||||
|
||||
|
||||
"""TimeRuleFactory tests"""
|
||||
# TimeRuleFactory tests
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_segment_with_day_rule():
|
||||
segment = SegmentFactory(name='DaySegment')
|
||||
@ -42,7 +51,8 @@ def test_create_segment_with_day_rule():
|
||||
assert day_rule.sun is False
|
||||
|
||||
|
||||
"""DeviceRuleFactory tests"""
|
||||
# DeviceRuleFactory tests
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_segment_with_device_rule():
|
||||
segment = SegmentFactory(name='DeviceSegment')
|
||||
@ -53,11 +63,14 @@ def test_create_segment_with_device_rule():
|
||||
assert device_rule.desktop is False
|
||||
|
||||
|
||||
"""ReferralRuleFactory tests"""
|
||||
# ReferralRuleFactory tests
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_segment_with_referral_rule():
|
||||
segment = SegmentFactory(name='Referral')
|
||||
referral_rule = ReferralRuleFactory(regex_string='test.test', segment=segment)
|
||||
referral_rule = ReferralRuleFactory(
|
||||
regex_string='test.test',
|
||||
segment=segment)
|
||||
|
||||
assert referral_rule.regex_string == 'test.test'
|
||||
|
||||
@ -66,6 +79,8 @@ def test_create_segment_with_referral_rule():
|
||||
def test_create_segment_with_new_referral_rule():
|
||||
segment = SegmentFactory()
|
||||
|
||||
segment.referral_rule = ReferralRuleFactory(regex_string='test.notest', segment=segment)
|
||||
segment.referral_rule = ReferralRuleFactory(
|
||||
regex_string='test.notest',
|
||||
segment=segment)
|
||||
|
||||
assert segment.referral_rule.regex_string == 'test.notest'
|
||||
|
@ -3,9 +3,7 @@ from __future__ import absolute_import, unicode_literals
|
||||
import datetime
|
||||
|
||||
import pytest
|
||||
from django.test.client import Client
|
||||
from freezegun import freeze_time
|
||||
from wagtail.wagtailcore.models import Page
|
||||
from wagtail_factories import SiteFactory
|
||||
|
||||
from tests.factories.rule import (
|
||||
@ -23,41 +21,37 @@ class TestUserSegmenting(object):
|
||||
"""
|
||||
self.site = SiteFactory(is_default_site=True)
|
||||
|
||||
|
||||
def test_no_segments(self, client):
|
||||
request = client.get('/')
|
||||
client.get('/')
|
||||
|
||||
assert client.session['segments'] == []
|
||||
|
||||
|
||||
@freeze_time("10:00:00")
|
||||
def test_time_segment(self, client):
|
||||
time_only_segment = SegmentFactory(name='Time only')
|
||||
time_rule = TimeRuleFactory(
|
||||
TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=time_only_segment)
|
||||
|
||||
request = client.get('/')
|
||||
client.get('/')
|
||||
|
||||
assert client.session['segments'][0]['encoded_name'] == 'time-only'
|
||||
|
||||
|
||||
@freeze_time("2017-01-01")
|
||||
def test_day_segment(self, client):
|
||||
day_only_segment = SegmentFactory(name='Day only')
|
||||
day_rule = DayRuleFactory(
|
||||
DayRuleFactory(
|
||||
sun=True,
|
||||
segment=day_only_segment)
|
||||
|
||||
request = client.get('/')
|
||||
client.get('/')
|
||||
|
||||
assert client.session['segments'][0]['encoded_name'] == 'day-only'
|
||||
|
||||
|
||||
def test_device_segment(self, client):
|
||||
device_only_segment = SegmentFactory(name='Device only')
|
||||
device_rule = DeviceRuleFactory(
|
||||
DeviceRuleFactory(
|
||||
tablet=True,
|
||||
segment=device_only_segment)
|
||||
|
||||
@ -65,10 +59,9 @@ class TestUserSegmenting(object):
|
||||
|
||||
assert client.session['segments'][0]['encoded_name'] == 'device-only'
|
||||
|
||||
|
||||
def test_device_segment_no_match(self, client):
|
||||
no_device_segment = SegmentFactory(name='No device')
|
||||
device_rule = DeviceRuleFactory(
|
||||
DeviceRuleFactory(
|
||||
mobile=True,
|
||||
segment=no_device_segment)
|
||||
|
||||
@ -76,10 +69,9 @@ class TestUserSegmenting(object):
|
||||
|
||||
assert not client.session['segments']
|
||||
|
||||
|
||||
def test_referral_segment(self, client):
|
||||
referral_segment = SegmentFactory(name='Referral')
|
||||
referral_rule = ReferralRuleFactory(
|
||||
ReferralRuleFactory(
|
||||
regex_string="test.test",
|
||||
segment=referral_segment
|
||||
)
|
||||
@ -91,46 +83,46 @@ class TestUserSegmenting(object):
|
||||
@freeze_time("10:00:00")
|
||||
def test_time_and_referral_segment(self, client):
|
||||
segment = SegmentFactory(name='Both')
|
||||
time_rule = TimeRuleFactory(
|
||||
TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=segment
|
||||
)
|
||||
referral_rule = ReferralRuleFactory(
|
||||
ReferralRuleFactory(
|
||||
regex_string="test.test",
|
||||
segment=segment
|
||||
)
|
||||
|
||||
client.get('/', **{ 'HTTP_REFERER': 'test.test'})
|
||||
client.get('/', **{'HTTP_REFERER': 'test.test'})
|
||||
|
||||
assert client.session['segments'][0]['encoded_name'] == 'both'
|
||||
|
||||
@freeze_time("7:00:00")
|
||||
def test_no_time_but_referral_segment(self, client):
|
||||
segment = SegmentFactory(name='Not both')
|
||||
time_rule = TimeRuleFactory(
|
||||
TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=segment
|
||||
)
|
||||
referral_rule = ReferralRuleFactory(
|
||||
ReferralRuleFactory(
|
||||
regex_string="test.test",
|
||||
segment=segment
|
||||
)
|
||||
|
||||
client.get('/', **{ 'HTTP_REFERER': 'test.test'})
|
||||
client.get('/', **{'HTTP_REFERER': 'test.test'})
|
||||
|
||||
assert len(client.session['segments']) == 0
|
||||
|
||||
@freeze_time("9:00:00")
|
||||
def test_time_but_no_referral_segment(self, client):
|
||||
segment = SegmentFactory(name='Not both')
|
||||
time_rule = TimeRuleFactory(
|
||||
TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=segment
|
||||
)
|
||||
referral_rule = ReferralRuleFactory(
|
||||
ReferralRuleFactory(
|
||||
regex_string="test.test",
|
||||
segment=segment
|
||||
)
|
||||
@ -144,29 +136,26 @@ class TestUserSegmenting(object):
|
||||
first_segment = SegmentFactory(name='First')
|
||||
second_segment = SegmentFactory(name='Second')
|
||||
|
||||
first_segment_time_rule = TimeRuleFactory(
|
||||
TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=first_segment
|
||||
)
|
||||
first_segment_referral_rule = ReferralRuleFactory(
|
||||
ReferralRuleFactory(
|
||||
regex_string="test.test",
|
||||
segment=first_segment
|
||||
)
|
||||
|
||||
second_segment_time_rule = TimeRuleFactory(
|
||||
TimeRuleFactory(
|
||||
start_time=datetime.time(8, 0, 0),
|
||||
end_time=datetime.time(23, 0, 0),
|
||||
segment=second_segment
|
||||
)
|
||||
|
||||
second_segment_referral_rule = ReferralRuleFactory
|
||||
|
||||
|
||||
def test_visit_count_rule(self, client):
|
||||
segment = SegmentFactory(name='Visit Count')
|
||||
|
||||
visit_count_rule = VisitCountRuleFactory(
|
||||
VisitCountRuleFactory(
|
||||
counted_page=self.site.root_page,
|
||||
segment=segment
|
||||
)
|
||||
@ -177,7 +166,7 @@ class TestUserSegmenting(object):
|
||||
|
||||
def test_query_rule(self, client):
|
||||
segment = SegmentFactory(name='Query')
|
||||
query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter="query",
|
||||
value="value",
|
||||
segment=segment,
|
||||
@ -189,7 +178,7 @@ class TestUserSegmenting(object):
|
||||
|
||||
def test_only_one_query_rule(self, client):
|
||||
segment = SegmentFactory(name='Query')
|
||||
query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter="query",
|
||||
value="value",
|
||||
segment=segment
|
||||
@ -201,13 +190,13 @@ class TestUserSegmenting(object):
|
||||
|
||||
def test_multiple_queries(self, client):
|
||||
segment = SegmentFactory(name='Multiple queries')
|
||||
first_query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter="test",
|
||||
value="test",
|
||||
segment=segment
|
||||
)
|
||||
|
||||
second_query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter="query",
|
||||
value="value",
|
||||
segment=segment,
|
||||
@ -217,10 +206,9 @@ class TestUserSegmenting(object):
|
||||
|
||||
assert any(item['encoded_name'] == 'multiple-queries' for item in client.session['segments'])
|
||||
|
||||
|
||||
def test_persistent_segmenting(self, client):
|
||||
segment = SegmentFactory(name='Persistent', persistent=True)
|
||||
query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter="test",
|
||||
value="test",
|
||||
segment=segment
|
||||
@ -236,7 +224,7 @@ class TestUserSegmenting(object):
|
||||
|
||||
def test_non_persistent_segmenting(self, client):
|
||||
segment = SegmentFactory(name='Non Persistent')
|
||||
query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter="test",
|
||||
value="test",
|
||||
segment=segment
|
||||
@ -250,15 +238,14 @@ class TestUserSegmenting(object):
|
||||
|
||||
assert not any(item['encoded_name'] == 'non-persistent' for item in client.session['segments'])
|
||||
|
||||
|
||||
def test_match_any_segmenting(self, client):
|
||||
segment = SegmentFactory(name='Match any', match_any=True)
|
||||
query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter='test',
|
||||
value='test',
|
||||
segment=segment,
|
||||
)
|
||||
second_query_rule = QueryRuleFactory(
|
||||
QueryRuleFactory(
|
||||
parameter='test2',
|
||||
value='test2',
|
||||
segment=segment
|
||||
@ -268,6 +255,7 @@ class TestUserSegmenting(object):
|
||||
|
||||
assert any(item['encoded_name'] == 'match-any' for item in client.session['segments'])
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestUserVisitCount(object):
|
||||
|
||||
|
@ -10,25 +10,30 @@ from wagtail_factories import SiteFactory
|
||||
|
||||
from wagtail_personalisation import rules
|
||||
|
||||
"""Time Rule tests"""
|
||||
|
||||
# Time Rule tests
|
||||
|
||||
@freeze_time("10:00:00")
|
||||
def test_create_time_rule():
|
||||
time_rule = rules.TimeRule(start_time=datetime.time(8, 0, 0), end_time=datetime.time(23, 0, 0))
|
||||
|
||||
assert time_rule.test_user() is True
|
||||
|
||||
|
||||
@freeze_time("10:00:00")
|
||||
def test_time_rule_false():
|
||||
time_rule = rules.TimeRule(start_time=datetime.time(11, 0, 0), end_time=datetime.time(23, 0, 0))
|
||||
|
||||
assert time_rule.test_user() is False
|
||||
|
||||
|
||||
@freeze_time("10:00:00")
|
||||
def test_time_rule_reverse():
|
||||
time_rule = rules.TimeRule(start_time=datetime.time(13, 0, 0), end_time=datetime.time(9, 0, 0))
|
||||
|
||||
assert time_rule.test_user() is False
|
||||
|
||||
|
||||
@freeze_time("10:00:00")
|
||||
def test_time_rule_reverse_next_day():
|
||||
time_rule = rules.TimeRule(start_time=datetime.time(11, 0, 0), end_time=datetime.time(11, 0, 0))
|
||||
@ -36,12 +41,13 @@ def test_time_rule_reverse_next_day():
|
||||
assert time_rule.test_user() is False
|
||||
|
||||
|
||||
"""Visit Count Rule tests"""
|
||||
# Visit Count Rule tests
|
||||
def test_visit_count_rule():
|
||||
visit_count_rule = rules.VisitCountRule()
|
||||
rules.VisitCountRule()
|
||||
|
||||
|
||||
"""Test test"""
|
||||
# Test test
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_test(rf):
|
||||
site = SiteFactory()
|
||||
|
@ -1,5 +1,3 @@
|
||||
import pytest
|
||||
|
||||
from wagtail_personalisation.utils import impersonate_other_page
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user