Skip to content

Commit

Permalink
Added support for Wagtail 1.11
Browse files Browse the repository at this point in the history
  • Loading branch information
Janneke Janssen committed Jul 3, 2017
1 parent 127f18f commit 8a97296
Show file tree
Hide file tree
Showing 5 changed files with 89 additions and 15 deletions.
28 changes: 28 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ language: python
cache: pip
matrix:
include:
# Wagtail 1.8
- env: TOXENV=py27-dj18-wt18
python: 2.7
- env: TOXENV=py34-dj18-wt18
Expand All @@ -15,6 +16,8 @@ matrix:
python: 3.4
- env: TOXENV=py35-dj110-wt18
python: 3.5

# Wagtail 1.9
- env: TOXENV=py27-dj18-wt19
python: 2.7
- env: TOXENV=py34-dj18-wt19
Expand All @@ -27,6 +30,8 @@ matrix:
python: 3.4
- env: TOXENV=py35-dj110-wt19
python: 3.5

# Wagtail 1.10
- env: TOXENV=py27-dj18-wt110
python: 2.7
- env: TOXENV=py34-dj18-wt110
Expand All @@ -47,6 +52,29 @@ matrix:
python: 3.5
- env: TOXENV=py36-dj111-wt110
python: 3.6

# Wagtail 1.11
- env: TOXENV=py27-dj18-wt111
python: 2.7
- env: TOXENV=py34-dj18-wt111
python: 3.4
- env: TOXENV=py35-dj18-wt111
python: 3.5
- env: TOXENV=py27-dj110-wt111
python: 2.7
- env: TOXENV=py34-dj110-wt111
python: 3.4
- env: TOXENV=py35-dj110-wt111
python: 3.5
- env: TOXENV=py27-dj111-wt111
python: 2.7
- env: TOXENV=py34-dj111-wt111
python: 3.4
- env: TOXENV=py35-dj111-wt111
python: 3.5
- env: TOXENV=py36-dj111-wt111
python: 3.6

- env: TOXENV=flake8
python: 2.7
install:
Expand Down
10 changes: 8 additions & 2 deletions src/wagtailtrans/urls/translations.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,18 @@
from __future__ import absolute_import, unicode_literals

from django.conf.urls import url
from wagtail import VERSION as WAGTAIL_VERSION

from wagtailtrans.views import translation
if WAGTAIL_VERSION < (1, 11):
from wagtailtrans.views.translation import (
DeprecatedTranslationView as TranslationView
)
else:
from wagtailtrans.views.translation import TranslationView

app_name = 'wagtailtrans'

urlpatterns = [
url(r'^(?P<instance_id>\d+)/add/(?P<language_code>[^/]+)/$',
translation.TranslationView.as_view(), name='add'),
TranslationView.as_view(), name='add'),
]
26 changes: 24 additions & 2 deletions src/wagtailtrans/views/translation.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from wagtailtrans.models import Language, TranslatablePage


class TranslationView(CreateView):
class AbstractTranslationView(CreateView):
model = TranslatablePage
form_class = TranslationForm

Expand All @@ -26,8 +26,30 @@ def dispatch(self, request, instance_id, language_code, *args, **kwargs):
self.language = get_object_or_404(Language, code=language_code)
self.instance = get_object_or_404(
TranslatablePage, id=instance_id).specific
return super(TranslationView, self).dispatch(request, *args, **kwargs)
return super(AbstractTranslationView, self).dispatch(
request, *args, **kwargs)


class TranslationView(AbstractTranslationView):

def get_form_kwargs(self):
kwargs = super(TranslationView, self).get_form_kwargs()
kwargs['language'] = self.language
kwargs['instance'] = self.instance
return kwargs

def form_valid(self, form):
parent = form.cleaned_data['parent_page']
copy_from_canonical = form.cleaned_data['copy_from_canonical']
new_page = self.instance.create_translation(
self.language, copy_fields=copy_from_canonical, parent=parent)
return redirect('wagtailadmin_pages:edit', new_page.id)


class DeprecatedTranslationView(AbstractTranslationView):
"""
TranslationView prior to Wagtail 1.11
"""
def get(self, request):
self.form = self.form_class(
instance=self.instance, language=self.language)
Expand Down
33 changes: 25 additions & 8 deletions tests/unit/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@
from django.db.models import signals
from django.http import Http404
from django.test import override_settings
from wagtail import VERSION as WAGTAIL_VERSION

from wagtailtrans.models import TranslatablePage
from wagtailtrans.views import translation

if WAGTAIL_VERSION < (1, 11):
from wagtailtrans.views.translation import (
DeprecatedTranslationView as TranslationView
)
else:
from wagtailtrans.views.translation import TranslationView

from tests.factories import language, pages, sites

Expand All @@ -26,12 +33,15 @@ def test_get(self, rf):

request = rf.get('/')

view = translation.TranslationView()
view = TranslationView()
view.request = request
response = view.dispatch(
request, instance_id=self.last_page.pk, language_code='fr')

parent_page_qs = view.form['parent_page'].field.queryset
if WAGTAIL_VERSION < (1, 11):
parent_page_qs = view.form['parent_page'].field.queryset
else:
parent_page_qs = view.get_form().fields['parent_page'].queryset

assert response.status_code == 200
assert parent_page_qs.count() == 1
Expand All @@ -44,7 +54,11 @@ def test_get(self, rf):
response = view.dispatch(
request, instance_id=self.last_page.pk, language_code='fr')

parent_page_qs = view.form['parent_page'].field.queryset
if WAGTAIL_VERSION < (1, 11):
parent_page_qs = view.form['parent_page'].field.queryset
else:
parent_page_qs = view.get_form().fields['parent_page'].queryset

# We have a french page to add our new translated page to
assert parent_page_qs.count() == 1
assert parent_page_qs.model is TranslatablePage
Expand All @@ -59,7 +73,7 @@ def test_post(self, rf):

request = rf.post('/', {'parent_page': self.pages[0].pk, 'copy_from_canonical': True})

view = translation.TranslationView()
view = TranslationView()
view.request = request
response = view.dispatch(
request, instance_id=self.pages[1].pk, language_code='de')
Expand All @@ -77,17 +91,20 @@ def test_post_existing(self, rf):
assert self.last_page.language.code == 'en'

with override_settings(WAGTAILTRANS_SYNC_TREE=False):
view = translation.TranslationView()
view = TranslationView()
view.request = request
response = view.dispatch(
request, instance_id=self.last_page.pk,
language_code=self.default_language.code)

assert response.status_code == 200
assert not view.form.is_valid()
if WAGTAIL_VERSION < (1, 11):
assert not view.form.is_valid()
else:
assert not view.get_form().is_valid()

def test_post_404(self, rf):
"""It should raise a 404 when a wrong page_pk is given."""
view = translation.TranslationView.as_view()
view = TranslationView.as_view()
with pytest.raises(Http404):
view(rf.post('/'), instance_id=0, language_code='en')
7 changes: 4 additions & 3 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
skipsdist = True
usedevelop = True
envlist =
py{27,34,35}-dj{18,110}-wt{18,19,110},
py{27,34,35,36}-dj111-wt110,
py{27,34,35}-dj{18,110}-wt{18,19,110,111},
py{27,34,35,36}-dj111-wt{110,111},
flake8

[testenv]
Expand All @@ -22,7 +22,8 @@ deps =
wt17: wagtail>=1.7,<1.8
wt18: wagtail>=1.8,<1.9
wt19: wagtail>=1.9,<1.10
wt110: wagtail>=1.10rc1,<1.11
wt110: wagtail>=1.10,<1.11
wt111: wagtail>=1.11,<1.12
coverage
factory-boy
pytest
Expand Down

0 comments on commit 8a97296

Please sign in to comment.