diff --git a/.travis.yml b/.travis.yml index d8f3cb4..62c2777 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,7 @@ env: - TOXENV='pep8' - TOXENV='isort' - TOXENV='docs' + - DJANGO='django110' CMS='cms34' - DJANGO='django19' CMS='cms34' - DJANGO='django19' CMS='cms33' - DJANGO='django19' CMS='cms32' diff --git a/README.rst b/README.rst index 2d18b6c..581c6d0 100644 --- a/README.rst +++ b/README.rst @@ -36,6 +36,7 @@ Supported Django versions: * Django 1.8 * Django 1.9 +* Django 1.10 Supported django CMS versions: diff --git a/cms_helper.py b/cms_helper.py index fd63480..76404b6 100755 --- a/cms_helper.py +++ b/cms_helper.py @@ -9,6 +9,7 @@ from tempfile import mkdtemp def gettext(s): return s + HELPER_SETTINGS = dict( ROOT_URLCONF='tests.test_utils.urls', INSTALLED_APPS=[ @@ -139,5 +140,6 @@ def setup(): from djangocms_helper import runner runner.setup('djangocms_blog', sys.modules[__name__], use_cms=True) + if __name__ == '__main__': run() diff --git a/djangocms_blog/admin.py b/djangocms_blog/admin.py index 5f17c47..0f301c2 100755 --- a/djangocms_blog/admin.py +++ b/djangocms_blog/admin.py @@ -368,6 +368,7 @@ class BlogConfigAdmin(BaseAppHookConfig, TranslatableAdmin): menu_pool.clear(all=True) return super(BlogConfigAdmin, self).save_model(request, obj, form, change) + admin.site.register(BlogCategory, BlogCategoryAdmin) admin.site.register(Post, PostAdmin) admin.site.register(BlogConfig, BlogConfigAdmin) diff --git a/djangocms_blog/cms_appconfig.py b/djangocms_blog/cms_appconfig.py index 0ac4542..36ff2cc 100644 --- a/djangocms_blog/cms_appconfig.py +++ b/djangocms_blog/cms_appconfig.py @@ -139,4 +139,6 @@ class BlogConfigForm(AppDataForm): label=_('Send notifications on post update'), required=False, initial=False, help_text=_('Emits a desktop notification -if enabled- when editing a published post') ) + + setup_config(BlogConfigForm, BlogConfig) diff --git a/djangocms_blog/cms_apps.py b/djangocms_blog/cms_apps.py index c6e25ae..aad2a18 100644 --- a/djangocms_blog/cms_apps.py +++ b/djangocms_blog/cms_apps.py @@ -28,5 +28,7 @@ class BlogApp(AutoCMSAppMixin, CMSConfigApp): 'object_name': get_setting('DEFAULT_OBJECT_NAME') }, } + + apphook_pool.register(BlogApp) BlogApp.setup() diff --git a/djangocms_blog/cms_menus.py b/djangocms_blog/cms_menus.py index 9cd6e20..89e2b98 100644 --- a/djangocms_blog/cms_menus.py +++ b/djangocms_blog/cms_menus.py @@ -106,6 +106,7 @@ class BlogCategoryMenu(CMSAttachMenu): return nodes + menu_pool.register_menu(BlogCategoryMenu) @@ -161,6 +162,7 @@ class BlogNavModifier(Modifier): node.selected = True return nodes + menu_pool.register_modifier(BlogNavModifier) @@ -170,5 +172,6 @@ def clear_menu_cache(**kwargs): """ menu_pool.clear(all=True) + post_save.connect(clear_menu_cache, sender=BlogCategory) post_delete.connect(clear_menu_cache, sender=BlogCategory) diff --git a/djangocms_blog/liveblog/cms_plugins.py b/djangocms_blog/liveblog/cms_plugins.py index 7e0d9fa..c351679 100644 --- a/djangocms_blog/liveblog/cms_plugins.py +++ b/djangocms_blog/liveblog/cms_plugins.py @@ -28,4 +28,5 @@ class LiveblogPlugin(TextPlugin): context['instance'] = instance return context + plugin_pool.register_plugin(LiveblogPlugin) diff --git a/djangocms_blog/liveblog/models.py b/djangocms_blog/liveblog/models.py index 2b801ba..52ad13d 100644 --- a/djangocms_blog/liveblog/models.py +++ b/djangocms_blog/liveblog/models.py @@ -3,8 +3,9 @@ from __future__ import absolute_import, print_function, unicode_literals import json +import django from channels import Group -from cms.models import itemgetter, now, python_2_unicode_compatible +from cms.models import CMSPlugin, itemgetter, now, python_2_unicode_compatible from cms.utils.plugins import reorder_plugins from django.db import models from django.template import Context @@ -87,6 +88,12 @@ class Liveblog(LiveblogInterface, AbstractText): """ Basic liveblog plugin model """ + if django.VERSION >= (1, 10): + cmsplugin_ptr = models.OneToOneField( + CMSPlugin, + related_name='%(app_label)s_%(class)s', primary_key=True, + parent_link=True, on_delete=models.CASCADE + ) title = models.CharField(_('title'), max_length=255) image = FilerImageField( verbose_name=_('image'), blank=True, null=True, on_delete=models.SET_NULL, diff --git a/djangocms_blog/urls.py b/djangocms_blog/urls.py index 84b9db2..2d68439 100644 --- a/djangocms_blog/urls.py +++ b/djangocms_blog/urls.py @@ -20,6 +20,7 @@ def get_urls(): ) return details + detail_urls = get_urls() urlpatterns = [ diff --git a/tests/test_models.py b/tests/test_models.py index cdfb71a..f56d3db 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -143,7 +143,7 @@ class AdminTest(BaseTest): # Add view only has an empty form - no type response = post_admin.add_view(request) self.assertNotContains(response, 'djangocms_blog.cms_appconfig.BlogConfig') - self.assertContains(response, '') + self.assertContains(response, '') + self.assertContains(response, '') + self.assertNotContains(response, 'id="id_name" maxlength="255" name="name" type="text" value="category 1"') self.assertContains(response, '' % self.app_config_1.pk) # Changeview is 'normal', with a few preselected items response = post_admin.change_view(request, str(self.category_1.pk)) - self.assertContains(response, 'id="id_name" maxlength="255" name="name" type="text" value="category 1" />') + self.assertContains(response, 'id="id_name" maxlength="255" name="name" type="text" value="category 1"') self.assertContains(response, '' % self.app_config_1.pk) def test_admin_category_parents(self): diff --git a/tox.ini b/tox.ini index e0b6270..af35fbf 100644 --- a/tox.ini +++ b/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = pep8,isort,docs,py{35,34,27}-django{19}-{cms34,cms33,cms32},py{35,34,33,27}-django{18}-cms{34,33,32} +envlist = pep8,isort,docs,py{35,34,27}-django{110}-{cms34},py{35,34,27}-django{19}-{cms34,cms33,cms32},py{35,34,33,27}-django{18}-cms{34,33,32} [testenv] commands = {env:COMMAND:python} cms_helper.py test djangocms_blog @@ -14,6 +14,9 @@ deps = django19: django-mptt>=0.8 django19: django-filer<1.3 django19: cmsplugin-filer<1.2 + django110: Django>=1.10,<1.11 + django110: django-mptt>=0.8 + django110: https://github.com/divio/django-filer/archive/develop.zip cms32: https://github.com/divio/django-cms/archive/release/3.2.x.zip cms32: djangocms-text-ckeditor<3.0 cms33: https://github.com/divio/django-cms/archive/release/3.3.x.zip