def __init__(self, *args, **kwargs):
        self.base_fields['meta_description'].validators = [
            MaxLengthValidator(get_setting('META_DESCRIPTION_LENGTH'))
        ]
        original_attrs = self.base_fields['meta_description'].widget.attrs
        if 'cols' in original_attrs:
            del original_attrs['cols']
        if 'rows' in original_attrs:
            del original_attrs['rows']
        original_attrs['maxlength'] = get_setting('META_DESCRIPTION_LENGTH')
        self.base_fields['meta_description'].widget = forms.TextInput(original_attrs)
        super(CategoryAdminForm, self).__init__(*args, **kwargs)

        if 'parent' in self.fields:
            qs = self.fields['parent'].queryset
            if self.instance.pk:
                qs = qs.exclude(
                    pk__in=[self.instance.pk] + [child.pk for child in self.instance.descendants()]
                )
            config = None
            if getattr(self.instance, 'app_config_id', None):
                qs = qs.namespace(self.instance.app_config.namespace)
            elif 'app_config' in self.initial:
                config = BlogConfig.objects.get(pk=self.initial['app_config'])
            elif self.data.get('app_config', None):
                config = BlogConfig.objects.get(pk=self.data['app_config'])
            if config:
                qs = qs.namespace(config.namespace)
            self.fields['parent'].queryset = qs
Beispiel #2
0
    def test_sitemap_config(self):
        posts = self.get_posts()
        self.app_config_1.app_data.config.sitemap_changefreq = 'daily'
        self.app_config_1.app_data.config.sitemap_priority = '0.2'
        self.app_config_1.save()

        sitemap = BlogSitemap()
        self.assertEqual(len(sitemap.items()), 4)
        for item in sitemap.items():
            self.assertEqual(sitemap.lastmod(item).date(), now().date())
            if item.app_config == self.app_config_1:
                self.assertEqual(
                    sitemap.priority(item), '0.2'
                )
                self.assertEqual(
                    sitemap.changefreq(item), 'daily'
                )
            else:
                self.assertEqual(
                    sitemap.priority(item), get_setting('SITEMAP_PRIORITY_DEFAULT')
                )
                self.assertEqual(
                    sitemap.changefreq(item), get_setting('SITEMAP_CHANGEFREQ_DEFAULT')
                )
        self.assertEqual(
            sitemap.priority(None), get_setting('SITEMAP_PRIORITY_DEFAULT')
        )
        self.assertEqual(
            sitemap.changefreq(None), get_setting('SITEMAP_CHANGEFREQ_DEFAULT')
        )
    def __init__(self, *args, **kwargs):
        self.base_fields['meta_description'].validators = [
            MaxLengthValidator(get_setting('META_DESCRIPTION_LENGTH'))
        ]
        original_attrs = self.base_fields['meta_description'].widget.attrs
        if 'cols' in original_attrs:
            del original_attrs['cols']
        if 'rows' in original_attrs:
            del original_attrs['rows']
        original_attrs['maxlength'] = get_setting('META_DESCRIPTION_LENGTH')
        self.base_fields['meta_description'].widget = forms.TextInput(original_attrs)
        self.base_fields['meta_title'].validators = [
            MaxLengthValidator(get_setting('META_TITLE_LENGTH'))
        ]
        super(PostAdminForm, self).__init__(*args, **kwargs)
        if 'categories' in self.fields:
            self.fields['categories'].queryset = self.available_categories

        if 'app_config' in self.fields:
            # Don't allow app_configs to be added here. The correct way to add an
            # apphook-config is to create an apphook on a cms Page.
            self.fields['app_config'].widget.can_add_related = False

        if self.app_config:
            self.initial['main_image_full'] = \
                self.app_config.app_data['config'].get('default_image_full')
            self.initial['main_image_thumbnail'] = \
                self.app_config.app_data['config'].get('default_image_thumbnail')
Beispiel #4
0
    def __init__(self, *args, **kwargs):
        self.base_fields['meta_description'].validators = [
            MaxLengthValidator(get_setting('META_DESCRIPTION_LENGTH'))
        ]
        original_attrs = self.base_fields['meta_description'].widget.attrs
        if 'cols' in original_attrs:
            del original_attrs['cols']
        if 'rows' in original_attrs:
            del original_attrs['rows']
        original_attrs['maxlength'] = get_setting('META_DESCRIPTION_LENGTH')
        self.base_fields['meta_description'].widget = forms.TextInput(
            original_attrs)
        self.base_fields['meta_title'].validators = [
            MaxLengthValidator(get_setting('META_TITLE_LENGTH'))
        ]
        super(PostAdminForm, self).__init__(*args, **kwargs)
        if 'categories' in self.fields:
            self.fields['categories'].queryset = self.available_categories

        if 'app_config' in self.fields:
            # Don't allow app_configs to be added here. The correct way to add an
            # apphook-config is to create an apphook on a cms Page.
            self.fields['app_config'].widget.can_add_related = False

        if self.app_config:
            self.initial['main_image_full'] = \
                self.app_config.app_data['config'].get('default_image_full')
            self.initial['main_image_thumbnail'] = \
                self.app_config.app_data['config'].get('default_image_thumbnail')
Beispiel #5
0
    def __init__(self, *args, **kwargs):
        self.base_fields['meta_description'].validators = [
            MaxLengthValidator(get_setting('META_DESCRIPTION_LENGTH'))
        ]
        original_attrs = self.base_fields['meta_description'].widget.attrs
        if 'cols' in original_attrs:
            del original_attrs['cols']
        if 'rows' in original_attrs:
            del original_attrs['rows']
        original_attrs['maxlength'] = get_setting('META_DESCRIPTION_LENGTH')
        self.base_fields['meta_description'].widget = forms.TextInput(
            original_attrs)
        super(CategoryAdminForm, self).__init__(*args, **kwargs)

        if 'parent' in self.fields:
            qs = self.fields['parent'].queryset
            if self.instance.pk:
                qs = qs.exclude(
                    pk__in=[self.instance.pk] +
                    [child.pk for child in self.instance.descendants()])
            config = None
            if getattr(self.instance, 'app_config_id', None):
                qs = qs.namespace(self.instance.app_config.namespace)
            elif 'app_config' in self.initial:
                config = BlogConfig.objects.get(pk=self.initial['app_config'])
            elif self.data.get('app_config', None):
                config = BlogConfig.objects.get(pk=self.data['app_config'])
            if config:
                qs = qs.namespace(config.namespace)
            self.fields['parent'].queryset = qs
Beispiel #6
0
    def get_context_data(self, **kwargs):
        context = super(PostListView, self).get_context_data(**kwargs)
        context['TRUNCWORDS_COUNT'] = get_setting('POSTS_LIST_TRUNCWORDS_COUNT')
        context['languages'] = settings.LANGUAGES
        context['current_language'] = get_language()

        return context
Beispiel #7
0
 def item_extra_kwargs(self, item):
     if not item:
         return {}
     language = get_language_from_request(self.request, check_path=True)
     key = item.get_cache_key(language, 'feed')
     content = cache.get(key)
     if not content:
         view = PostDetailView.as_view(instant_article=True)
         response = view(self.request,
                         slug=item.safe_translation_getter('slug'))
         response.render()
         content = self._clean_html(response.content)
         cache.set(key, content, timeout=get_setting('FEED_CACHE_TIMEOUT'))
     if item.app_config.use_abstract:
         abstract = strip_tags(item.safe_translation_getter('abstract'))
     else:
         abstract = strip_tags(item.safe_translation_getter('post_text'))
     return {
         'author': item.get_author_name(),
         'content': content,
         'date': item.date_modified,
         'date_pub': item.date_modified,
         'date_mod': item.date_modified,
         'abstract': abstract
     }
Beispiel #8
0
def get_urls():
    urls = get_setting("PERMALINK_URLS")
    details = []
    for urlconf in urls.values():
        details.append(
            path(urlconf, PostDetailView.as_view(), name="post-detail"), )
    return details
Beispiel #9
0
 def item_extra_kwargs(self, item):
     if not item:
         return {}
     language = get_language_from_request(self.request, check_path=True)
     key = item.get_cache_key(language, "feed")
     content = cache.get(key)
     if not content:
         view = PostDetailView.as_view(instant_article=True)
         response = view(self.request,
                         slug=item.safe_translation_getter("slug"))
         response.render()
         content = self._clean_html(response.content)
         cache.set(key, content, timeout=get_setting("FEED_CACHE_TIMEOUT"))
     if item.app_config.use_abstract:
         abstract = strip_tags(item.safe_translation_getter("abstract"))
     else:
         abstract = strip_tags(item.safe_translation_getter("post_text"))
     return {
         "author": item.get_author_name(),
         "content": content,
         "date": item.date_modified,
         "date_pub": item.date_modified,
         "date_mod": item.date_modified,
         "abstract": abstract,
     }
Beispiel #10
0
    def get_context_data(self, **kwargs):
        context = super(PostListView, self).get_context_data(**kwargs)
        context['TRUNCWORDS_COUNT'] = get_setting('POSTS_LIST_TRUNCWORDS_COUNT')
        context['languages'] = settings.LANGUAGES
        context['current_language'] = get_language()

        return context
Beispiel #11
0
def get_urls():
    urls = get_setting('PERMALINK_URLS')
    details = []
    for urlconf in urls.values():
        details.append(
            url(urlconf, PostDetailView.as_view(), name='post-detail'), )
    return details
def get_urls():
    urls = get_setting('PERMALINK_URLS')
    details = []
    for urlconf in urls.values():
        details.append(
            url(urlconf, PostDetailView.as_view(), name='post-detail'),
        )
    return details
Beispiel #13
0
 def forwards(self, orm):
     # Adding field 'BlogConfigTranslation.object_name'
     db.add_column('djangocms_blog_blogconfig_translation',
                   'object_name',
                   self.gf('django.db.models.fields.CharField')(
                       default=get_setting('DEFAULT_OBJECT_NAME'),
                       max_length=234),
                   keep_default=False)
Beispiel #14
0
class TagFeed(LatestEntriesFeed):
    feed_items_number = get_setting('FEED_TAGS_ITEMS')

    def get_object(self, request, tag):
        return tag  # pragma: no cover

    def items(self, obj=None):
        return Post.objects.published().filter(tags__slug=obj)[:self.feed_items_number]
Beispiel #15
0
class FBInstantArticles(LatestEntriesFeed):
    feed_type = FBInstantFeed
    feed_items_number = get_setting('FEED_INSTANT_ITEMS')

    def items(self, obj=None):
        return Post.objects.namespace(
            self.namespace
        ).published().order_by('-date_modified')[:self.feed_items_number]

    def _clean_html(self, content):
        body = BytesIO(content)
        document = etree.iterparse(body, html=True)
        for a, e in document:
            if not (e.text and e.text.strip()) and len(e) == 0 and e.tag == 'p':
                e.getparent().remove(e)
            if e.tag in ('h3', 'h4', 'h5', 'h6') and 'op-kicker' not in e.attrib.get('class', ''):
                e.tag = 'h2'
        return etree.tostring(document.root)

    def item_extra_kwargs(self, item):
        if not item:
            return {}
        language = get_language_from_request(self.request, check_path=True)
        key = item.get_cache_key(language, 'feed')
        content = cache.get(key)
        if not content:
            view = PostDetailView.as_view(instant_article=True)
            response = view(self.request, slug=item.safe_translation_getter('slug'))
            response.render()
            content = self._clean_html(response.content)
            cache.set(key, content, timeout=get_setting('FEED_CACHE_TIMEOUT'))
        if item.app_config.use_abstract:
            abstract = strip_tags(item.safe_translation_getter('abstract'))
        else:
            abstract = strip_tags(item.safe_translation_getter('post_text'))
        return {
            'author': item.get_author_name(),
            'content': content,
            'date': item.date_modified,
            'date_pub': item.date_modified,
            'date_mod': item.date_modified,
            'abstract': abstract
        }

    def item_categories(self, item):
        return [category.safe_translation_getter('name') for category in item.categories.all()]

    def item_author_name(self, item):
        return ''

    def item_author_url(self, item):
        return ''

    def item_description(self, item):
        return None

    def item_pubdate(self, item):
        return None
    def test_sitemap(self):
        self.get_pages()
        posts = self.get_posts()
        posts[0].tags.add("tag 1", "tag 2", "tag 3", "tag 4")
        posts[0].save()
        posts[1].tags.add("tag 6", "tag 2", "tag 5", "tag 8")
        posts[1].publish = True
        posts[1].save()
        posts[0].set_current_language("en")

        sitemap = BlogSitemap()
        self.assertEqual(len(sitemap.items()), 6)
        for item in sitemap.items():
            self.assertEqual(sitemap.lastmod(item).date(), now().date())
            self.assertEqual(sitemap.priority(item), get_setting("SITEMAP_PRIORITY_DEFAULT"))
            self.assertEqual(sitemap.changefreq(item), get_setting("SITEMAP_CHANGEFREQ_DEFAULT"))
            with smart_override(item.get_current_language()):
                self.assertEqual(sitemap.location(item), item.get_absolute_url())
    def test_sitemap_config(self):
        self.get_pages()
        self.get_posts()
        self.app_config_1.app_data.config.sitemap_changefreq = "daily"
        self.app_config_1.app_data.config.sitemap_priority = "0.2"
        self.app_config_1.save()

        sitemap = BlogSitemap()
        self.assertEqual(len(sitemap.items()), 4)
        for item in sitemap.items():
            self.assertEqual(sitemap.lastmod(item).date(), now().date())
            if item.app_config == self.app_config_1:
                self.assertEqual(sitemap.priority(item), "0.2")
                self.assertEqual(sitemap.changefreq(item), "daily")
            else:
                self.assertEqual(sitemap.priority(item), get_setting("SITEMAP_PRIORITY_DEFAULT"))
                self.assertEqual(sitemap.changefreq(item), get_setting("SITEMAP_CHANGEFREQ_DEFAULT"))
        self.assertEqual(sitemap.priority(None), get_setting("SITEMAP_PRIORITY_DEFAULT"))
        self.assertEqual(sitemap.changefreq(None), get_setting("SITEMAP_CHANGEFREQ_DEFAULT"))
Beispiel #18
0
    def test_sitemap(self):
        posts = self.get_posts()
        self.get_pages()
        posts[0].tags.add('tag 1', 'tag 2', 'tag 3', 'tag 4')
        posts[0].save()
        posts[1].tags.add('tag 6', 'tag 2', 'tag 5', 'tag 8')
        posts[1].publish = True
        posts[1].save()
        posts[0].set_current_language('en')

        sitemap = BlogSitemap()
        self.assertEqual(len(sitemap.items()), 6)
        for item in sitemap.items():
            self.assertEqual(sitemap.lastmod(item).date(), now().date())
            self.assertEqual(
                sitemap.priority(item), get_setting('SITEMAP_PRIORITY_DEFAULT')
            )
            self.assertEqual(
                sitemap.changefreq(item), get_setting('SITEMAP_CHANGEFREQ_DEFAULT')
            )
            with smart_override(item.get_current_language()):
                self.assertEqual(
                    sitemap.location(item), item.get_absolute_url()
                )
Beispiel #19
0
class LatestEntriesFeed(Feed):
    feed_type = Rss201rev2Feed
    feed_items_number = get_setting('FEED_LATEST_ITEMS')

    def __call__(self, request, *args, **kwargs):
        self.request = request
        self.namespace, self.config = get_app_instance(request)
        return super(LatestEntriesFeed, self).__call__(request, *args,
                                                       **kwargs)

    def link(self):
        return reverse('%s:posts-latest' % self.namespace,
                       current_app=self.namespace)

    def title(self):
        return Site.objects.get_current().name

    def description(self):
        return _('Blog articles on %(site_name)s') % {
            'site_name': Site.objects.get_current().name
        }

    def items(self, obj=None):
        return Post.objects.namespace(self.namespace).published().order_by(
            '-date_published')[:self.feed_items_number]

    def item_title(self, item):
        return mark_safe(item.safe_translation_getter('title'))

    def item_description(self, item):
        if item.app_config.use_abstract:
            return mark_safe(item.safe_translation_getter('abstract'))
        return mark_safe(item.safe_translation_getter('post_text'))

    def item_updateddate(self, item):
        return item.date_modified

    def item_pubdate(self, item):
        return item.date_published

    def item_guid(self, item):
        return item.guid

    def item_author_name(self, item):
        return item.get_author_name()

    def item_author_url(self, item):
        return item.get_author_url()
Beispiel #20
0
class LiveblogPlugin(TextPlugin):
    module = get_setting("PLUGIN_MODULE_NAME")
    name = _("Liveblog item")
    model = Liveblog
    fields = ("title", "publish", "body", "post_date")
    render_template = "liveblog/plugins/liveblog.html"

    def save_model(self, request, obj, form, change):
        super().save_model(request, obj, form, change)
        if obj.publish:
            obj.send(request)

    def render(self, context, instance, placeholder):
        context = super().render(context, instance, placeholder)
        instance.content = context["body"]
        context["instance"] = instance
        return context
Beispiel #21
0
class LiveblogPlugin(TextPlugin):
    module = get_setting('PLUGIN_MODULE_NAME')
    name = _('Liveblog item')
    model = Liveblog
    fields = ('title', 'publish', 'body', 'post_date')
    render_template = 'liveblog/plugins/liveblog.html'

    def save_model(self, request, obj, form, change):
        super(LiveblogPlugin, self).save_model(request, obj, form, change)
        if obj.publish:
            obj.send(request)

    def render(self, context, instance, placeholder):
        context = super(LiveblogPlugin, self).render(context, instance,
                                                     placeholder)
        instance.content = context['body']
        context['instance'] = instance
        return context
Beispiel #22
0
    def setUp(self):
        super(PostListViewUngleichTest, self).setUp()
        self.url = reverse('ungleich:post-list')
        self.view = PostListViewUngleich
        self.expected_template = 'djangocms_blog/post_list_ungleich.html'
        activate(self.EN_LANGUAGE_CODE)
        en_post_titles = ['post-title-1', 'post-title-2']
        self.en_posts = [mommy.make(Post, title=x, publish=True) for x in en_post_titles]
        # activate DE language in order to create DE POSTS
        activate(self.DE_LANGUAGE_CODE)
        de_post_titles = ['post-title-3', 'post-title-4']
        self.de_posts = [mommy.make(Post, title=x, publish=True) for x in de_post_titles]

        self.expected_context = {
            'TRUNCWORDS_COUNT': get_setting('POSTS_LIST_TRUNCWORDS_COUNT'),
            'languages': settings.LANGUAGES,
            'current_language': get_language()

        }
Beispiel #23
0
    def setUp(self):
        super(PostListViewUngleichTest, self).setUp()
        self.url = reverse('ungleich:post-list')
        self.view = PostListViewUngleich
        self.expected_template = 'djangocms_blog/post_list_ungleich.html'
        activate(self.EN_LANGUAGE_CODE)
        en_post_titles = ['post-title-1', 'post-title-2']
        self.en_posts = [
            mommy.make(Post, title=x, publish=True) for x in en_post_titles
        ]
        # activate DE language in order to create DE POSTS
        activate(self.DE_LANGUAGE_CODE)
        de_post_titles = ['post-title-3', 'post-title-4']
        self.de_posts = [
            mommy.make(Post, title=x, publish=True) for x in de_post_titles
        ]

        self.expected_context = {
            'TRUNCWORDS_COUNT': get_setting('POSTS_LIST_TRUNCWORDS_COUNT'),
            'languages': settings.LANGUAGES,
            'current_language': get_language()
        }
 def item_extra_kwargs(self, item):
     if not item:
         return {}
     language = get_language_from_request(self.request, check_path=True)
     key = item.get_cache_key(language, 'feed')
     content = cache.get(key)
     if not content:
         view = PostDetailView.as_view(instant_article=True)
         response = view(self.request, slug=item.safe_translation_getter('slug'))
         response.render()
         content = self._clean_html(response.content)
         cache.set(key, content, timeout=get_setting('FEED_CACHE_TIMEOUT'))
     if item.app_config.use_abstract:
         abstract = strip_tags(item.safe_translation_getter('abstract'))
     else:
         abstract = strip_tags(item.safe_translation_getter('post_text'))
     return {
         'author': item.get_author_name(),
         'content': content,
         'date': item.date_modified,
         'date_pub': item.date_modified,
         'date_mod': item.date_modified,
         'abstract': abstract
     }
Beispiel #25
0
    def get_queryset(self):
        language = get_language()
        if self.category:
            blog_category = (
                BlogCategory
                ._default_manager
                .language(language)
                .filter(
                    translations__language_code=language,
                    translations__slug=self.category
                )
            )

            queryset = (self.model
                        .objects
                        .filter(categories=blog_category, publish=True)
                        .translated(language))
        else:
            queryset = (self.model
                            .objects
                            .filter(publish=True)
                            .translated(language))
        setattr(self.request, get_setting('CURRENT_NAMESPACE'), self.config)
        return queryset
class Migration(migrations.Migration):

    dependencies = [
        ("djangocms_blog", "0010_auto_20150923_1151"),
    ]

    operations = [
        migrations.AddField(
            model_name="blogconfigtranslation",
            name="object_name",
            field=models.CharField(verbose_name="object name",
                                   default=get_setting("DEFAULT_OBJECT_NAME"),
                                   max_length=234),
        ),
        migrations.AlterField(
            model_name="authorentriesplugin",
            name="app_config",
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                blank=True,
                help_text=
                "When selecting a value, the form is reloaded to get the updated default",
                to="djangocms_blog.BlogConfig",
                verbose_name="app. config",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="blogcategory",
            name="app_config",
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                help_text=
                "When selecting a value, the form is reloaded to get the updated default",
                to="djangocms_blog.BlogConfig",
                verbose_name="app. config",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="genericblogplugin",
            name="app_config",
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                blank=True,
                help_text=
                "When selecting a value, the form is reloaded to get the updated default",
                to="djangocms_blog.BlogConfig",
                verbose_name="app. config",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="latestpostsplugin",
            name="app_config",
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                blank=True,
                help_text=
                "When selecting a value, the form is reloaded to get the updated default",
                to="djangocms_blog.BlogConfig",
                verbose_name="app. config",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="post",
            name="app_config",
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                help_text=
                "When selecting a value, the form is reloaded to get the updated default",
                to="djangocms_blog.BlogConfig",
                verbose_name="app. config",
                null=True,
            ),
        ),
        migrations.AlterField(
            model_name="post",
            name="date_published",
            field=models.DateTimeField(verbose_name="published since",
                                       default=django.utils.timezone.now),
        ),
        migrations.AlterField(
            model_name="post",
            name="date_published_end",
            field=models.DateTimeField(blank=True,
                                       verbose_name="published until",
                                       null=True),
        ),
    ]
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models

from djangocms_blog.settings import get_setting

BLOG_PLUGIN_TEMPLATE_FOLDERS = get_setting('PLUGIN_TEMPLATE_FOLDERS')


class Migration(migrations.Migration):

    dependencies = [
        ('djangocms_blog', '0023_auto_20160626_1539'),
    ]

    operations = [
        migrations.AddField(
            model_name='authorentriesplugin',
            name='template_folder',
            field=models.CharField(default='plugins', verbose_name='Plugin template', max_length=200, help_text='Select plugin template to load for this instance', choices=BLOG_PLUGIN_TEMPLATE_FOLDERS),
        ),
        migrations.AddField(
            model_name='genericblogplugin',
            name='template_folder',
            field=models.CharField(default='plugins', verbose_name='Plugin template', max_length=200, help_text='Select plugin template to load for this instance', choices=BLOG_PLUGIN_TEMPLATE_FOLDERS),
        ),
        migrations.AddField(
            model_name='latestpostsplugin',
            name='template_folder',
            field=models.CharField(default='plugins', verbose_name='Plugin template', max_length=200, help_text='Select plugin template to load for this instance', choices=BLOG_PLUGIN_TEMPLATE_FOLDERS),
Beispiel #28
0
    def test_model_attributes(self):
        self.get_pages()

        self.app_config_1.app_data.config.gplus_author = 'RandomJoe'
        self.app_config_1.save()

        post = self._get_post(self._post_data[0]['en'])
        post = self._get_post(self._post_data[0]['it'], post, 'it')
        post.main_image = self.create_filer_image_object()
        post.publish = True
        post.save()
        post.set_current_language('en')
        meta_en = post.as_meta()
        self.assertEqual(meta_en.og_type, get_setting('FB_TYPE'))
        self.assertEqual(meta_en.title, post.title)
        self.assertTrue(meta_en.url.endswith(post.get_absolute_url()))
        self.assertEqual(meta_en.description, post.meta_description)
        self.assertEqual(meta_en.keywords, post.meta_keywords.split(','))
        self.assertEqual(meta_en.published_time, post.date_published)
        self.assertEqual(meta_en.locale, 'en')
        self.assertEqual(meta_en.twitter_site, '')
        self.assertEqual(meta_en.twitter_author, '')
        self.assertEqual(meta_en.twitter_type, 'summary')
        self.assertEqual(meta_en.gplus_author, 'RandomJoe')
        self.assertEqual(meta_en.gplus_type, 'Blog')
        self.assertEqual(meta_en.og_type, 'Article')
        self.assertEqual(meta_en.facebook_app_id, None)
        post.set_current_language('it')
        meta_it = post.as_meta()
        self.assertEqual(meta_it.title, post.title)
        self.assertTrue(meta_it.url.endswith(post.get_absolute_url()))
        self.assertNotEqual(meta_it.title, meta_en.title)
        self.assertEqual(meta_it.description, post.meta_description)

        with override('en'):
            post.set_current_language(get_language())
            kwargs = {'year': post.date_published.year,
                      'month': '%02d' % post.date_published.month,
                      'day': '%02d' % post.date_published.day,
                      'slug': post.safe_translation_getter('slug', any_language=get_language())}
            url_en = reverse(
                '%s:post-detail' % self.app_config_1.namespace,
                kwargs=kwargs,
                current_app=self.app_config_1.namespace
            )
            self.assertEqual(url_en, post.get_absolute_url())

        with override('it'):
            post.set_current_language(get_language())
            kwargs = {'year': post.date_published.year,
                      'month': '%02d' % post.date_published.month,
                      'day': '%02d' % post.date_published.day,
                      'slug': post.safe_translation_getter('slug', any_language=get_language())}
            url_it = reverse(
                '%s:post-detail' % self.app_config_1.namespace,
                kwargs=kwargs,
                current_app=self.app_config_1.namespace
            )
            self.assertEqual(url_it, post.get_absolute_url())
            self.assertNotEqual(url_it, url_en)

            self.assertEqual(post.get_full_url(), 'http://example.com%s' % url_it)
        self.assertEqual(post.get_image_full_url(), 'http://example.com%s' % post.main_image.url)

        self.assertEqual(post.thumbnail_options(), get_setting('IMAGE_THUMBNAIL_SIZE'))
        self.assertEqual(post.full_image_options(), get_setting('IMAGE_FULL_SIZE'))

        post.main_image_thumbnail = self.thumb_1
        post.main_image_full = self.thumb_2
        self.assertEqual(post.thumbnail_options(), {
            'size': (100, 100),
            'width': 100, 'height': 100,
            'crop': True,
            'upscale': False
        })
        self.assertEqual(post.full_image_options(), {
            'size': (200, 200),
            'width': 200, 'height': 200,
            'crop': False,
            'upscale': False
        })

        post.set_current_language('en')
        post.meta_title = 'meta title'
        self.assertEqual(post.get_title(), 'meta title')

        # Assess is_published property
        post.publish = False
        post.save()
        self.assertFalse(post.is_published)

        post.publish = True
        post.date_published = now() + timedelta(days=1)
        post.date_published_end = None
        post.save()
        self.assertFalse(post.is_published)

        post.publish = True
        post.date_published = now() - timedelta(days=1)
        post.date_published_end = now() - timedelta(minutes=1)
        post.save()
        self.assertFalse(post.is_published)

        post.publish = True
        post.date_published = now() - timedelta(days=1)
        post.date_published_end = None
        post.save()
        self.assertTrue(post.is_published)

        post.publish = True
        post.date_published = now() - timedelta(days=1)
        post.date_published_end = now() + timedelta(minutes=1)
        post.save()
        self.assertTrue(post.is_published)

        post.publish = False
        post.date_published = now() - timedelta(days=1)
        post.date_published_end = None
        post.save()
        self.assertFalse(post.is_published)

        post.publish = False
        post.date_published = now() - timedelta(days=1)
        post.date_published_end = now() + timedelta(minutes=1)
        post.save()
        self.assertFalse(post.is_published)
Beispiel #29
0
 def get_paginate_by(self, queryset):
     return get_setting('PAGINATION')
Beispiel #30
0
 def get_queryset(self):
     language = get_language()
     queryset = self.model.objects.filter(publish=True).translated(language)
     setattr(self.request, get_setting('CURRENT_NAMESPACE'), self.config)
     return queryset
Beispiel #31
0
class FBInstantArticles(LatestEntriesFeed):
    feed_type = FBInstantFeed
    feed_items_number = get_setting("FEED_INSTANT_ITEMS")

    def items(self, obj=None):
        return Post.objects.namespace(self.namespace).published().order_by(
            "-date_modified")[:self.feed_items_number]

    def _clean_html(self, content):
        body = BytesIO(content)
        document = etree.iterparse(body, html=True)
        for _a, element in document:
            if not (element.text and element.text.strip()) and len(
                    element) == 0 and element.tag == "p":
                element.getparent().remove(element)
            if element.tag in ("h3", "h4", "h5",
                               "h6") and "op-kicker" not in element.attrib.get(
                                   "class", ""):
                element.tag = "h2"
        return etree.tostring(document.root)

    def item_extra_kwargs(self, item):
        if not item:
            return {}
        language = get_language_from_request(self.request, check_path=True)
        key = item.get_cache_key(language, "feed")
        content = cache.get(key)
        if not content:
            view = PostDetailView.as_view(instant_article=True)
            response = view(self.request,
                            slug=item.safe_translation_getter("slug"))
            response.render()
            content = self._clean_html(response.content)
            cache.set(key, content, timeout=get_setting("FEED_CACHE_TIMEOUT"))
        if item.app_config.use_abstract:
            abstract = strip_tags(item.safe_translation_getter("abstract"))
        else:
            abstract = strip_tags(item.safe_translation_getter("post_text"))
        return {
            "author": item.get_author_name(),
            "content": content,
            "date": item.date_modified,
            "date_pub": item.date_modified,
            "date_mod": item.date_modified,
            "abstract": abstract,
        }

    def item_categories(self, item):
        return [
            category.safe_translation_getter("name")
            for category in item.categories.all()
        ]

    def item_author_name(self, item):
        return ""

    def item_author_url(self, item):
        return ""

    def item_description(self, item):
        return None

    def item_pubdate(self, item):
        return None
Beispiel #32
0
 def get_queryset(self):
     language = get_language()
     queryset = self.model.objects.filter(publish=True).translated(language)
     setattr(self.request, get_setting('CURRENT_NAMESPACE'), self.config)
     return queryset
Beispiel #33
0
    def test_model_attributes(self):
        post = self._get_post(self.data['en'][0])
        post = self._get_post(self.data['it'][0], post, 'it')
        post.main_image = self.img
        post.save()
        post.set_current_language('en')
        meta_en = post.as_meta()
        self.assertEqual(meta_en.og_type, get_setting('FB_TYPE'))
        self.assertEqual(meta_en.title, post.title)
        self.assertTrue(meta_en.url.endswith(post.get_absolute_url()))
        self.assertEqual(meta_en.description, post.meta_description)
        self.assertEqual(meta_en.keywords, post.meta_keywords.split(','))
        self.assertEqual(meta_en.published_time, post.date_published)
        post.set_current_language('it')
        meta_it = post.as_meta()
        self.assertEqual(meta_it.title, post.title)
        self.assertTrue(meta_it.url.endswith(post.get_absolute_url()))
        self.assertNotEqual(meta_it.title, meta_en.title)
        self.assertEqual(meta_it.description, post.meta_description)

        with override('en'):
            post.set_current_language(get_language())
            kwargs = {
                'year':
                post.date_published.year,
                'month':
                '%02d' % post.date_published.month,
                'day':
                '%02d' % post.date_published.day,
                'slug':
                post.safe_translation_getter('slug',
                                             any_language=get_language())
            }
            url_en = reverse('djangocms_blog:post-detail', kwargs=kwargs)
            self.assertEqual(url_en, post.get_absolute_url())

        with override('it'):
            post.set_current_language(get_language())
            kwargs = {
                'year':
                post.date_published.year,
                'month':
                '%02d' % post.date_published.month,
                'day':
                '%02d' % post.date_published.day,
                'slug':
                post.safe_translation_getter('slug',
                                             any_language=get_language())
            }
            url_it = reverse('djangocms_blog:post-detail', kwargs=kwargs)
            self.assertEqual(url_it, post.get_absolute_url())
            self.assertNotEqual(url_it, url_en)

            self.assertEqual(post.get_full_url(),
                             'http://example.com%s' % url_it)
        self.assertEqual(post.get_image_full_url(),
                         'http://example.com%s' % post.main_image.url)

        self.assertEqual(post.thumbnail_options(),
                         get_setting('IMAGE_THUMBNAIL_SIZE'))
        self.assertEqual(post.full_image_options(),
                         get_setting('IMAGE_FULL_SIZE'))

        post.main_image_thumbnail = self.thumb_1
        post.main_image_full = self.thumb_2
        self.assertEqual(
            post.thumbnail_options(), {
                'size': (100, 100),
                'width': 100,
                'height': 100,
                'crop': True,
                'upscale': False
            })
        self.assertEqual(
            post.full_image_options(), {
                'size': (200, 200),
                'width': 200,
                'height': 200,
                'crop': False,
                'upscale': False
            })

        post.set_current_language('en')
        post.meta_title = 'meta title'
        self.assertEqual(post.get_title(), 'meta title')
from django.db import migrations, models

from djangocms_blog.settings import get_setting

BLOG_PLUGIN_TEMPLATE_FOLDERS = get_setting("PLUGIN_TEMPLATE_FOLDERS")


class Migration(migrations.Migration):

    dependencies = [
        ("djangocms_blog", "0023_auto_20160626_1539"),
    ]

    operations = [
        migrations.AddField(
            model_name="authorentriesplugin",
            name="template_folder",
            field=models.CharField(
                default=BLOG_PLUGIN_TEMPLATE_FOLDERS[0][0],
                verbose_name="Plugin template",
                max_length=200,
                help_text="Select plugin template to load for this instance",
                choices=BLOG_PLUGIN_TEMPLATE_FOLDERS,
            ),
        ),
        migrations.AddField(
            model_name="genericblogplugin",
            name="template_folder",
            field=models.CharField(
                default=BLOG_PLUGIN_TEMPLATE_FOLDERS[0][0],
                verbose_name="Plugin template",
    def test_model_attributes(self):
        post = self._get_post(self.data['en'][0])
        post = self._get_post(self.data['it'][0], post, 'it')
        post.main_image = self.img
        post.save()
        post.set_current_language('en')
        meta_en = post.as_meta()
        self.assertEqual(meta_en.og_type, get_setting('FB_TYPE'))
        self.assertEqual(meta_en.title, post.title)
        self.assertTrue(meta_en.url.endswith(post.get_absolute_url()))
        self.assertEqual(meta_en.description, post.meta_description)
        self.assertEqual(meta_en.keywords, post.meta_keywords.split(','))
        self.assertEqual(meta_en.published_time, post.date_published)
        post.set_current_language('it')
        meta_it = post.as_meta()
        self.assertEqual(meta_it.title, post.title)
        self.assertTrue(meta_it.url.endswith(post.get_absolute_url()))
        self.assertNotEqual(meta_it.title, meta_en.title)
        self.assertEqual(meta_it.description, post.meta_description)

        with override('en'):
            post.set_current_language(get_language())
            kwargs = {'year': post.date_published.year,
                      'month': '%02d' % post.date_published.month,
                      'day': '%02d' % post.date_published.day,
                      'slug': post.safe_translation_getter('slug', any_language=get_language())}
            url_en = reverse('djangocms_blog:post-detail', kwargs=kwargs)
            self.assertEqual(url_en, post.get_absolute_url())

        with override('it'):
            post.set_current_language(get_language())
            kwargs = {'year': post.date_published.year,
                      'month': '%02d' % post.date_published.month,
                      'day': '%02d' % post.date_published.day,
                      'slug': post.safe_translation_getter('slug', any_language=get_language())}
            url_it = reverse('djangocms_blog:post-detail', kwargs=kwargs)
            self.assertEqual(url_it, post.get_absolute_url())
            self.assertNotEqual(url_it, url_en)

            self.assertEqual(post.get_full_url(), 'http://example.com%s' % url_it)
        self.assertEqual(post.get_image_full_url(), 'http://example.com%s' % post.main_image.url)

        self.assertEqual(post.thumbnail_options(), get_setting('IMAGE_THUMBNAIL_SIZE'))
        self.assertEqual(post.full_image_options(), get_setting('IMAGE_FULL_SIZE'))

        post.main_image_thumbnail = self.thumb_1
        post.main_image_full = self.thumb_2
        self.assertEqual(post.thumbnail_options(), {
            'size': (100, 100),
            'width': 100, 'height': 100,
            'crop': True,
            'upscale': False
        })
        self.assertEqual(post.full_image_options(), {
            'size': (200, 200),
            'width': 200, 'height': 200,
            'crop': False,
            'upscale': False
        })

        post.set_current_language('en')
        post.meta_title = 'meta title'
        self.assertEqual(post.get_title(), 'meta title')
class Migration(migrations.Migration):

    dependencies = [
        ('djangocms_blog', '0010_auto_20150923_1151'),
    ]

    operations = [
        migrations.AddField(
            model_name='blogconfigtranslation',
            name='object_name',
            field=models.CharField(verbose_name='object name',
                                   default=get_setting('DEFAULT_OBJECT_NAME'),
                                   max_length=234),
        ),
        migrations.AlterField(
            model_name='authorentriesplugin',
            name='app_config',
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                blank=True,
                help_text=
                'When selecting a value, the form is reloaded to get the updated default',
                to='djangocms_blog.BlogConfig',
                verbose_name='app. config',
                null=True),
        ),
        migrations.AlterField(
            model_name='blogcategory',
            name='app_config',
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                help_text=
                'When selecting a value, the form is reloaded to get the updated default',
                to='djangocms_blog.BlogConfig',
                verbose_name='app. config',
                null=True),
        ),
        migrations.AlterField(
            model_name='genericblogplugin',
            name='app_config',
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                blank=True,
                help_text=
                'When selecting a value, the form is reloaded to get the updated default',
                to='djangocms_blog.BlogConfig',
                verbose_name='app. config',
                null=True),
        ),
        migrations.AlterField(
            model_name='latestpostsplugin',
            name='app_config',
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                blank=True,
                help_text=
                'When selecting a value, the form is reloaded to get the updated default',
                to='djangocms_blog.BlogConfig',
                verbose_name='app. config',
                null=True),
        ),
        migrations.AlterField(
            model_name='post',
            name='app_config',
            field=aldryn_apphooks_config.fields.AppHookConfigField(
                help_text=
                'When selecting a value, the form is reloaded to get the updated default',
                to='djangocms_blog.BlogConfig',
                verbose_name='app. config',
                null=True),
        ),
        migrations.AlterField(
            model_name='post',
            name='date_published',
            field=models.DateTimeField(verbose_name='published since',
                                       default=django.utils.timezone.now),
        ),
        migrations.AlterField(
            model_name='post',
            name='date_published_end',
            field=models.DateTimeField(blank=True,
                                       verbose_name='published until',
                                       null=True),
        ),
    ]
Beispiel #37
0
    def test_model_attributes(self):
        self.get_pages()

        self.app_config_1.app_data.config.gplus_author = 'RandomJoe'
        self.app_config_1.save()

        post = self._get_post(self._post_data[0]['en'])
        post = self._get_post(self._post_data[0]['it'], post, 'it')
        post.main_image = self.create_filer_image_object()
        post.save()
        post.set_current_language('en')
        meta_en = post.as_meta()
        self.assertEqual(meta_en.og_type, get_setting('FB_TYPE'))
        self.assertEqual(meta_en.title, post.title)
        self.assertTrue(meta_en.url.endswith(post.get_absolute_url()))
        self.assertEqual(meta_en.description, post.meta_description)
        self.assertEqual(meta_en.keywords, post.meta_keywords.split(','))
        self.assertEqual(meta_en.published_time, post.date_published)
        self.assertEqual(meta_en.locale, 'en')
        self.assertEqual(meta_en.twitter_site, '')
        self.assertEqual(meta_en.twitter_author, '')
        self.assertEqual(meta_en.twitter_type, 'summary')
        self.assertEqual(meta_en.gplus_author, 'RandomJoe')
        self.assertEqual(meta_en.gplus_type, 'Blog')
        self.assertEqual(meta_en.og_type, 'Article')
        self.assertEqual(meta_en.facebook_app_id, None)
        post.set_current_language('it')
        meta_it = post.as_meta()
        self.assertEqual(meta_it.title, post.title)
        self.assertTrue(meta_it.url.endswith(post.get_absolute_url()))
        self.assertNotEqual(meta_it.title, meta_en.title)
        self.assertEqual(meta_it.description, post.meta_description)

        with override('en'):
            post.set_current_language(get_language())
            kwargs = {
                'year':
                post.date_published.year,
                'month':
                '%02d' % post.date_published.month,
                'day':
                '%02d' % post.date_published.day,
                'slug':
                post.safe_translation_getter('slug',
                                             any_language=get_language())
            }
            url_en = reverse('%s:post-detail' % self.app_config_1.namespace,
                             kwargs=kwargs,
                             current_app=self.app_config_1)
            self.assertEqual(url_en, post.get_absolute_url())

        with override('it'):
            post.set_current_language(get_language())
            kwargs = {
                'year':
                post.date_published.year,
                'month':
                '%02d' % post.date_published.month,
                'day':
                '%02d' % post.date_published.day,
                'slug':
                post.safe_translation_getter('slug',
                                             any_language=get_language())
            }
            url_it = reverse('%s:post-detail' % self.app_config_1.namespace,
                             kwargs=kwargs,
                             current_app=self.app_config_1)
            self.assertEqual(url_it, post.get_absolute_url())
            self.assertNotEqual(url_it, url_en)

            self.assertEqual(post.get_full_url(),
                             'http://example.com%s' % url_it)
        self.assertEqual(post.get_image_full_url(),
                         'http://example.com%s' % post.main_image.url)

        self.assertEqual(post.thumbnail_options(),
                         get_setting('IMAGE_THUMBNAIL_SIZE'))
        self.assertEqual(post.full_image_options(),
                         get_setting('IMAGE_FULL_SIZE'))

        post.main_image_thumbnail = self.thumb_1
        post.main_image_full = self.thumb_2
        self.assertEqual(
            post.thumbnail_options(), {
                'size': (100, 100),
                'width': 100,
                'height': 100,
                'crop': True,
                'upscale': False
            })
        self.assertEqual(
            post.full_image_options(), {
                'size': (200, 200),
                'width': 200,
                'height': 200,
                'crop': False,
                'upscale': False
            })

        post.set_current_language('en')
        post.meta_title = 'meta title'
        self.assertEqual(post.get_title(), 'meta title')
Beispiel #38
0
 def get_paginate_by(self, queryset):
     return get_setting('PAGINATION')
Beispiel #39
0
 def get_context_data(self, **kwargs):
     context = super(PostListView, self).get_context_data(**kwargs)
     context['TRUNCWORDS_COUNT'] = get_setting('POSTS_LIST_TRUNCWORDS_COUNT')
     return context
 def forwards(self, orm):
     # Adding field 'BlogConfigTranslation.object_name'
     db.add_column('djangocms_blog_blogconfig_translation', 'object_name',
                   self.gf('django.db.models.fields.CharField')(default=get_setting('DEFAULT_OBJECT_NAME'), max_length=234),
                   keep_default=False)
Beispiel #41
0
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import migrations, models

from djangocms_blog.settings import get_setting

BLOG_PLUGIN_TEMPLATE_FOLDERS = get_setting('PLUGIN_TEMPLATE_FOLDERS')


class Migration(migrations.Migration):

    dependencies = [
        ('djangocms_blog', '0023_auto_20160626_1539'),
    ]

    operations = [
        migrations.AddField(
            model_name='authorentriesplugin',
            name='template_folder',
            field=models.CharField(
                default='plugins',
                verbose_name='Plugin template',
                max_length=200,
                help_text='Select plugin template to load for this instance',
                choices=BLOG_PLUGIN_TEMPLATE_FOLDERS),
        ),
        migrations.AddField(
            model_name='genericblogplugin',
            name='template_folder',
            field=models.CharField(