Skip to content

Commit

Permalink
Enhanced unicode support for models
Browse files Browse the repository at this point in the history
  • Loading branch information
Mateusz Marzantowicz committed Aug 8, 2014
1 parent 0326088 commit e7b4a6d
Show file tree
Hide file tree
Showing 10 changed files with 111 additions and 94 deletions.
16 changes: 9 additions & 7 deletions 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()
3 changes: 2 additions & 1 deletion 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):
Expand Down
13 changes: 8 additions & 5 deletions 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

Expand All @@ -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)):
"""
Expand Down Expand Up @@ -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
Expand Down
19 changes: 11 additions & 8 deletions 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:
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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):
Expand Down
13 changes: 6 additions & 7 deletions 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
Expand Down Expand Up @@ -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')
Expand Down
10 changes: 7 additions & 3 deletions 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):
Expand Down Expand Up @@ -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()
plugin.save()
63 changes: 30 additions & 33 deletions 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):
Expand Down Expand Up @@ -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 _("<Empty>")
if instance:
return instance
else:
return _('<Empty>')

def get_plugin_class(self):
from cms.plugin_pool import plugin_pool
Expand Down Expand Up @@ -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)

Expand All @@ -232,17 +237,17 @@ def get_instance_icon_src(self):
if instance:
return plugin.icon_src(instance)
else:
return u''
return ''

def get_instance_icon_alt(self):
"""
Get alt text for instance's icon
"""
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
Expand Down Expand Up @@ -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):
Expand Down
16 changes: 9 additions & 7 deletions 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:
Expand All @@ -19,6 +23,4 @@ class Meta:
app_label = 'cms'

def __str__(self):
return force_unicode(self.user)


return force_text(self.user)

0 comments on commit e7b4a6d

Please sign in to comment.