# -*- coding: utf-8 -*- # Future imports from __future__ import unicode_literals try: # Django imports from django.urls import reverse except ImportError: from django.core.urlresolvers import reverse <<<<<<< Updated upstream from django.utils.translation import ugettext_lazy as _, get_language from django.utils import six try: from django.utils.encoding import python_2_unicode_compatible except ImportError: def python_2_unicode_compatible(f): return f from parler.managers import TranslatableManager, TranslatableQuerySet from parler.models import TranslatableModel, TranslatedFields ======= # Django imports from django.utils.translation import get_language from django.utils.translation import ugettext_lazy as _ # Third Party from newsbox.models import NewsboxManager from newsbox.models import NewsboxModelBase from parler.managers import TranslatableManager from parler.managers import TranslatableQuerySet from parler.models import TranslatableModel from parler.models import TranslatedFields >>>>>>> Stashed changes from parler.utils.context import switch_language import six class NewsboxI18NQueryset(TranslatableQuerySet): pass class NewsboxI18NManager(TranslatableManager, NewsboxManager): queryset_class = NewsboxI18NQueryset 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) translatedFields['meta'] = { 'unique_together': (('newsbox_slug', 'language_code'), ), 'verbose_name': _('News translation'), 'verbose_name_plural': _('News translations') } class_attrs['translations'] = TranslatedFields(**translatedFields) class_attrs['newsbox_objects'] = NewsboxI18NManager() # class_attrs['default_manager'] = class_attrs['newsbox_objects'] class NewsboxI18NModelBase(NewsboxModelBase): pass class NewsboxI18NBase(six.with_metaclass(NewsboxI18NModelBase, TranslatableModel)): """ Define News which expires in time and will not be displayed in front """ default_manager = NewsboxI18NManager() objects = default_manager def __str__(self): return self.safe_translation_getter( 'newsbox_title', _('News #%d') % (self.pk or 0), any_language=True) def get_slug(self, language=None, *args, **kwargs): """ Returns the slug for this object for the given language. """ if language is None or language == self.language_code: return self.safe_translation_getter('newsbox_slug') else: instance = self.__class__.objects.language(language).get(pk=self.pk) return instance.safe_translation_getter('newsbox_slug') def get_absolute_url(self, language=None, *args, **kwargs): """ Build url for the given language. """ current_language = get_language() if not language: language = current_language if language not in self.get_available_languages(): if not self.get_available_languages(): return None language = None for lang in self.get_fallback_languages(): if lang in self.get_available_languages(): language = lang break if not language: return None with switch_language(self, language): url = reverse(self._newsbox_meta['detail_url_name'], args=( self.newsbox_publication_start_date.strftime("%Y"), self.newsbox_publication_start_date.strftime("%m"), self.newsbox_publication_start_date.strftime("%d"), self.get_slug(language=language),)) return url class Meta: abstract = True verbose_name = _('news') verbose_name_plural = _('news') # newsbox_metaclass_base_processor = 'newsboxi18n_mcls_processor' newsbox_metaclass_final_processor = 'newsboxi18n_mcls_processor'