From 8d370c69121f00c65b69513631ebc80d6c626f75 Mon Sep 17 00:00:00 2001 From: Olivier Le Brouster <olivier.le-brouster@webu.coop> Date: Wed, 7 Oct 2015 15:59:48 +0200 Subject: [PATCH] replace hvad by parler --- README.md | 10 +- newsbox/admin.py | 39 +++++- newsbox/models.py | 11 +- newsbox_hvad/admin.py | 82 ------------ newsbox_hvad/views.py | 13 -- {newsbox_hvad => newsbox_i18n}/__init__.py | 0 newsbox_i18n/admin.py | 50 +++++++ .../locale/fr/LC_MESSAGES/django.mo | Bin .../locale/fr/LC_MESSAGES/django.po | 0 {newsbox_hvad => newsbox_i18n}/models.py | 27 ++-- {newsbox_hvad => newsbox_i18n}/urls.py | 4 +- newsbox_i18n/views.py | 20 +++ test_requirements/django-1.6.txt | 2 +- test_requirements/django-1.6_cms-3.0.txt | 2 +- test_requirements/django-1.7.txt | 2 +- test_requirements/django-1.8.txt | 2 +- test_requirements/django-1.8_cms-3.1.txt | 2 +- tests/myapp_all/admin.py | 8 +- tests/myapp_all/models.py | 22 +-- tests/myapp_all/urls_news.py | 6 +- tests/myapp_hvad/models.py | 27 ---- tests/{myapp_hvad => myapp_i18n}/__init__.py | 0 .../fixtures/tests_data.json | 126 +++++++++--------- tests/myapp_i18n/models.py | 27 ++++ tests/{myapp_hvad => myapp_i18n}/tests.py | 30 ++--- tests/{myapp_hvad => myapp_i18n}/urls.py | 10 +- tests/runtests.sh | 4 +- tests/settings_all30.py | 11 ++ tests/settings_all31.py | 11 ++ tests/{settings_hvad.py => settings_i18n.py} | 15 ++- tests/utils.py | 56 ++++---- tox.ini | 14 +- 32 files changed, 333 insertions(+), 300 deletions(-) delete mode 100644 newsbox_hvad/admin.py delete mode 100644 newsbox_hvad/views.py rename {newsbox_hvad => newsbox_i18n}/__init__.py (100%) create mode 100644 newsbox_i18n/admin.py rename {newsbox_hvad => newsbox_i18n}/locale/fr/LC_MESSAGES/django.mo (100%) rename {newsbox_hvad => newsbox_i18n}/locale/fr/LC_MESSAGES/django.po (100%) rename {newsbox_hvad => newsbox_i18n}/models.py (74%) rename {newsbox_hvad => newsbox_i18n}/urls.py (64%) create mode 100644 newsbox_i18n/views.py delete mode 100644 tests/myapp_hvad/models.py rename tests/{myapp_hvad => myapp_i18n}/__init__.py (100%) rename tests/{myapp_hvad => myapp_i18n}/fixtures/tests_data.json (89%) create mode 100644 tests/myapp_i18n/models.py rename tests/{myapp_hvad => myapp_i18n}/tests.py (84%) rename tests/{myapp_hvad => myapp_i18n}/urls.py (76%) rename tests/{settings_hvad.py => settings_i18n.py} (64%) diff --git a/README.md b/README.md index 43e0878..55dfe00 100644 --- a/README.md +++ b/README.md @@ -7,13 +7,13 @@ This django app is a toolbox to easily setup news in your projects. * easy custom fields * optional SEO fields * optional publication period - * optional i18n support via hvad + * optional i18n support via parler * optional django-cms support ## Installation Add newsbox to your ``INSTALLED_APPS``. If you need newsbox_cms and/or -newsbox_hvad, add those too. +newsbox_i18n, add those too. ## django integration @@ -34,13 +34,13 @@ For basic news, you just have to inherit from NewsboxCMSBase : class Meta: newsbox_detail_url_name = "news_detail" # optional -You can create news with i18n via HVAD. Inherit first from NewsboxHVADBase, then +You can create news with i18n via I18N. Inherit first from NewsboxI18NBase, then from NewsboxCMSBase : from newsbox_cms.models import NewsboxCMSBase - from newsbox_hvad.models import NewsboxHVADBase + from newsbox_i18n.models import NewsboxI18NBase - class News(NewsboxHVADBase, NewsboxCMSBase): + class News(NewsboxI18NBase, NewsboxCMSBase): class Meta: newsbox_detail_url_name = "news_detail" # optional diff --git a/newsbox/admin.py b/newsbox/admin.py index 2f22edb..2e98d0b 100644 --- a/newsbox/admin.py +++ b/newsbox/admin.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals import copy +import itertools from django.conf.urls import url, patterns from django.contrib import messages, admin @@ -116,10 +117,11 @@ class NewsboxBaseAdmin(admin.ModelAdmin): actions = ['publish', 'unpublish'] save_as = True - def __init__(self, *args, **kwargs): - # This is a workaround for prepopulated_fields with hvad - self.prepopulated_fields = {"newsbox_slug": ("newsbox_title",)} - super(NewsboxBaseAdmin, self).__init__(*args, **kwargs) + def get_prepopulated_fields(self, request, object=None): + prepopulated_fields = super(NewsboxBaseAdmin, self).get_prepopulated_fields(request, object) + prepopulated_fields = prepopulated_fields or {} + prepopulated_fields.update({"newsbox_slug": ("newsbox_title",)}) + return prepopulated_fields def changestatus_link(self, obj): if obj.newsbox_published: @@ -280,6 +282,33 @@ class NewsboxBaseAdmin(admin.ModelAdmin): unpublish.short_description = _( 'Unpublish selected %(verbose_name_plural)s') + def ensure_slug_uniq_queryset(self, request, obj, slug): + queryset = type(obj).objects.all() + queryset = queryset.filter(newsbox_date__year=obj.newsbox_date.year) + queryset = queryset.filter(newsbox_date__month=obj.newsbox_date.month) + queryset = queryset.filter(newsbox_date__day=obj.newsbox_date.day) + queryset = queryset.filter(newsbox_slug=slug) + if obj.pk: + queryset = queryset.exclude(pk=obj.pk) + return queryset + + def ensure_slug_uniq(self, request, obj): + max_length = 50 + + slug = obj.newsbox_slug + for x in itertools.count(1): + if not self.ensure_slug_uniq_queryset(request, obj, slug).count(): + break + suffix = "-%d" % x + slug = "%s%s" % (obj.newsbox_slug[:max_length-len(suffix)], suffix) + + obj.newsbox_slug = slug + + def save_model(self, request, obj, form, change): + self.ensure_slug_uniq(request, obj) + return super(NewsboxBaseAdmin, self).save_model(request, obj, form, change) + + class NewsboxAdmin(NewsboxBaseAdmin): pass @@ -317,7 +346,7 @@ class NewsboxExpiredAdmin(NewsboxBaseAdmin): css_class, title, output) newsbox_publication_dates_short.short_description = _('publication') newsbox_publication_dates_short.allow_tags = True - + def get_fieldsets(self, request, obj=None): fieldsets = super(NewsboxExpiredAdmin, self).get_fieldsets(request, obj) diff --git a/newsbox/models.py b/newsbox/models.py index ce26d9d..ae522dc 100644 --- a/newsbox/models.py +++ b/newsbox/models.py @@ -21,7 +21,6 @@ def newsbox_mcls_processor(mcls, class_name, class_bases, class_attrs, base, new if 'newsbox_slug' not in class_attrs: class_attrs['newsbox_slug'] = models.SlugField( verbose_name=_('slug'), - unique_for_date='newsbox_date', help_text=_('The part of the title that is used in the URL')) newsbox_opts['trans_fieldnames'].append('newsbox_slug') if 'newsbox_summary' not in class_attrs: @@ -78,7 +77,7 @@ class NewsboxModelBase(models.base.ModelBase): parents = [b for b in class_bases if isinstance(b, NewsboxModelBase) and not (b.__name__ == 'NewBase' and b.__mro__ == (b, object))] - #retrieve newsbox options in Meta class and delete these from the + #retrieve newsbox options in Meta class and delete these from the #Meta class to avoid django complain about unsupported keys. #We register our meta options in `_newsbox_meta` attr_meta = class_attrs.get('Meta', None) @@ -87,9 +86,9 @@ class NewsboxModelBase(models.base.ModelBase): abstract = getattr(attr_meta, 'abstract', False) newsbox_opts = {} newsbox_opts_keys = [ - 'detail_url_name', - 'metaclass_base_processor', - 'metaclass_final_processor', + 'detail_url_name', + 'metaclass_base_processor', + 'metaclass_final_processor', 'trans_fieldnames'] for opt in newsbox_opts_keys: newsbox_opt = 'newsbox_' + opt @@ -102,7 +101,7 @@ class NewsboxModelBase(models.base.ModelBase): # register newsbox_objects manager class_attrs['newsbox_objects'] = NewsboxManager() - + #Call specific metaclass processor of all bases if not abstract : for base in class_bases: diff --git a/newsbox_hvad/admin.py b/newsbox_hvad/admin.py deleted file mode 100644 index 15817f0..0000000 --- a/newsbox_hvad/admin.py +++ /dev/null @@ -1,82 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals -import copy - -from django.conf import settings -from hvad.admin import TranslatableAdmin -from hvad.forms import translatable_modelform_factory -from django.utils.translation import ugettext_lazy as _ -try: - from django.contrib.admin.utils import flatten_fieldsets -except ImportError: - # django < 1.7 - from django.contrib.admin.util import flatten_fieldsets -from django.utils.functional import curry - - -def edit_translation_links(obj): - output = '' - for lang in obj.get_available_languages(): - output += ( - '<a href="./%s/?language=%s" ' - 'target="_parent" title="Edit this %s in %s">%s' - '</a>' - ) % (obj.pk, lang, obj._meta.verbose_name, lang.upper(), lang.upper(),) - return output -edit_translation_links.allow_tags = True -edit_translation_links.short_description = _('translations') - - - -class NewsboxHVADBaseAdmin(TranslatableAdmin): - - #XXX: hvad TranslatableAdmin doesn't support search_fields - # search_fields = ['newsbox_title', 'newsbox_summary', ] - # date_hierarchy = 'newsbox_publication_start_date' - - def get_list_display(self, request): - list_display = super(NewsboxHVADBaseAdmin, self).get_list_display(request) - # prevent modifying class list_display variable - list_display = copy.deepcopy(list_display) - if settings.LANGUAGES and len(settings.LANGUAGES) > 1: - list_display.insert(1, edit_translation_links) - - return list_display - - def get_form(self, request, obj=None, **kwargs): - """ - This function is a workaround to an hvad issue. It doesn't use - get_fieldsets function. - - Returns a Form class for use in the admin add view. This is used by - add_view and change_view. - """ - fieldsets = self.get_fieldsets(request, obj) - if fieldsets: - fields = flatten_fieldsets(fieldsets) - else: - fields = None - if self.exclude is None: - exclude = [] - else: - exclude = list(self.exclude) - exclude.extend(kwargs.get("exclude", [])) - exclude.extend(self.get_readonly_fields(request, obj)) - # Exclude language_code, adding it again to the instance is done by - # the LanguageAwareCleanMixin (see translatable_modelform_factory) - exclude.append('language_code') - old_formfield_callback = curry(self.formfield_for_dbfield, - request=request) - defaults = { - "form": self.form, - "fields": fields, - "exclude": exclude, - "formfield_callback": old_formfield_callback, - } - defaults.update(kwargs) - language = self._language(request) - return translatable_modelform_factory(language, self.model, **defaults) - - -class NewsboxHVADAdmin(NewsboxHVADBaseAdmin): - pass diff --git a/newsbox_hvad/views.py b/newsbox_hvad/views.py deleted file mode 100644 index 5ebca86..0000000 --- a/newsbox_hvad/views.py +++ /dev/null @@ -1,13 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from newsbox.views import NewsboxDetailView - -class NewsboxHVADDetailView(NewsboxDetailView): - - def get_queryset(self): - """ - As slug_field is translated, we need to use translation aware - queryset. - """ - return self.model.objects.language() diff --git a/newsbox_hvad/__init__.py b/newsbox_i18n/__init__.py similarity index 100% rename from newsbox_hvad/__init__.py rename to newsbox_i18n/__init__.py diff --git a/newsbox_i18n/admin.py b/newsbox_i18n/admin.py new file mode 100644 index 0000000..990137f --- /dev/null +++ b/newsbox_i18n/admin.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals +import copy + +from django.conf import settings +from parler.admin import TranslatableAdmin +from django.utils.translation import ugettext_lazy as _ + + +def edit_translation_links(obj): + output = '' + for lang in obj.get_available_languages(): + output += ( + '<a href="./%s/?language=%s" ' + 'target="_parent" title="Edit this %s in %s">%s' + '</a>' + ) % (obj.pk, lang, obj._meta.verbose_name, lang.upper(), lang.upper(),) + return output +edit_translation_links.allow_tags = True +edit_translation_links.short_description = _('translations') + + +class NewsboxI18NBaseAdmin(TranslatableAdmin): + + search_fields = ['newsbox__translation__title', 'newsbox__translation__summary', ] + date_hierarchy = 'newsbox_publication_start_date' + + def get_list_display(self, request): + list_display = super(NewsboxI18NBaseAdmin, self).get_list_display(request) + # prevent modifying class list_display variable + list_display = copy.deepcopy(list_display) + if settings.LANGUAGES and len(settings.LANGUAGES) > 1: + list_display.insert(1, edit_translation_links) + + return list_display + + def ensure_slug_uniq_queryset(self, request, obj, slug): + language = self.get_form_language(request, obj) + queryset = type(obj).objects.all() + queryset = queryset.filter(newsbox_date__year=obj.newsbox_date.year) + queryset = queryset.filter(newsbox_date__month=obj.newsbox_date.month) + queryset = queryset.filter(newsbox_date__day=obj.newsbox_date.day) + queryset = queryset.translated(language, newsbox_slug=slug) + if obj.pk: + queryset = queryset.exclude(pk=obj.pk) + return queryset + + +class NewsboxI18NAdmin(NewsboxI18NBaseAdmin): + pass diff --git a/newsbox_hvad/locale/fr/LC_MESSAGES/django.mo b/newsbox_i18n/locale/fr/LC_MESSAGES/django.mo similarity index 100% rename from newsbox_hvad/locale/fr/LC_MESSAGES/django.mo rename to newsbox_i18n/locale/fr/LC_MESSAGES/django.mo diff --git a/newsbox_hvad/locale/fr/LC_MESSAGES/django.po b/newsbox_i18n/locale/fr/LC_MESSAGES/django.po similarity index 100% rename from newsbox_hvad/locale/fr/LC_MESSAGES/django.po rename to newsbox_i18n/locale/fr/LC_MESSAGES/django.po diff --git a/newsbox_hvad/models.py b/newsbox_i18n/models.py similarity index 74% rename from newsbox_hvad/models.py rename to newsbox_i18n/models.py index be469ce..43a2c80 100644 --- a/newsbox_hvad/models.py +++ b/newsbox_i18n/models.py @@ -1,45 +1,42 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -import sys -from django.db import models from django.core.urlresolvers import reverse from django.utils.translation import ugettext_lazy as _, get_language, activate from django.utils import six from django.utils.encoding import python_2_unicode_compatible -from hvad.manager import TranslationManager -from hvad.models import TranslatableModel, TranslatedFields -from newsbox.models import NewsboxModelBase, NewsboxManager, \ - NewsboxBase, newsbox_models +from parler.managers import TranslatableManager +from parler.models import TranslatableModel, TranslatedFields +from newsbox.models import NewsboxModelBase, NewsboxManager -class NewsboxHVADManager(TranslationManager, NewsboxManager): +class NewsboxI18NManager(TranslatableManager, NewsboxManager): pass -def newsboxhvad_mcls_processor(mcls, class_name, class_bases, class_attrs, base, newsbox_opts): +def newsboxi18n_mcls_processor(mcls, class_name, class_bases, class_attrs, base, newsbox_opts): translatedFields={} for trans_field in newsbox_opts['trans_fieldnames']: translatedFields[trans_field] = class_attrs.pop(trans_field) class_attrs['translations'] = TranslatedFields(**translatedFields) - class_attrs['newsbox_objects'] = NewsboxHVADManager() + class_attrs['newsbox_objects'] = NewsboxI18NManager() #class_attrs['default_manager'] = class_attrs['newsbox_objects'] -class NewsboxHVADModelBase(NewsboxModelBase): +class NewsboxI18NModelBase(NewsboxModelBase): pass @python_2_unicode_compatible -class NewsboxHVADBase(six.with_metaclass(NewsboxHVADModelBase, TranslatableModel)): +class NewsboxI18NBase(six.with_metaclass(NewsboxI18NModelBase, TranslatableModel)): """ Define News which expires in time and will not be displayed in front """ - default_manager = NewsboxHVADManager() + default_manager = NewsboxI18NManager() objects = default_manager def __str__(self): - return self.lazy_translation_getter( + return self.safe_translation_getter( 'newsbox_title', _('News #%d') % self.pk) @@ -79,5 +76,5 @@ class NewsboxHVADBase(six.with_metaclass(NewsboxHVADModelBase, TranslatableModel abstract = True verbose_name = _('news') verbose_name_plural = _('news') - #newsbox_metaclass_base_processor = 'newsboxhvad_mcls_processor' - newsbox_metaclass_final_processor = 'newsboxhvad_mcls_processor' + #newsbox_metaclass_base_processor = 'newsboxi18n_mcls_processor' + newsbox_metaclass_final_processor = 'newsboxi18n_mcls_processor' diff --git a/newsbox_hvad/urls.py b/newsbox_i18n/urls.py similarity index 64% rename from newsbox_hvad/urls.py rename to newsbox_i18n/urls.py index ca160a4..962d8ff 100644 --- a/newsbox_hvad/urls.py +++ b/newsbox_i18n/urls.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals from django.conf.urls import patterns from newsbox.urls import get_urls -from .views import NewsboxHVADDetailView +from .views import NewsboxI18NDetailView -urls = get_urls(detail_view=NewsboxHVADDetailView) +urls = get_urls(detail_view=NewsboxI18NDetailView) urlpatterns = patterns(*urls) diff --git a/newsbox_i18n/views.py b/newsbox_i18n/views.py new file mode 100644 index 0000000..6c1045a --- /dev/null +++ b/newsbox_i18n/views.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from newsbox.views import NewsboxDetailView +from django.utils.translation import get_language + + +class NewsboxI18NDetailView(NewsboxDetailView): + + slug_field = "translations__newsbox_slug" + + def get_queryset(self): + """ + As slug_field is translated, we need to use translation aware + queryset. + """ + language = get_language() + queryset = super(NewsboxI18NDetailView, self).get_queryset() + queryset = queryset.translated(language, newsbox_slug=self.kwargs[self.slug_url_kwarg]) + return queryset diff --git a/test_requirements/django-1.6.txt b/test_requirements/django-1.6.txt index 9cec9f6..66168ab 100644 --- a/test_requirements/django-1.6.txt +++ b/test_requirements/django-1.6.txt @@ -1,3 +1,3 @@ -r requirements_base.txt django>=1.6,<1.7 -https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad +django-parler>=1.5 diff --git a/test_requirements/django-1.6_cms-3.0.txt b/test_requirements/django-1.6_cms-3.0.txt index 8e0776d..f11b1a4 100644 --- a/test_requirements/django-1.6_cms-3.0.txt +++ b/test_requirements/django-1.6_cms-3.0.txt @@ -20,7 +20,7 @@ argparse dj-database-url selenium django-debug-toolbar -https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad +django-parler>=1.5 -e git+git://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style -e git+git://github.com/divio/djangocms-text-ckeditor.git#egg=djangocms-text-ckeditor pyflakes diff --git a/test_requirements/django-1.7.txt b/test_requirements/django-1.7.txt index 767b57a..9e4e046 100644 --- a/test_requirements/django-1.7.txt +++ b/test_requirements/django-1.7.txt @@ -1,3 +1,3 @@ -r requirements_base.txt django>=1.7,<1.8 -https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad +django-parler>=1.5 diff --git a/test_requirements/django-1.8.txt b/test_requirements/django-1.8.txt index 548f68e..7675a92 100644 --- a/test_requirements/django-1.8.txt +++ b/test_requirements/django-1.8.txt @@ -1,3 +1,3 @@ -r requirements_base.txt django>=1.8,<1.9 -https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad +django-parler>=1.5 diff --git a/test_requirements/django-1.8_cms-3.1.txt b/test_requirements/django-1.8_cms-3.1.txt index 610547f..f33b782 100644 --- a/test_requirements/django-1.8_cms-3.1.txt +++ b/test_requirements/django-1.8_cms-3.1.txt @@ -19,7 +19,7 @@ argparse dj-database-url selenium django-debug-toolbar -https://github.com/KristianOellegaard/django-hvad/archive/master.zip#egg=hvad +django-parler>=1.5 -e git+git://github.com/divio/djangocms-admin-style.git#egg=djangocms-admin-style -e git+git://github.com/divio/djangocms-text-ckeditor.git#egg=djangocms-text-ckeditor pyflakes diff --git a/tests/myapp_all/admin.py b/tests/myapp_all/admin.py index 95ff7bb..1598e28 100644 --- a/tests/myapp_all/admin.py +++ b/tests/myapp_all/admin.py @@ -5,23 +5,23 @@ from __future__ import unicode_literals from django.contrib import admin from newsbox_cms.admin import NewsboxCMSAdmin from newsbox.admin import NewsboxSEOAdmin, NewsboxExpiredAdmin -from newsbox_hvad.admin import NewsboxHVADAdmin +from newsbox_i18n.admin import NewsboxI18NAdmin from .models import News, NewsComplete, NewsExtended -class NewsAdmin(NewsboxHVADAdmin, NewsboxCMSAdmin): +class NewsAdmin(NewsboxI18NAdmin, NewsboxCMSAdmin): pass admin.site.register(News, NewsAdmin) -class NewsCompleteAdmin(NewsboxHVADAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin): +class NewsCompleteAdmin(NewsboxI18NAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin): pass admin.site.register(NewsComplete, NewsCompleteAdmin) -class NewsExtendedAdmin(NewsboxHVADAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin): +class NewsExtendedAdmin(NewsboxI18NAdmin, NewsboxCMSAdmin, NewsboxSEOAdmin, NewsboxExpiredAdmin): def get_fieldsets(self, request, obj=None): fieldsets = super(NewsExtendedAdmin, self).get_fieldsets(request, obj) fieldsets[0][1]['fields'].append('general_field') diff --git a/tests/myapp_all/models.py b/tests/myapp_all/models.py index 39438d4..dd3fc9b 100644 --- a/tests/myapp_all/models.py +++ b/tests/myapp_all/models.py @@ -4,28 +4,28 @@ from __future__ import unicode_literals from django.db import models from newsbox.models import NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase from newsbox_cms.models import NewsboxCMSBase, NewsboxPluginBase -from newsbox_hvad.models import NewsboxHVADBase +from newsbox_i18n.models import NewsboxI18NBase -class News(NewsboxHVADBase, NewsboxCMSBase, NewsboxBase): +class News(NewsboxI18NBase, NewsboxCMSBase, NewsboxBase): class Meta: - verbose_name = 'news - HVADCMS' - verbose_name_plural = 'news - HVADCMS' + verbose_name = 'news - I18NCMS' + verbose_name_plural = 'news - I18NCMS' newsbox_detail_url_name = 'news_detail' -class NewsComplete(NewsboxHVADBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase): +class NewsComplete(NewsboxI18NBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase): class Meta: - verbose_name = 'news - CompleteHVADCMS' - verbose_name_plural = 'news - CompleteHVADCMS' + verbose_name = 'news - CompleteI18NCMS' + verbose_name_plural = 'news - CompleteI18NCMS' newsbox_detail_url_name = 'newscomplete_detail' -class NewsExtended(NewsboxHVADBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase): +class NewsExtended(NewsboxI18NBase, NewsboxCMSBase, NewsboxSEOBase, NewsboxExpiredBase, NewsboxBase): general_field = models.CharField(max_length=50) content_field = models.CharField(max_length=50) seo_field = models.CharField(max_length=50) - + class Meta: - verbose_name = 'news - ExtendedHVADCMS' - verbose_name_plural = 'news - ExtendedHVADCMS' + verbose_name = 'news - ExtendedI18NCMS' + verbose_name_plural = 'news - ExtendedI18NCMS' newsbox_trans_fieldnames = ['content_field', 'seo_field'] newsbox_detail_url_name = 'newsextended_detail' diff --git a/tests/myapp_all/urls_news.py b/tests/myapp_all/urls_news.py index 9cdc952..63b9c68 100644 --- a/tests/myapp_all/urls_news.py +++ b/tests/myapp_all/urls_news.py @@ -3,14 +3,14 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from newsbox_hvad.views import NewsboxHVADDetailView +from newsbox_i18n.views import NewsboxI18NDetailView from .models import News urlpatterns = patterns( '', url( - r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[0-9a-zA-Z_-]+)/$', - NewsboxHVADDetailView.as_view(model=News,), + r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[0-9a-zA-Z_-]+)/$', + NewsboxI18NDetailView.as_view(model=News,), name='news_detail'), ) diff --git a/tests/myapp_hvad/models.py b/tests/myapp_hvad/models.py deleted file mode 100644 index 8488585..0000000 --- a/tests/myapp_hvad/models.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import models -from newsbox.models import NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase -from newsbox_hvad.models import NewsboxHVADBase - -class News(NewsboxHVADBase, NewsboxBase): - class Meta: - verbose_name = 'news - HVAD' - verbose_name_plural = 'news - HVAD' - -class NewsComplete(NewsboxHVADBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase): - class Meta: - verbose_name = 'news - CompleteHVAD' - verbose_name_plural = 'news - CompleteHVAD' - -class NewsExtended(NewsboxHVADBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase): - general_field = models.CharField(max_length=50) - content_field = models.CharField(max_length=50) - seo_field = models.CharField(max_length=50) - - class Meta: - verbose_name = 'news - ExtendedHVAD' - verbose_name_plural = 'news - ExtendedHVAD' - newsbox_trans_fieldnames = ['content_field', 'seo_field'] - diff --git a/tests/myapp_hvad/__init__.py b/tests/myapp_i18n/__init__.py similarity index 100% rename from tests/myapp_hvad/__init__.py rename to tests/myapp_i18n/__init__.py diff --git a/tests/myapp_hvad/fixtures/tests_data.json b/tests/myapp_i18n/fixtures/tests_data.json similarity index 89% rename from tests/myapp_hvad/fixtures/tests_data.json rename to tests/myapp_i18n/fixtures/tests_data.json index 5a5a0f4..46a9d6a 100644 --- a/tests/myapp_hvad/fixtures/tests_data.json +++ b/tests/myapp_i18n/fixtures/tests_data.json @@ -1,7 +1,7 @@ [ { "pk": 1, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-1", "master": 1, @@ -13,7 +13,7 @@ }, { "pk": 2, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-1", "master": 1, @@ -25,7 +25,7 @@ }, { "pk": 3, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-2", "master": 2, @@ -37,7 +37,7 @@ }, { "pk": 4, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-2", "master": 2, @@ -49,7 +49,7 @@ }, { "pk": 5, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-3", "master": 3, @@ -61,7 +61,7 @@ }, { "pk": 6, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-3", "master": 3, @@ -73,7 +73,7 @@ }, { "pk": 7, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-4", "master": 4, @@ -85,7 +85,7 @@ }, { "pk": 8, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-4", "master": 4, @@ -97,7 +97,7 @@ }, { "pk": 9, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-5", "master": 5, @@ -109,7 +109,7 @@ }, { "pk": 10, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-5", "master": 5, @@ -121,7 +121,7 @@ }, { "pk": 11, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-6", "master": 6, @@ -133,7 +133,7 @@ }, { "pk": 12, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-6", "master": 6, @@ -145,7 +145,7 @@ }, { "pk": 13, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "news-7", "master": 7, @@ -157,7 +157,7 @@ }, { "pk": 14, - "model": "myapp_hvad.newstranslation", + "model": "myapp_i18n.newstranslation", "fields": { "newsbox_slug": "actualite-7", "master": 7, @@ -169,7 +169,7 @@ }, { "pk": 1, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:29.989Z", "newsbox_publication_start_date": "1985-07-02T08:00:00Z", @@ -180,7 +180,7 @@ }, { "pk": 2, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:30.736Z", "newsbox_publication_start_date": "1985-07-02T09:00:00Z", @@ -191,7 +191,7 @@ }, { "pk": 3, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:31.496Z", "newsbox_publication_start_date": "2020-01-01T08:00:00Z", @@ -202,7 +202,7 @@ }, { "pk": 4, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:32.261Z", "newsbox_publication_start_date": "1985-07-02T10:00:00Z", @@ -213,7 +213,7 @@ }, { "pk": 5, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:33.016Z", "newsbox_publication_start_date": "1985-07-02T11:00:00Z", @@ -224,7 +224,7 @@ }, { "pk": 6, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:33.752Z", "newsbox_publication_start_date": "1985-07-02T12:00:00Z", @@ -235,7 +235,7 @@ }, { "pk": 7, - "model": "myapp_hvad.news", + "model": "myapp_i18n.news", "fields": { "newsbox_creation_date": "2014-03-11T13:53:34.499Z", "newsbox_publication_start_date": "1985-07-02T13:00:00Z", @@ -246,7 +246,7 @@ }, { "pk": 1, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-1", "newsbox_slug": "news-1", @@ -260,7 +260,7 @@ }, { "pk": 2, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-1", "newsbox_slug": "actualite-1", @@ -274,7 +274,7 @@ }, { "pk": 3, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-2", "newsbox_slug": "news-2", @@ -288,7 +288,7 @@ }, { "pk": 4, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-2", "newsbox_slug": "actualite-2", @@ -302,7 +302,7 @@ }, { "pk": 5, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-3", "newsbox_slug": "news-3", @@ -316,7 +316,7 @@ }, { "pk": 6, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-3", "newsbox_slug": "actualite-3", @@ -330,7 +330,7 @@ }, { "pk": 7, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-4", "newsbox_slug": "news-4", @@ -344,7 +344,7 @@ }, { "pk": 8, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-4", "newsbox_slug": "actualite-4", @@ -358,7 +358,7 @@ }, { "pk": 9, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-5", "newsbox_slug": "news-5", @@ -372,7 +372,7 @@ }, { "pk": 10, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-5", "newsbox_slug": "actualite-5", @@ -386,7 +386,7 @@ }, { "pk": 11, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-6", "newsbox_slug": "news-6", @@ -400,7 +400,7 @@ }, { "pk": 12, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-6", "newsbox_slug": "actualite-6", @@ -414,7 +414,7 @@ }, { "pk": 13, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-7", "newsbox_slug": "news-7", @@ -428,7 +428,7 @@ }, { "pk": 14, - "model": "myapp_hvad.newscompletetranslation", + "model": "myapp_i18n.newscompletetranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-7", "newsbox_slug": "actualite-7", @@ -442,7 +442,7 @@ }, { "pk": 1, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:35.631Z", @@ -455,7 +455,7 @@ }, { "pk": 2, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": false, "newsbox_changed_date": "2014-03-11T13:53:36.378Z", @@ -468,7 +468,7 @@ }, { "pk": 3, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:37.124Z", @@ -481,7 +481,7 @@ }, { "pk": 4, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:37.871Z", @@ -494,7 +494,7 @@ }, { "pk": 5, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": false, "newsbox_changed_date": "2014-03-11T13:53:38.660Z", @@ -507,7 +507,7 @@ }, { "pk": 6, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:39.438Z", @@ -520,7 +520,7 @@ }, { "pk": 7, - "model": "myapp_hvad.newscomplete", + "model": "myapp_i18n.newscomplete", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:40.209Z", @@ -533,7 +533,7 @@ }, { "pk": 1, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-1", "content_field": "Extra content of the news 1", @@ -549,7 +549,7 @@ }, { "pk": 2, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-1", "content_field": "Contenu additionnel de l'actualit\u00e9 1", @@ -565,7 +565,7 @@ }, { "pk": 3, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-2", "content_field": "Extra content of the news 2", @@ -581,7 +581,7 @@ }, { "pk": 4, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-2", "content_field": "Contenu additionnel de l'actualit\u00e9 2", @@ -597,7 +597,7 @@ }, { "pk": 5, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-3", "content_field": "Extra content of the news 3", @@ -613,7 +613,7 @@ }, { "pk": 6, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-3", "content_field": "Contenu additionnel de l'actualit\u00e9 3", @@ -629,7 +629,7 @@ }, { "pk": 7, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-4", "content_field": "Extra content of the news 4", @@ -645,7 +645,7 @@ }, { "pk": 8, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-4", "content_field": "Contenu additionnel de l'actualit\u00e9 4", @@ -661,7 +661,7 @@ }, { "pk": 9, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-5", "content_field": "Extra content of the news 5", @@ -677,7 +677,7 @@ }, { "pk": 10, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-5", "content_field": "Contenu additionnel de l'actualit\u00e9 5", @@ -693,7 +693,7 @@ }, { "pk": 11, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-6", "content_field": "Extra content of the news 6", @@ -709,7 +709,7 @@ }, { "pk": 12, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-6", "content_field": "Contenu additionnel de l'actualit\u00e9 6", @@ -725,7 +725,7 @@ }, { "pk": 13, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "keyword1, keyword2, news-7", "content_field": "Extra content of the news 7", @@ -741,7 +741,7 @@ }, { "pk": 14, - "model": "myapp_hvad.newsextendedtranslation", + "model": "myapp_i18n.newsextendedtranslation", "fields": { "newsbox_meta_keywords": "motclef1, motclef2, actualite-7", "content_field": "Contenu additionnel de l'actualit\u00e9 7", @@ -757,7 +757,7 @@ }, { "pk": 1, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:56.517Z", @@ -771,7 +771,7 @@ }, { "pk": 2, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": false, "newsbox_changed_date": "2014-03-11T13:53:57.329Z", @@ -785,7 +785,7 @@ }, { "pk": 3, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:58.094Z", @@ -799,7 +799,7 @@ }, { "pk": 4, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:53:59.046Z", @@ -813,7 +813,7 @@ }, { "pk": 5, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": false, "newsbox_changed_date": "2014-03-11T13:53:59.843Z", @@ -827,7 +827,7 @@ }, { "pk": 6, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:54:00.657Z", @@ -841,7 +841,7 @@ }, { "pk": 7, - "model": "myapp_hvad.newsextended", + "model": "myapp_i18n.newsextended", "fields": { "newsbox_published": true, "newsbox_changed_date": "2014-03-11T13:54:01.420Z", diff --git a/tests/myapp_i18n/models.py b/tests/myapp_i18n/models.py new file mode 100644 index 0000000..332d9e8 --- /dev/null +++ b/tests/myapp_i18n/models.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models +from newsbox.models import NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase +from newsbox_i18n.models import NewsboxI18NBase + +class News(NewsboxI18NBase, NewsboxBase): + class Meta: + verbose_name = 'news - I18N' + verbose_name_plural = 'news - I18N' + +class NewsComplete(NewsboxI18NBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase): + class Meta: + verbose_name = 'news - CompleteI18N' + verbose_name_plural = 'news - CompleteI18N' + +class NewsExtended(NewsboxI18NBase, NewsboxBase, NewsboxSEOBase, NewsboxExpiredBase): + general_field = models.CharField(max_length=50) + content_field = models.CharField(max_length=50) + seo_field = models.CharField(max_length=50) + + class Meta: + verbose_name = 'news - ExtendedI18N' + verbose_name_plural = 'news - ExtendedI18N' + newsbox_trans_fieldnames = ['content_field', 'seo_field'] + diff --git a/tests/myapp_hvad/tests.py b/tests/myapp_i18n/tests.py similarity index 84% rename from tests/myapp_hvad/tests.py rename to tests/myapp_i18n/tests.py index 60e3504..12183fc 100644 --- a/tests/myapp_hvad/tests.py +++ b/tests/myapp_i18n/tests.py @@ -13,7 +13,7 @@ from .models import News, NewsComplete, NewsExtended class NewsboxAbstractModelsTests(TestCase): fixtures = ['tests_data.json',] - + def test_01_manager_published(self): """ Test if we only get really published news via the manager @@ -25,7 +25,7 @@ class NewsboxAbstractModelsTests(TestCase): returned_ids = list(cls.objects.published().values_list( 'id', flat=True).order_by('id')) self.assertEqual( - (cls.__name__,returned_ids), + (cls.__name__,returned_ids), (cls.__name__,[1, 4, 6, 7,])) def test_02_extra_translated_fields(self): @@ -36,13 +36,13 @@ class NewsboxAbstractModelsTests(TestCase): news_fr = NewsExtended.objects.language('fr').get(pk=1) news_en = NewsExtended.objects.language('en').get(pk=1) self.assertEqual( - news_fr.content_field, + news_fr.content_field, 'Contenu additionnel de l\'actualité 1') self.assertEqual( - news_en.content_field, + news_en.content_field, 'Extra content of the news 1') self.assertEqual(news_en.general_field, news_fr.general_field) - + def test_03_view_archive_200(self): """ Test if generic archive view return right informations. @@ -59,24 +59,24 @@ class NewsboxAbstractModelsTests(TestCase): self.assertTrue(r.context['newsset'].has_next()) self.assertRaises(EmptyPage, r.context['newsset'].previous_page_number) self.assertEqual(r.context['newsset'].next_page_number(), 2) - - + + def test_04_view_detail_200(self): """ Test if generic day views return right informations. """ c = Client() - r = c.get('/en/newsbox/myapp_hvad/news/2005/07/15/news-6/') + r = c.get('/en/newsbox/myapp_i18n/news/2005/07/15/news-6/') self.assertEqual(r.status_code, 200) self.assertEqual(r.context['news'].pk, 6) def test_05_view_detail_404(self): """ - Test if generic day views return a 404 with an URL with a date without + Test if generic day views return a 404 with an URL with a date without any news. """ c = Client() - r = c.get('/en/newsbox/myapp_hvad/news/1985/07/02/my-birthday/') + r = c.get('/en/newsbox/myapp_i18n/news/1985/07/02/my-birthday/') self.assertEqual(r.status_code, 404) def test_06_view_detail_404_not_published(self): @@ -85,13 +85,13 @@ class NewsboxAbstractModelsTests(TestCase): news """ c = Client() - r = c.get('/en/newsbox/myapp_hvad/news/2014/02/22/news-2/') + r = c.get('/en/newsbox/myapp_i18n/news/2014/02/22/news-2/') self.assertEqual(r.status_code, 404) def test_07_view_detail_translated(self): c = Client() - r_en = c.get('/en/newsbox/myapp_hvad/news/2005/07/15/news-6/') - r_fr = c.get('/fr/newsbox/myapp_hvad/news/2005/07/15/actualite-6/') + r_en = c.get('/en/newsbox/myapp_i18n/news/2005/07/15/news-6/') + r_fr = c.get('/fr/newsbox/myapp_i18n/news/2005/07/15/actualite-6/') self.assertEqual(r_fr.context['news'].pk, r_en.context['news'].pk) self.assertEqual(r_fr.context['news'].newsbox_title, 'Actualité 6') self.assertEqual(r_en.context['news'].newsbox_title, 'News 6') @@ -99,8 +99,8 @@ class NewsboxAbstractModelsTests(TestCase): def test_08_get_absolute_url(self): news6 = News.objects.get(pk=6) expected_results = { - 'en':'/en/newsbox/myapp_hvad/news/2005/07/15/news-6/', - 'fr':'/fr/newsbox/myapp_hvad/news/2005/07/15/actualite-6/',} + 'en':'/en/newsbox/myapp_i18n/news/2005/07/15/news-6/', + 'fr':'/fr/newsbox/myapp_i18n/news/2005/07/15/actualite-6/',} for lang in expected_results: activate(lang) self.assertEqual(news6.get_absolute_url(), expected_results[lang]) diff --git a/tests/myapp_hvad/urls.py b/tests/myapp_i18n/urls.py similarity index 76% rename from tests/myapp_hvad/urls.py rename to tests/myapp_i18n/urls.py index 04c49fa..252d85c 100644 --- a/tests/myapp_hvad/urls.py +++ b/tests/myapp_i18n/urls.py @@ -13,11 +13,11 @@ admin.autodiscover() urlpatterns = i18n_patterns('', url(r'^admin/', include(admin.site.urls)), - url(r'^', include('newsbox_hvad.urls')), - url(r'^news/$', - NewsboxArchiveView.as_view(model=News, paginate_by=1), + url(r'^', include('newsbox_i18n.urls')), + url(r'^news/$', + NewsboxArchiveView.as_view(model=News, paginate_by=1), name='news_list',), - url(r'^news/(?P<year>\d{4})/$', - NewsboxYearArchiveView.as_view(model=News, paginate_by=1), + url(r'^news/(?P<year>\d{4})/$', + NewsboxYearArchiveView.as_view(model=News, paginate_by=1), name='news_list_y',), ) diff --git a/tests/runtests.sh b/tests/runtests.sh index b0a7136..8e66985 100755 --- a/tests/runtests.sh +++ b/tests/runtests.sh @@ -16,8 +16,8 @@ fi if [ "$args" = "myapp_cms30" ] ; then export DJANGO_SETTINGS_MODULE='settings_cms30' APP="myapp_cms" -elif [ "$args" = "myapp_hvad" ] ; then - export DJANGO_SETTINGS_MODULE='settings_hvad' +elif [ "$args" = "myapp_i18n" ] ; then + export DJANGO_SETTINGS_MODULE='settings_i18n' APP="$args" elif [ "$args" = "myapp_all30" ] ; then export DJANGO_SETTINGS_MODULE='settings_all30' diff --git a/tests/settings_all30.py b/tests/settings_all30.py index 43cd0d2..230561b 100644 --- a/tests/settings_all30.py +++ b/tests/settings_all30.py @@ -7,6 +7,17 @@ INSTALLED_APPS.remove('myapp_cms') INSTALLED_APPS = tuple(INSTALLED_APPS) LANGUAGES = [('en', 'English',), ('fr', 'French',),] +PARLER_DEFAULT_LANGUAGE_CODE = 'fr' +PARLER_LANGUAGES = { + None: ( + {'code': 'en',}, + {'code': 'fr',}, + ), + 'default': { + 'fallbacks': ['fr'], + 'hide_untranslated': True, + } +} ROOT_URLCONF = 'myapp_all.urls' MIDDLEWARE_CLASSES=MIDDLEWARE_CLASSES+( 'django.middleware.common.CommonMiddleware', diff --git a/tests/settings_all31.py b/tests/settings_all31.py index 0f388b5..2e9fe81 100644 --- a/tests/settings_all31.py +++ b/tests/settings_all31.py @@ -7,6 +7,17 @@ INSTALLED_APPS.remove('myapp_cms') INSTALLED_APPS = tuple(INSTALLED_APPS) LANGUAGES = [('en', 'English',), ('fr', 'French',),] +PARLER_DEFAULT_LANGUAGE_CODE = 'fr' +PARLER_LANGUAGES = { + None: ( + {'code': 'en',}, + {'code': 'fr',}, + ), + 'default': { + 'fallbacks': ['fr'], + 'hide_untranslated': True, + } +} ROOT_URLCONF = 'myapp_all.urls' MIDDLEWARE_CLASSES=MIDDLEWARE_CLASSES+( 'django.middleware.common.CommonMiddleware', diff --git a/tests/settings_hvad.py b/tests/settings_i18n.py similarity index 64% rename from tests/settings_hvad.py rename to tests/settings_i18n.py index f549c36..b6a6573 100644 --- a/tests/settings_hvad.py +++ b/tests/settings_i18n.py @@ -3,7 +3,18 @@ from __future__ import unicode_literals from settings import * LANGUAGES = [('en', 'English'),('fr', 'French'),] -ROOT_URLCONF = 'myapp_hvad.urls' +PARLER_DEFAULT_LANGUAGE_CODE = 'fr' +PARLER_LANGUAGES = { + None: ( + {'code': 'en',}, + {'code': 'fr',}, + ), + 'default': { + 'fallbacks': ['fr'], + 'hide_untranslated': True, + } +} +ROOT_URLCONF = 'myapp_i18n.urls' MIDDLEWARE_CLASSES=( 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', @@ -13,6 +24,6 @@ MIDDLEWARE_CLASSES=( 'django.contrib.messages.middleware.MessageMiddleware', ) -INSTALLED_APPS = list(INSTALLED_APPS + ('hvad', 'myapp_hvad',)) +INSTALLED_APPS = list(INSTALLED_APPS + ('parler', 'myapp_i18n',)) INSTALLED_APPS.remove('myapp') INSTALLED_APPS = tuple(INSTALLED_APPS) diff --git a/tests/utils.py b/tests/utils.py index 17a8e09..3a98796 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -4,9 +4,9 @@ from myapp.models import News, NewsExpired, NewsSEO, NewsComplete, NewsExtended from myapp_cms.models import News as cms_News, \ NewsComplete as cms_NewsComplete, \ NewsExtended as cms_NewsExtended -from myapp_hvad.models import News as hvad_News, \ - NewsComplete as hvad_NewsComplete, \ - NewsExtended as hvad_NewsExtended +from myapp_i18n.models import News as i18n_News, \ + NewsComplete as i18n_NewsComplete, \ + NewsExtended as i18n_NewsExtended from myapp_all.models import News as all_News, \ NewsComplete as all_NewsComplete, \ NewsExtended as all_NewsExtended @@ -26,7 +26,7 @@ def get_fields_values(newsTypes, newsType, i, inherited): return fields_values def create_tests_data(app=None): - + #Translations of translatable fields translations = { 'en':{ @@ -44,15 +44,15 @@ def create_tests_data(app=None): }, } translatable_fields = translations['fr'].keys() - + #array of available NewsTypes - #for each NewsType, we define a subarray with the model to use and + #for each NewsType, we define a subarray with the model to use and #default fields values in "overwrites" which is a subarray too : # - inherit is a list of other NewsTypes to get default fields.from their conf # - key 0 is the default values for all news # - keys 1 to N is an array with values to overwrite for news 1 to N. - # Can also contain a "languages" list with language code for translations. - #Only used for HVAD Models. Translations are in "translations" variable. + # Can also contain a "languages" list with language code for translations. + #Only used for I18N Models. Translations are in "translations" variable. newsTypes = { 'News' : { 'model':News, @@ -82,7 +82,7 @@ def create_tests_data(app=None): 'overwrites':{ 'inherit':['News',], 5:{ - 'newsbox_published':True, + 'newsbox_published':True, 'newsbox_publication_end_date':'2000-01-01T10:00:00+02:00', }, }, @@ -118,7 +118,7 @@ def create_tests_data(app=None): }, } }, - + #CMS Models 'cms_News' : { 'model':cms_News, @@ -142,30 +142,30 @@ def create_tests_data(app=None): 'inherit':['cms_NewsComplete'], }, }, - - #HVAD Models - 'hvad_News' : { + + #I18N Models + 'i18n_News' : { 'languages':['en', 'fr',], - 'model':hvad_News, + 'model':i18n_News, 'overwrites':{ 'inherit':['News',], }, }, - 'hvad_NewsComplete' : { + 'i18n_NewsComplete' : { 'languages':['en', 'fr',], - 'model':hvad_NewsComplete, + 'model':i18n_NewsComplete, 'overwrites':{ - 'inherit':['NewsComplete', 'hvad_News'], + 'inherit':['NewsComplete', 'i18n_News'], }, }, - 'hvad_NewsExtended' : { + 'i18n_NewsExtended' : { 'languages':['en', 'fr',], - 'model':hvad_NewsExtended, + 'model':i18n_NewsExtended, 'overwrites':{ - 'inherit':['NewsExtended', 'hvad_NewsComplete'], + 'inherit':['NewsExtended', 'i18n_NewsComplete'], }, }, - + #ALL Models 'all_News' : { 'languages':['en', 'fr',], @@ -201,7 +201,7 @@ def create_tests_data(app=None): print '\n%s\n' % newsType + '-' * len(newsType) - + for i in range(1, nb_news_a_creer+1): if not 'languages' in infos: @@ -223,7 +223,7 @@ def create_tests_data(app=None): for k in kwargs: if type(kwargs[k]) in (str, unicode) and '%d' in kwargs[k]: kwargs[k] = kwargs[k] % i - + try: #Transform field into placeholders if needed ph_names = getattr(infos['model']._meta, 'placeholder_field_names') @@ -236,14 +236,14 @@ def create_tests_data(app=None): except AttributeError: pass - translatable_values = {k:v - for k, v in kwargs.items() + translatable_values = {k:v + for k, v in kwargs.items() if k in translatable_fields} untranslatable_fields = list(set(kwargs) - set(translatable_fields)) - untranslatable_values = {k:v - for k, v in kwargs.items() + untranslatable_values = {k:v + for k, v in kwargs.items() if k in untranslatable_fields} - + langstr = ' (%s)' % lang if lang else '' print ' - %d%s : %s' % (i, langstr, kwargs['newsbox_title']) if lang == infos['languages'][0]: diff --git a/tox.ini b/tox.ini index d391d58..e0d6efd 100644 --- a/tox.ini +++ b/tox.ini @@ -23,31 +23,31 @@ changedir = {toxinidir}/tests basepython = python2.6 deps = -r{toxinidir}/test_requirements/django-1.6.txt commands = ./runtests.sh myapp {posargs} - ./runtests.sh myapp_hvad {posargs} + ./runtests.sh myapp_i18n {posargs} [testenv:py27-16] basepython = python2.7 deps = -r{toxinidir}/test_requirements/django-1.6.txt commands = ./runtests.sh myapp {posargs} - ./runtests.sh myapp_hvad {posargs} + ./runtests.sh myapp_i18n {posargs} [testenv:py32-16] basepython = python3.2 deps = -r{toxinidir}/test_requirements/django-1.6.txt commands = ./runtests.sh myapp {posargs} -; ./runtests.sh myapp_hvad {posargs} +; ./runtests.sh myapp_i18n {posargs} [testenv:py33-16] basepython = python3.3 deps = -r{toxinidir}/test_requirements/django-1.6.txt commands = ./runtests.sh myapp {posargs} -; ./runtests.sh myapp_hvad {posargs} +; ./runtests.sh myapp_i18n {posargs} [testenv:py34-16] basepython = python3.4 deps = -r{toxinidir}/test_requirements/django-1.6.txt commands = ./runtests.sh myapp {posargs} -; ./runtests.sh myapp_hvad {posargs} +; ./runtests.sh myapp_i18n {posargs} [testenv:py26-cms30] basepython = python2.6 @@ -59,13 +59,13 @@ commands = ./runtests.sh myapp_cms30 {posargs} basepython = python2.7 deps = -r{toxinidir}/test_requirements/django-1.7.txt commands = ./runtests.sh myapp {posargs} - ./runtests.sh myapp_hvad {posargs} + ./runtests.sh myapp_i18n {posargs} [testenv:py27-18] basepython = python2.7 deps = -r{toxinidir}/test_requirements/django-1.8.txt commands = ./runtests.sh myapp {posargs} - ./runtests.sh myapp_hvad {posargs} + ./runtests.sh myapp_i18n {posargs} [testenv:py27-cms30] basepython = python2.7 -- GitLab