Skip to content
This repository has been archived by the owner on Oct 29, 2019. It is now read-only.

Commit

Permalink
Dropped djangoCMS < 3.2 support and added 3.4 support (#424)
Browse files Browse the repository at this point in the history
* Use the new names for app and toolbar

* Added djangoCMS < 3.2 compatible toolbar and app modules

* tox adjustments

* flake8

* fixes import error

* Adjust travis

* Drop support for cms < 3.2
  • Loading branch information
czpython committed Aug 23, 2016
1 parent 4de8beb commit 493f7bd
Show file tree
Hide file tree
Showing 8 changed files with 169 additions and 179 deletions.
20 changes: 6 additions & 14 deletions .travis.yml
Expand Up @@ -28,38 +28,30 @@ env:
# DB backends
# NOTE: MYSQL AND POSTGRES TESTS ARE DISABLED UNTIL #339 IS MERGED.
- TOXENV=flake8
- TOXENV=py35-dj19-sqlite-cms34
- TOXENV=py35-dj19-sqlite-cms33-fe FE=1
- TOXENV=py35-dj19-sqlite-cms32
- TOXENV=py34-dj19-sqlite-cms34
- TOXENV=py34-dj19-sqlite-cms33
- TOXENV=py34-dj19-sqlite-cms32
- TOXENV=py27-dj19-sqlite-cms34
- TOXENV=py27-dj19-sqlite-cms33
- TOXENV=py27-dj19-sqlite-cms32
- TOXENV=py35-dj18-sqlite-cms34
- TOXENV=py35-dj18-sqlite-cms33
- TOXENV=py35-dj18-sqlite-cms32
- TOXENV=py34-dj18-sqlite-cms34
- TOXENV=py34-dj18-sqlite-cms33
- TOXENV=py34-dj18-sqlite-cms32
- TOXENV=py34-dj18-sqlite-cms31
- TOXENV=py27-dj18-sqlite-cms34
- TOXENV=py27-dj18-sqlite-cms33-fe FE=1
- TOXENV=py27-dj18-sqlite-cms32
- TOXENV=py27-dj18-sqlite-cms31
- TOXENV=py34-dj17-sqlite-cms32
- TOXENV=py34-dj17-sqlite-cms31
- TOXENV=py34-dj17-sqlite-cms30
- TOXENV=py33-dj17-sqlite-cms32
- TOXENV=py33-dj17-sqlite-cms31
- TOXENV=py33-dj17-sqlite-cms30
- TOXENV=py27-dj17-sqlite-cms32
- TOXENV=py27-dj17-sqlite-cms31
- TOXENV=py27-dj17-sqlite-cms30
- TOXENV=py33-dj16-sqlite-cms32
- TOXENV=py33-dj16-sqlite-cms31
- TOXENV=py33-dj16-sqlite-cms30
- TOXENV=py27-dj16-sqlite-cms32
- TOXENV=py27-dj16-sqlite-cms31
- TOXENV=py27-dj16-sqlite-cms30
- TOXENV=py26-dj16-sqlite-cms32
- TOXENV=py26-dj16-sqlite-cms31
- TOXENV=py26-dj16-sqlite-cms30

cache:
directories:
Expand Down
23 changes: 2 additions & 21 deletions aldryn_newsblog/cms_app.py
@@ -1,21 +1,2 @@
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from aldryn_apphooks_config.app_base import CMSConfigApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

from .models import NewsBlogConfig


class NewsBlogApp(CMSConfigApp):
app_config = NewsBlogConfig
app_name = 'aldryn_newsblog'
name = _('NewsBlog')
urls = ['aldryn_newsblog.urls']

# NOTE: Please do not add a «menu» here, menu’s should only be added by at
# the discretion of the operator.

apphook_pool.register(NewsBlogApp)
# djangoCMS < 3.2 compatibility
from . import cms_apps # NOQA
21 changes: 21 additions & 0 deletions aldryn_newsblog/cms_apps.py
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from aldryn_apphooks_config.app_base import CMSConfigApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _

from .models import NewsBlogConfig


class NewsBlogApp(CMSConfigApp):
app_config = NewsBlogConfig
app_name = 'aldryn_newsblog'
name = _('NewsBlog')
urls = ['aldryn_newsblog.urls']

# NOTE: Please do not add a «menu» here, menu’s should only be added by at
# the discretion of the operator.

apphook_pool.register(NewsBlogApp)
129 changes: 2 additions & 127 deletions aldryn_newsblog/cms_toolbar.py
@@ -1,127 +1,2 @@
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.utils.translation import (
ugettext as _, get_language_from_request, override)

from cms.toolbar_base import CMSToolbar
from cms.toolbar_pool import toolbar_pool

from aldryn_apphooks_config.utils import get_app_instance
from aldryn_translation_tools.utils import (
get_object_from_request,
get_admin_url,
)

from .models import Article
from .cms_appconfig import NewsBlogConfig


@toolbar_pool.register
class NewsBlogToolbar(CMSToolbar):
# watch_models must be a list, not a tuple
# see https://github.com/divio/django-cms/issues/4135
watch_models = [Article, ]
supported_apps = ('aldryn_newsblog',)

def get_on_delete_redirect_url(self, article, language):
with override(language):
url = reverse(
'{0}:article-list'.format(article.app_config.namespace))
return url

def __get_newsblog_config(self):
try:
__, config = get_app_instance(self.request)
if not isinstance(config, NewsBlogConfig):
# This is not the app_hook you are looking for.
return None
except ImproperlyConfigured:
# There is no app_hook at all.
return None

return config

def populate(self):
config = self.__get_newsblog_config()
if not config:
# Do nothing if there is no NewsBlog app_config to work with
return

user = getattr(self.request, 'user', None)
try:
view_name = self.request.resolver_match.view_name
except AttributeError:
view_name = None

if user and view_name:
language = get_language_from_request(self.request, check_path=True)

# If we're on an Article detail page, then get the article
if view_name == '{0}:article-detail'.format(config.namespace):
article = get_object_from_request(Article, self.request)
else:
article = None

menu = self.toolbar.get_or_create_menu('newsblog-app',
config.get_app_title())

change_config_perm = user.has_perm(
'aldryn_newsblog.change_newsblogconfig')
add_config_perm = user.has_perm(
'aldryn_newsblog.add_newsblogconfig')
config_perms = [change_config_perm, add_config_perm]

change_article_perm = user.has_perm(
'aldryn_newsblog.change_article')
delete_article_perm = user.has_perm(
'aldryn_newsblog.delete_article')
add_article_perm = user.has_perm('aldryn_newsblog.add_article')
article_perms = [change_article_perm, add_article_perm,
delete_article_perm, ]

if change_config_perm:
url_args = {}
if language:
url_args = {'language': language, }
url = get_admin_url('aldryn_newsblog_newsblogconfig_change',
[config.pk, ], **url_args)
menu.add_modal_item(_('Configure addon'), url=url)

if any(config_perms) and any(article_perms):
menu.add_break()

if change_article_perm:
url_args = {}
if config:
url_args = {'app_config__id__exact': config.pk}
url = get_admin_url('aldryn_newsblog_article_changelist',
**url_args)
menu.add_sideframe_item(_('Article list'), url=url)

if add_article_perm:
url_args = {'app_config': config.pk, 'owner': user.pk, }
if language:
url_args.update({'language': language, })
url = get_admin_url('aldryn_newsblog_article_add', **url_args)
menu.add_modal_item(_('Add new article'), url=url)

if change_article_perm and article:
url_args = {}
if language:
url_args = {'language': language, }
url = get_admin_url('aldryn_newsblog_article_change',
[article.pk, ], **url_args)
menu.add_modal_item(_('Edit this article'), url=url,
active=True)

if delete_article_perm and article:
redirect_url = self.get_on_delete_redirect_url(
article, language=language)
url = get_admin_url('aldryn_newsblog_article_delete',
[article.pk, ])
menu.add_modal_item(_('Delete this article'), url=url,
on_close=redirect_url)
# djangoCMS < 3.2 compatibility
from . import cms_toolbars # NOQA
127 changes: 127 additions & 0 deletions aldryn_newsblog/cms_toolbars.py
@@ -0,0 +1,127 @@
# -*- coding: utf-8 -*-

from __future__ import unicode_literals

from django.core.exceptions import ImproperlyConfigured
from django.core.urlresolvers import reverse
from django.utils.translation import (
ugettext as _, get_language_from_request, override)

from cms.toolbar_base import CMSToolbar
from cms.toolbar_pool import toolbar_pool

from aldryn_apphooks_config.utils import get_app_instance
from aldryn_translation_tools.utils import (
get_object_from_request,
get_admin_url,
)

from .models import Article
from .cms_appconfig import NewsBlogConfig


@toolbar_pool.register
class NewsBlogToolbar(CMSToolbar):
# watch_models must be a list, not a tuple
# see https://github.com/divio/django-cms/issues/4135
watch_models = [Article, ]
supported_apps = ('aldryn_newsblog',)

def get_on_delete_redirect_url(self, article, language):
with override(language):
url = reverse(
'{0}:article-list'.format(article.app_config.namespace))
return url

def __get_newsblog_config(self):
try:
__, config = get_app_instance(self.request)
if not isinstance(config, NewsBlogConfig):
# This is not the app_hook you are looking for.
return None
except ImproperlyConfigured:
# There is no app_hook at all.
return None

return config

def populate(self):
config = self.__get_newsblog_config()
if not config:
# Do nothing if there is no NewsBlog app_config to work with
return

user = getattr(self.request, 'user', None)
try:
view_name = self.request.resolver_match.view_name
except AttributeError:
view_name = None

if user and view_name:
language = get_language_from_request(self.request, check_path=True)

# If we're on an Article detail page, then get the article
if view_name == '{0}:article-detail'.format(config.namespace):
article = get_object_from_request(Article, self.request)
else:
article = None

menu = self.toolbar.get_or_create_menu('newsblog-app',
config.get_app_title())

change_config_perm = user.has_perm(
'aldryn_newsblog.change_newsblogconfig')
add_config_perm = user.has_perm(
'aldryn_newsblog.add_newsblogconfig')
config_perms = [change_config_perm, add_config_perm]

change_article_perm = user.has_perm(
'aldryn_newsblog.change_article')
delete_article_perm = user.has_perm(
'aldryn_newsblog.delete_article')
add_article_perm = user.has_perm('aldryn_newsblog.add_article')
article_perms = [change_article_perm, add_article_perm,
delete_article_perm, ]

if change_config_perm:
url_args = {}
if language:
url_args = {'language': language, }
url = get_admin_url('aldryn_newsblog_newsblogconfig_change',
[config.pk, ], **url_args)
menu.add_modal_item(_('Configure addon'), url=url)

if any(config_perms) and any(article_perms):
menu.add_break()

if change_article_perm:
url_args = {}
if config:
url_args = {'app_config__id__exact': config.pk}
url = get_admin_url('aldryn_newsblog_article_changelist',
**url_args)
menu.add_sideframe_item(_('Article list'), url=url)

if add_article_perm:
url_args = {'app_config': config.pk, 'owner': user.pk, }
if language:
url_args.update({'language': language, })
url = get_admin_url('aldryn_newsblog_article_add', **url_args)
menu.add_modal_item(_('Add new article'), url=url)

if change_article_perm and article:
url_args = {}
if language:
url_args = {'language': language, }
url = get_admin_url('aldryn_newsblog_article_change',
[article.pk, ], **url_args)
menu.add_modal_item(_('Edit this article'), url=url,
active=True)

if delete_article_perm and article:
redirect_url = self.get_on_delete_redirect_url(
article, language=language)
url = get_admin_url('aldryn_newsblog_article_delete',
[article.pk, ])
menu.add_modal_item(_('Delete this article'), url=url,
on_close=redirect_url)
4 changes: 2 additions & 2 deletions aldryn_newsblog/tests/__init__.py
Expand Up @@ -14,7 +14,7 @@
from django.utils.timezone import now
from django.utils.translation import override
from aldryn_categories.models import Category
from aldryn_newsblog.cms_app import NewsBlogApp
from aldryn_newsblog.cms_apps import NewsBlogApp
from aldryn_newsblog.models import Article, NewsBlogConfig
from aldryn_people.models import Person
from cms import api
Expand Down Expand Up @@ -269,7 +269,7 @@ def apphook_clear(self):
except AppAlreadyRegistered:
# there is an issue with discover apps, or i'm using it wrong.
# setting discovered to True solves it. Maybe that is due to import
# from aldryn_events.cms_app which registers EventListAppHook
# from aldryn_events.cms_apps which registers EventListAppHook
apphook_pool.discovered = True
apphooks = apphook_pool.get_apphooks()

Expand Down
2 changes: 1 addition & 1 deletion setup.py
Expand Up @@ -14,7 +14,7 @@
'aldryn-translation-tools>=0.2.0',
'backport_collections==0.1',
'django-appdata>=0.1.4',
'django-cms>=3.0.12',
'django-cms>=3.2',
'djangocms-text-ckeditor',
'django-filer>=0.9.9',
'django-parler>=1.4',
Expand Down

0 comments on commit 493f7bd

Please sign in to comment.