Merge pull request #133 from nephila/feature/cleanup
Cleanup code style
This commit is contained in:
commit
3238c0f912
25 changed files with 349 additions and 163 deletions
|
@ -18,6 +18,8 @@ env:
|
||||||
- DJANGO='django17' CMS='cms30'
|
- DJANGO='django17' CMS='cms30'
|
||||||
- DJANGO='django17' CMS='cms31'
|
- DJANGO='django17' CMS='cms31'
|
||||||
- DJANGO='django17' CMS='cms32'
|
- DJANGO='django17' CMS='cms32'
|
||||||
|
- TOXENV='pep8'
|
||||||
|
- TOXENV='isort'
|
||||||
|
|
||||||
|
|
||||||
# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
|
# command to install dependencies, e.g. pip install -r requirements.txt --use-mirrors
|
||||||
|
@ -27,9 +29,10 @@ install:
|
||||||
- "if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then export PYVER=py27; fi"
|
- "if [[ $TRAVIS_PYTHON_VERSION == '2.7' ]]; then export PYVER=py27; fi"
|
||||||
- "if [[ $TRAVIS_PYTHON_VERSION == '3.3' ]]; then export PYVER=py33; fi"
|
- "if [[ $TRAVIS_PYTHON_VERSION == '3.3' ]]; then export PYVER=py33; fi"
|
||||||
- "if [[ $TRAVIS_PYTHON_VERSION == '3.4' ]]; then export PYVER=py34; fi"
|
- "if [[ $TRAVIS_PYTHON_VERSION == '3.4' ]]; then export PYVER=py34; fi"
|
||||||
|
- "if [[ ${DJANGO}z != 'z' ]]; then export TOXENV=$PYVER-$DJANGO-$CMS; fi"
|
||||||
|
|
||||||
# command to run tests, e.g. python setup.py test
|
# command to run tests, e.g. python setup.py test
|
||||||
script: COMMAND='coverage run' tox -e"$PYVER-$DJANGO-$CMS"
|
script: COMMAND='coverage run' tox -e$TOXENV
|
||||||
|
|
||||||
after_success: coveralls
|
after_success: coveralls
|
||||||
|
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -23,7 +23,7 @@ clean-pyc:
|
||||||
find . -name '*~' -exec rm -f {} +
|
find . -name '*~' -exec rm -f {} +
|
||||||
|
|
||||||
lint:
|
lint:
|
||||||
flake8 djangocms_blog
|
flake8 djangocms_blog tests
|
||||||
djangocms-helper djangocms_blog pyflakes --cms
|
djangocms-helper djangocms_blog pyflakes --cms
|
||||||
|
|
||||||
test:
|
test:
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from tempfile import mkdtemp
|
from tempfile import mkdtemp
|
||||||
|
|
||||||
gettext = lambda s: s
|
gettext = lambda s: s
|
||||||
|
|
||||||
HELPER_SETTINGS = {
|
HELPER_SETTINGS = dict(
|
||||||
'NOSE_ARGS': [
|
NOSE_ARGS=[
|
||||||
'-s',
|
'-s',
|
||||||
],
|
],
|
||||||
'ROOT_URLCONF': 'tests.test_utils.urls',
|
ROOT_URLCONF='tests.test_utils.urls',
|
||||||
'INSTALLED_APPS': [
|
INSTALLED_APPS=[
|
||||||
'admin_enhancer',
|
'admin_enhancer',
|
||||||
'filer',
|
'filer',
|
||||||
'parler',
|
'parler',
|
||||||
|
@ -22,13 +22,13 @@ HELPER_SETTINGS = {
|
||||||
'cmsplugin_filer_image',
|
'cmsplugin_filer_image',
|
||||||
'taggit_autosuggest',
|
'taggit_autosuggest',
|
||||||
],
|
],
|
||||||
'LANGUAGE_CODE': 'en',
|
LANGUAGE_CODE='en',
|
||||||
'LANGUAGES': (
|
LANGUAGES=(
|
||||||
('en', gettext('English')),
|
('en', gettext('English')),
|
||||||
('fr', gettext('French')),
|
('fr', gettext('French')),
|
||||||
('it', gettext('Italiano')),
|
('it', gettext('Italiano')),
|
||||||
),
|
),
|
||||||
'CMS_LANGUAGES': {
|
CMS_LANGUAGES={
|
||||||
1: [
|
1: [
|
||||||
{
|
{
|
||||||
'code': 'en',
|
'code': 'en',
|
||||||
|
@ -57,7 +57,7 @@ HELPER_SETTINGS = {
|
||||||
'hide_untranslated': False,
|
'hide_untranslated': False,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'PARLER_LANGUAGES': {
|
PARLER_LANGUAGES={
|
||||||
1: (
|
1: (
|
||||||
{'code': 'en'},
|
{'code': 'en'},
|
||||||
{'code': 'it'},
|
{'code': 'it'},
|
||||||
|
@ -71,29 +71,30 @@ HELPER_SETTINGS = {
|
||||||
'hide_untranslated': False,
|
'hide_untranslated': False,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
'MIGRATION_MODULES': {
|
MIGRATION_MODULES={
|
||||||
'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django',
|
'cmsplugin_filer_image': 'cmsplugin_filer_image.migrations_django',
|
||||||
},
|
},
|
||||||
'META_SITE_PROTOCOL': 'http',
|
META_SITE_PROTOCOL='http',
|
||||||
'META_SITE_DOMAIN': 'example.com',
|
META_SITE_DOMAIN='example.com',
|
||||||
'META_USE_OG_PROPERTIES': True,
|
META_USE_OG_PROPERTIES=True,
|
||||||
'META_USE_TWITTER_PROPERTIES': True,
|
META_USE_TWITTER_PROPERTIES=True,
|
||||||
'META_USE_GOOGLEPLUS_PROPERTIES': True,
|
META_USE_GOOGLEPLUS_PROPERTIES=True,
|
||||||
'THUMBNAIL_PROCESSORS': (
|
THUMBNAIL_PROCESSORS=(
|
||||||
'easy_thumbnails.processors.colorspace',
|
'easy_thumbnails.processors.colorspace',
|
||||||
'easy_thumbnails.processors.autocrop',
|
'easy_thumbnails.processors.autocrop',
|
||||||
'filer.thumbnail_processors.scale_and_crop_with_subject_location',
|
'filer.thumbnail_processors.scale_and_crop_with_subject_location',
|
||||||
'easy_thumbnails.processors.filters',
|
'easy_thumbnails.processors.filters',
|
||||||
),
|
),
|
||||||
'FILE_UPLOAD_TEMP_DIR': mkdtemp(),
|
FILE_UPLOAD_TEMP_DIR=mkdtemp(),
|
||||||
'SITE_ID': 1
|
SITE_ID=1
|
||||||
}
|
)
|
||||||
if 'test' in sys.argv:
|
if 'test' in sys.argv or len(sys.argv) == 1:
|
||||||
HELPER_SETTINGS['INSTALLED_APPS'].append('django_nose')
|
HELPER_SETTINGS['INSTALLED_APPS'].append('django_nose')
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def run():
|
||||||
from djangocms_helper import runner
|
from djangocms_helper import runner
|
||||||
|
if 'test' in sys.argv or len(sys.argv) == 1:
|
||||||
sys.argv.append('--nose-runner')
|
sys.argv.append('--nose-runner')
|
||||||
runner.cms('djangocms_blog')
|
runner.cms('djangocms_blog')
|
||||||
|
|
||||||
|
|
|
@ -2,14 +2,14 @@
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|
||||||
from admin_enhancer.admin import EnhancedModelAdminMixin
|
from admin_enhancer.admin import EnhancedModelAdminMixin
|
||||||
from cms.admin.placeholderadmin import PlaceholderAdminMixin, FrontendEditableAdminMixin
|
from cms.admin.placeholderadmin import FrontendEditableAdminMixin, PlaceholderAdminMixin
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from parler.admin import TranslatableAdmin
|
from parler.admin import TranslatableAdmin
|
||||||
|
|
||||||
from .models import Post, BlogCategory
|
from .models import BlogCategory, Post
|
||||||
from .settings import get_setting
|
from .settings import get_setting
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from cms.app_base import CMSApp
|
from cms.app_base import CMSApp
|
||||||
from cms.apphook_pool import apphook_pool
|
from cms.apphook_pool import apphook_pool
|
||||||
from django.utils.translation import ugettext_lazy as _, get_language
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from .menu import BlogCategoryMenu
|
from .menu import BlogCategoryMenu
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
||||||
|
|
||||||
from cms.models.pluginmodel import CMSPlugin
|
from cms.models.pluginmodel import CMSPlugin
|
||||||
from cms.plugin_base import CMSPluginBase
|
from cms.plugin_base import CMSPluginBase
|
||||||
from cms.plugin_pool import plugin_pool
|
from cms.plugin_pool import plugin_pool
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from .models import AuthorEntriesPlugin, LatestPostsPlugin, Post, BlogCategory
|
|
||||||
from .forms import LatestEntriesForm
|
from .forms import LatestEntriesForm
|
||||||
|
from .models import AuthorEntriesPlugin, BlogCategory, LatestPostsPlugin, Post
|
||||||
from .settings import get_setting
|
from .settings import get_setting
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ from cms.toolbar_pool import toolbar_pool
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
from .models import BLOG_CURRENT_POST_IDENTIFIER
|
from .models import BLOG_CURRENT_POST_IDENTIFIER
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +31,7 @@ class BlogToolbar(CMSToolbar):
|
||||||
if current_post and self.request.user.has_perm('djangocms_blog.change_post'): # pragma: no cover
|
if current_post and self.request.user.has_perm('djangocms_blog.change_post'): # pragma: no cover
|
||||||
# removing page meta menu, if present, to avoid confusion
|
# removing page meta menu, if present, to avoid confusion
|
||||||
try: # pragma: no cover
|
try: # pragma: no cover
|
||||||
import djangocms_page_meta
|
import djangocms_page_meta # NOQA
|
||||||
menu = self.request.toolbar.get_or_create_menu('page')
|
menu = self.request.toolbar.get_or_create_menu('page')
|
||||||
pagemeta = menu.get_or_create_menu('pagemeta', 'meta')
|
pagemeta = menu.get_or_create_menu('pagemeta', 'meta')
|
||||||
menu.remove_item(pagemeta)
|
menu.remove_item(pagemeta)
|
||||||
|
@ -40,7 +39,7 @@ class BlogToolbar(CMSToolbar):
|
||||||
pass
|
pass
|
||||||
# removing page tags menu, if present, to avoid confusion
|
# removing page tags menu, if present, to avoid confusion
|
||||||
try: # pragma: no cover
|
try: # pragma: no cover
|
||||||
import djangocms_page_tags
|
import djangocms_page_tags # NOQA
|
||||||
menu = self.request.toolbar.get_or_create_menu('page')
|
menu = self.request.toolbar.get_or_create_menu('page')
|
||||||
pagetags = menu.get_or_create_menu('pagetags', 'tags')
|
pagetags = menu.get_or_create_menu('pagetags', 'tags')
|
||||||
menu.remove_item(pagetags)
|
menu.remove_item(pagetags)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from operator import itemgetter
|
|
||||||
from heapq import nlargest
|
from heapq import nlargest
|
||||||
from itertools import repeat, ifilter
|
from itertools import ifilter, repeat
|
||||||
|
from operator import itemgetter
|
||||||
|
|
||||||
|
|
||||||
class Counter(dict):
|
class Counter(dict):
|
||||||
|
|
|
@ -1,16 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import django
|
|
||||||
from django.contrib.sites.models import Site
|
|
||||||
from django.db.models import Q
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from collections import Counter
|
from collections import Counter
|
||||||
except ImportError:
|
except ImportError:
|
||||||
from .compat import Counter
|
from .compat import Counter
|
||||||
|
|
||||||
|
import django
|
||||||
|
from django.contrib.sites.models import Site
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from parler.managers import TranslationManager, TranslatableQuerySet
|
from parler.managers import TranslatableQuerySet, TranslationManager
|
||||||
|
|
||||||
|
|
||||||
class TaggedFilterItem(object):
|
class TaggedFilterItem(object):
|
||||||
|
@ -78,7 +76,8 @@ class GenericDateQuerySet(TranslatableQuerySet):
|
||||||
publish_field = 'publish'
|
publish_field = 'publish'
|
||||||
|
|
||||||
def on_site(self):
|
def on_site(self):
|
||||||
return self.filter(Q(sites__isnull=True) | Q(sites=Site.objects.get_current().pk))
|
return self.filter(models.Q(sites__isnull=True) |
|
||||||
|
models.Q(sites=Site.objects.get_current().pk))
|
||||||
|
|
||||||
def published(self):
|
def published(self):
|
||||||
queryset = self.published_future()
|
queryset = self.published_future()
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from cms.menu_bases import CMSAttachMenu
|
from cms.menu_bases import CMSAttachMenu
|
||||||
|
from django.db.models.signals import post_delete, post_save
|
||||||
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.utils.translation import get_language
|
||||||
from menus.base import Modifier, NavigationNode
|
from menus.base import Modifier, NavigationNode
|
||||||
from menus.menu_pool import menu_pool
|
from menus.menu_pool import menu_pool
|
||||||
from django.db.models.signals import post_save, post_delete
|
|
||||||
from django.utils.translation import ugettext_lazy as _, get_language
|
|
||||||
from .models import BlogCategory
|
from .models import BlogCategory
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,7 +36,8 @@ class BlogNavModifier(Modifier):
|
||||||
a corresponding category is selected in menu
|
a corresponding category is selected in menu
|
||||||
"""
|
"""
|
||||||
def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
|
def modify(self, request, nodes, namespace, root_id, post_cut, breadcrumb):
|
||||||
if post_cut: return nodes
|
if post_cut:
|
||||||
|
return nodes
|
||||||
if not hasattr(request, 'toolbar'):
|
if not hasattr(request, 'toolbar'):
|
||||||
return nodes
|
return nodes
|
||||||
models = ('djangocms_blog.post', 'djangocms_blog.blogcategory')
|
models = ('djangocms_blog.post', 'djangocms_blog.blogcategory')
|
||||||
|
@ -45,7 +48,8 @@ class BlogNavModifier(Modifier):
|
||||||
cat = request.toolbar.obj
|
cat = request.toolbar.obj
|
||||||
else:
|
else:
|
||||||
cat = request.toolbar.obj.categories.first()
|
cat = request.toolbar.obj.categories.first()
|
||||||
if not cat: return nodes
|
if not cat:
|
||||||
|
return nodes
|
||||||
|
|
||||||
for node in nodes:
|
for node in nodes:
|
||||||
if (node.namespace.startswith(BlogCategoryMenu.__name__) and
|
if (node.namespace.startswith(BlogCategoryMenu.__name__) and
|
||||||
|
@ -57,6 +61,7 @@ class BlogNavModifier(Modifier):
|
||||||
|
|
||||||
menu_pool.register_modifier(BlogNavModifier)
|
menu_pool.register_modifier(BlogNavModifier)
|
||||||
|
|
||||||
|
|
||||||
def clear_menu_cache(**kwargs):
|
def clear_menu_cache(**kwargs):
|
||||||
menu_pool.clear(all=True)
|
menu_pool.clear(all=True)
|
||||||
|
|
||||||
|
|
165
djangocms_blog/migrations/0007_auto_20150719_0933.py
Normal file
165
djangocms_blog/migrations/0007_auto_20150719_0933.py
Normal file
|
@ -0,0 +1,165 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
import filer.fields.image
|
||||||
|
import django.utils.timezone
|
||||||
|
from django.conf import settings
|
||||||
|
import djangocms_text_ckeditor.fields
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('djangocms_blog', '0006_auto_20150214_1907'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='blogcategorytranslation',
|
||||||
|
options={'managed': True, 'verbose_name': 'blog category Translation', 'default_permissions': ()},
|
||||||
|
),
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='posttranslation',
|
||||||
|
options={'managed': True, 'verbose_name': 'blog article Translation', 'default_permissions': ()},
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='authorentriesplugin',
|
||||||
|
name='authors',
|
||||||
|
field=models.ManyToManyField(verbose_name='authors', to=settings.AUTH_USER_MODEL),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='authorentriesplugin',
|
||||||
|
name='latest_posts',
|
||||||
|
field=models.IntegerField(help_text='The number of author articles to be displayed.', verbose_name='articles', default=5),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='blogcategorytranslation',
|
||||||
|
name='language_code',
|
||||||
|
field=models.CharField(db_index=True, verbose_name='Language', max_length=15),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='latestpostsplugin',
|
||||||
|
name='categories',
|
||||||
|
field=models.ManyToManyField(blank=True, help_text='Show only the blog articles tagged with chosen categories.', verbose_name='filter by category', to='djangocms_blog.BlogCategory'),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='latestpostsplugin',
|
||||||
|
name='latest_posts',
|
||||||
|
field=models.IntegerField(help_text='The number of latests articles to be displayed.', verbose_name='articles', default=5),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='latestpostsplugin',
|
||||||
|
name='tags',
|
||||||
|
field=models.ManyToManyField(blank=True, help_text='Show only the blog articles tagged with chosen tags.', verbose_name='filter by tag', to='taggit.Tag'),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='author',
|
||||||
|
field=models.ForeignKey(blank=True, verbose_name='author', to=settings.AUTH_USER_MODEL, related_name='djangocms_blog_post_author', null=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='date_created',
|
||||||
|
field=models.DateTimeField(auto_now_add=True, verbose_name='created'),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='date_modified',
|
||||||
|
field=models.DateTimeField(auto_now=True, verbose_name='last modified'),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='date_published',
|
||||||
|
field=models.DateTimeField(verbose_name='published Since', default=django.utils.timezone.now),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='date_published_end',
|
||||||
|
field=models.DateTimeField(blank=True, verbose_name='published Until', null=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='enable_comments',
|
||||||
|
field=models.BooleanField(verbose_name='enable comments on post', default=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='main_image',
|
||||||
|
field=filer.fields.image.FilerImageField(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image', to='filer.Image', related_name='djangocms_blog_post_image', null=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='main_image_full',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image full', to='cmsplugin_filer_image.ThumbnailOption', related_name='djangocms_blog_post_full', null=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='main_image_thumbnail',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, verbose_name='main image thumbnail', to='cmsplugin_filer_image.ThumbnailOption', related_name='djangocms_blog_post_thumbnail', null=True),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='post',
|
||||||
|
name='publish',
|
||||||
|
field=models.BooleanField(verbose_name='publish', default=False),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='abstract',
|
||||||
|
field=djangocms_text_ckeditor.fields.HTMLField(verbose_name='abstract'),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='language_code',
|
||||||
|
field=models.CharField(db_index=True, verbose_name='Language', max_length=15),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='meta_description',
|
||||||
|
field=models.TextField(blank=True, verbose_name='post meta description', default=''),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='meta_keywords',
|
||||||
|
field=models.TextField(blank=True, verbose_name='post meta keywords', default=''),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='meta_title',
|
||||||
|
field=models.CharField(blank=True, help_text='used in title tag and social sharing', verbose_name='post meta title', max_length=255, default=''),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='post_text',
|
||||||
|
field=djangocms_text_ckeditor.fields.HTMLField(blank=True, verbose_name='text', default=''),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='posttranslation',
|
||||||
|
name='title',
|
||||||
|
field=models.CharField(verbose_name='title', max_length=255),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,5 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from cms.models import PlaceholderField, CMSPlugin
|
from cms.models import CMSPlugin, PlaceholderField
|
||||||
from cmsplugin_filer_image.models import ThumbnailOption
|
from cmsplugin_filer_image.models import ThumbnailOption
|
||||||
from django.conf import settings as dj_settings
|
from django.conf import settings as dj_settings
|
||||||
from django.contrib.sites.models import Site
|
from django.contrib.sites.models import Site
|
||||||
|
@ -7,18 +7,19 @@ from django.core.urlresolvers import reverse
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.utils.encoding import force_text, python_2_unicode_compatible
|
from django.utils.encoding import force_text, python_2_unicode_compatible
|
||||||
from django.utils.html import strip_tags, escape
|
from django.utils.html import escape, strip_tags
|
||||||
from django.utils.text import slugify
|
from django.utils.text import slugify
|
||||||
from django.utils.translation import ugettext_lazy as _, get_language
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.utils.translation import get_language
|
||||||
from djangocms_text_ckeditor.fields import HTMLField
|
from djangocms_text_ckeditor.fields import HTMLField
|
||||||
from filer.fields.image import FilerImageField
|
from filer.fields.image import FilerImageField
|
||||||
from meta_mixin.models import ModelMeta
|
from meta_mixin.models import ModelMeta
|
||||||
from parler.models import TranslatableModel, TranslatedFields
|
|
||||||
from parler.managers import TranslationManager
|
from parler.managers import TranslationManager
|
||||||
|
from parler.models import TranslatableModel, TranslatedFields
|
||||||
from taggit_autosuggest.managers import TaggableManager
|
from taggit_autosuggest.managers import TaggableManager
|
||||||
|
|
||||||
from .settings import get_setting
|
|
||||||
from .managers import GenericDateTaggedManager
|
from .managers import GenericDateTaggedManager
|
||||||
|
from .settings import get_setting
|
||||||
|
|
||||||
BLOG_CURRENT_POST_IDENTIFIER = 'djangocms_post_current'
|
BLOG_CURRENT_POST_IDENTIFIER = 'djangocms_post_current'
|
||||||
|
|
||||||
|
@ -76,33 +77,33 @@ class Post(ModelMeta, TranslatableModel):
|
||||||
Blog post
|
Blog post
|
||||||
"""
|
"""
|
||||||
author = models.ForeignKey(dj_settings.AUTH_USER_MODEL,
|
author = models.ForeignKey(dj_settings.AUTH_USER_MODEL,
|
||||||
verbose_name=_('Author'), null=True, blank=True,
|
verbose_name=_(u'author'), null=True, blank=True,
|
||||||
related_name='djangocms_blog_post_author')
|
related_name='djangocms_blog_post_author')
|
||||||
|
|
||||||
date_created = models.DateTimeField(auto_now_add=True)
|
date_created = models.DateTimeField(_(u'created'), auto_now_add=True)
|
||||||
date_modified = models.DateTimeField(auto_now=True)
|
date_modified = models.DateTimeField(_(u'last modified'), auto_now=True)
|
||||||
date_published = models.DateTimeField(_('Published Since'),
|
date_published = models.DateTimeField(_(u'published Since'),
|
||||||
default=timezone.now)
|
default=timezone.now)
|
||||||
date_published_end = models.DateTimeField(_('Published Until'), null=True,
|
date_published_end = models.DateTimeField(_(u'published Until'), null=True,
|
||||||
blank=True)
|
blank=True)
|
||||||
publish = models.BooleanField(_('Publish'), default=False)
|
publish = models.BooleanField(_(u'publish'), default=False)
|
||||||
categories = models.ManyToManyField(BlogCategory, verbose_name=_('category'),
|
categories = models.ManyToManyField(BlogCategory, verbose_name=_(u'category'),
|
||||||
related_name='blog_posts',)
|
related_name='blog_posts',)
|
||||||
main_image = FilerImageField(verbose_name=_('Main image'), blank=True, null=True,
|
main_image = FilerImageField(verbose_name=_(u'main image'), blank=True, null=True,
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
related_name='djangocms_blog_post_image')
|
related_name='djangocms_blog_post_image')
|
||||||
main_image_thumbnail = models.ForeignKey(ThumbnailOption,
|
main_image_thumbnail = models.ForeignKey(ThumbnailOption,
|
||||||
verbose_name=_('Main image thumbnail'),
|
verbose_name=_(u'main image thumbnail'),
|
||||||
related_name='djangocms_blog_post_thumbnail',
|
related_name='djangocms_blog_post_thumbnail',
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
blank=True, null=True)
|
blank=True, null=True)
|
||||||
main_image_full = models.ForeignKey(ThumbnailOption,
|
main_image_full = models.ForeignKey(ThumbnailOption,
|
||||||
verbose_name=_('Main image full'),
|
verbose_name=_(u'main image full'),
|
||||||
related_name='djangocms_blog_post_full',
|
related_name='djangocms_blog_post_full',
|
||||||
on_delete=models.SET_NULL,
|
on_delete=models.SET_NULL,
|
||||||
blank=True, null=True)
|
blank=True, null=True)
|
||||||
enable_comments = models.BooleanField(
|
enable_comments = models.BooleanField(
|
||||||
verbose_name=_(u'Enable comments on post'),
|
verbose_name=_(u'enable comments on post'),
|
||||||
default=get_setting('ENABLE_COMMENTS')
|
default=get_setting('ENABLE_COMMENTS')
|
||||||
)
|
)
|
||||||
sites = models.ManyToManyField(Site, verbose_name=_(u'Site(s)'), blank=True,
|
sites = models.ManyToManyField(Site, verbose_name=_(u'Site(s)'), blank=True,
|
||||||
|
@ -113,18 +114,18 @@ class Post(ModelMeta, TranslatableModel):
|
||||||
)
|
)
|
||||||
|
|
||||||
translations = TranslatedFields(
|
translations = TranslatedFields(
|
||||||
title=models.CharField(_('Title'), max_length=255),
|
title=models.CharField(_(u'title'), max_length=255),
|
||||||
slug=models.SlugField(_('slug'), blank=True, db_index=True),
|
slug=models.SlugField(_(u'slug'), blank=True, db_index=True),
|
||||||
abstract=HTMLField(_('Abstract'), blank=True, default=''),
|
abstract=HTMLField(_(u'abstract'), blank=True, default=''),
|
||||||
meta_description=models.TextField(verbose_name=_(u'Post meta description'),
|
meta_description=models.TextField(verbose_name=_(u'post meta description'),
|
||||||
blank=True, default=''),
|
blank=True, default=''),
|
||||||
meta_keywords=models.TextField(verbose_name=_(u'Post meta keywords'),
|
meta_keywords=models.TextField(verbose_name=_(u'post meta keywords'),
|
||||||
blank=True, default=''),
|
blank=True, default=''),
|
||||||
meta_title=models.CharField(verbose_name=_(u'Post meta title'),
|
meta_title=models.CharField(verbose_name=_(u'post meta title'),
|
||||||
help_text=_(u'used in title tag and social sharing'),
|
help_text=_(u'used in title tag and social sharing'),
|
||||||
max_length=255,
|
max_length=255,
|
||||||
blank=True, default=''),
|
blank=True, default=''),
|
||||||
post_text=HTMLField(_('Text'), default='', blank=True),
|
post_text=HTMLField(_(u'text'), default='', blank=True),
|
||||||
meta={'unique_together': (('language_code', 'slug'),)}
|
meta={'unique_together': (('language_code', 'slug'),)}
|
||||||
)
|
)
|
||||||
content = PlaceholderField('post_content', related_name='post_content')
|
content = PlaceholderField('post_content', related_name='post_content')
|
||||||
|
@ -159,6 +160,34 @@ class Post(ModelMeta, TranslatableModel):
|
||||||
'url': 'get_absolute_url',
|
'url': 'get_absolute_url',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
verbose_name = _('blog article')
|
||||||
|
verbose_name_plural = _('blog articles')
|
||||||
|
ordering = ('-date_published', '-date_created')
|
||||||
|
get_latest_by = 'date_published'
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.safe_translation_getter('title')
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
kwargs = {'year': self.date_published.year,
|
||||||
|
'month': '%02d' % self.date_published.month,
|
||||||
|
'day': '%02d' % self.date_published.day,
|
||||||
|
'slug': self.safe_translation_getter('slug',
|
||||||
|
language_code=get_language(),
|
||||||
|
any_language=True)}
|
||||||
|
return reverse('djangocms_blog:post-detail', kwargs=kwargs)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
super(Post, self).save(*args, **kwargs)
|
||||||
|
main_lang = self.get_current_language()
|
||||||
|
for lang in self.get_available_languages():
|
||||||
|
self.set_current_language(lang)
|
||||||
|
if not self.slug and self.title:
|
||||||
|
self.slug = slugify(self.title)
|
||||||
|
self.set_current_language(main_lang)
|
||||||
|
self.save_translations()
|
||||||
|
|
||||||
def get_title(self):
|
def get_title(self):
|
||||||
title = self.safe_translation_getter('meta_title', any_language=True)
|
title = self.safe_translation_getter('meta_title', any_language=True)
|
||||||
if not title:
|
if not title:
|
||||||
|
@ -186,34 +215,6 @@ class Post(ModelMeta, TranslatableModel):
|
||||||
def get_author(self):
|
def get_author(self):
|
||||||
return self.author
|
return self.author
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name = _('blog article')
|
|
||||||
verbose_name_plural = _('blog articles')
|
|
||||||
ordering = ('-date_published', '-date_created')
|
|
||||||
get_latest_by = 'date_published'
|
|
||||||
|
|
||||||
def __str__(self):
|
|
||||||
return self.safe_translation_getter('title')
|
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
|
||||||
super(Post, self).save(*args, **kwargs)
|
|
||||||
main_lang = self.get_current_language()
|
|
||||||
for lang in self.get_available_languages():
|
|
||||||
self.set_current_language(lang)
|
|
||||||
if not self.slug and self.title:
|
|
||||||
self.slug = slugify(self.title)
|
|
||||||
self.set_current_language(main_lang)
|
|
||||||
self.save_translations()
|
|
||||||
|
|
||||||
def get_absolute_url(self):
|
|
||||||
kwargs = {'year': self.date_published.year,
|
|
||||||
'month': '%02d' % self.date_published.month,
|
|
||||||
'day': '%02d' % self.date_published.day,
|
|
||||||
'slug': self.safe_translation_getter('slug',
|
|
||||||
language_code=get_language(),
|
|
||||||
any_language=True)}
|
|
||||||
return reverse('djangocms_blog:post-detail', kwargs=kwargs)
|
|
||||||
|
|
||||||
def thumbnail_options(self):
|
def thumbnail_options(self):
|
||||||
if self.main_image_thumbnail_id:
|
if self.main_image_thumbnail_id:
|
||||||
return self.main_image_thumbnail.as_dict
|
return self.main_image_thumbnail.as_dict
|
||||||
|
@ -244,20 +245,20 @@ class BasePostPlugin(CMSPlugin):
|
||||||
return posts
|
return posts
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return unicode(self.latest_posts)
|
return force_text(self.latest_posts)
|
||||||
|
|
||||||
|
|
||||||
class LatestPostsPlugin(BasePostPlugin):
|
class LatestPostsPlugin(BasePostPlugin):
|
||||||
|
|
||||||
latest_posts = models.IntegerField(_(u'Articles'), default=get_setting('LATEST_POSTS'),
|
latest_posts = models.IntegerField(_(u'articles'), default=get_setting('LATEST_POSTS'),
|
||||||
help_text=_('The number of latests articles to be displayed.'))
|
help_text=_(u'The number of latests articles to be displayed.'))
|
||||||
tags = models.ManyToManyField('taggit.Tag', blank=True,
|
tags = models.ManyToManyField('taggit.Tag', blank=True, verbose_name=_(u'filter by tag'),
|
||||||
help_text=_('Show only the blog articles tagged with chosen tags.'))
|
help_text=_(u'Show only the blog articles tagged with chosen tags.'))
|
||||||
categories = models.ManyToManyField('BlogCategory', blank=True,
|
categories = models.ManyToManyField('BlogCategory', blank=True, verbose_name=_(u'filter by category'),
|
||||||
help_text=_('Show only the blog articles tagged with chosen categories.'))
|
help_text=_(u'Show only the blog articles tagged with chosen categories.'))
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return u'%s latest articles by tag' % self.latest_posts
|
return _(u'%s latest articles by tag') % self.latest_posts
|
||||||
|
|
||||||
def copy_relations(self, oldinstance):
|
def copy_relations(self, oldinstance):
|
||||||
self.tags = oldinstance.tags.all()
|
self.tags = oldinstance.tags.all()
|
||||||
|
@ -273,16 +274,16 @@ class LatestPostsPlugin(BasePostPlugin):
|
||||||
|
|
||||||
class AuthorEntriesPlugin(BasePostPlugin):
|
class AuthorEntriesPlugin(BasePostPlugin):
|
||||||
authors = models.ManyToManyField(
|
authors = models.ManyToManyField(
|
||||||
dj_settings.AUTH_USER_MODEL, verbose_name=_('Authors'),
|
dj_settings.AUTH_USER_MODEL, verbose_name=_('authors'),
|
||||||
limit_choices_to={'djangocms_blog_post_author__publish': True}
|
limit_choices_to={'djangocms_blog_post_author__publish': True}
|
||||||
)
|
)
|
||||||
latest_posts = models.IntegerField(
|
latest_posts = models.IntegerField(
|
||||||
_(u'Articles'), default=get_setting('LATEST_POSTS'),
|
_(u'articles'), default=get_setting('LATEST_POSTS'),
|
||||||
help_text=_('The number of author articles to be displayed.')
|
help_text=_(u'The number of author articles to be displayed.')
|
||||||
)
|
)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return u'%s latest articles by author' % self.latest_posts
|
return _(u'%s latest articles by author') % self.latest_posts
|
||||||
|
|
||||||
def copy_relations(self, oldinstance):
|
def copy_relations(self, oldinstance):
|
||||||
self.authors = oldinstance.authors.all()
|
self.authors = oldinstance.authors.all()
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
from .views import (PostListView, PostDetailView, TaggedListView,
|
|
||||||
AuthorEntriesView, PostArchiveView, CategoryEntriesView)
|
|
||||||
from .feeds import LatestEntriesFeed, TagFeed
|
from .feeds import LatestEntriesFeed, TagFeed
|
||||||
|
from .views import (AuthorEntriesView, CategoryEntriesView, PostArchiveView, PostDetailView,
|
||||||
|
PostListView, TaggedListView)
|
||||||
|
|
||||||
urlpatterns = patterns(
|
urlpatterns = patterns(
|
||||||
'',
|
'',
|
||||||
|
|
|
@ -3,11 +3,10 @@ from django.contrib.auth import get_user_model
|
||||||
from django.core.urlresolvers import resolve
|
from django.core.urlresolvers import resolve
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import get_language
|
from django.utils.translation import get_language
|
||||||
from django.views.generic import ListView, DetailView
|
from django.views.generic import DetailView, ListView
|
||||||
|
from parler.views import TranslatableSlugMixin, ViewUrlMixin
|
||||||
|
|
||||||
from parler.views import ViewUrlMixin, TranslatableSlugMixin
|
from .models import BLOG_CURRENT_POST_IDENTIFIER, BlogCategory, Post
|
||||||
|
|
||||||
from .models import Post, BlogCategory, BLOG_CURRENT_POST_IDENTIFIER
|
|
||||||
from .settings import get_setting
|
from .settings import get_setting
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
15
setup.cfg
15
setup.cfg
|
@ -1,7 +1,14 @@
|
||||||
|
[flake8]
|
||||||
|
exclude = .git,*.egg-info,build,dist,.tox,djangocms_blog/migrations/*,djangocms_blog/south_migrations/*
|
||||||
|
ignore = E501
|
||||||
|
max-line-length = 99
|
||||||
|
|
||||||
|
[metadata]
|
||||||
|
license-file = LICENSE
|
||||||
|
|
||||||
[wheel]
|
[wheel]
|
||||||
universal = 1
|
universal = 1
|
||||||
|
|
||||||
[flake8]
|
[isort]
|
||||||
max-line-length = 100
|
line_length = 99
|
||||||
ignore = E501
|
skip = migrations, south_migrations
|
||||||
exclude = djangocms_blog/migrations/*
|
|
11
setup.py
11
setup.py
|
@ -15,9 +15,9 @@ version = djangocms_blog.__version__
|
||||||
|
|
||||||
if sys.argv[-1] == 'publish':
|
if sys.argv[-1] == 'publish':
|
||||||
os.system('python setup.py sdist upload')
|
os.system('python setup.py sdist upload')
|
||||||
print("You probably want to also tag the version now:")
|
print('You probably want to also tag the version now:')
|
||||||
print(" git tag -a %s -m 'version %s'" % (version, version))
|
print(' git tag -a %s -m "version %s"' % (version, version))
|
||||||
print(" git push --tags")
|
print(' git push --tags')
|
||||||
sys.exit()
|
sys.exit()
|
||||||
|
|
||||||
readme = open('README.rst').read()
|
readme = open('README.rst').read()
|
||||||
|
@ -50,7 +50,7 @@ setup(
|
||||||
'django-meta>=0.2',
|
'django-meta>=0.2',
|
||||||
'django-meta-mixin>=0.1.1',
|
'django-meta-mixin>=0.1.1',
|
||||||
],
|
],
|
||||||
license="BSD",
|
license='BSD',
|
||||||
zip_safe=False,
|
zip_safe=False,
|
||||||
keywords='djangocms-blog, blog, django, wordpress, multilingual',
|
keywords='djangocms-blog, blog, django, wordpress, multilingual',
|
||||||
test_suite='cms_helper.run',
|
test_suite='cms_helper.run',
|
||||||
|
@ -63,9 +63,10 @@ setup(
|
||||||
'Framework :: Django',
|
'Framework :: Django',
|
||||||
'Framework :: Django :: 1.6',
|
'Framework :: Django :: 1.6',
|
||||||
'Framework :: Django :: 1.7',
|
'Framework :: Django :: 1.7',
|
||||||
"Programming Language :: Python :: 2",
|
'Programming Language :: Python :: 2',
|
||||||
'Programming Language :: Python :: 2.6',
|
'Programming Language :: Python :: 2.6',
|
||||||
'Programming Language :: Python :: 2.7',
|
'Programming Language :: Python :: 2.7',
|
||||||
|
'Programming Language :: Python :: 3',
|
||||||
'Programming Language :: Python :: 3.3',
|
'Programming Language :: Python :: 3.3',
|
||||||
'Programming Language :: Python :: 3.4',
|
'Programming Language :: Python :: 3.4',
|
||||||
],
|
],
|
||||||
|
|
|
@ -22,6 +22,7 @@ from djangocms_blog.models import BlogCategory, Post
|
||||||
|
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
def _get_cat_pk(lang, name):
|
def _get_cat_pk(lang, name):
|
||||||
return lambda: BlogCategory.objects.translated(lang, name=name).get().pk
|
return lambda: BlogCategory.objects.translated(lang, name=name).get().pk
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import copy
|
import copy
|
||||||
|
|
||||||
from django.utils.translation import activate
|
from django.utils.translation import activate
|
||||||
|
from djangocms_blog.views import CategoryEntriesView, PostDetailView
|
||||||
from menus.menu_pool import menu_pool
|
from menus.menu_pool import menu_pool
|
||||||
from parler.utils.context import switch_language
|
from parler.utils.context import switch_language
|
||||||
from djangocms_blog.views import PostDetailView, CategoryEntriesView
|
|
||||||
from . import BaseTest
|
from . import BaseTest
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from copy import deepcopy
|
||||||
|
|
||||||
|
import parler
|
||||||
from cms.api import add_plugin
|
from cms.api import add_plugin
|
||||||
from cms.utils.copy_plugins import copy_plugins_to
|
from cms.utils.copy_plugins import copy_plugins_to
|
||||||
from cms.utils.plugins import downcast_plugins
|
from cms.utils.plugins import downcast_plugins
|
||||||
from copy import deepcopy
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.contrib.messages.middleware import MessageMiddleware
|
from django.contrib.messages.middleware import MessageMiddleware
|
||||||
|
@ -10,15 +12,13 @@ from django.contrib.sites.models import Site
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from django.utils.translation import get_language, override
|
from django.utils.translation import get_language, override
|
||||||
import parler
|
|
||||||
from taggit.models import Tag
|
|
||||||
|
|
||||||
from djangocms_blog.models import Post
|
from djangocms_blog.models import Post
|
||||||
from djangocms_blog.settings import get_setting
|
from djangocms_blog.settings import get_setting
|
||||||
|
from taggit.models import Tag
|
||||||
|
|
||||||
|
from djangocms_helper.utils import CMS_30
|
||||||
|
|
||||||
from . import BaseTest
|
from . import BaseTest
|
||||||
from djangocms_helper.utils import CMS_30
|
|
||||||
|
|
||||||
|
|
||||||
class AdminTest(BaseTest):
|
class AdminTest(BaseTest):
|
||||||
|
@ -215,7 +215,7 @@ class ModelsTest(BaseTest):
|
||||||
self.assertEqual(len(Post.objects.archived()), 1)
|
self.assertEqual(len(Post.objects.archived()), 1)
|
||||||
|
|
||||||
# counting with language fallback enabled
|
# counting with language fallback enabled
|
||||||
post = self._get_post(self.data['it'][0], post1, 'it')
|
self._get_post(self.data['it'][0], post1, 'it')
|
||||||
self.assertEqual(len(Post.objects.filter_by_language('it')), 2)
|
self.assertEqual(len(Post.objects.filter_by_language('it')), 2)
|
||||||
|
|
||||||
# No fallback
|
# No fallback
|
||||||
|
@ -264,7 +264,7 @@ class ModelsTest(BaseTest):
|
||||||
|
|
||||||
def test_plugin_latest(self):
|
def test_plugin_latest(self):
|
||||||
post1 = self._get_post(self.data['en'][0])
|
post1 = self._get_post(self.data['en'][0])
|
||||||
post2 = self._get_post(self.data['en'][1])
|
self._get_post(self.data['en'][1])
|
||||||
post1.tags.add('tag 1')
|
post1.tags.add('tag 1')
|
||||||
post1.save()
|
post1.save()
|
||||||
request = self.get_page_request('/', AnonymousUser(), r'/en/blog/', edit=False)
|
request = self.get_page_request('/', AnonymousUser(), r'/en/blog/', edit=False)
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from cms.api import add_plugin
|
from cms.api import add_plugin
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
from djangocms_blog.models import BlogCategory
|
||||||
from taggit.models import Tag
|
from taggit.models import Tag
|
||||||
|
|
||||||
from . import BaseTest
|
from . import BaseTest
|
||||||
from djangocms_blog.models import BlogCategory
|
|
||||||
|
|
||||||
|
|
||||||
class PluginTest(BaseTest):
|
class PluginTest(BaseTest):
|
||||||
|
@ -33,7 +34,6 @@ class PluginTest(BaseTest):
|
||||||
self.assertTrue(rendered.find('<article id="post-first-post"') > -1)
|
self.assertTrue(rendered.find('<article id="post-first-post"') > -1)
|
||||||
self.assertTrue(rendered.find(post1.get_absolute_url()) > -1)
|
self.assertTrue(rendered.find(post1.get_absolute_url()) > -1)
|
||||||
|
|
||||||
|
|
||||||
category_2 = BlogCategory.objects.create(name=u'category 2')
|
category_2 = BlogCategory.objects.create(name=u'category 2')
|
||||||
category_2.set_current_language('it', initialize=True)
|
category_2.set_current_language('it', initialize=True)
|
||||||
category_2.name = u'categoria 2'
|
category_2.name = u'categoria 2'
|
||||||
|
|
|
@ -3,7 +3,6 @@ from cms.toolbar.items import ModalItem
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from djangocms_blog.models import BLOG_CURRENT_POST_IDENTIFIER
|
from djangocms_blog.models import BLOG_CURRENT_POST_IDENTIFIER
|
||||||
|
|
||||||
|
|
||||||
from . import BaseTest
|
from . import BaseTest
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,4 +23,3 @@ class ToolbarTest(BaseTest):
|
||||||
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_changelist'))), 1)
|
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_changelist'))), 1)
|
||||||
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_add'))), 1)
|
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_add'))), 1)
|
||||||
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_change', args=(post.pk,)))), 1)
|
self.assertEqual(len(blog_menu.find_items(ModalItem, url=reverse('admin:djangocms_blog_post_change', args=(post.pk,)))), 1)
|
||||||
|
|
||||||
|
|
|
@ -1,2 +1 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.utils.translation import ugettext_lazy as _
|
|
|
@ -1,16 +1,15 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
from cms.utils.conf import get_cms_setting
|
from cms.utils.conf import get_cms_setting
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import include, patterns, url
|
||||||
from django.contrib import admin
|
|
||||||
from django.conf.urls.i18n import i18n_patterns
|
from django.conf.urls.i18n import i18n_patterns
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||||
|
|
||||||
admin.autodiscover()
|
admin.autodiscover()
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns(
|
||||||
#(r'', include('django.contrib.staticfiles.urls')),
|
'',
|
||||||
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
|
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',
|
||||||
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
|
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
|
||||||
url(r'^media/cms/(?P<path>.*)$', 'django.views.static.serve',
|
url(r'^media/cms/(?P<path>.*)$', 'django.views.static.serve',
|
||||||
|
@ -21,7 +20,8 @@ urlpatterns = patterns('',
|
||||||
|
|
||||||
urlpatterns += staticfiles_urlpatterns()
|
urlpatterns += staticfiles_urlpatterns()
|
||||||
|
|
||||||
urlpatterns += i18n_patterns('',
|
urlpatterns += i18n_patterns(
|
||||||
|
'',
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
url(r'^blog/', include('djangocms_blog.urls', namespace='djangocms_blog')),
|
url(r'^blog/', include('djangocms_blog.urls', namespace='djangocms_blog')),
|
||||||
url(r'^', include('cms.urls')),
|
url(r'^', include('cms.urls')),
|
||||||
|
|
|
@ -1,16 +1,15 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django.contrib.auth.models import AnonymousUser
|
from django.contrib.auth.models import AnonymousUser
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.utils.translation import activate
|
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
|
from django.utils.translation import activate
|
||||||
|
from djangocms_blog.feeds import LatestEntriesFeed, TagFeed
|
||||||
|
from djangocms_blog.sitemaps import BlogSitemap
|
||||||
|
from djangocms_blog.views import (AuthorEntriesView, CategoryEntriesView, PostArchiveView,
|
||||||
|
PostDetailView, PostListView, TaggedListView)
|
||||||
from parler.tests.utils import override_parler_settings
|
from parler.tests.utils import override_parler_settings
|
||||||
from parler.utils.conf import add_default_language_settings
|
from parler.utils.conf import add_default_language_settings
|
||||||
from parler.utils.context import switch_language
|
from parler.utils.context import switch_language
|
||||||
from djangocms_blog.feeds import LatestEntriesFeed, TagFeed
|
|
||||||
from djangocms_blog.sitemaps import BlogSitemap
|
|
||||||
from djangocms_blog.views import (PostListView, PostDetailView,
|
|
||||||
PostArchiveView, CategoryEntriesView,
|
|
||||||
AuthorEntriesView, TaggedListView)
|
|
||||||
|
|
||||||
from . import BaseTest
|
from . import BaseTest
|
||||||
|
|
||||||
|
@ -68,7 +67,7 @@ class ViewTest(BaseTest):
|
||||||
1: (
|
1: (
|
||||||
{'code': 'en'},
|
{'code': 'en'},
|
||||||
{'code': 'it'},
|
{'code': 'it'},
|
||||||
{'code': 'fr', 'hide_untranslated': True,},
|
{'code': 'fr', 'hide_untranslated': True},
|
||||||
),
|
),
|
||||||
'default': {
|
'default': {
|
||||||
'fallback': 'en',
|
'fallback': 'en',
|
||||||
|
@ -82,7 +81,7 @@ class ViewTest(BaseTest):
|
||||||
view_obj.request = request
|
view_obj.request = request
|
||||||
view_obj.kwargs = {}
|
view_obj.kwargs = {}
|
||||||
view_obj.object_list = view_obj.get_queryset()
|
view_obj.object_list = view_obj.get_queryset()
|
||||||
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
self.assertEqual(view_obj.get_queryset().count(), 2)
|
self.assertEqual(view_obj.get_queryset().count(), 2)
|
||||||
|
|
||||||
PARLER_FALLBACK = add_default_language_settings(PARLER_FALLBACK)
|
PARLER_FALLBACK = add_default_language_settings(PARLER_FALLBACK)
|
||||||
|
@ -94,7 +93,7 @@ class ViewTest(BaseTest):
|
||||||
view_obj.request = request
|
view_obj.request = request
|
||||||
view_obj.kwargs = {}
|
view_obj.kwargs = {}
|
||||||
view_obj.object_list = view_obj.get_queryset()
|
view_obj.object_list = view_obj.get_queryset()
|
||||||
context = view_obj.get_context_data(object_list=view_obj.object_list)
|
view_obj.get_context_data(object_list=view_obj.object_list)
|
||||||
self.assertEqual(view_obj.get_queryset().count(), 0)
|
self.assertEqual(view_obj.get_queryset().count(), 0)
|
||||||
|
|
||||||
def test_post_detail_view(self):
|
def test_post_detail_view(self):
|
||||||
|
|
10
tox.ini
10
tox.ini
|
@ -1,5 +1,5 @@
|
||||||
[tox]
|
[tox]
|
||||||
envlist = py{26}-django{16}-cms{30,31,32},py{27,33,34}-django{16,17}-cms{30,31,32}
|
envlist = py{26}-django{16}-cms{30,31,32},py{27,33,34}-django{16,17}-cms{30,31,32},isort,pep8
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
commands = {env:COMMAND:python} setup.py test
|
commands = {env:COMMAND:python} setup.py test
|
||||||
|
@ -12,3 +12,11 @@ deps =
|
||||||
cms32: https://github.com/divio/django-cms/archive/develop.zip
|
cms32: https://github.com/divio/django-cms/archive/develop.zip
|
||||||
py26: unittest2
|
py26: unittest2
|
||||||
-r{toxinidir}/requirements-test.txt
|
-r{toxinidir}/requirements-test.txt
|
||||||
|
|
||||||
|
[testenv:isort]
|
||||||
|
deps = isort
|
||||||
|
commands = isort -c -rc djangocms_blog tests
|
||||||
|
|
||||||
|
[testenv:pep8]
|
||||||
|
deps = flake8
|
||||||
|
commands = flake8
|
||||||
|
|
Loading…
Add table
Reference in a new issue