- Validated codebase against pep8 and pyflakes.

- Fixed an undefined name bug in add_localized_fields error message when a model already has a field by the name that is added.
- Fixed redefined method name in ModeltranslationWithFileFields test class.
This commit is contained in:
Dirk Eschler 2012-10-24 11:06:35 +02:00
parent cda6ae19c8
commit 3acfa09dbc
9 changed files with 72 additions and 69 deletions

View file

@ -46,10 +46,10 @@ def autodiscover():
if sys.argv[1] in ('runserver', 'runserver_plus'):
translated_model_names = ', '.join(
t.__name__ for t in translator._registry.keys())
print('modeltranslation: Registered %d models for '
'translation (%s) [pid:%d].' % (
len(translator._registry), translated_model_names,
os.getpid()))
print('modeltranslation: Registered %d models for translation '
'(%s) [pid:%d].' % (
len(translator._registry), translated_model_names,
os.getpid()))
except IndexError:
pass
@ -63,8 +63,6 @@ def handle_translation_registrations(*args, **kwargs):
but know nothing of modeltranslation.
"""
import inspect
import os
from django.conf import settings
from modeltranslation.settings import ENABLE_REGISTRATIONS
if not ENABLE_REGISTRATIONS:
@ -81,8 +79,8 @@ def handle_translation_registrations(*args, **kwargs):
stack = inspect.stack()
for stack_info in stack[1:]:
if 'handle_translation_registrations' in stack_info[3] \
and __file__ == stack_info[2]:
if ('handle_translation_registrations' in stack_info[3] and
__file__ == stack_info[2]):
return
# Trigger autodiscover, causing any TranslationOption initialization

View file

@ -24,7 +24,7 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
def _declared_fieldsets(self):
# Take custom modelform fields option into account
if not self.fields and hasattr(
self.form, '_meta') and self.form._meta.fields:
self.form, '_meta') and self.form._meta.fields:
self.fields = self.form._meta.fields
if self.fieldsets:
return self._patch_fieldsets(self.fieldsets)
@ -135,7 +135,7 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
Code shared among get_form and get_formset.
"""
if not self.exclude and hasattr(
self.form, '_meta') and self.form._meta.exclude:
self.form, '_meta') and self.form._meta.exclude:
# Take the custom ModelForm's Meta.exclude into account only if the
# ModelAdmin doesn't define its own.
kwargs.update({'exclude': getattr(
@ -182,7 +182,7 @@ class TranslationBaseModelAdmin(BaseModelAdmin):
excl_languages = exclude_languages
exclude = []
for orig_fieldname, translation_fields in \
self.trans_opts.localized_fieldnames.iteritems():
self.trans_opts.localized_fieldnames.iteritems():
for tfield in translation_fields:
language = tfield.split('_')[-1]
if language in excl_languages and tfield not in exclude:

View file

@ -157,8 +157,9 @@ class TranslationFieldDescriptor(object):
def __get__(self, instance, owner):
if not instance:
raise ValueError(u"Translation field '%s' can only be accessed "
"via an instance not via a class." % self.name)
raise ValueError(
"Translation field '%s' can only be accessed via an instance "
"not via a class." % self.name)
loc_field_name = build_localized_fieldname(
self.name, get_language())
if hasattr(instance, loc_field_name):

View file

@ -58,8 +58,9 @@ class Command(BaseCommand):
for model in all_models:
try:
options = translator.get_options_for_model(model)
# options returns full-wide spectrum of localized fields but
# we only to synchronize the local fields attached to the model.
# Options returns full-wide spectrum of localized fields but
# we only want to synchronize the local fields attached to the
# model.
local_field_names = [field.name for field
in model._meta.local_fields]
translatable_fields = [field for field
@ -109,7 +110,7 @@ class Command(BaseCommand):
db_table_fields = self.get_table_fields(db_table)
for lang_code, lang_name in settings.LANGUAGES:
if build_localized_fieldname(
field_name, lang_code) not in db_table_fields:
field_name, lang_code) not in db_table_fields:
yield lang_code
def get_sync_sql(self, field_name, missing_langs, model):
@ -131,7 +132,8 @@ class Command(BaseCommand):
"ALTER TABLE %s ADD COLUMN %s;" % (
qn(db_table), ' '.join(field_sql)))
if not f.null and lang == settings.LANGUAGE_CODE:
sql_output.append("ALTER TABLE %s MODIFY COLUMN %s %s %s;" % \
(qn(db_table), qn(f.column), col_type,
style.SQL_KEYWORD('NOT NULL')))
sql_output.append(
("ALTER TABLE %s MODIFY COLUMN %s %s %s;" % (
qn(db_table), qn(f.column), col_type,
style.SQL_KEYWORD('NOT NULL'))))
return sql_output

View file

@ -1,8 +1,6 @@
# -*- coding: utf-8 -*-
from django.conf import settings
from django.db.models import F, Q
from django.core.management.base import (BaseCommand, CommandError,
NoArgsCommand)
from django.core.management.base import NoArgsCommand
from modeltranslation.settings import DEFAULT_LANGUAGE
from modeltranslation.translator import translator

View file

@ -83,7 +83,7 @@ translator.translator.register(TestModelWithFallback2,
class TestModelWithFileFields(models.Model):
title = models.CharField(ugettext_lazy('title'), max_length=255)
file = models.FileField(upload_to='test', null=True, blank=True)
file = models.FileField(upload_to='test', null=True, blank=True)
image = models.ImageField(upload_to='test', null=True, blank=True)
@ -249,8 +249,8 @@ class ModeltranslationWithFileFields(ModeltranslationTestBase):
self.failUnless('file_en' in field_names)
inst.delete()
def test_translated_models(self):
f_en = ContentFile("Just a really good file")
def test_translated_models_instance(self):
#f_en = ContentFile("Just a really good file")
inst = TestModelWithFileFields(title="Testtitle", file=None)
trans_real.activate("en")
@ -265,7 +265,7 @@ class ModeltranslationWithFileFields(ModeltranslationTestBase):
trans_real.activate("de")
inst.title = 'title_de'
inst.file = 'a_de'
inst.file = 'a_de'
inst.file.save('b_de', ContentFile('file in german'))
inst.image = 'i_de.jpg'
@ -291,6 +291,7 @@ class ModeltranslationWithFileFields(ModeltranslationTestBase):
inst.delete()
class ModeltranslationTestRule1(ModeltranslationTestBase):
"""
Rule 1: Reading the value from the original field returns the value in
@ -820,6 +821,7 @@ class TestModelMultitableD(TestModelMultitableB):
class TestModelAbstractA(models.Model):
titlea = models.CharField(ugettext_lazy('title a'), max_length=255)
class Meta:
abstract = True
@ -919,9 +921,10 @@ class TranslationAdminTest(ModeltranslationTestBase):
pass
ma = TestModelAdmin(TestModel, self.site)
self.assertEqual(ma.get_form(request).base_fields.keys(),
['title_de', 'title_en', 'text_de', 'text_en',
'url_de', 'url_en', 'email_de', 'email_en'])
self.assertEqual(
ma.get_form(request).base_fields.keys(),
['title_de', 'title_en', 'text_de', 'text_en', 'url_de', 'url_en',
'email_de', 'email_en'])
def test_default_fieldsets(self):
class TestModelAdmin(TranslationAdmin):
@ -932,9 +935,10 @@ class TranslationAdminTest(ModeltranslationTestBase):
# translation fields are included in fields
fields = ['title_de', 'title_en', 'text_de', 'text_en',
'url_de', 'url_en', 'email_de', 'email_en']
self.assertEqual(ma.get_fieldsets(request),
[(None, {'fields': fields})])
self.assertEqual(ma.get_fieldsets(request, self.test_obj),
self.assertEqual(
ma.get_fieldsets(request), [(None, {'fields': fields})])
self.assertEqual(
ma.get_fieldsets(request, self.test_obj),
[(None, {'fields': fields})])
def test_field_arguments(self):
@ -944,8 +948,8 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['title_de', 'title_en']
self.assertEqual(ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
def test_field_arguments_restricted_on_form(self):
# Using `fields`.
@ -955,8 +959,8 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['title_de', 'title_en']
self.assertEqual(ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
# Using `fieldsets`.
class TestModelAdmin(TranslationAdmin):
@ -964,8 +968,8 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
self.assertEqual(ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
# Using `exclude`.
class TestModelAdmin(TranslationAdmin):
@ -973,18 +977,18 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['title_de', 'title_en', 'text_de', 'text_en']
self.assertEqual(ma.get_form(request).base_fields.keys(),
fields)
self.assertEqual(
ma.get_form(request).base_fields.keys(), fields)
# You can also pass a tuple to `exclude`.
class TestModelAdmin(TranslationAdmin):
exclude = ('url', 'email')
ma = TestModelAdmin(TestModel, self.site)
self.assertEqual(ma.get_form(request).base_fields.keys(),
fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
# Using `fields` and `exclude`.
class TestModelAdmin(TranslationAdmin):
@ -992,8 +996,8 @@ class TranslationAdminTest(ModeltranslationTestBase):
exclude = ['url']
ma = TestModelAdmin(TestModel, self.site)
self.assertEqual(ma.get_form(request).base_fields.keys(),
['title_de', 'title_en'])
self.assertEqual(
ma.get_form(request).base_fields.keys(), ['title_de', 'title_en'])
def test_field_arguments_restricted_on_custom_form(self):
# Using `fields`.
@ -1007,10 +1011,10 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['url_de', 'url_en', 'email_de', 'email_en']
self.assertEqual(ma.get_form(request).base_fields.keys(),
fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
# Using `exclude`.
class TestModelForm(forms.ModelForm):
@ -1023,10 +1027,10 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['title_de', 'title_en', 'text_de', 'text_en']
self.assertEqual(ma.get_form(request).base_fields.keys(),
fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
# If both, the custom form an the ModelAdmin define an `exclude`
# option, the ModelAdmin wins. This is Django behaviour.
@ -1037,10 +1041,10 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['title_de', 'title_en', 'text_de', 'text_en', 'email_de',
'email_en']
self.assertEqual(ma.get_form(request).base_fields.keys(),
fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
# Same for `fields`.
class TestModelForm(forms.ModelForm):
@ -1054,10 +1058,10 @@ class TranslationAdminTest(ModeltranslationTestBase):
ma = TestModelAdmin(TestModel, self.site)
fields = ['email_de', 'email_en']
self.assertEqual(ma.get_form(request).base_fields.keys(),
fields)
self.assertEqual(ma.get_form(request,
self.test_obj).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request).base_fields.keys(), fields)
self.assertEqual(
ma.get_form(request, self.test_obj).base_fields.keys(), fields)
def test_inline_fieldsets(self):
class DataModel(models.Model):

View file

@ -1,9 +1,10 @@
# -*- coding: utf-8 -*-
from django.conf.urls import *
from django.conf.urls import include, patterns, url
from django.contrib import admin
urlpatterns = patterns('',
urlpatterns = patterns(
'',
url(r'^set_language/$', 'django.views.i18n.set_language', {},
name='set_language'),
url(r'^admin/', include(admin.site.urls)),)

View file

@ -2,8 +2,7 @@
from django.conf import settings
from django.db.models.base import ModelBase
from modeltranslation.fields import (TranslationField,
TranslationFieldDescriptor,
from modeltranslation.fields import (TranslationFieldDescriptor,
create_translation_field)
from modeltranslation.utils import build_localized_fieldname
@ -54,7 +53,7 @@ def add_localized_fields(model):
raise ValueError(
"Error adding translation field. Model '%s' already "
"contains a field named '%s'." % (
instance.__class__.__name__, localized_field_name))
model._meta.object_name, localized_field_name))
# This approach implements the translation fields as full valid
# django model fields and therefore adds them via add_to_class
model.add_to_class(localized_field_name, translation_field)
@ -144,7 +143,7 @@ class Translator(object):
# original fieldname
rev_dict = dict()
for orig_name, loc_names in \
translation_opts.localized_fieldnames.items():
translation_opts.localized_fieldnames.items():
for ln in loc_names:
rev_dict[ln] = orig_name
translation_opts.localized_fieldnames_rev = rev_dict

View file

@ -38,7 +38,7 @@ build_localized_verbose_name = lazy(_build_localized_verbose_name, unicode)
def _join_css_class(bits, offset):
if ('-'.join(bits[-offset:]) in
[l[0] for l in global_settings.LANGUAGES]):
[l[0] for l in global_settings.LANGUAGES]):
return '%s-%s' % ('_'.join(bits[:len(bits) - offset]),
'_'.join(bits[-offset:]))
return ''