From 3acfa09dbc02aeadc8a8c696485bb52a2f0419d5 Mon Sep 17 00:00:00 2001 From: Dirk Eschler Date: Wed, 24 Oct 2012 11:06:35 +0200 Subject: [PATCH] - 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. --- modeltranslation/__init__.py | 14 ++-- modeltranslation/admin.py | 6 +- modeltranslation/fields.py | 5 +- .../commands/sync_translation_fields.py | 14 ++-- .../commands/update_translation_fields.py | 4 +- modeltranslation/tests/__init__.py | 84 ++++++++++--------- modeltranslation/tests/urls.py | 5 +- modeltranslation/translator.py | 7 +- modeltranslation/utils.py | 2 +- 9 files changed, 72 insertions(+), 69 deletions(-) diff --git a/modeltranslation/__init__.py b/modeltranslation/__init__.py index dbce29e..704a790 100644 --- a/modeltranslation/__init__.py +++ b/modeltranslation/__init__.py @@ -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 diff --git a/modeltranslation/admin.py b/modeltranslation/admin.py index c859308..071246a 100644 --- a/modeltranslation/admin.py +++ b/modeltranslation/admin.py @@ -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: diff --git a/modeltranslation/fields.py b/modeltranslation/fields.py index 5284bc4..7db64aa 100644 --- a/modeltranslation/fields.py +++ b/modeltranslation/fields.py @@ -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): diff --git a/modeltranslation/management/commands/sync_translation_fields.py b/modeltranslation/management/commands/sync_translation_fields.py index 059a686..66b84bc 100644 --- a/modeltranslation/management/commands/sync_translation_fields.py +++ b/modeltranslation/management/commands/sync_translation_fields.py @@ -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 diff --git a/modeltranslation/management/commands/update_translation_fields.py b/modeltranslation/management/commands/update_translation_fields.py index 7ac5a26..65ed19a 100644 --- a/modeltranslation/management/commands/update_translation_fields.py +++ b/modeltranslation/management/commands/update_translation_fields.py @@ -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 diff --git a/modeltranslation/tests/__init__.py b/modeltranslation/tests/__init__.py index f106dad..3e5c4b3 100644 --- a/modeltranslation/tests/__init__.py +++ b/modeltranslation/tests/__init__.py @@ -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): diff --git a/modeltranslation/tests/urls.py b/modeltranslation/tests/urls.py index 05fd163..0de95df 100644 --- a/modeltranslation/tests/urls.py +++ b/modeltranslation/tests/urls.py @@ -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)),) diff --git a/modeltranslation/translator.py b/modeltranslation/translator.py index 0d21b45..17a0da3 100644 --- a/modeltranslation/translator.py +++ b/modeltranslation/translator.py @@ -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 diff --git a/modeltranslation/utils.py b/modeltranslation/utils.py index 52b6b82..6708cba 100644 --- a/modeltranslation/utils.py +++ b/modeltranslation/utils.py @@ -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 ''