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
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')
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')
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
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
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 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
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 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
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
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)
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]
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"))
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() )
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()
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
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
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 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 }
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),
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)
def get_paginate_by(self, queryset): return get_setting('PAGINATION')
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
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
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
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), ), ]
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')
def get_paginate_by(self, queryset): return get_setting('PAGINATION')
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)
# -*- 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(