diff --git a/cms/models/aliaspluginmodel.py b/cms/models/aliaspluginmodel.py index da3dd0d98ee..5dc45a8506d 100644 --- a/cms/models/aliaspluginmodel.py +++ b/cms/models/aliaspluginmodel.py @@ -1,20 +1,22 @@ # -*- coding: utf-8 -*- -from cms.models import CMSPlugin, Placeholder -from cms.utils.compat.dj import python_2_unicode_compatible -from django.utils.encoding import force_text +from __future__ import unicode_literals + from django.db import models +from django.utils.encoding import python_2_unicode_compatible + +from cms.models import CMSPlugin, Placeholder @python_2_unicode_compatible class AliasPluginModel(CMSPlugin): - plugin = models.ForeignKey(CMSPlugin, editable=False, related_name="alias_reference", null=True) - alias_placeholder = models.ForeignKey(Placeholder, editable=False, related_name="alias_placeholder", null=True) + plugin = models.ForeignKey(CMSPlugin, editable=False, null=True, related_name='alias_reference') + alias_placeholder = models.ForeignKey(Placeholder, editable=False, null=True, related_name='alias_placeholder') class Meta: app_label = 'cms' def __str__(self): if self.plugin_id: - return force_text(self.plugin.get_plugin_name()) + return self.plugin.get_plugin_name() else: - return force_text(self.alias_placeholder.get_label()) + return self.alias_placeholder.get_label() diff --git a/cms/models/fields.py b/cms/models/fields.py index 6d077065099..9a06cd03d78 100644 --- a/cms/models/fields.py +++ b/cms/models/fields.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- +from django.db import models + from cms.forms.fields import PageSelectFormField from cms.models.pagemodel import Page from cms.models.placeholdermodel import Placeholder from cms.utils.placeholder import PlaceholderNoAction, validate_placeholder_name -from django.db import models class PlaceholderField(models.ForeignKey): diff --git a/cms/models/pagemodel.py b/cms/models/pagemodel.py index d788c1cbf8e..eb49c862510 100644 --- a/cms/models/pagemodel.py +++ b/cms/models/pagemodel.py @@ -1,14 +1,17 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + from logging import Logger from os.path import join -from django.utils.timezone import now +from django.conf import settings from django.contrib.sites.models import Site -from django.core.urlresolvers import reverse from django.core.cache import cache -from django.conf import settings +from django.core.urlresolvers import reverse from django.db import models from django.shortcuts import get_object_or_404 +from django.utils.encoding import force_text, python_2_unicode_compatible +from django.utils.timezone import now from django.utils.translation import get_language, ugettext_lazy as _ from mptt.models import MPTTModel @@ -22,13 +25,13 @@ from cms.publisher.errors import MpttPublisherCantPublish from cms.utils import i18n, page as page_utils from cms.utils.compat import DJANGO_1_5 -from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible from cms.utils.compat.metaclasses import with_metaclass from cms.utils.conf import get_cms_setting from cms.utils.copy_plugins import copy_plugins_to from cms.utils.helpers import reversion_register from menus.menu_pool import menu_pool + @python_2_unicode_compatible class Page(with_metaclass(PageMetaClass, MPTTModel)): """ @@ -140,7 +143,7 @@ def __str__(self): title = None if title is None: title = u"" - return force_unicode(title) + return force_text(title) def __repr__(self): # This is needed to solve the infinite recursion when diff --git a/cms/models/permissionmodels.py b/cms/models/permissionmodels.py index 960584ff88b..5990a960b86 100644 --- a/cms/models/permissionmodels.py +++ b/cms/models/permissionmodels.py @@ -1,20 +1,23 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + from django.conf import settings +from django.contrib.auth.models import Group +from django.contrib.sites.models import Site +from django.core.exceptions import ImproperlyConfigured from django.db import models from django.utils import importlib +from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -from django.core.exceptions import ImproperlyConfigured -from django.contrib.auth.models import Group -from django.contrib.sites.models import Site from cms.models import Page from cms.models.managers import (PagePermissionManager, GlobalPagePermissionManager) from cms.utils.compat import DJANGO_1_6 -from cms.utils.compat.dj import (force_unicode, python_2_unicode_compatible, - is_user_swapped, user_model_label) +from cms.utils.compat.dj import is_user_swapped, user_model_label from cms.utils.helpers import reversion_register + # To avoid circular dependencies, don't use cms.compat.get_user_model, and # don't depend on the app registry, to get the custom user model if used if is_user_swapped: @@ -90,7 +93,7 @@ def audience(self): """Return audience by priority, so: All or User, Group """ targets = filter(lambda item: item, (self.user, self.group,)) - return ", ".join([force_unicode(t) for t in targets]) or 'No one' + return ", ".join([force_text(t) for t in targets]) or 'No one' def save(self, *args, **kwargs): if not self.user and not self.group: @@ -132,8 +135,8 @@ class Meta: app_label = 'cms' def __str__(self): - page = self.page_id and force_unicode(self.page) or "None" - return "%s :: %s has: %s" % (page, self.audience, force_unicode(dict(ACCESS_CHOICES)[self.grant_on])) + page = self.page_id and force_text(self.page) or "None" + return "%s :: %s has: %s" % (page, self.audience, force_text(dict(ACCESS_CHOICES)[self.grant_on])) class PageUser(User): diff --git a/cms/models/placeholdermodel.py b/cms/models/placeholdermodel.py index f5e902b87e3..38c380f0a10 100644 --- a/cms/models/placeholdermodel.py +++ b/cms/models/placeholdermodel.py @@ -1,16 +1,17 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.conf import settings +from django.contrib import admin from django.core.urlresolvers import reverse from django.db import models from django.template.defaultfilters import title -from django.utils.encoding import force_text +from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.timezone import get_current_timezone_name from django.utils.translation import ugettext_lazy as _ -from django.conf import settings -from django.contrib import admin from cms.exceptions import LanguageError from cms.utils import get_cms_setting -from cms.utils.compat.dj import python_2_unicode_compatible from cms.utils.helpers import reversion_register from cms.utils.i18n import get_language_object from cms.utils.placeholder import PlaceholderNoAction, get_placeholder_conf @@ -45,9 +46,7 @@ def clear(self, language=None): plugin.delete(no_mptt=True) def get_label(self): - name = get_placeholder_conf("name", self.slot, default=title(self.slot)) - name = _(name) - return name + return _(get_placeholder_conf("name", self.slot, default=title(self.slot))) def get_add_url(self): return self._get_url('add_plugin') diff --git a/cms/models/placeholderpluginmodel.py b/cms/models/placeholderpluginmodel.py index 714a50761bd..36b76180f7d 100644 --- a/cms/models/placeholderpluginmodel.py +++ b/cms/models/placeholderpluginmodel.py @@ -1,9 +1,13 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models +from django.utils.encoding import python_2_unicode_compatible + from cms.models import CMSPlugin from cms.models.fields import PlaceholderField -from cms.utils.compat.dj import python_2_unicode_compatible from cms.utils.copy_plugins import copy_plugins_to -from django.db import models + @python_2_unicode_compatible class PlaceholderReference(CMSPlugin): @@ -32,4 +36,4 @@ def move_from(self, placeholder, language): for plugin in placeholder.get_plugins(): plugin.placeholder = self.placeholder_ref plugin.language = language - plugin.save() \ No newline at end of file + plugin.save() diff --git a/cms/models/pluginmodel.py b/cms/models/pluginmodel.py index c54dfa1943f..c3617210b59 100644 --- a/cms/models/pluginmodel.py +++ b/cms/models/pluginmodel.py @@ -1,27 +1,31 @@ # -*- coding: utf-8 -*- -from datetime import date +from __future__ import unicode_literals + +import datetime import json import os import warnings -from cms.exceptions import DontUsePageAttributeWarning -from cms.models.placeholdermodel import Placeholder -from cms.plugin_rendering import PluginContext, render_plugin -from cms.utils import get_cms_setting -from cms.utils.compat import DJANGO_1_5 -from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible -from cms.utils.compat.metaclasses import with_metaclass -from cms.utils.helpers import reversion_register + from django.core.urlresolvers import reverse, NoReverseMatch from django.core.exceptions import ValidationError, ObjectDoesNotExist from django.db import models +from django.db.models import signals, Model from django.db.models.base import model_unpickle from django.db.models.query_utils import DeferredAttribute from django.utils import timezone +from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ -from django.db.models import signals, Model from mptt.models import MPTTModel, MPTTModelBase +from cms.exceptions import DontUsePageAttributeWarning +from cms.models.placeholdermodel import Placeholder +from cms.plugin_rendering import PluginContext, render_plugin +from cms.utils import get_cms_setting +from cms.utils.compat import DJANGO_1_5 +from cms.utils.compat.metaclasses import with_metaclass +from cms.utils.helpers import reversion_register + class BoundRenderMeta(object): def __init__(self, meta): @@ -124,18 +128,19 @@ def __reduce__(self): return (model_unpickle, (model, defers, factory), data) def __str__(self): - return force_unicode(self.pk) + return force_text(self.pk) def get_plugin_name(self): from cms.plugin_pool import plugin_pool - return plugin_pool.get_plugin(self.plugin_type).name + return force_text(plugin_pool.get_plugin(self.plugin_type).name) def get_short_description(self): instance = self.get_plugin_instance()[0] - if instance is not None: - return force_unicode(instance) - return _("") + if instance: + return instance + else: + return _('') def get_plugin_class(self): from cms.plugin_pool import plugin_pool @@ -212,7 +217,7 @@ def get_media_path(self, filename): if pages.count(): return pages[0].get_media_path(filename) else: # django 1.0.2 compatibility - today = date.today() + today = datetime.date.today() return os.path.join(get_cms_setting('PAGE_MEDIA_PATH'), str(today.year), str(today.month), str(today.day), filename) @@ -232,7 +237,7 @@ def get_instance_icon_src(self): if instance: return plugin.icon_src(instance) else: - return u'' + return '' def get_instance_icon_alt(self): """ @@ -240,9 +245,9 @@ def get_instance_icon_alt(self): """ instance, plugin = self.get_plugin_instance() if instance: - return force_unicode(plugin.icon_alt(instance)) + return plugin.icon_alt(instance) else: - return u'' + return '' def save(self, no_signals=False, *args, **kwargs): if no_signals: # ugly hack because of mptt @@ -363,25 +368,17 @@ def get_breadcrumb(self): breadcrumb = [] if not self.parent_id: try: - url = force_unicode( - reverse("admin:%s_%s_edit_plugin" % (model._meta.app_label, model._meta.module_name), - args=[self.pk])) + url = reverse("admin:%s_%s_edit_plugin" % (model._meta.app_label, model._meta.module_name), args=[self.pk]) except NoReverseMatch: - url = force_unicode( - reverse("admin:%s_%s_edit_plugin" % (Page._meta.app_label, Page._meta.module_name), - args=[self.pk])) - breadcrumb.append({'title': force_unicode(self.get_plugin_name()), 'url': url}) + url = reverse("admin:%s_%s_edit_plugin" % (Page._meta.app_label, Page._meta.module_name), args=[self.pk]) + breadcrumb.append({'title': self.get_plugin_name(), 'url': url}) return breadcrumb for parent in self.get_ancestors(False, True): try: - url = force_unicode( - reverse("admin:%s_%s_edit_plugin" % (model._meta.app_label, model._meta.module_name), - args=[parent.pk])) + url = reverse("admin:%s_%s_edit_plugin" % (model._meta.app_label, model._meta.module_name), args=[parent.pk]) except NoReverseMatch: - url = force_unicode( - reverse("admin:%s_%s_edit_plugin" % (Page._meta.app_label, Page._meta.module_name), - args=[parent.pk])) - breadcrumb.append({'title': force_unicode(parent.get_plugin_name()), 'url': url}) + url = reverse("admin:%s_%s_edit_plugin" % (Page._meta.app_label, Page._meta.module_name), args=[parent.pk]) + breadcrumb.append({'title': parent.get_plugin_name(), 'url': url}) return breadcrumb def get_breadcrumb_json(self): diff --git a/cms/models/settingmodels.py b/cms/models/settingmodels.py index 37dc6d4e81b..df8f2c7ff77 100644 --- a/cms/models/settingmodels.py +++ b/cms/models/settingmodels.py @@ -1,16 +1,20 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.conf import settings from django.db import models +from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -from django.conf import settings -from cms.utils.compat.dj import force_unicode, python_2_unicode_compatible + user_model_label = getattr(settings, 'AUTH_USER_MODEL', 'auth.User') + @python_2_unicode_compatible class UserSettings(models.Model): user = models.ForeignKey(user_model_label, unique=True, editable=False, related_name='djangocms_usersettings') - language = models.CharField(_("Language"), max_length=10, choices=settings.LANGUAGES, - help_text=_("The language for the admin interface and toolbar")) + language = models.CharField(_('Language'), max_length=10, choices=settings.LANGUAGES, + help_text=_('The language for the admin interface and toolbar')) clipboard = models.ForeignKey('cms.Placeholder', blank=True, null=True, editable=False) class Meta: @@ -19,6 +23,4 @@ class Meta: app_label = 'cms' def __str__(self): - return force_unicode(self.user) - - + return force_text(self.user) diff --git a/cms/models/static_placeholder.py b/cms/models/static_placeholder.py index 663cbd6aacc..aed030f06fa 100644 --- a/cms/models/static_placeholder.py +++ b/cms/models/static_placeholder.py @@ -1,12 +1,15 @@ +from __future__ import unicode_literals + import uuid -from cms.utils.compat.dj import python_2_unicode_compatible -from cms.utils.copy_plugins import copy_plugins_to from django.contrib.sites.models import Site from django.core.exceptions import ValidationError from django.db import models +from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ + from cms.models.fields import PlaceholderField +from cms.utils.copy_plugins import copy_plugins_to def static_slotname(instance): @@ -26,12 +29,12 @@ class StaticPlaceholder(models.Model): (CREATION_BY_CODE, _('by code')), ) name = models.CharField( - verbose_name=_(u'static placeholder name'), max_length=255, blank=True, default='', - help_text=_(u'Descriptive name to identify this static placeholder. Not displayed to users.')) + verbose_name=_('static placeholder name'), max_length=255, blank=True, default='', + help_text=_('Descriptive name to identify this static placeholder. Not displayed to users.')) code = models.CharField( - verbose_name=_(u'placeholder code'), max_length=255, blank=True, - help_text=_(u'To render the static placeholder in templates.')) - draft = PlaceholderField(static_slotname, verbose_name=_(u'placeholder content'), related_name='static_draft') + verbose_name=_('placeholder code'), max_length=255, blank=True, + help_text=_('To render the static placeholder in templates.')) + draft = PlaceholderField(static_slotname, verbose_name=_('placeholder content'), related_name='static_draft') public = PlaceholderField(static_slotname, editable=False, related_name='static_public') dirty = models.BooleanField(default=False, editable=False) creation_method = models.CharField( @@ -41,8 +44,8 @@ class StaticPlaceholder(models.Model): site = models.ForeignKey(Site, null=True, blank=True) class Meta: - verbose_name = _(u'static placeholder') - verbose_name_plural = _(u'static placeholders') + verbose_name = _('static placeholder') + verbose_name_plural = _('static placeholders') app_label = 'cms' unique_together = (('code', 'site'),) @@ -52,13 +55,13 @@ def __str__(self): def clean(self): # TODO: check for clashes if the random code is already taken if not self.code: - self.code = u'static-%s' % uuid.uuid4() + self.code = 'static-%s' % uuid.uuid4() if not self.site: placeholders = StaticPlaceholder.objects.filter(code=self.code, site__isnull=True) if self.pk: placeholders = placeholders.exclude(pk=self.pk) if placeholders.exists(): - raise ValidationError(_("A static placeholder with the same site and code already exists")) + raise ValidationError(_('A static placeholder with the same site and code already exists')) def publish(self, request, language, force=False): if force or self.has_publish_permission(request): diff --git a/cms/models/titlemodels.py b/cms/models/titlemodels.py index 53eb1ea8102..efa6cdbaa81 100644 --- a/cms/models/titlemodels.py +++ b/cms/models/titlemodels.py @@ -1,10 +1,14 @@ # -*- coding: utf-8 -*- +from __future__ import unicode_literals + from datetime import timedelta -from cms.constants import PUBLISHER_STATE_DIRTY -from cms.utils.compat.dj import python_2_unicode_compatible + from django.db import models from django.utils import timezone +from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ + +from cms.constants import PUBLISHER_STATE_DIRTY from cms.models.managers import TitleManager from cms.models.pagemodel import Page from cms.utils.helpers import reversion_register @@ -41,20 +45,19 @@ class Meta: app_label = 'cms' def __str__(self): - return u"%s (%s, %s)" % (self.title, self.slug, self.language) + return '%s (%s, %s)' % (self.title, self.slug, self.language) def update_path(self): # Build path from parent page's path and slug - slug = u'%s' % self.slug + slug = '%s' % self.slug if not self.has_url_overwrite: - self.path = u'%s' % slug + self.path = '%s' % slug if self.page.parent_id: parent_page = self.page.parent_id parent_title = Title.objects.get_title(parent_page, language=self.language, language_fallback=True) if parent_title: - self.path = u'%s/%s' % (parent_title.path, slug) - + self.path = '%s/%s' % (parent_title.path, slug) @property def overwrite_url(self): @@ -108,11 +111,8 @@ def is_new_dirty(self): class EmptyTitle(object): - - def __init__(self, language): - self.language = language - - """Empty title object, can be returned from Page.get_title_obj() if required + """ + Empty title object, can be returned from Page.get_title_obj() if required title object doesn't exists. """ title = "" @@ -126,6 +126,9 @@ def __init__(self, language): page_title = "" published = False + def __init__(self, language): + self.language = language + @property def overwrite_url(self): return None