From 68f3c6eee7f87cb2ad0459cd41d03ab31f3938f9 Mon Sep 17 00:00:00 2001 From: Roberto Rosario Date: Wed, 19 Aug 2015 14:50:44 -0400 Subject: [PATCH] PEP8 cleanups. --- mayan/apps/acls/links.py | 4 +- mayan/apps/acls/urls.py | 4 +- mayan/apps/authentication/tests/test_views.py | 5 +- mayan/apps/checkouts/api_views.py | 11 +- mayan/apps/checkouts/handlers.py | 3 +- .../apps/checkouts/migrations/0001_initial.py | 54 +- .../migrations/0002_documentcheckout_user.py | 5 +- .../migrations/0003_auto_20150617_0325.py | 4 +- .../migrations/0004_auto_20150617_0330.py | 4 +- mayan/apps/checkouts/widgets.py | 3 +- mayan/apps/common/classes.py | 18 +- mayan/apps/common/compressed_files.py | 4 +- mayan/apps/common/forms.py | 4 +- mayan/apps/common/generics.py | 35 +- mayan/apps/common/middleware/ajax_redirect.py | 4 +- mayan/apps/common/migrations/0001_initial.py | 643 +++++++++++++++++- mayan/apps/common/mixins.py | 15 +- mayan/apps/common/settings.py | 10 +- mayan/apps/common/utils.py | 9 +- mayan/apps/common/views.py | 3 - mayan/apps/common/widgets.py | 45 -- mayan/apps/django_gpg/tests/test_classes.py | 8 +- mayan/apps/django_gpg/views.py | 1 - mayan/apps/document_comments/views.py | 19 +- mayan/apps/document_indexing/apps.py | 7 +- mayan/apps/document_indexing/managers.py | 3 +- .../migrations/0001_initial.py | 160 ++++- .../migrations/0004_auto_20150708_0113.py | 4 +- .../migrations/0005_index_slug.py | 6 +- .../migrations/0007_auto_20150729_0152.py | 6 +- .../migrations/0008_auto_20150729_1515.py | 5 +- .../migrations/0009_auto_20150815_0351.py | 5 +- mayan/apps/document_indexing/models.py | 4 +- mayan/apps/document_indexing/urls.py | 7 +- mayan/apps/document_indexing/views.py | 3 +- mayan/apps/document_indexing/widgets.py | 25 +- mayan/apps/documents/forms.py | 9 - mayan/apps/documents/tests/__init__.py | 2 +- mayan/apps/documents/tests/test_models.py | 1 - mayan/apps/documents/views.py | 7 +- mayan/apps/dynamic_search/api_views.py | 2 +- mayan/apps/dynamic_search/serializers.py | 4 - mayan/apps/dynamic_search/views.py | 2 - mayan/apps/events/apps.py | 3 +- mayan/apps/installation/views.py | 4 - mayan/apps/linking/views.py | 1 - .../management/commands/mountindex.py | 2 +- mayan/apps/user_management/apps.py | 18 +- mayan/apps/user_management/views.py | 89 ++- 49 files changed, 1078 insertions(+), 216 deletions(-) diff --git a/mayan/apps/acls/links.py b/mayan/apps/acls/links.py index 672c659919..76c22cbf83 100644 --- a/mayan/apps/acls/links.py +++ b/mayan/apps/acls/links.py @@ -10,7 +10,9 @@ from .permissions import permission_acl_view, permission_acl_edit def get_kwargs_factory(variable_name): def get_kwargs(context): - content_type = ContentType.objects.get_for_model(context[variable_name]) + content_type = ContentType.objects.get_for_model( + context[variable_name] + ) return { 'app_label': '"{}"'.format(content_type.app_label), 'model': '"{}"'.format(content_type.model), diff --git a/mayan/apps/acls/urls.py b/mayan/apps/acls/urls.py index 135091e26d..3f587169ac 100644 --- a/mayan/apps/acls/urls.py +++ b/mayan/apps/acls/urls.py @@ -2,7 +2,9 @@ from __future__ import unicode_literals from django.conf.urls import patterns, url -from .views import ACLCreateView, ACLDeleteView, ACLListView, ACLPermissionsView +from .views import ( + ACLCreateView, ACLDeleteView, ACLListView, ACLPermissionsView +) urlpatterns = patterns( 'acls.views', diff --git a/mayan/apps/authentication/tests/test_views.py b/mayan/apps/authentication/tests/test_views.py index fea9faba5c..4f2def5de2 100644 --- a/mayan/apps/authentication/tests/test_views.py +++ b/mayan/apps/authentication/tests/test_views.py @@ -11,6 +11,7 @@ from ..settings import setting_login_method TEST_ADMIN_EMAIL = 'admin@admin.com' TEST_ADMIN_PASSWORD = 'test_admin_password' TEST_ADMIN_USERNAME = 'test_admin' +TEST_EMAIL_AUTHENTICATION_BACKEND = 'authentication.auth.email_auth_backend.EmailAuthBackend' class UserLoginTestCase(TestCase): @@ -43,7 +44,7 @@ class UserLoginTestCase(TestCase): self.assertEqual(response.status_code, 200) def test_email_login(self): - with self.settings(AUTHENTICATION_BACKENDS=('authentication.auth.email_auth_backend.EmailAuthBackend',)): + with self.settings(AUTHENTICATION_BACKENDS=(TEST_EMAIL_AUTHENTICATION_BACKEND,)): setting_login_method.value = 'email' logged_in = self.client.login( @@ -78,7 +79,7 @@ class UserLoginTestCase(TestCase): self.assertEqual(response.status_code, 200) def test_email_login_via_views(self): - with self.settings(AUTHENTICATION_BACKENDS=('authentication.auth.email_auth_backend.EmailAuthBackend',)): + with self.settings(AUTHENTICATION_BACKENDS=(TEST_EMAIL_AUTHENTICATION_BACKEND,)): setting_login_method.value = 'email' response = self.client.get(reverse('documents:document_list')) self.assertRedirects( diff --git a/mayan/apps/checkouts/api_views.py b/mayan/apps/checkouts/api_views.py index 423757dfd4..939cf28f1d 100644 --- a/mayan/apps/checkouts/api_views.py +++ b/mayan/apps/checkouts/api_views.py @@ -118,7 +118,9 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): filtered_documents = documents return DocumentCheckout.objects.filter( - document__pk__in=filtered_documents.values_list('pk', flat=True) + document__pk__in=filtered_documents.values_list( + 'pk', flat=True + ) ) elif self.request.method == 'DELETE': return DocumentCheckout.objects.all() @@ -155,7 +157,10 @@ class APICheckedoutDocumentView(generics.RetrieveDestroyAPIView): ) except PermissionDenied: AccessControlList.objects.check_access( - permission_document_checkin_override, request.user, document + permission_document_checkin_override, request.user, + document ) - return super(APICheckedoutDocumentView, self).delete(request, *args, **kwargs) + return super( + APICheckedoutDocumentView, self + ).delete(request, *args, **kwargs) diff --git a/mayan/apps/checkouts/handlers.py b/mayan/apps/checkouts/handlers.py index a339365af9..0c86d724e5 100644 --- a/mayan/apps/checkouts/handlers.py +++ b/mayan/apps/checkouts/handlers.py @@ -10,6 +10,7 @@ def check_if_new_versions_allowed(sender, **kwargs): if not DocumentCheckout.objects.are_document_new_versions_allowed(kwargs['instance'].document): raise NewDocumentVersionNotAllowed( _( - 'New versions not allowed for the checkedout document: %s' % kwargs['instance'].document + 'New versions not allowed for the checkedout document: %s' + % kwargs['instance'].document ) ) diff --git a/mayan/apps/checkouts/migrations/0001_initial.py b/mayan/apps/checkouts/migrations/0001_initial.py index d7fcead6e2..672c598657 100644 --- a/mayan/apps/checkouts/migrations/0001_initial.py +++ b/mayan/apps/checkouts/migrations/0001_initial.py @@ -15,13 +15,53 @@ class Migration(migrations.Migration): migrations.CreateModel( name='DocumentCheckout', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('checkout_datetime', models.DateTimeField(auto_now_add=True, verbose_name='Check out date and time')), - ('expiration_datetime', models.DateTimeField(help_text='Amount of time to hold the document checked out in minutes.', verbose_name='Check out expiration date and time')), - ('user_object_id', models.PositiveIntegerField(null=True, blank=True)), - ('block_new_version', models.BooleanField(default=True, help_text='Do not allow new version of this document to be uploaded.', verbose_name='Block new version upload')), - ('document', models.ForeignKey(verbose_name='Document', to='documents.Document', unique=True)), - ('user_content_type', models.ForeignKey(blank=True, to='contenttypes.ContentType', null=True)), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'checkout_datetime', + models.DateTimeField( + auto_now_add=True, + verbose_name='Check out date and time' + ) + ), + ( + 'expiration_datetime', + models.DateTimeField( + help_text='Amount of time to hold the document ' + 'checked out in minutes.', + verbose_name='Check out expiration date and time' + ) + ), + ( + 'user_object_id', + models.PositiveIntegerField(null=True, blank=True) + ), + ( + 'block_new_version', + models.BooleanField( + default=True, + help_text='Do not allow new version of this document ' + 'to be uploaded.', + verbose_name='Block new version upload' + ) + ), + ( + 'document', + models.ForeignKey( + verbose_name='Document', to='documents.Document', + unique=True + ) + ), + ( + 'user_content_type', + models.ForeignKey( + blank=True, to='contenttypes.ContentType', null=True + ) + ), ], options={ 'verbose_name': 'Document checkout', diff --git a/mayan/apps/checkouts/migrations/0002_documentcheckout_user.py b/mayan/apps/checkouts/migrations/0002_documentcheckout_user.py index abd1db2b9b..1a7a768002 100644 --- a/mayan/apps/checkouts/migrations/0002_documentcheckout_user.py +++ b/mayan/apps/checkouts/migrations/0002_documentcheckout_user.py @@ -16,7 +16,10 @@ class Migration(migrations.Migration): migrations.AddField( model_name='documentcheckout', name='user', - field=models.ForeignKey(verbose_name='User', blank=True, to=settings.AUTH_USER_MODEL, null=True), + field=models.ForeignKey( + verbose_name='User', blank=True, to=settings.AUTH_USER_MODEL, + null=True + ), preserve_default=True, ), ] diff --git a/mayan/apps/checkouts/migrations/0003_auto_20150617_0325.py b/mayan/apps/checkouts/migrations/0003_auto_20150617_0325.py index 10690079c7..a15857e4b9 100644 --- a/mayan/apps/checkouts/migrations/0003_auto_20150617_0325.py +++ b/mayan/apps/checkouts/migrations/0003_auto_20150617_0325.py @@ -23,5 +23,7 @@ class Migration(migrations.Migration): ] operations = [ - migrations.RunPython(move_from_content_type_user_to_foreign_key_field_user), + migrations.RunPython( + move_from_content_type_user_to_foreign_key_field_user + ), ] diff --git a/mayan/apps/checkouts/migrations/0004_auto_20150617_0330.py b/mayan/apps/checkouts/migrations/0004_auto_20150617_0330.py index f2a15bc655..ccf63f23d5 100644 --- a/mayan/apps/checkouts/migrations/0004_auto_20150617_0330.py +++ b/mayan/apps/checkouts/migrations/0004_auto_20150617_0330.py @@ -23,7 +23,9 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='documentcheckout', name='user', - field=models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL), + field=models.ForeignKey( + verbose_name='User', to=settings.AUTH_USER_MODEL + ), preserve_default=True, ), ] diff --git a/mayan/apps/checkouts/widgets.py b/mayan/apps/checkouts/widgets.py index 131d03fe91..9045f17b9f 100644 --- a/mayan/apps/checkouts/widgets.py +++ b/mayan/apps/checkouts/widgets.py @@ -11,7 +11,8 @@ from common.literals import TIME_DELTA_UNIT_CHOICES class SplitTimeDeltaWidget(forms.widgets.MultiWidget): """ - A Widget that splits a timedelta input into three boxes. + A Widget that splits a timedelta input into three + boxes. """ def __init__(self, attrs=None): diff --git a/mayan/apps/common/classes.py b/mayan/apps/common/classes.py index 65740911a7..c3297e79c6 100644 --- a/mayan/apps/common/classes.py +++ b/mayan/apps/common/classes.py @@ -18,8 +18,8 @@ class ModelAttribute(object): return result except IndexError: - # We were passed a model instance, try again using the model of the - # instance + # We were passed a model instance, try again using the model of + # the instance # If we are already in the model class, exit with an error if model.__class__ == models.base.ModelBase: @@ -30,16 +30,24 @@ class ModelAttribute(object): @classmethod def get_choices_for(cls, model, type_names=None): return [ - (attribute.name, attribute) for attribute in cls.get_for(model, type_names) + ( + attribute.name, attribute + ) for attribute in cls.get_for(model, type_names) ] @classmethod def help_text_for(cls, model, type_names=None): result = [] for count, attribute in enumerate(cls.get_for(model, type_names), 1): - result.append('{}) {}'.format(count, unicode(attribute.get_display(show_name=True)))) + result.append( + '{}) {}'.format( + count, unicode(attribute.get_display(show_name=True)) + ) + ) - return ' '.join([ugettext('Available attributes: '), ', '.join(result)]) + return ' '.join( + [ugettext('Available attributes: '), ', '.join(result)] + ) def get_display(self, show_name=False): if self.description: diff --git a/mayan/apps/common/compressed_files.py b/mayan/apps/common/compressed_files.py index 156da1e445..5fc80e2998 100644 --- a/mayan/apps/common/compressed_files.py +++ b/mayan/apps/common/compressed_files.py @@ -101,7 +101,9 @@ class CompressedFile(object): filename for filename in zfobj.namelist() if not filename.endswith('/') ] return ( - SimpleUploadedFile(name=filename, content=zfobj.read(filename)) for filename in filenames + SimpleUploadedFile( + name=filename, content=zfobj.read(filename) + ) for filename in filenames ) except zipfile.BadZipfile: raise NotACompressedFile diff --git a/mayan/apps/common/forms.py b/mayan/apps/common/forms.py index a18a68736f..5dd18151fb 100644 --- a/mayan/apps/common/forms.py +++ b/mayan/apps/common/forms.py @@ -54,7 +54,9 @@ class DetailForm(forms.ModelForm): self.fields[field_name].help_text = '' for field_name, field in self.fields.items(): - self.fields[field_name].widget.attrs.update({'readonly': 'readonly'}) + self.fields[field_name].widget.attrs.update( + {'readonly': 'readonly'} + ) class ChoiceForm(forms.Form): diff --git a/mayan/apps/common/generics.py b/mayan/apps/common/generics.py index df9b03c2f3..cf693bcfca 100644 --- a/mayan/apps/common/generics.py +++ b/mayan/apps/common/generics.py @@ -4,11 +4,9 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType -from django.core.exceptions import ImproperlyConfigured -from django.http import Http404, HttpResponseRedirect +from django.http import HttpResponseRedirect from django.utils.translation import ugettext_lazy as _ from django.views.generic import FormView, TemplateView -from django.views.generic.detail import SingleObjectMixin from django.views.generic.edit import CreateView, DeleteView, UpdateView from django.views.generic.list import ListView @@ -110,7 +108,9 @@ class AssignRemoveView(ExtraContextMixin, ViewPermissionCheckMixin, ObjectPermis label = dict(flat_list)[selection] if self.decode_content_type: model, pk = selection.split(',') - selection_obj = ContentType.objects.get(model=model).get_object_for_this_type(pk=pk) + selection_obj = ContentType.objects.get( + model=model + ).get_object_for_this_type(pk=pk) else: selection_obj = selection @@ -202,7 +202,9 @@ class MultiFormView(FormView): def get_forms(self, form_classes): return dict( [ - (key, self._create_form(key, klass)) for key, klass in form_classes.items() + ( + key, self._create_form(key, klass) + ) for key, klass in form_classes.items() ] ) @@ -270,7 +272,9 @@ class SingleObjectCreateView(ViewPermissionCheckMixin, ExtraContextMixin, Redire try: messages.success( self.request, - _('%s created successfully.') % self.extra_context['object_name'].capitalize() + _( + '%s created successfully.' + ) % self.extra_context['object_name'].capitalize() ) except KeyError: messages.success( @@ -294,7 +298,8 @@ class SingleObjectDeleteView(ViewPermissionCheckMixin, ObjectPermissionCheckMixi except Exception as exception: try: messages.error( - self.request, _('Error deleting %s.') % self.extra_context['object_name'] + self.request, + _('Error deleting %s.') % self.extra_context['object_name'] ) except KeyError: messages.error( @@ -305,7 +310,10 @@ class SingleObjectDeleteView(ViewPermissionCheckMixin, ObjectPermissionCheckMixi else: try: messages.success( - self.request, _('%s deleted successfully.') % self.extra_context['object_name'].capitalize() + self.request, + _( + '%s deleted successfully.' + ) % self.extra_context['object_name'].capitalize() ) except KeyError: messages.success( @@ -325,7 +333,10 @@ class SingleObjectEditView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, try: messages.error( - self.request, _('Error saving %s details.') % self.extra_context['object_name'] + self.request, + _( + 'Error saving %s details.' + ) % self.extra_context['object_name'] ) except KeyError: messages.error( @@ -339,7 +350,10 @@ class SingleObjectEditView(ViewPermissionCheckMixin, ObjectPermissionCheckMixin, try: messages.success( - self.request, _('%s details saved successfully.') % self.extra_context['object_name'].capitalize() + self.request, + _( + '%s details saved successfully.' + ) % self.extra_context['object_name'].capitalize() ) except KeyError: messages.success( @@ -354,4 +368,3 @@ class SingleObjectListView(PaginationMixin, ViewPermissionCheckMixin, ObjectList def get_paginate_by(self, queryset): return setting_paginate_by.value - diff --git a/mayan/apps/common/middleware/ajax_redirect.py b/mayan/apps/common/middleware/ajax_redirect.py index 5d8d8935a2..805ced8478 100644 --- a/mayan/apps/common/middleware/ajax_redirect.py +++ b/mayan/apps/common/middleware/ajax_redirect.py @@ -8,5 +8,7 @@ class AjaxRedirect(object): def process_response(self, request, response): if request.is_ajax(): if type(response) == HttpResponseRedirect: - response.status_code = getattr(settings, 'AJAX_REDIRECT_CODE', 302) + response.status_code = getattr( + settings, 'AJAX_REDIRECT_CODE', 302 + ) return response diff --git a/mayan/apps/common/migrations/0001_initial.py b/mayan/apps/common/migrations/0001_initial.py index 201e33c31a..2f885d2550 100644 --- a/mayan/apps/common/migrations/0001_initial.py +++ b/mayan/apps/common/migrations/0001_initial.py @@ -17,7 +17,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='AnonymousUserSingleton', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), ], options={ 'verbose_name': 'Anonymous user', @@ -28,10 +33,31 @@ class Migration(migrations.Migration): migrations.CreateModel( name='AutoAdminSingleton', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('password', models.CharField(max_length=128, null=True, verbose_name='Password', blank=True)), - ('password_hash', models.CharField(max_length=128, null=True, verbose_name='Password hash', blank=True)), - ('account', models.ForeignKey(related_name='auto_admin_account', verbose_name='Account', blank=True, to=settings.AUTH_USER_MODEL, null=True)), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'password', models.CharField( + max_length=128, null=True, verbose_name='Password', + blank=True + ) + ), + ( + 'password_hash', models.CharField( + max_length=128, null=True, + verbose_name='Password hash', blank=True + ) + ), + ( + 'account', models.ForeignKey( + related_name='auto_admin_account', + verbose_name='Account', blank=True, + to=settings.AUTH_USER_MODEL, null=True + ) + ), ], options={ 'verbose_name': 'Auto admin properties', @@ -42,10 +68,29 @@ class Migration(migrations.Migration): migrations.CreateModel( name='SharedUploadedFile', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('file', models.FileField(upload_to=common.models.upload_to, storage=storage.backends.filebasedstorage.FileBasedStorage(), verbose_name='File')), - ('filename', models.CharField(max_length=255, verbose_name='Filename')), - ('datatime', models.DateTimeField(auto_now_add=True, verbose_name='Date time')), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'file', models.FileField( + upload_to=common.models.upload_to, + storage=storage.backends.filebasedstorage.FileBasedStorage(), + verbose_name='File' + ) + ), + ( + 'filename', models.CharField( + max_length=255, verbose_name='Filename' + ) + ), + ( + 'datatime', models.DateTimeField( + auto_now_add=True, verbose_name='Date time' + ) + ), ], options={ 'verbose_name': 'Shared uploaded file', @@ -56,10 +101,582 @@ class Migration(migrations.Migration): migrations.CreateModel( name='UserLocaleProfile', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('timezone', models.CharField(max_length=48, verbose_name='Timezone', choices=[(b'Africa/Abidjan', b'Africa/Abidjan'), (b'Africa/Accra', b'Africa/Accra'), (b'Africa/Addis_Ababa', b'Africa/Addis_Ababa'), (b'Africa/Algiers', b'Africa/Algiers'), (b'Africa/Asmara', b'Africa/Asmara'), (b'Africa/Bamako', b'Africa/Bamako'), (b'Africa/Bangui', b'Africa/Bangui'), (b'Africa/Banjul', b'Africa/Banjul'), (b'Africa/Bissau', b'Africa/Bissau'), (b'Africa/Blantyre', b'Africa/Blantyre'), (b'Africa/Brazzaville', b'Africa/Brazzaville'), (b'Africa/Bujumbura', b'Africa/Bujumbura'), (b'Africa/Cairo', b'Africa/Cairo'), (b'Africa/Casablanca', b'Africa/Casablanca'), (b'Africa/Ceuta', b'Africa/Ceuta'), (b'Africa/Conakry', b'Africa/Conakry'), (b'Africa/Dakar', b'Africa/Dakar'), (b'Africa/Dar_es_Salaam', b'Africa/Dar_es_Salaam'), (b'Africa/Djibouti', b'Africa/Djibouti'), (b'Africa/Douala', b'Africa/Douala'), (b'Africa/El_Aaiun', b'Africa/El_Aaiun'), (b'Africa/Freetown', b'Africa/Freetown'), (b'Africa/Gaborone', b'Africa/Gaborone'), (b'Africa/Harare', b'Africa/Harare'), (b'Africa/Johannesburg', b'Africa/Johannesburg'), (b'Africa/Juba', b'Africa/Juba'), (b'Africa/Kampala', b'Africa/Kampala'), (b'Africa/Khartoum', b'Africa/Khartoum'), (b'Africa/Kigali', b'Africa/Kigali'), (b'Africa/Kinshasa', b'Africa/Kinshasa'), (b'Africa/Lagos', b'Africa/Lagos'), (b'Africa/Libreville', b'Africa/Libreville'), (b'Africa/Lome', b'Africa/Lome'), (b'Africa/Luanda', b'Africa/Luanda'), (b'Africa/Lubumbashi', b'Africa/Lubumbashi'), (b'Africa/Lusaka', b'Africa/Lusaka'), (b'Africa/Malabo', b'Africa/Malabo'), (b'Africa/Maputo', b'Africa/Maputo'), (b'Africa/Maseru', b'Africa/Maseru'), (b'Africa/Mbabane', b'Africa/Mbabane'), (b'Africa/Mogadishu', b'Africa/Mogadishu'), (b'Africa/Monrovia', b'Africa/Monrovia'), (b'Africa/Nairobi', b'Africa/Nairobi'), (b'Africa/Ndjamena', b'Africa/Ndjamena'), (b'Africa/Niamey', b'Africa/Niamey'), (b'Africa/Nouakchott', b'Africa/Nouakchott'), (b'Africa/Ouagadougou', b'Africa/Ouagadougou'), (b'Africa/Porto-Novo', b'Africa/Porto-Novo'), (b'Africa/Sao_Tome', b'Africa/Sao_Tome'), (b'Africa/Tripoli', b'Africa/Tripoli'), (b'Africa/Tunis', b'Africa/Tunis'), (b'Africa/Windhoek', b'Africa/Windhoek'), (b'America/Adak', b'America/Adak'), (b'America/Anchorage', b'America/Anchorage'), (b'America/Anguilla', b'America/Anguilla'), (b'America/Antigua', b'America/Antigua'), (b'America/Araguaina', b'America/Araguaina'), (b'America/Argentina/Buenos_Aires', b'America/Argentina/Buenos_Aires'), (b'America/Argentina/Catamarca', b'America/Argentina/Catamarca'), (b'America/Argentina/Cordoba', b'America/Argentina/Cordoba'), (b'America/Argentina/Jujuy', b'America/Argentina/Jujuy'), (b'America/Argentina/La_Rioja', b'America/Argentina/La_Rioja'), (b'America/Argentina/Mendoza', b'America/Argentina/Mendoza'), (b'America/Argentina/Rio_Gallegos', b'America/Argentina/Rio_Gallegos'), (b'America/Argentina/Salta', b'America/Argentina/Salta'), (b'America/Argentina/San_Juan', b'America/Argentina/San_Juan'), (b'America/Argentina/San_Luis', b'America/Argentina/San_Luis'), (b'America/Argentina/Tucuman', b'America/Argentina/Tucuman'), (b'America/Argentina/Ushuaia', b'America/Argentina/Ushuaia'), (b'America/Aruba', b'America/Aruba'), (b'America/Asuncion', b'America/Asuncion'), (b'America/Atikokan', b'America/Atikokan'), (b'America/Bahia', b'America/Bahia'), (b'America/Bahia_Banderas', b'America/Bahia_Banderas'), (b'America/Barbados', b'America/Barbados'), (b'America/Belem', b'America/Belem'), (b'America/Belize', b'America/Belize'), (b'America/Blanc-Sablon', b'America/Blanc-Sablon'), (b'America/Boa_Vista', b'America/Boa_Vista'), (b'America/Bogota', b'America/Bogota'), (b'America/Boise', b'America/Boise'), (b'America/Cambridge_Bay', b'America/Cambridge_Bay'), (b'America/Campo_Grande', b'America/Campo_Grande'), (b'America/Cancun', b'America/Cancun'), (b'America/Caracas', b'America/Caracas'), (b'America/Cayenne', b'America/Cayenne'), (b'America/Cayman', b'America/Cayman'), (b'America/Chicago', b'America/Chicago'), (b'America/Chihuahua', b'America/Chihuahua'), (b'America/Costa_Rica', b'America/Costa_Rica'), (b'America/Creston', b'America/Creston'), (b'America/Cuiaba', b'America/Cuiaba'), (b'America/Curacao', b'America/Curacao'), (b'America/Danmarkshavn', b'America/Danmarkshavn'), (b'America/Dawson', b'America/Dawson'), (b'America/Dawson_Creek', b'America/Dawson_Creek'), (b'America/Denver', b'America/Denver'), (b'America/Detroit', b'America/Detroit'), (b'America/Dominica', b'America/Dominica'), (b'America/Edmonton', b'America/Edmonton'), (b'America/Eirunepe', b'America/Eirunepe'), (b'America/El_Salvador', b'America/El_Salvador'), (b'America/Fortaleza', b'America/Fortaleza'), (b'America/Glace_Bay', b'America/Glace_Bay'), (b'America/Godthab', b'America/Godthab'), (b'America/Goose_Bay', b'America/Goose_Bay'), (b'America/Grand_Turk', b'America/Grand_Turk'), (b'America/Grenada', b'America/Grenada'), (b'America/Guadeloupe', b'America/Guadeloupe'), (b'America/Guatemala', b'America/Guatemala'), (b'America/Guayaquil', b'America/Guayaquil'), (b'America/Guyana', b'America/Guyana'), (b'America/Halifax', b'America/Halifax'), (b'America/Havana', b'America/Havana'), (b'America/Hermosillo', b'America/Hermosillo'), (b'America/Indiana/Indianapolis', b'America/Indiana/Indianapolis'), (b'America/Indiana/Knox', b'America/Indiana/Knox'), (b'America/Indiana/Marengo', b'America/Indiana/Marengo'), (b'America/Indiana/Petersburg', b'America/Indiana/Petersburg'), (b'America/Indiana/Tell_City', b'America/Indiana/Tell_City'), (b'America/Indiana/Vevay', b'America/Indiana/Vevay'), (b'America/Indiana/Vincennes', b'America/Indiana/Vincennes'), (b'America/Indiana/Winamac', b'America/Indiana/Winamac'), (b'America/Inuvik', b'America/Inuvik'), (b'America/Iqaluit', b'America/Iqaluit'), (b'America/Jamaica', b'America/Jamaica'), (b'America/Juneau', b'America/Juneau'), (b'America/Kentucky/Louisville', b'America/Kentucky/Louisville'), (b'America/Kentucky/Monticello', b'America/Kentucky/Monticello'), (b'America/Kralendijk', b'America/Kralendijk'), (b'America/La_Paz', b'America/La_Paz'), (b'America/Lima', b'America/Lima'), (b'America/Los_Angeles', b'America/Los_Angeles'), (b'America/Lower_Princes', b'America/Lower_Princes'), (b'America/Maceio', b'America/Maceio'), (b'America/Managua', b'America/Managua'), (b'America/Manaus', b'America/Manaus'), (b'America/Marigot', b'America/Marigot'), (b'America/Martinique', b'America/Martinique'), (b'America/Matamoros', b'America/Matamoros'), (b'America/Mazatlan', b'America/Mazatlan'), (b'America/Menominee', b'America/Menominee'), (b'America/Merida', b'America/Merida'), (b'America/Metlakatla', b'America/Metlakatla'), (b'America/Mexico_City', b'America/Mexico_City'), (b'America/Miquelon', b'America/Miquelon'), (b'America/Moncton', b'America/Moncton'), (b'America/Monterrey', b'America/Monterrey'), (b'America/Montevideo', b'America/Montevideo'), (b'America/Montreal', b'America/Montreal'), (b'America/Montserrat', b'America/Montserrat'), (b'America/Nassau', b'America/Nassau'), (b'America/New_York', b'America/New_York'), (b'America/Nipigon', b'America/Nipigon'), (b'America/Nome', b'America/Nome'), (b'America/Noronha', b'America/Noronha'), (b'America/North_Dakota/Beulah', b'America/North_Dakota/Beulah'), (b'America/North_Dakota/Center', b'America/North_Dakota/Center'), (b'America/North_Dakota/New_Salem', b'America/North_Dakota/New_Salem'), (b'America/Ojinaga', b'America/Ojinaga'), (b'America/Panama', b'America/Panama'), (b'America/Pangnirtung', b'America/Pangnirtung'), (b'America/Paramaribo', b'America/Paramaribo'), (b'America/Phoenix', b'America/Phoenix'), (b'America/Port-au-Prince', b'America/Port-au-Prince'), (b'America/Port_of_Spain', b'America/Port_of_Spain'), (b'America/Porto_Velho', b'America/Porto_Velho'), (b'America/Puerto_Rico', b'America/Puerto_Rico'), (b'America/Rainy_River', b'America/Rainy_River'), (b'America/Rankin_Inlet', b'America/Rankin_Inlet'), (b'America/Recife', b'America/Recife'), (b'America/Regina', b'America/Regina'), (b'America/Resolute', b'America/Resolute'), (b'America/Rio_Branco', b'America/Rio_Branco'), (b'America/Santa_Isabel', b'America/Santa_Isabel'), (b'America/Santarem', b'America/Santarem'), (b'America/Santiago', b'America/Santiago'), (b'America/Santo_Domingo', b'America/Santo_Domingo'), (b'America/Sao_Paulo', b'America/Sao_Paulo'), (b'America/Scoresbysund', b'America/Scoresbysund'), (b'America/Sitka', b'America/Sitka'), (b'America/St_Barthelemy', b'America/St_Barthelemy'), (b'America/St_Johns', b'America/St_Johns'), (b'America/St_Kitts', b'America/St_Kitts'), (b'America/St_Lucia', b'America/St_Lucia'), (b'America/St_Thomas', b'America/St_Thomas'), (b'America/St_Vincent', b'America/St_Vincent'), (b'America/Swift_Current', b'America/Swift_Current'), (b'America/Tegucigalpa', b'America/Tegucigalpa'), (b'America/Thule', b'America/Thule'), (b'America/Thunder_Bay', b'America/Thunder_Bay'), (b'America/Tijuana', b'America/Tijuana'), (b'America/Toronto', b'America/Toronto'), (b'America/Tortola', b'America/Tortola'), (b'America/Vancouver', b'America/Vancouver'), (b'America/Whitehorse', b'America/Whitehorse'), (b'America/Winnipeg', b'America/Winnipeg'), (b'America/Yakutat', b'America/Yakutat'), (b'America/Yellowknife', b'America/Yellowknife'), (b'Antarctica/Casey', b'Antarctica/Casey'), (b'Antarctica/Davis', b'Antarctica/Davis'), (b'Antarctica/DumontDUrville', b'Antarctica/DumontDUrville'), (b'Antarctica/Macquarie', b'Antarctica/Macquarie'), (b'Antarctica/Mawson', b'Antarctica/Mawson'), (b'Antarctica/McMurdo', b'Antarctica/McMurdo'), (b'Antarctica/Palmer', b'Antarctica/Palmer'), (b'Antarctica/Rothera', b'Antarctica/Rothera'), (b'Antarctica/Syowa', b'Antarctica/Syowa'), (b'Antarctica/Troll', b'Antarctica/Troll'), (b'Antarctica/Vostok', b'Antarctica/Vostok'), (b'Arctic/Longyearbyen', b'Arctic/Longyearbyen'), (b'Asia/Aden', b'Asia/Aden'), (b'Asia/Almaty', b'Asia/Almaty'), (b'Asia/Amman', b'Asia/Amman'), (b'Asia/Anadyr', b'Asia/Anadyr'), (b'Asia/Aqtau', b'Asia/Aqtau'), (b'Asia/Aqtobe', b'Asia/Aqtobe'), (b'Asia/Ashgabat', b'Asia/Ashgabat'), (b'Asia/Baghdad', b'Asia/Baghdad'), (b'Asia/Bahrain', b'Asia/Bahrain'), (b'Asia/Baku', b'Asia/Baku'), (b'Asia/Bangkok', b'Asia/Bangkok'), (b'Asia/Beirut', b'Asia/Beirut'), (b'Asia/Bishkek', b'Asia/Bishkek'), (b'Asia/Brunei', b'Asia/Brunei'), (b'Asia/Choibalsan', b'Asia/Choibalsan'), (b'Asia/Chongqing', b'Asia/Chongqing'), (b'Asia/Colombo', b'Asia/Colombo'), (b'Asia/Damascus', b'Asia/Damascus'), (b'Asia/Dhaka', b'Asia/Dhaka'), (b'Asia/Dili', b'Asia/Dili'), (b'Asia/Dubai', b'Asia/Dubai'), (b'Asia/Dushanbe', b'Asia/Dushanbe'), (b'Asia/Gaza', b'Asia/Gaza'), (b'Asia/Harbin', b'Asia/Harbin'), (b'Asia/Hebron', b'Asia/Hebron'), (b'Asia/Ho_Chi_Minh', b'Asia/Ho_Chi_Minh'), (b'Asia/Hong_Kong', b'Asia/Hong_Kong'), (b'Asia/Hovd', b'Asia/Hovd'), (b'Asia/Irkutsk', b'Asia/Irkutsk'), (b'Asia/Jakarta', b'Asia/Jakarta'), (b'Asia/Jayapura', b'Asia/Jayapura'), (b'Asia/Jerusalem', b'Asia/Jerusalem'), (b'Asia/Kabul', b'Asia/Kabul'), (b'Asia/Kamchatka', b'Asia/Kamchatka'), (b'Asia/Karachi', b'Asia/Karachi'), (b'Asia/Kashgar', b'Asia/Kashgar'), (b'Asia/Kathmandu', b'Asia/Kathmandu'), (b'Asia/Khandyga', b'Asia/Khandyga'), (b'Asia/Kolkata', b'Asia/Kolkata'), (b'Asia/Krasnoyarsk', b'Asia/Krasnoyarsk'), (b'Asia/Kuala_Lumpur', b'Asia/Kuala_Lumpur'), (b'Asia/Kuching', b'Asia/Kuching'), (b'Asia/Kuwait', b'Asia/Kuwait'), (b'Asia/Macau', b'Asia/Macau'), (b'Asia/Magadan', b'Asia/Magadan'), (b'Asia/Makassar', b'Asia/Makassar'), (b'Asia/Manila', b'Asia/Manila'), (b'Asia/Muscat', b'Asia/Muscat'), (b'Asia/Nicosia', b'Asia/Nicosia'), (b'Asia/Novokuznetsk', b'Asia/Novokuznetsk'), (b'Asia/Novosibirsk', b'Asia/Novosibirsk'), (b'Asia/Omsk', b'Asia/Omsk'), (b'Asia/Oral', b'Asia/Oral'), (b'Asia/Phnom_Penh', b'Asia/Phnom_Penh'), (b'Asia/Pontianak', b'Asia/Pontianak'), (b'Asia/Pyongyang', b'Asia/Pyongyang'), (b'Asia/Qatar', b'Asia/Qatar'), (b'Asia/Qyzylorda', b'Asia/Qyzylorda'), (b'Asia/Rangoon', b'Asia/Rangoon'), (b'Asia/Riyadh', b'Asia/Riyadh'), (b'Asia/Sakhalin', b'Asia/Sakhalin'), (b'Asia/Samarkand', b'Asia/Samarkand'), (b'Asia/Seoul', b'Asia/Seoul'), (b'Asia/Shanghai', b'Asia/Shanghai'), (b'Asia/Singapore', b'Asia/Singapore'), (b'Asia/Taipei', b'Asia/Taipei'), (b'Asia/Tashkent', b'Asia/Tashkent'), (b'Asia/Tbilisi', b'Asia/Tbilisi'), (b'Asia/Tehran', b'Asia/Tehran'), (b'Asia/Thimphu', b'Asia/Thimphu'), (b'Asia/Tokyo', b'Asia/Tokyo'), (b'Asia/Ulaanbaatar', b'Asia/Ulaanbaatar'), (b'Asia/Urumqi', b'Asia/Urumqi'), (b'Asia/Ust-Nera', b'Asia/Ust-Nera'), (b'Asia/Vientiane', b'Asia/Vientiane'), (b'Asia/Vladivostok', b'Asia/Vladivostok'), (b'Asia/Yakutsk', b'Asia/Yakutsk'), (b'Asia/Yekaterinburg', b'Asia/Yekaterinburg'), (b'Asia/Yerevan', b'Asia/Yerevan'), (b'Atlantic/Azores', b'Atlantic/Azores'), (b'Atlantic/Bermuda', b'Atlantic/Bermuda'), (b'Atlantic/Canary', b'Atlantic/Canary'), (b'Atlantic/Cape_Verde', b'Atlantic/Cape_Verde'), (b'Atlantic/Faroe', b'Atlantic/Faroe'), (b'Atlantic/Madeira', b'Atlantic/Madeira'), (b'Atlantic/Reykjavik', b'Atlantic/Reykjavik'), (b'Atlantic/South_Georgia', b'Atlantic/South_Georgia'), (b'Atlantic/St_Helena', b'Atlantic/St_Helena'), (b'Atlantic/Stanley', b'Atlantic/Stanley'), (b'Australia/Adelaide', b'Australia/Adelaide'), (b'Australia/Brisbane', b'Australia/Brisbane'), (b'Australia/Broken_Hill', b'Australia/Broken_Hill'), (b'Australia/Currie', b'Australia/Currie'), (b'Australia/Darwin', b'Australia/Darwin'), (b'Australia/Eucla', b'Australia/Eucla'), (b'Australia/Hobart', b'Australia/Hobart'), (b'Australia/Lindeman', b'Australia/Lindeman'), (b'Australia/Lord_Howe', b'Australia/Lord_Howe'), (b'Australia/Melbourne', b'Australia/Melbourne'), (b'Australia/Perth', b'Australia/Perth'), (b'Australia/Sydney', b'Australia/Sydney'), (b'Canada/Atlantic', b'Canada/Atlantic'), (b'Canada/Central', b'Canada/Central'), (b'Canada/Eastern', b'Canada/Eastern'), (b'Canada/Mountain', b'Canada/Mountain'), (b'Canada/Newfoundland', b'Canada/Newfoundland'), (b'Canada/Pacific', b'Canada/Pacific'), (b'Europe/Amsterdam', b'Europe/Amsterdam'), (b'Europe/Andorra', b'Europe/Andorra'), (b'Europe/Athens', b'Europe/Athens'), (b'Europe/Belgrade', b'Europe/Belgrade'), (b'Europe/Berlin', b'Europe/Berlin'), (b'Europe/Bratislava', b'Europe/Bratislava'), (b'Europe/Brussels', b'Europe/Brussels'), (b'Europe/Bucharest', b'Europe/Bucharest'), (b'Europe/Budapest', b'Europe/Budapest'), (b'Europe/Busingen', b'Europe/Busingen'), (b'Europe/Chisinau', b'Europe/Chisinau'), (b'Europe/Copenhagen', b'Europe/Copenhagen'), (b'Europe/Dublin', b'Europe/Dublin'), (b'Europe/Gibraltar', b'Europe/Gibraltar'), (b'Europe/Guernsey', b'Europe/Guernsey'), (b'Europe/Helsinki', b'Europe/Helsinki'), (b'Europe/Isle_of_Man', b'Europe/Isle_of_Man'), (b'Europe/Istanbul', b'Europe/Istanbul'), (b'Europe/Jersey', b'Europe/Jersey'), (b'Europe/Kaliningrad', b'Europe/Kaliningrad'), (b'Europe/Kiev', b'Europe/Kiev'), (b'Europe/Lisbon', b'Europe/Lisbon'), (b'Europe/Ljubljana', b'Europe/Ljubljana'), (b'Europe/London', b'Europe/London'), (b'Europe/Luxembourg', b'Europe/Luxembourg'), (b'Europe/Madrid', b'Europe/Madrid'), (b'Europe/Malta', b'Europe/Malta'), (b'Europe/Mariehamn', b'Europe/Mariehamn'), (b'Europe/Minsk', b'Europe/Minsk'), (b'Europe/Monaco', b'Europe/Monaco'), (b'Europe/Moscow', b'Europe/Moscow'), (b'Europe/Oslo', b'Europe/Oslo'), (b'Europe/Paris', b'Europe/Paris'), (b'Europe/Podgorica', b'Europe/Podgorica'), (b'Europe/Prague', b'Europe/Prague'), (b'Europe/Riga', b'Europe/Riga'), (b'Europe/Rome', b'Europe/Rome'), (b'Europe/Samara', b'Europe/Samara'), (b'Europe/San_Marino', b'Europe/San_Marino'), (b'Europe/Sarajevo', b'Europe/Sarajevo'), (b'Europe/Simferopol', b'Europe/Simferopol'), (b'Europe/Skopje', b'Europe/Skopje'), (b'Europe/Sofia', b'Europe/Sofia'), (b'Europe/Stockholm', b'Europe/Stockholm'), (b'Europe/Tallinn', b'Europe/Tallinn'), (b'Europe/Tirane', b'Europe/Tirane'), (b'Europe/Uzhgorod', b'Europe/Uzhgorod'), (b'Europe/Vaduz', b'Europe/Vaduz'), (b'Europe/Vatican', b'Europe/Vatican'), (b'Europe/Vienna', b'Europe/Vienna'), (b'Europe/Vilnius', b'Europe/Vilnius'), (b'Europe/Volgograd', b'Europe/Volgograd'), (b'Europe/Warsaw', b'Europe/Warsaw'), (b'Europe/Zagreb', b'Europe/Zagreb'), (b'Europe/Zaporozhye', b'Europe/Zaporozhye'), (b'Europe/Zurich', b'Europe/Zurich'), (b'GMT', b'GMT'), (b'Indian/Antananarivo', b'Indian/Antananarivo'), (b'Indian/Chagos', b'Indian/Chagos'), (b'Indian/Christmas', b'Indian/Christmas'), (b'Indian/Cocos', b'Indian/Cocos'), (b'Indian/Comoro', b'Indian/Comoro'), (b'Indian/Kerguelen', b'Indian/Kerguelen'), (b'Indian/Mahe', b'Indian/Mahe'), (b'Indian/Maldives', b'Indian/Maldives'), (b'Indian/Mauritius', b'Indian/Mauritius'), (b'Indian/Mayotte', b'Indian/Mayotte'), (b'Indian/Reunion', b'Indian/Reunion'), (b'Pacific/Apia', b'Pacific/Apia'), (b'Pacific/Auckland', b'Pacific/Auckland'), (b'Pacific/Chatham', b'Pacific/Chatham'), (b'Pacific/Chuuk', b'Pacific/Chuuk'), (b'Pacific/Easter', b'Pacific/Easter'), (b'Pacific/Efate', b'Pacific/Efate'), (b'Pacific/Enderbury', b'Pacific/Enderbury'), (b'Pacific/Fakaofo', b'Pacific/Fakaofo'), (b'Pacific/Fiji', b'Pacific/Fiji'), (b'Pacific/Funafuti', b'Pacific/Funafuti'), (b'Pacific/Galapagos', b'Pacific/Galapagos'), (b'Pacific/Gambier', b'Pacific/Gambier'), (b'Pacific/Guadalcanal', b'Pacific/Guadalcanal'), (b'Pacific/Guam', b'Pacific/Guam'), (b'Pacific/Honolulu', b'Pacific/Honolulu'), (b'Pacific/Johnston', b'Pacific/Johnston'), (b'Pacific/Kiritimati', b'Pacific/Kiritimati'), (b'Pacific/Kosrae', b'Pacific/Kosrae'), (b'Pacific/Kwajalein', b'Pacific/Kwajalein'), (b'Pacific/Majuro', b'Pacific/Majuro'), (b'Pacific/Marquesas', b'Pacific/Marquesas'), (b'Pacific/Midway', b'Pacific/Midway'), (b'Pacific/Nauru', b'Pacific/Nauru'), (b'Pacific/Niue', b'Pacific/Niue'), (b'Pacific/Norfolk', b'Pacific/Norfolk'), (b'Pacific/Noumea', b'Pacific/Noumea'), (b'Pacific/Pago_Pago', b'Pacific/Pago_Pago'), (b'Pacific/Palau', b'Pacific/Palau'), (b'Pacific/Pitcairn', b'Pacific/Pitcairn'), (b'Pacific/Pohnpei', b'Pacific/Pohnpei'), (b'Pacific/Port_Moresby', b'Pacific/Port_Moresby'), (b'Pacific/Rarotonga', b'Pacific/Rarotonga'), (b'Pacific/Saipan', b'Pacific/Saipan'), (b'Pacific/Tahiti', b'Pacific/Tahiti'), (b'Pacific/Tarawa', b'Pacific/Tarawa'), (b'Pacific/Tongatapu', b'Pacific/Tongatapu'), (b'Pacific/Wake', b'Pacific/Wake'), (b'Pacific/Wallis', b'Pacific/Wallis'), (b'US/Alaska', b'US/Alaska'), (b'US/Arizona', b'US/Arizona'), (b'US/Central', b'US/Central'), (b'US/Eastern', b'US/Eastern'), (b'US/Hawaii', b'US/Hawaii'), (b'US/Mountain', b'US/Mountain'), (b'US/Pacific', b'US/Pacific'), (b'UTC', b'UTC')])), - ('language', models.CharField(max_length=8, verbose_name='Language', choices=[('ar', 'Arabic'), ('bg', 'Bulgarian'), ('bs', 'Bosnian (Bosnia and Herzegovina)'), ('da', 'Danish'), ('de', 'German (Germany)'), ('en', 'English'), ('es', 'Spanish'), ('fa', 'Persian'), ('fr', 'French'), ('hu', 'Hungarian'), ('hr', 'Croatian'), ('id', 'Indonesian'), ('it', 'Italian'), ('nl', 'Dutch (Nethherlands)'), ('pl', 'Polish'), ('pt', 'Portuguese'), ('pt-br', 'Portuguese (Brazil)'), ('ro', 'Romanian (Romania)'), ('ru', 'Russian'), ('sl', 'Slovenian'), ('tr', 'Turkish'), ('vi', 'Vietnamese (Viet Nam)'), ('zh-cn', 'Chinese (China)')])), - ('user', models.OneToOneField(related_name='locale_profile', verbose_name='User', to=settings.AUTH_USER_MODEL)), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'timezone', models.CharField( + max_length=48, verbose_name='Timezone', choices=[ + (b'Africa/Abidjan', b'Africa/Abidjan'), + (b'Africa/Accra', b'Africa/Accra'), + (b'Africa/Addis_Ababa', b'Africa/Addis_Ababa'), + (b'Africa/Algiers', b'Africa/Algiers'), + (b'Africa/Asmara', b'Africa/Asmara'), + (b'Africa/Bamako', b'Africa/Bamako'), + (b'Africa/Bangui', b'Africa/Bangui'), + (b'Africa/Banjul', b'Africa/Banjul'), + (b'Africa/Bissau', b'Africa/Bissau'), + (b'Africa/Blantyre', b'Africa/Blantyre'), + (b'Africa/Brazzaville', b'Africa/Brazzaville'), + (b'Africa/Bujumbura', b'Africa/Bujumbura'), + (b'Africa/Cairo', b'Africa/Cairo'), + (b'Africa/Casablanca', b'Africa/Casablanca'), + (b'Africa/Ceuta', b'Africa/Ceuta'), + (b'Africa/Conakry', b'Africa/Conakry'), + (b'Africa/Dakar', b'Africa/Dakar'), + ( + b'Africa/Dar_es_Salaam', + b'Africa/Dar_es_Salaam' + ), + (b'Africa/Djibouti', b'Africa/Djibouti'), + (b'Africa/Douala', b'Africa/Douala'), + (b'Africa/El_Aaiun', b'Africa/El_Aaiun'), + (b'Africa/Freetown', b'Africa/Freetown'), + (b'Africa/Gaborone', b'Africa/Gaborone'), + (b'Africa/Harare', b'Africa/Harare'), + (b'Africa/Johannesburg', b'Africa/Johannesburg'), + (b'Africa/Juba', b'Africa/Juba'), + (b'Africa/Kampala', b'Africa/Kampala'), + (b'Africa/Khartoum', b'Africa/Khartoum'), + (b'Africa/Kigali', b'Africa/Kigali'), + (b'Africa/Kinshasa', b'Africa/Kinshasa'), + (b'Africa/Lagos', b'Africa/Lagos'), + (b'Africa/Libreville', b'Africa/Libreville'), + (b'Africa/Lome', b'Africa/Lome'), + (b'Africa/Luanda', b'Africa/Luanda'), + (b'Africa/Lubumbashi', b'Africa/Lubumbashi'), + (b'Africa/Lusaka', b'Africa/Lusaka'), + (b'Africa/Malabo', b'Africa/Malabo'), + (b'Africa/Maputo', b'Africa/Maputo'), + (b'Africa/Maseru', b'Africa/Maseru'), + (b'Africa/Mbabane', b'Africa/Mbabane'), + (b'Africa/Mogadishu', b'Africa/Mogadishu'), + (b'Africa/Monrovia', b'Africa/Monrovia'), + (b'Africa/Nairobi', b'Africa/Nairobi'), + (b'Africa/Ndjamena', b'Africa/Ndjamena'), + (b'Africa/Niamey', b'Africa/Niamey'), + (b'Africa/Nouakchott', b'Africa/Nouakchott'), + (b'Africa/Ouagadougou', b'Africa/Ouagadougou'), + (b'Africa/Porto-Novo', b'Africa/Porto-Novo'), + (b'Africa/Sao_Tome', b'Africa/Sao_Tome'), + (b'Africa/Tripoli', b'Africa/Tripoli'), + (b'Africa/Tunis', b'Africa/Tunis'), + (b'Africa/Windhoek', b'Africa/Windhoek'), + (b'America/Adak', b'America/Adak'), + (b'America/Anchorage', b'America/Anchorage'), + (b'America/Anguilla', b'America/Anguilla'), + (b'America/Antigua', b'America/Antigua'), + (b'America/Araguaina', b'America/Araguaina'), + ( + b'America/Argentina/Buenos_Aires', + b'America/Argentina/Buenos_Aires' + ), + ( + b'America/Argentina/Catamarca', + b'America/Argentina/Catamarca' + ), + ( + b'America/Argentina/Cordoba', + b'America/Argentina/Cordoba' + ), + ( + b'America/Argentina/Jujuy', + b'America/Argentina/Jujuy' + ), + ( + b'America/Argentina/La_Rioja', + b'America/Argentina/La_Rioja' + ), + ( + b'America/Argentina/Mendoza', + b'America/Argentina/Mendoza' + ), + ( + b'America/Argentina/Rio_Gallegos', + b'America/Argentina/Rio_Gallegos' + ), + ( + b'America/Argentina/Salta', + b'America/Argentina/Salta' + ), + ( + b'America/Argentina/San_Juan', + b'America/Argentina/San_Juan' + ), + ( + b'America/Argentina/San_Luis', + b'America/Argentina/San_Luis' + ), + ( + b'America/Argentina/Tucuman', + b'America/Argentina/Tucuman' + ), + ( + b'America/Argentina/Ushuaia', + b'America/Argentina/Ushuaia' + ), + (b'America/Aruba', b'America/Aruba'), + (b'America/Asuncion', b'America/Asuncion'), + (b'America/Atikokan', b'America/Atikokan'), + (b'America/Bahia', b'America/Bahia'), + ( + b'America/Bahia_Banderas', + b'America/Bahia_Banderas' + ), + (b'America/Barbados', b'America/Barbados'), + (b'America/Belem', b'America/Belem'), + (b'America/Belize', b'America/Belize'), + (b'America/Blanc-Sablon', b'America/Blanc-Sablon'), + (b'America/Boa_Vista', b'America/Boa_Vista'), + (b'America/Bogota', b'America/Bogota'), + (b'America/Boise', b'America/Boise'), + ( + b'America/Cambridge_Bay', + b'America/Cambridge_Bay' + ), + (b'America/Campo_Grande', b'America/Campo_Grande'), + (b'America/Cancun', b'America/Cancun'), + (b'America/Caracas', b'America/Caracas'), + (b'America/Cayenne', b'America/Cayenne'), + (b'America/Cayman', b'America/Cayman'), + (b'America/Chicago', b'America/Chicago'), + (b'America/Chihuahua', b'America/Chihuahua'), + (b'America/Costa_Rica', b'America/Costa_Rica'), + (b'America/Creston', b'America/Creston'), + (b'America/Cuiaba', b'America/Cuiaba'), + (b'America/Curacao', b'America/Curacao'), + (b'America/Danmarkshavn', b'America/Danmarkshavn'), + (b'America/Dawson', b'America/Dawson'), + (b'America/Dawson_Creek', b'America/Dawson_Creek'), + (b'America/Denver', b'America/Denver'), + (b'America/Detroit', b'America/Detroit'), + (b'America/Dominica', b'America/Dominica'), + (b'America/Edmonton', b'America/Edmonton'), + (b'America/Eirunepe', b'America/Eirunepe'), + (b'America/El_Salvador', b'America/El_Salvador'), + (b'America/Fortaleza', b'America/Fortaleza'), + (b'America/Glace_Bay', b'America/Glace_Bay'), + (b'America/Godthab', b'America/Godthab'), + (b'America/Goose_Bay', b'America/Goose_Bay'), + (b'America/Grand_Turk', b'America/Grand_Turk'), + (b'America/Grenada', b'America/Grenada'), + (b'America/Guadeloupe', b'America/Guadeloupe'), + (b'America/Guatemala', b'America/Guatemala'), + (b'America/Guayaquil', b'America/Guayaquil'), + (b'America/Guyana', b'America/Guyana'), + (b'America/Halifax', b'America/Halifax'), + (b'America/Havana', b'America/Havana'), + (b'America/Hermosillo', b'America/Hermosillo'), + ( + b'America/Indiana/Indianapolis', + b'America/Indiana/Indianapolis' + ), + (b'America/Indiana/Knox', b'America/Indiana/Knox'), + ( + b'America/Indiana/Marengo', + b'America/Indiana/Marengo' + ), + ( + b'America/Indiana/Petersburg', + b'America/Indiana/Petersburg' + ), + ( + b'America/Indiana/Tell_City', + b'America/Indiana/Tell_City' + ), + ( + b'America/Indiana/Vevay', + b'America/Indiana/Vevay' + ), + ( + b'America/Indiana/Vincennes', + b'America/Indiana/Vincennes' + ), + ( + b'America/Indiana/Winamac', + b'America/Indiana/Winamac' + ), + (b'America/Inuvik', b'America/Inuvik'), + (b'America/Iqaluit', b'America/Iqaluit'), + (b'America/Jamaica', b'America/Jamaica'), + (b'America/Juneau', b'America/Juneau'), + ( + b'America/Kentucky/Louisville', + b'America/Kentucky/Louisville' + ), + ( + b'America/Kentucky/Monticello', + b'America/Kentucky/Monticello' + ), + (b'America/Kralendijk', b'America/Kralendijk'), + (b'America/La_Paz', b'America/La_Paz'), + (b'America/Lima', b'America/Lima'), + (b'America/Los_Angeles', b'America/Los_Angeles'), + ( + b'America/Lower_Princes', + b'America/Lower_Princes' + ), + (b'America/Maceio', b'America/Maceio'), + (b'America/Managua', b'America/Managua'), + (b'America/Manaus', b'America/Manaus'), + (b'America/Marigot', b'America/Marigot'), + (b'America/Martinique', b'America/Martinique'), + (b'America/Matamoros', b'America/Matamoros'), + (b'America/Mazatlan', b'America/Mazatlan'), + (b'America/Menominee', b'America/Menominee'), + (b'America/Merida', b'America/Merida'), + (b'America/Metlakatla', b'America/Metlakatla'), + (b'America/Mexico_City', b'America/Mexico_City'), + (b'America/Miquelon', b'America/Miquelon'), + (b'America/Moncton', b'America/Moncton'), + (b'America/Monterrey', b'America/Monterrey'), + (b'America/Montevideo', b'America/Montevideo'), + (b'America/Montreal', b'America/Montreal'), + (b'America/Montserrat', b'America/Montserrat'), + (b'America/Nassau', b'America/Nassau'), + (b'America/New_York', b'America/New_York'), + (b'America/Nipigon', b'America/Nipigon'), + (b'America/Nome', b'America/Nome'), + (b'America/Noronha', b'America/Noronha'), + ( + b'America/North_Dakota/Beulah', + b'America/North_Dakota/Beulah' + ), + ( + b'America/North_Dakota/Center', + b'America/North_Dakota/Center'), + ( + b'America/North_Dakota/New_Salem', + b'America/North_Dakota/New_Salem'), + (b'America/Ojinaga', b'America/Ojinaga'), + (b'America/Panama', b'America/Panama'), + (b'America/Pangnirtung', b'America/Pangnirtung'), + (b'America/Paramaribo', b'America/Paramaribo'), + (b'America/Phoenix', b'America/Phoenix'), + ( + b'America/Port-au-Prince', + b'America/Port-au-Prince' + ), + ( + b'America/Port_of_Spain', + b'America/Port_of_Spain' + ), + (b'America/Porto_Velho', b'America/Porto_Velho'), + (b'America/Puerto_Rico', b'America/Puerto_Rico'), + (b'America/Rainy_River', b'America/Rainy_River'), + (b'America/Rankin_Inlet', b'America/Rankin_Inlet'), + (b'America/Recife', b'America/Recife'), + (b'America/Regina', b'America/Regina'), + (b'America/Resolute', b'America/Resolute'), + (b'America/Rio_Branco', b'America/Rio_Branco'), + (b'America/Santa_Isabel', b'America/Santa_Isabel'), + (b'America/Santarem', b'America/Santarem'), + (b'America/Santiago', b'America/Santiago'), + ( + b'America/Santo_Domingo', + b'America/Santo_Domingo' + ), + (b'America/Sao_Paulo', b'America/Sao_Paulo'), + (b'America/Scoresbysund', b'America/Scoresbysund'), + (b'America/Sitka', b'America/Sitka'), + ( + b'America/St_Barthelemy', + b'America/St_Barthelemy' + ), + (b'America/St_Johns', b'America/St_Johns'), + (b'America/St_Kitts', b'America/St_Kitts'), + (b'America/St_Lucia', b'America/St_Lucia'), + (b'America/St_Thomas', b'America/St_Thomas'), + (b'America/St_Vincent', b'America/St_Vincent'), + ( + b'America/Swift_Current', + b'America/Swift_Current' + ), + (b'America/Tegucigalpa', b'America/Tegucigalpa'), + (b'America/Thule', b'America/Thule'), + (b'America/Thunder_Bay', b'America/Thunder_Bay'), + (b'America/Tijuana', b'America/Tijuana'), + (b'America/Toronto', b'America/Toronto'), + (b'America/Tortola', b'America/Tortola'), + (b'America/Vancouver', b'America/Vancouver'), + (b'America/Whitehorse', b'America/Whitehorse'), + (b'America/Winnipeg', b'America/Winnipeg'), + (b'America/Yakutat', b'America/Yakutat'), + (b'America/Yellowknife', b'America/Yellowknife'), + (b'Antarctica/Casey', b'Antarctica/Casey'), + (b'Antarctica/Davis', b'Antarctica/Davis'), + ( + b'Antarctica/DumontDUrville', + b'Antarctica/DumontDUrville' + ), + (b'Antarctica/Macquarie', b'Antarctica/Macquarie'), + (b'Antarctica/Mawson', b'Antarctica/Mawson'), + (b'Antarctica/McMurdo', b'Antarctica/McMurdo'), + (b'Antarctica/Palmer', b'Antarctica/Palmer'), + (b'Antarctica/Rothera', b'Antarctica/Rothera'), + (b'Antarctica/Syowa', b'Antarctica/Syowa'), + (b'Antarctica/Troll', b'Antarctica/Troll'), + (b'Antarctica/Vostok', b'Antarctica/Vostok'), + (b'Arctic/Longyearbyen', b'Arctic/Longyearbyen'), + (b'Asia/Aden', b'Asia/Aden'), + (b'Asia/Almaty', b'Asia/Almaty'), + (b'Asia/Amman', b'Asia/Amman'), + (b'Asia/Anadyr', b'Asia/Anadyr'), + (b'Asia/Aqtau', b'Asia/Aqtau'), + (b'Asia/Aqtobe', b'Asia/Aqtobe'), + (b'Asia/Ashgabat', b'Asia/Ashgabat'), + (b'Asia/Baghdad', b'Asia/Baghdad'), + (b'Asia/Bahrain', b'Asia/Bahrain'), + (b'Asia/Baku', b'Asia/Baku'), + (b'Asia/Bangkok', b'Asia/Bangkok'), + (b'Asia/Beirut', b'Asia/Beirut'), + (b'Asia/Bishkek', b'Asia/Bishkek'), + (b'Asia/Brunei', b'Asia/Brunei'), + (b'Asia/Choibalsan', b'Asia/Choibalsan'), + (b'Asia/Chongqing', b'Asia/Chongqing'), + (b'Asia/Colombo', b'Asia/Colombo'), + (b'Asia/Damascus', b'Asia/Damascus'), + (b'Asia/Dhaka', b'Asia/Dhaka'), + (b'Asia/Dili', b'Asia/Dili'), + (b'Asia/Dubai', b'Asia/Dubai'), + (b'Asia/Dushanbe', b'Asia/Dushanbe'), + (b'Asia/Gaza', b'Asia/Gaza'), + (b'Asia/Harbin', b'Asia/Harbin'), + (b'Asia/Hebron', b'Asia/Hebron'), + (b'Asia/Ho_Chi_Minh', b'Asia/Ho_Chi_Minh'), + (b'Asia/Hong_Kong', b'Asia/Hong_Kong'), + (b'Asia/Hovd', b'Asia/Hovd'), + (b'Asia/Irkutsk', b'Asia/Irkutsk'), + (b'Asia/Jakarta', b'Asia/Jakarta'), + (b'Asia/Jayapura', b'Asia/Jayapura'), + (b'Asia/Jerusalem', b'Asia/Jerusalem'), + (b'Asia/Kabul', b'Asia/Kabul'), + (b'Asia/Kamchatka', b'Asia/Kamchatka'), + (b'Asia/Karachi', b'Asia/Karachi'), + (b'Asia/Kashgar', b'Asia/Kashgar'), + (b'Asia/Kathmandu', b'Asia/Kathmandu'), + (b'Asia/Khandyga', b'Asia/Khandyga'), + (b'Asia/Kolkata', b'Asia/Kolkata'), + (b'Asia/Krasnoyarsk', b'Asia/Krasnoyarsk'), + (b'Asia/Kuala_Lumpur', b'Asia/Kuala_Lumpur'), + (b'Asia/Kuching', b'Asia/Kuching'), + (b'Asia/Kuwait', b'Asia/Kuwait'), + (b'Asia/Macau', b'Asia/Macau'), + (b'Asia/Magadan', b'Asia/Magadan'), + (b'Asia/Makassar', b'Asia/Makassar'), + (b'Asia/Manila', b'Asia/Manila'), + (b'Asia/Muscat', b'Asia/Muscat'), + (b'Asia/Nicosia', b'Asia/Nicosia'), + (b'Asia/Novokuznetsk', b'Asia/Novokuznetsk'), + (b'Asia/Novosibirsk', b'Asia/Novosibirsk'), + (b'Asia/Omsk', b'Asia/Omsk'), + (b'Asia/Oral', b'Asia/Oral'), + (b'Asia/Phnom_Penh', b'Asia/Phnom_Penh'), + (b'Asia/Pontianak', b'Asia/Pontianak'), + (b'Asia/Pyongyang', b'Asia/Pyongyang'), + (b'Asia/Qatar', b'Asia/Qatar'), + (b'Asia/Qyzylorda', b'Asia/Qyzylorda'), + (b'Asia/Rangoon', b'Asia/Rangoon'), + (b'Asia/Riyadh', b'Asia/Riyadh'), + (b'Asia/Sakhalin', b'Asia/Sakhalin'), + (b'Asia/Samarkand', b'Asia/Samarkand'), + (b'Asia/Seoul', b'Asia/Seoul'), + (b'Asia/Shanghai', b'Asia/Shanghai'), + (b'Asia/Singapore', b'Asia/Singapore'), + (b'Asia/Taipei', b'Asia/Taipei'), + (b'Asia/Tashkent', b'Asia/Tashkent'), + (b'Asia/Tbilisi', b'Asia/Tbilisi'), + (b'Asia/Tehran', b'Asia/Tehran'), + (b'Asia/Thimphu', b'Asia/Thimphu'), + (b'Asia/Tokyo', b'Asia/Tokyo'), + (b'Asia/Ulaanbaatar', b'Asia/Ulaanbaatar'), + (b'Asia/Urumqi', b'Asia/Urumqi'), + (b'Asia/Ust-Nera', b'Asia/Ust-Nera'), + (b'Asia/Vientiane', b'Asia/Vientiane'), + (b'Asia/Vladivostok', b'Asia/Vladivostok'), + (b'Asia/Yakutsk', b'Asia/Yakutsk'), + (b'Asia/Yekaterinburg', b'Asia/Yekaterinburg'), + (b'Asia/Yerevan', b'Asia/Yerevan'), + (b'Atlantic/Azores', b'Atlantic/Azores'), + (b'Atlantic/Bermuda', b'Atlantic/Bermuda'), + (b'Atlantic/Canary', b'Atlantic/Canary'), + (b'Atlantic/Cape_Verde', b'Atlantic/Cape_Verde'), + (b'Atlantic/Faroe', b'Atlantic/Faroe'), + (b'Atlantic/Madeira', b'Atlantic/Madeira'), + (b'Atlantic/Reykjavik', b'Atlantic/Reykjavik'), + ( + b'Atlantic/South_Georgia', + b'Atlantic/South_Georgia' + ), + (b'Atlantic/St_Helena', b'Atlantic/St_Helena'), + (b'Atlantic/Stanley', b'Atlantic/Stanley'), + (b'Australia/Adelaide', b'Australia/Adelaide'), + (b'Australia/Brisbane', b'Australia/Brisbane'), + ( + b'Australia/Broken_Hill', + b'Australia/Broken_Hill' + ), + (b'Australia/Currie', b'Australia/Currie'), + (b'Australia/Darwin', b'Australia/Darwin'), + (b'Australia/Eucla', b'Australia/Eucla'), + (b'Australia/Hobart', b'Australia/Hobart'), + (b'Australia/Lindeman', b'Australia/Lindeman'), + (b'Australia/Lord_Howe', b'Australia/Lord_Howe'), + (b'Australia/Melbourne', b'Australia/Melbourne'), + (b'Australia/Perth', b'Australia/Perth'), + (b'Australia/Sydney', b'Australia/Sydney'), + (b'Canada/Atlantic', b'Canada/Atlantic'), + (b'Canada/Central', b'Canada/Central'), + (b'Canada/Eastern', b'Canada/Eastern'), + (b'Canada/Mountain', b'Canada/Mountain'), + (b'Canada/Newfoundland', b'Canada/Newfoundland'), + (b'Canada/Pacific', b'Canada/Pacific'), + (b'Europe/Amsterdam', b'Europe/Amsterdam'), + (b'Europe/Andorra', b'Europe/Andorra'), + (b'Europe/Athens', b'Europe/Athens'), + (b'Europe/Belgrade', b'Europe/Belgrade'), + (b'Europe/Berlin', b'Europe/Berlin'), + (b'Europe/Bratislava', b'Europe/Bratislava'), + (b'Europe/Brussels', b'Europe/Brussels'), + (b'Europe/Bucharest', b'Europe/Bucharest'), + (b'Europe/Budapest', b'Europe/Budapest'), + (b'Europe/Busingen', b'Europe/Busingen'), + (b'Europe/Chisinau', b'Europe/Chisinau'), + (b'Europe/Copenhagen', b'Europe/Copenhagen'), + (b'Europe/Dublin', b'Europe/Dublin'), + (b'Europe/Gibraltar', b'Europe/Gibraltar'), + (b'Europe/Guernsey', b'Europe/Guernsey'), + (b'Europe/Helsinki', b'Europe/Helsinki'), + (b'Europe/Isle_of_Man', b'Europe/Isle_of_Man'), + (b'Europe/Istanbul', b'Europe/Istanbul'), + (b'Europe/Jersey', b'Europe/Jersey'), + (b'Europe/Kaliningrad', b'Europe/Kaliningrad'), + (b'Europe/Kiev', b'Europe/Kiev'), + (b'Europe/Lisbon', b'Europe/Lisbon'), + (b'Europe/Ljubljana', b'Europe/Ljubljana'), + (b'Europe/London', b'Europe/London'), + (b'Europe/Luxembourg', b'Europe/Luxembourg'), + (b'Europe/Madrid', b'Europe/Madrid'), + (b'Europe/Malta', b'Europe/Malta'), + (b'Europe/Mariehamn', b'Europe/Mariehamn'), + (b'Europe/Minsk', b'Europe/Minsk'), + (b'Europe/Monaco', b'Europe/Monaco'), + (b'Europe/Moscow', b'Europe/Moscow'), + (b'Europe/Oslo', b'Europe/Oslo'), + (b'Europe/Paris', b'Europe/Paris'), + (b'Europe/Podgorica', b'Europe/Podgorica'), + (b'Europe/Prague', b'Europe/Prague'), + (b'Europe/Riga', b'Europe/Riga'), + (b'Europe/Rome', b'Europe/Rome'), + (b'Europe/Samara', b'Europe/Samara'), + (b'Europe/San_Marino', b'Europe/San_Marino'), + (b'Europe/Sarajevo', b'Europe/Sarajevo'), + (b'Europe/Simferopol', b'Europe/Simferopol'), + (b'Europe/Skopje', b'Europe/Skopje'), + (b'Europe/Sofia', b'Europe/Sofia'), + (b'Europe/Stockholm', b'Europe/Stockholm'), + (b'Europe/Tallinn', b'Europe/Tallinn'), + (b'Europe/Tirane', b'Europe/Tirane'), + (b'Europe/Uzhgorod', b'Europe/Uzhgorod'), + (b'Europe/Vaduz', b'Europe/Vaduz'), + (b'Europe/Vatican', b'Europe/Vatican'), + (b'Europe/Vienna', b'Europe/Vienna'), + (b'Europe/Vilnius', b'Europe/Vilnius'), + (b'Europe/Volgograd', b'Europe/Volgograd'), + (b'Europe/Warsaw', b'Europe/Warsaw'), + (b'Europe/Zagreb', b'Europe/Zagreb'), + (b'Europe/Zaporozhye', b'Europe/Zaporozhye'), + (b'Europe/Zurich', b'Europe/Zurich'), + (b'GMT', b'GMT'), + (b'Indian/Antananarivo', b'Indian/Antananarivo'), + (b'Indian/Chagos', b'Indian/Chagos'), + (b'Indian/Christmas', b'Indian/Christmas'), + (b'Indian/Cocos', b'Indian/Cocos'), + (b'Indian/Comoro', b'Indian/Comoro'), + (b'Indian/Kerguelen', b'Indian/Kerguelen'), + (b'Indian/Mahe', b'Indian/Mahe'), + (b'Indian/Maldives', b'Indian/Maldives'), + (b'Indian/Mauritius', b'Indian/Mauritius'), + (b'Indian/Mayotte', b'Indian/Mayotte'), + (b'Indian/Reunion', b'Indian/Reunion'), + (b'Pacific/Apia', b'Pacific/Apia'), + (b'Pacific/Auckland', b'Pacific/Auckland'), + (b'Pacific/Chatham', b'Pacific/Chatham'), + (b'Pacific/Chuuk', b'Pacific/Chuuk'), + (b'Pacific/Easter', b'Pacific/Easter'), + (b'Pacific/Efate', b'Pacific/Efate'), + (b'Pacific/Enderbury', b'Pacific/Enderbury'), + (b'Pacific/Fakaofo', b'Pacific/Fakaofo'), + (b'Pacific/Fiji', b'Pacific/Fiji'), + (b'Pacific/Funafuti', b'Pacific/Funafuti'), + (b'Pacific/Galapagos', b'Pacific/Galapagos'), + (b'Pacific/Gambier', b'Pacific/Gambier'), + (b'Pacific/Guadalcanal', b'Pacific/Guadalcanal'), + (b'Pacific/Guam', b'Pacific/Guam'), + (b'Pacific/Honolulu', b'Pacific/Honolulu'), + (b'Pacific/Johnston', b'Pacific/Johnston'), + (b'Pacific/Kiritimati', b'Pacific/Kiritimati'), + (b'Pacific/Kosrae', b'Pacific/Kosrae'), + (b'Pacific/Kwajalein', b'Pacific/Kwajalein'), + (b'Pacific/Majuro', b'Pacific/Majuro'), + (b'Pacific/Marquesas', b'Pacific/Marquesas'), + (b'Pacific/Midway', b'Pacific/Midway'), + (b'Pacific/Nauru', b'Pacific/Nauru'), + (b'Pacific/Niue', b'Pacific/Niue'), + (b'Pacific/Norfolk', b'Pacific/Norfolk'), + (b'Pacific/Noumea', b'Pacific/Noumea'), + (b'Pacific/Pago_Pago', b'Pacific/Pago_Pago'), + (b'Pacific/Palau', b'Pacific/Palau'), + (b'Pacific/Pitcairn', b'Pacific/Pitcairn'), + (b'Pacific/Pohnpei', b'Pacific/Pohnpei'), + (b'Pacific/Port_Moresby', b'Pacific/Port_Moresby'), + (b'Pacific/Rarotonga', b'Pacific/Rarotonga'), + (b'Pacific/Saipan', b'Pacific/Saipan'), + (b'Pacific/Tahiti', b'Pacific/Tahiti'), + (b'Pacific/Tarawa', b'Pacific/Tarawa'), + (b'Pacific/Tongatapu', b'Pacific/Tongatapu'), + (b'Pacific/Wake', b'Pacific/Wake'), + (b'Pacific/Wallis', b'Pacific/Wallis'), + (b'US/Alaska', b'US/Alaska'), + (b'US/Arizona', b'US/Arizona'), + (b'US/Central', b'US/Central'), + (b'US/Eastern', b'US/Eastern'), + (b'US/Hawaii', b'US/Hawaii'), + (b'US/Mountain', b'US/Mountain'), + (b'US/Pacific', b'US/Pacific'), + (b'UTC', b'UTC') + ] + ) + ), + ( + 'language', models.CharField( + max_length=8, verbose_name='Language', choices=[ + ('ar', 'Arabic'), ('bg', 'Bulgarian'), + ('bs', 'Bosnian (Bosnia and Herzegovina)'), + ('da', 'Danish'), ('de', 'German (Germany)'), + ('en', 'English'), ('es', 'Spanish'), + ('fa', 'Persian'), ('fr', 'French'), + ('hu', 'Hungarian'), ('hr', 'Croatian'), + ('id', 'Indonesian'), ('it', 'Italian'), + ('nl', 'Dutch (Nethherlands)'), ('pl', 'Polish'), + ('pt', 'Portuguese'), + ('pt-br', 'Portuguese (Brazil)'), + ('ro', 'Romanian (Romania)'), ('ru', 'Russian'), + ('sl', 'Slovenian'), ('tr', 'Turkish'), + ('vi', 'Vietnamese (Viet Nam)'), + ('zh-cn', 'Chinese (China)') + ] + ) + ), + ( + 'user', models.OneToOneField( + related_name='locale_profile', verbose_name='User', + to=settings.AUTH_USER_MODEL + ) + ), ], options={ 'verbose_name': 'User locale profile', diff --git a/mayan/apps/common/mixins.py b/mayan/apps/common/mixins.py index 9ad5fb9c4b..efdc59cb4f 100644 --- a/mayan/apps/common/mixins.py +++ b/mayan/apps/common/mixins.py @@ -49,7 +49,8 @@ class ObjectListPermissionFilterMixin(object): self.request.user, (self.object_permission,) ) except PermissionDenied: - # No global permission, filter ther queryset per object + permission + # No global permission, filter ther queryset per object + + # permission return AccessControlList.objects.filter_by_access( self.object_permission, self.request.user, queryset ) @@ -79,7 +80,9 @@ class ObjectPermissionCheckMixin(object): self.get_permission_object() ) - return super(ObjectPermissionCheckMixin, self).dispatch(request, *args, **kwargs) + return super( + ObjectPermissionCheckMixin, self + ).dispatch(request, *args, **kwargs) class RedirectionMixin(object): @@ -111,7 +114,9 @@ class RedirectionMixin(object): ) ) - return super(RedirectionMixin, self).dispatch(request, *args, **kwargs) + return super( + RedirectionMixin, self + ).dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): context = super(RedirectionMixin, self).get_context_data(**kwargs) @@ -137,4 +142,6 @@ class ViewPermissionCheckMixin(object): self.request.user, (self.view_permission,) ) - return super(ViewPermissionCheckMixin, self).dispatch(request, *args, **kwargs) + return super( + ViewPermissionCheckMixin, self + ).dispatch(request, *args, **kwargs) diff --git a/mayan/apps/common/settings.py b/mayan/apps/common/settings.py index 485119abd4..404493773f 100644 --- a/mayan/apps/common/settings.py +++ b/mayan/apps/common/settings.py @@ -9,7 +9,11 @@ from smart_settings import Namespace namespace = Namespace(name='common', label=_('Common')) setting_temporary_directory = namespace.add_setting( global_name='COMMON_TEMPORARY_DIRECTORY', default=tempfile.gettempdir(), - help_text=_('Temporary directory used site wide to store thumbnails, previews and temporary files. If none is specified, one will be created using tempfile.mkdtemp()'), + help_text=_( + 'Temporary directory used site wide to store thumbnails, previews ' + 'and temporary files. If none is specified, one will be created ' + 'using tempfile.mkdtemp()' + ), is_path=True ) setting_shared_storage = namespace.add_setting( @@ -20,5 +24,7 @@ setting_shared_storage = namespace.add_setting( setting_paginate_by = namespace.add_setting( global_name='COMMON_PAGINATE_BY', default=40, - help_text=_('An integer specifying how many objects should be displayed per page.') + help_text=_( + 'An integer specifying how many objects should be displayed per page.' + ) ) diff --git a/mayan/apps/common/utils.py b/mayan/apps/common/utils.py index cda85099c7..981d8b6227 100644 --- a/mayan/apps/common/utils.py +++ b/mayan/apps/common/utils.py @@ -100,7 +100,9 @@ def return_attrib(obj, attrib, arguments=None): try: if isinstance(attrib, types.FunctionType): return attrib(obj) - elif isinstance(obj, types.DictType) or isinstance(obj, types.DictionaryType): + elif isinstance( + obj, types.DictType + ) or isinstance(obj, types.DictionaryType): return obj[attrib] else: result = reduce(getattr, attrib.split('.'), obj) @@ -140,12 +142,13 @@ def urlquote(link=None, get=None): assert link or get if isinstance(link, dict): - # urlqoute({'key': 'value', 'key2': 'value2'}) --> key=value&key2=value2 + # urlqoute({'key': 'value', 'key2': 'value2'}) --> + # key=value&key2=value2 assert not get, get get = link link = '' assert isinstance(get, dict), 'wrong type "%s", dict required' % type(get) - # assert not (link.startswith('http://') or link.startswith('https://')), \ + # assert not (link.startswith('http://') or link.startswith('https://')), # 'This method should only quote the url path. # It should not start with http(s):// (%s)' % ( # link) diff --git a/mayan/apps/common/views.py b/mayan/apps/common/views.py index 5d9bc30a77..523ce0d43f 100644 --- a/mayan/apps/common/views.py +++ b/mayan/apps/common/views.py @@ -12,9 +12,6 @@ from django.utils.http import urlencode from django.utils.translation import ugettext_lazy as _ from django.views.generic import TemplateView -from documents.search import document_search - -from .classes import MissingItem from .forms import ( LicenseForm, LocaleProfileForm, LocaleProfileForm_view, UserForm, UserForm_view diff --git a/mayan/apps/common/widgets.py b/mayan/apps/common/widgets.py index 477c7dd85e..32033da86f 100644 --- a/mayan/apps/common/widgets.py +++ b/mayan/apps/common/widgets.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -from itertools import chain import os from django import forms @@ -107,50 +106,6 @@ class PlainWidget(forms.widgets.Widget): return mark_safe('%s' % value) -class ScrollableCheckboxSelectMultiple(forms.widgets.CheckboxSelectMultiple): - """ - Class for a form widget composed of a selection of checkboxes wrapped - in a div tag with automatic overflow to add scrollbars when the list - exceds the height of the div - """ - def render(self, name, value, attrs=None, choices=()): - if value is None: - value = [] - has_id = attrs and 'id' in attrs - final_attrs = self.build_attrs(attrs, name=name) - # TODO: Move this styling to a CSS class - output = [ - '') - - return mark_safe( - '
%s
' % '\n'.join(output) - ) - - class TextAreaDiv(forms.widgets.Widget): """ Class to define a form widget that simulates the behavior of a diff --git a/mayan/apps/django_gpg/tests/test_classes.py b/mayan/apps/django_gpg/tests/test_classes.py index fc500a0544..25587f7d54 100644 --- a/mayan/apps/django_gpg/tests/test_classes.py +++ b/mayan/apps/django_gpg/tests/test_classes.py @@ -32,7 +32,9 @@ class DjangoGPGTestCase(TestCase): # Test querying the keyservers self.assertTrue( - TEST_KEY_ID in [key_stub.key_id for key_stub in self.gpg.query(TEST_UIDS)] + TEST_KEY_ID in [ + key_stub.key_id for key_stub in self.gpg.query(TEST_UIDS) + ] ) # Receive a public key from the keyserver @@ -40,5 +42,7 @@ class DjangoGPGTestCase(TestCase): # Check that the received key is indeed in the keyring self.assertTrue( - TEST_KEY_ID[-16:] in [key_stub.key_id for key_stub in Key.get_all(self.gpg)] + TEST_KEY_ID[-16:] in [ + key_stub.key_id for key_stub in Key.get_all(self.gpg) + ] ) diff --git a/mayan/apps/django_gpg/views.py b/mayan/apps/django_gpg/views.py index ce3ec951c3..13148e7650 100644 --- a/mayan/apps/django_gpg/views.py +++ b/mayan/apps/django_gpg/views.py @@ -1,6 +1,5 @@ from __future__ import absolute_import, unicode_literals -from datetime import datetime import logging from django.conf import settings diff --git a/mayan/apps/document_comments/views.py b/mayan/apps/document_comments/views.py index 77c9141477..206f7a9c4d 100644 --- a/mayan/apps/document_comments/views.py +++ b/mayan/apps/document_comments/views.py @@ -51,10 +51,16 @@ def comment_delete(request, comment_id=None, comment_id_list=None): ) previous = request.POST.get( - 'previous', request.GET.get('previous', request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) + 'previous', request.GET.get( + 'previous', request.META.get( + 'HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL) + ) + ) ) next = request.POST.get( - 'next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) + 'next', request.GET.get( + 'next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)) + ) ) if request.method == 'POST': @@ -110,7 +116,11 @@ def comment_add(request, document_id): post_action_redirect = None - next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) + next = request.POST.get( + 'next', request.GET.get( + 'next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)) + ) + ) if request.method == 'POST': form = CommentForm(request.POST) @@ -144,7 +154,8 @@ class DocumentCommentListView(SingleObjectListView): ) except PermissionDenied: AccessControlList.objects.check_access( - permission_comment_view, self.request.user, self.get_document() + permission_comment_view, self.request.user, + self.get_document() ) return self.get_document().comments.all() diff --git a/mayan/apps/document_indexing/apps.py b/mayan/apps/document_indexing/apps.py index 02a7ef4993..1f87249d47 100644 --- a/mayan/apps/document_indexing/apps.py +++ b/mayan/apps/document_indexing/apps.py @@ -61,7 +61,8 @@ class DocumentIndexingApp(MayanAppConfig): ) ) SourceColumn( - source=IndexInstance, label=_('Document types'), attribute='get_document_types_names' + source=IndexInstance, label=_('Document types'), + attribute='get_document_types_names' ) SourceColumn( @@ -74,7 +75,9 @@ class DocumentIndexingApp(MayanAppConfig): ) SourceColumn( source=IndexTemplateNode, label=_('Has document links?'), - func=lambda context: two_state_template(context['object'].link_documents) + func=lambda context: two_state_template( + context['object'].link_documents + ) ) SourceColumn( diff --git a/mayan/apps/document_indexing/managers.py b/mayan/apps/document_indexing/managers.py index bef07d6a91..c389a108c3 100644 --- a/mayan/apps/document_indexing/managers.py +++ b/mayan/apps/document_indexing/managers.py @@ -20,7 +20,8 @@ class IndexInstanceNodeManager(models.Manager): @staticmethod def delete_empty_index_nodes_recursive(instance_node): """ - Calls itself recursively deleting empty index instance nodes up to root + Calls itself recursively deleting empty index instance nodes up to + root """ if instance_node.get_children().count() == 0: diff --git a/mayan/apps/document_indexing/migrations/0001_initial.py b/mayan/apps/document_indexing/migrations/0001_initial.py index 1759372807..730540f17c 100644 --- a/mayan/apps/document_indexing/migrations/0001_initial.py +++ b/mayan/apps/document_indexing/migrations/0001_initial.py @@ -15,11 +15,38 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Index', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(help_text='Internal name used to reference this index.', unique=True, max_length=64, verbose_name='Name')), - ('title', models.CharField(help_text='The name that will be visible to users.', unique=True, max_length=128, verbose_name='Title')), - ('enabled', models.BooleanField(default=True, help_text='Causes this index to be visible and updated when document data changes.', verbose_name='Enabled')), - ('document_types', models.ManyToManyField(to='documents.DocumentType', verbose_name='Document types')), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'name', models.CharField( + help_text='Internal name used to reference this index.', + unique=True, max_length=64, verbose_name='Name' + ) + ), + ( + 'title', models.CharField( + help_text='The name that will be visible to users.', + unique=True, max_length=128, verbose_name='Title' + ) + ), + ( + 'enabled', models.BooleanField( + default=True, + help_text='Causes this index to be visible and updated when document data changes.', + verbose_name='Enabled' + ) + ), + ( + 'document_types', + models.ManyToManyField( + to='documents.DocumentType', + verbose_name='Document types' + ) + ), ], options={ 'verbose_name': 'Index', @@ -30,13 +57,43 @@ class Migration(migrations.Migration): migrations.CreateModel( name='IndexInstanceNode', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('value', models.CharField(max_length=128, verbose_name='Value', blank=True)), - ('lft', models.PositiveIntegerField(editable=False, db_index=True)), - ('rght', models.PositiveIntegerField(editable=False, db_index=True)), - ('tree_id', models.PositiveIntegerField(editable=False, db_index=True)), - ('level', models.PositiveIntegerField(editable=False, db_index=True)), - ('documents', models.ManyToManyField(related_name='node_instances', verbose_name='Documents', to='documents.Document')), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'value', models.CharField( + max_length=128, verbose_name='Value', blank=True + ) + ), + ( + 'lft', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'rght', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'tree_id', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'level', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'documents', models.ManyToManyField( + related_name='node_instances', + verbose_name='Documents', to='documents.Document' + ) + ), ], options={ 'verbose_name': 'Index node instance', @@ -47,16 +104,64 @@ class Migration(migrations.Migration): migrations.CreateModel( name='IndexTemplateNode', fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('expression', models.CharField(help_text='Enter a python string expression to be evaluated.', max_length=128, verbose_name='Indexing expression')), - ('enabled', models.BooleanField(default=True, help_text='Causes this node to be visible and updated when document data changes.', verbose_name='Enabled')), - ('link_documents', models.BooleanField(default=False, help_text='Check this option to have this node act as a container for documents and not as a parent for further nodes.', verbose_name='Link documents')), - ('lft', models.PositiveIntegerField(editable=False, db_index=True)), - ('rght', models.PositiveIntegerField(editable=False, db_index=True)), - ('tree_id', models.PositiveIntegerField(editable=False, db_index=True)), - ('level', models.PositiveIntegerField(editable=False, db_index=True)), - ('index', models.ForeignKey(related_name='node_templates', verbose_name='Index', to='document_indexing.Index')), - ('parent', mptt.fields.TreeForeignKey(blank=True, to='document_indexing.IndexTemplateNode', null=True)), + ( + 'id', models.AutoField( + verbose_name='ID', serialize=False, auto_created=True, + primary_key=True + ) + ), + ( + 'expression', models.CharField( + help_text='Enter a python string expression to be evaluated.', + max_length=128, verbose_name='Indexing expression' + ) + ), + ( + 'enabled', models.BooleanField( + default=True, + help_text='Causes this node to be visible and updated when document data changes.', + verbose_name='Enabled' + ) + ), + ( + 'link_documents', models.BooleanField( + default=False, + help_text='Check this option to have this node act as a container for documents and not as a parent for further nodes.', + verbose_name='Link documents' + ) + ), + ( + 'lft', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'rght', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'tree_id', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'level', models.PositiveIntegerField( + editable=False, db_index=True + ) + ), + ( + 'index', models.ForeignKey( + related_name='node_templates', verbose_name='Index', + to='document_indexing.Index' + ) + ), + ( + 'parent', mptt.fields.TreeForeignKey( + blank=True, to='document_indexing.IndexTemplateNode', + null=True + ) + ), ], options={ 'verbose_name': 'Index node template', @@ -67,13 +172,20 @@ class Migration(migrations.Migration): migrations.AddField( model_name='indexinstancenode', name='index_template_node', - field=models.ForeignKey(related_name='node_instance', verbose_name='Index template node', to='document_indexing.IndexTemplateNode'), + field=models.ForeignKey( + related_name='node_instance', + verbose_name='Index template node', + to='document_indexing.IndexTemplateNode' + ), preserve_default=True, ), migrations.AddField( model_name='indexinstancenode', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, to='document_indexing.IndexInstanceNode', null=True), + field=mptt.fields.TreeForeignKey( + blank=True, to='document_indexing.IndexInstanceNode', + null=True + ), preserve_default=True, ), ] diff --git a/mayan/apps/document_indexing/migrations/0004_auto_20150708_0113.py b/mayan/apps/document_indexing/migrations/0004_auto_20150708_0113.py index d789044937..8ca92d4236 100644 --- a/mayan/apps/document_indexing/migrations/0004_auto_20150708_0113.py +++ b/mayan/apps/document_indexing/migrations/0004_auto_20150708_0113.py @@ -14,7 +14,9 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='index', name='label', - field=models.CharField(unique=True, max_length=128, verbose_name='Label'), + field=models.CharField( + unique=True, max_length=128, verbose_name='Label' + ), preserve_default=True, ), ] diff --git a/mayan/apps/document_indexing/migrations/0005_index_slug.py b/mayan/apps/document_indexing/migrations/0005_index_slug.py index 3cdc896552..0d4ac9c31c 100644 --- a/mayan/apps/document_indexing/migrations/0005_index_slug.py +++ b/mayan/apps/document_indexing/migrations/0005_index_slug.py @@ -14,7 +14,11 @@ class Migration(migrations.Migration): migrations.AddField( model_name='index', name='slug', - field=models.SlugField(null=True, max_length=128, blank=True, help_text='This values will be used by other apps to reference this index.', unique=True, verbose_name='Slug'), + field=models.SlugField( + null=True, max_length=128, blank=True, + help_text='This values will be used by other apps to reference this index.', + unique=True, verbose_name='Slug' + ), preserve_default=True, ), ] diff --git a/mayan/apps/document_indexing/migrations/0007_auto_20150729_0152.py b/mayan/apps/document_indexing/migrations/0007_auto_20150729_0152.py index 7f1678e9b3..408e820b73 100644 --- a/mayan/apps/document_indexing/migrations/0007_auto_20150729_0152.py +++ b/mayan/apps/document_indexing/migrations/0007_auto_20150729_0152.py @@ -14,7 +14,11 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='index', name='slug', - field=models.SlugField(default='', max_length=128, help_text='This values will be used by other apps to reference this index.', unique=True, verbose_name='Slug'), + field=models.SlugField( + default='', max_length=128, + help_text='This values will be used by other apps to reference this index.', + unique=True, verbose_name='Slug' + ), preserve_default=False, ), ] diff --git a/mayan/apps/document_indexing/migrations/0008_auto_20150729_1515.py b/mayan/apps/document_indexing/migrations/0008_auto_20150729_1515.py index f34c84b3d9..9ed5454422 100644 --- a/mayan/apps/document_indexing/migrations/0008_auto_20150729_1515.py +++ b/mayan/apps/document_indexing/migrations/0008_auto_20150729_1515.py @@ -14,7 +14,10 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='indexinstancenode', name='value', - field=models.CharField(db_index=True, max_length=128, verbose_name='Value', blank=True), + field=models.CharField( + db_index=True, max_length=128, verbose_name='Value', + blank=True + ), preserve_default=True, ), ] diff --git a/mayan/apps/document_indexing/migrations/0009_auto_20150815_0351.py b/mayan/apps/document_indexing/migrations/0009_auto_20150815_0351.py index eff963d238..14689c4bda 100644 --- a/mayan/apps/document_indexing/migrations/0009_auto_20150815_0351.py +++ b/mayan/apps/document_indexing/migrations/0009_auto_20150815_0351.py @@ -14,7 +14,10 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='indextemplatenode', name='expression', - field=models.CharField(help_text="Enter a template to render. Use Django's default templating language (https://docs.djangoproject.com/en/1.7/ref/templates/builtins/)", max_length=128, verbose_name='Indexing expression'), + field=models.CharField( + help_text="Enter a template to render. Use Django's default templating language (https://docs.djangoproject.com/en/1.7/ref/templates/builtins/)", + max_length=128, verbose_name='Indexing expression' + ), preserve_default=True, ), ] diff --git a/mayan/apps/document_indexing/models.py b/mayan/apps/document_indexing/models.py index 530e461baf..d57100daed 100644 --- a/mayan/apps/document_indexing/models.py +++ b/mayan/apps/document_indexing/models.py @@ -71,7 +71,9 @@ class Index(models.Model): def get_document_types_names(self): return ', '.join( - [unicode(document_type) for document_type in self.document_types.all()] or ['None'] + [ + unicode(document_type) for document_type in self.document_types.all() + ] or ['None'] ) class Meta: diff --git a/mayan/apps/document_indexing/urls.py b/mayan/apps/document_indexing/urls.py index 82ae9b714c..9fa8d76c5a 100644 --- a/mayan/apps/document_indexing/urls.py +++ b/mayan/apps/document_indexing/urls.py @@ -37,7 +37,8 @@ urlpatterns = patterns( ), url( r'^setup/index/(?P\d+)/document_types/$', - SetupIndexDocumentTypesView.as_view(), name='index_setup_document_types' + SetupIndexDocumentTypesView.as_view(), + name='index_setup_document_types' ), url( r'^setup/template/node/(?P\d+)/create/child/$', @@ -84,8 +85,8 @@ api_urls = patterns( name='index-detail' ), url( - r'^index/(?P[0-9]+)/template/$', APIIndexTemplateListView.as_view(), - name='index-template-detail' + r'^index/(?P[0-9]+)/template/$', + APIIndexTemplateListView.as_view(), name='index-template-detail' ), url(r'^indexes/$', APIIndexListView.as_view(), name='index-list'), url( diff --git a/mayan/apps/document_indexing/views.py b/mayan/apps/document_indexing/views.py index e36cf9bf24..b339cf1a8d 100644 --- a/mayan/apps/document_indexing/views.py +++ b/mayan/apps/document_indexing/views.py @@ -15,7 +15,6 @@ from common.views import ( AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView, SingleObjectEditView, SingleObjectListView ) -from common.widgets import two_state_template from documents.models import Document, DocumentType from documents.permissions import permission_document_view from documents.views import DocumentListView @@ -33,7 +32,7 @@ from .permissions import ( permission_document_indexing_setup, permission_document_indexing_view ) from .tasks import task_do_rebuild_all_indexes -from .widgets import index_instance_item_link, get_breadcrumbs, node_level +from .widgets import get_breadcrumbs # Setup views diff --git a/mayan/apps/document_indexing/widgets.py b/mayan/apps/document_indexing/widgets.py index aafaa2fc50..c207851bae 100644 --- a/mayan/apps/document_indexing/widgets.py +++ b/mayan/apps/document_indexing/widgets.py @@ -21,7 +21,9 @@ def get_instance_link(index_instance_node, text=None, simple=False): return template % { 'url': index_instance_node.get_absolute_url(), - 'value': text if text else (index_instance_node if index_instance_node.parent else index_instance_node.index_template_node.index) + 'value': text if text else ( + index_instance_node if index_instance_node.parent else index_instance_node.index_template_node.index + ) } @@ -50,7 +52,9 @@ def get_breadcrumbs(index_instance_node, simple=False, single_link=False, includ # Return the entire breadcrumb path as a single HTML anchor output.insert( 0, get_instance_link( - index_instance_node=index_instance_node, text=(' / '.join(result)) + index_instance_node=index_instance_node, text=( + ' / '.join(result) + ) ) ) return mark_safe(' '.join(output)) @@ -68,11 +72,13 @@ def index_instance_item_link(index_instance_item): else: icon_template = '' - return mark_safe('%(icon_template)s %(text)s' % { - 'url': index_instance_item.get_absolute_url(), - 'icon_template': icon_template, - 'text': index_instance_item - }) + return mark_safe( + '%(icon_template)s %(text)s' % { + 'url': index_instance_item.get_absolute_url(), + 'icon_template': icon_template, + 'text': index_instance_item + } + ) def node_level(node): @@ -83,8 +89,9 @@ def node_level(node): return mark_safe( ''.join( [ - '     ' * (getattr(node, node._mptt_meta.level_attr) - 1), - '' if node.is_root_node() else ' ', + '     ' * ( + getattr(node, node._mptt_meta.level_attr) - 1 + ), '' if node.is_root_node() else ' ', ugettext('Root') if node.is_root_node() else unicode(node) ] ) diff --git a/mayan/apps/documents/forms.py b/mayan/apps/documents/forms.py index a0997e908d..d0a7283511 100644 --- a/mayan/apps/documents/forms.py +++ b/mayan/apps/documents/forms.py @@ -103,15 +103,6 @@ class PrintForm(forms.Form): page_range = forms.CharField(label=_('Page range'), required=False) -class DocumentTypeFilenameForm(forms.ModelForm): - """ - Model class form to edit a document type filename - """ - class Meta: - fields = ('filename', 'enabled') - model = DocumentTypeFilename - - class DocumentTypeFilenameForm_create(forms.ModelForm): """ Model class form to create a new document type filename diff --git a/mayan/apps/documents/tests/__init__.py b/mayan/apps/documents/tests/__init__.py index f2e13ca4d2..124ec460a6 100644 --- a/mayan/apps/documents/tests/__init__.py +++ b/mayan/apps/documents/tests/__init__.py @@ -1 +1 @@ -from .literals import * +from .literals import * # NOQA diff --git a/mayan/apps/documents/tests/test_models.py b/mayan/apps/documents/tests/test_models.py index c57d77aad3..8ee992fea4 100644 --- a/mayan/apps/documents/tests/test_models.py +++ b/mayan/apps/documents/tests/test_models.py @@ -1,6 +1,5 @@ from __future__ import unicode_literals -from django.conf import settings from django.core.files import File from django.test import TestCase diff --git a/mayan/apps/documents/views.py b/mayan/apps/documents/views.py index 01cc726d62..bbd1c1f99b 100644 --- a/mayan/apps/documents/views.py +++ b/mayan/apps/documents/views.py @@ -21,8 +21,7 @@ from common.generics import ( SingleObjectEditView, SingleObjectListView ) from common.mixins import MultipleInstanceActionMixin -from common.utils import encapsulate, pretty_size -from common.widgets import two_state_template +from common.utils import pretty_size from converter.literals import ( DEFAULT_PAGE_NUMBER, DEFAULT_ROTATION, DEFAULT_ZOOM_LEVEL ) @@ -36,8 +35,8 @@ from .events import ( ) from .forms import ( DocumentDownloadForm, DocumentForm, DocumentPageForm, DocumentPreviewForm, - DocumentPropertiesForm, DocumentTypeFilenameForm, - DocumentTypeFilenameForm_create, DocumentTypeSelectForm, PrintForm + DocumentPropertiesForm, DocumentTypeSelectForm, + DocumentTypeFilenameForm_create, PrintForm ) from .literals import DOCUMENT_IMAGE_TASK_TIMEOUT from .models import ( diff --git a/mayan/apps/dynamic_search/api_views.py b/mayan/apps/dynamic_search/api_views.py index 9e8b8b76d0..604e56f80c 100644 --- a/mayan/apps/dynamic_search/api_views.py +++ b/mayan/apps/dynamic_search/api_views.py @@ -8,7 +8,7 @@ from rest_api.filters import MayanObjectPermissionsFilter from .classes import SearchModel from .filters import RecentSearchUserFilter from .models import RecentSearch -from .serializers import RecentSearchSerializer, SearchSerializer +from .serializers import RecentSearchSerializer class APIRecentSearchListView(generics.ListAPIView): diff --git a/mayan/apps/dynamic_search/serializers.py b/mayan/apps/dynamic_search/serializers.py index d543f4f6a1..2f2b3178d0 100644 --- a/mayan/apps/dynamic_search/serializers.py +++ b/mayan/apps/dynamic_search/serializers.py @@ -15,7 +15,3 @@ class RecentSearchSerializer(serializers.HyperlinkedModelSerializer): fields = ('datetime_created', 'hits', 'query', 'url', 'user') model = RecentSearch read_only_fields = ('datetime_created', 'hits', 'query', 'user') - - -class SearchSerializer(serializers.Serializer): - results = serializers.CharField() diff --git a/mayan/apps/dynamic_search/views.py b/mayan/apps/dynamic_search/views.py index d5202a16e6..923bc8bfc8 100644 --- a/mayan/apps/dynamic_search/views.py +++ b/mayan/apps/dynamic_search/views.py @@ -6,8 +6,6 @@ import urlparse from django.conf import settings from django.core.urlresolvers import reverse from django.http import HttpResponseRedirect -from django.shortcuts import render_to_response -from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ from common.generics import SimpleView, SingleObjectListView diff --git a/mayan/apps/events/apps.py b/mayan/apps/events/apps.py index 46c9445bb5..31888956c8 100644 --- a/mayan/apps/events/apps.py +++ b/mayan/apps/events/apps.py @@ -20,7 +20,8 @@ class EventsApp(MayanAppConfig): SourceColumn(source=Action, label=_('Timestamp'), attribute='timestamp') SourceColumn(source=Action, label=_('Actor'), attribute='actor') - SourceColumn(source=Action, label=_('Verb'), + SourceColumn( + source=Action, label=_('Verb'), func=lambda context: event_type_link(context['object']) ) diff --git a/mayan/apps/installation/views.py b/mayan/apps/installation/views.py index b9a0a4fbcd..06a31fefb9 100644 --- a/mayan/apps/installation/views.py +++ b/mayan/apps/installation/views.py @@ -1,11 +1,8 @@ from __future__ import absolute_import, unicode_literals -from django.shortcuts import render_to_response -from django.template import RequestContext from django.utils.translation import ugettext_lazy as _ from common.generics import SingleObjectListView -from permissions import Permission from .classes import PropertyNamespace from .permissions import permission_installation_details @@ -37,4 +34,3 @@ class NamespaceDetailView(SingleObjectListView): def get_queryset(self): return self.get_namespace().get_properties() - diff --git a/mayan/apps/linking/views.py b/mayan/apps/linking/views.py index 3effd5fce6..96c6496a7d 100644 --- a/mayan/apps/linking/views.py +++ b/mayan/apps/linking/views.py @@ -16,7 +16,6 @@ from common.generics import ( AssignRemoveView, SingleObjectCreateView, SingleObjectEditView, SingleObjectListView ) -from common.widgets import two_state_template from documents.models import Document, DocumentType from documents.permissions import permission_document_view from documents.views import DocumentListView diff --git a/mayan/apps/mirroring/management/commands/mountindex.py b/mayan/apps/mirroring/management/commands/mountindex.py index a837e3179c..95a94ff585 100644 --- a/mayan/apps/mirroring/management/commands/mountindex.py +++ b/mayan/apps/mirroring/management/commands/mountindex.py @@ -11,7 +11,7 @@ from fuse import FUSE, FuseOSError, Operations from django.core import management from django.core.cache import caches from django.core.exceptions import MultipleObjectsReturned -from django.db.models import Count, Max +from django.db.models import Count from document_indexing.models import Index, IndexInstanceNode from documents.models import Document diff --git a/mayan/apps/user_management/apps.py b/mayan/apps/user_management/apps.py index d5d09d7e91..d155dc7554 100644 --- a/mayan/apps/user_management/apps.py +++ b/mayan/apps/user_management/apps.py @@ -32,8 +32,14 @@ class UserManagementApp(MayanAppConfig): APIEndPoint(app=self, version_string='1') - MetadataLookup(description=_('All the groups.'), name='group', value=Group.objects.all()) - MetadataLookup(description=_('All the users.'), name='users', value=get_user_model().objects.all()) + MetadataLookup( + description=_('All the groups.'), name='group', + value=Group.objects.all() + ) + MetadataLookup( + description=_('All the users.'), name='users', + value=get_user_model().objects.all() + ) SourceColumn( source=Group, label=_('Members'), attribute='user_set.count' @@ -47,11 +53,15 @@ class UserManagementApp(MayanAppConfig): ) SourceColumn( source=User, label=_('Active'), - func=lambda context: two_state_template(context['object'].is_active) + func=lambda context: two_state_template( + context['object'].is_active + ) ) SourceColumn( source=User, label=_('Has usable password?'), - func=lambda context: two_state_template(context['object'].has_usable_password()) + func=lambda context: two_state_template( + context['object'].has_usable_password() + ) ) menu_multi_item.bind_links( diff --git a/mayan/apps/user_management/views.py b/mayan/apps/user_management/views.py index a51ef16de3..fbc0e02bf8 100644 --- a/mayan/apps/user_management/views.py +++ b/mayan/apps/user_management/views.py @@ -14,7 +14,6 @@ from common.views import ( AssignRemoveView, SingleObjectCreateView, SingleObjectEditView, SingleObjectListView ) -from common.widgets import two_state_template from permissions import Permission from .forms import PasswordForm, UserForm @@ -47,7 +46,10 @@ def user_edit(request, user_id): if user.is_superuser or user.is_staff: messages.error( request, - _('Super user and staff user editing is not allowed, use the admin interface for these cases.') + _( + 'Super user and staff user editing is not allowed, use the ' + 'admin interface for these cases.' + ) ) return HttpResponseRedirect( request.META.get( @@ -106,7 +108,9 @@ def user_delete(request, user_id=None, user_id_list=None): post_action_redirect = reverse('user_management:user_list') elif user_id_list: users = [ - get_object_or_404(User, pk=user_id) for user_id in user_id_list.split(',') + get_object_or_404( + User, pk=user_id + ) for user_id in user_id_list.split(',') ] else: messages.error(request, _('Must provide at least one user.')) @@ -123,14 +127,24 @@ def user_delete(request, user_id=None, user_id_list=None): for user in users: try: if user.is_superuser or user.is_staff: - messages.error(request, _('Super user and staff user deleting is not allowed, use the admin interface for these cases.')) + messages.error( + request, + _( + 'Super user and staff user deleting is not ' + 'allowed, use the admin interface for these cases.' + ) + ) else: user.delete() - messages.success(request, _('User "%s" deleted successfully.') % user) + messages.success( + request, _('User "%s" deleted successfully.') % user + ) except Exception as exception: - messages.error(request, _('Error deleting user "%(user)s": %(error)s') % { - 'user': user, 'error': exception - }) + messages.error( + request, _('Error deleting user "%(user)s": %(error)s') % { + 'user': user, 'error': exception + } + ) return HttpResponseRedirect(next) @@ -145,8 +159,10 @@ def user_delete(request, user_id=None, user_id_list=None): elif len(users) > 1: context['title'] = _('Delete the users: %s?') % ', '.join([unicode(d) for d in users]) - return render_to_response('appearance/generic_confirm.html', context, - context_instance=RequestContext(request)) + return render_to_response( + 'appearance/generic_confirm.html', context, + context_instance=RequestContext(request) + ) def user_multiple_delete(request): @@ -166,7 +182,11 @@ def user_set_password(request, user_id=None, user_id_list=None): users = [get_object_or_404(User, pk=user_id) for user_id in user_id_list.split(',')] else: messages.error(request, _('Must provide at least one user.')) - return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) + return HttpResponseRedirect( + request.META.get( + 'HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL) + ) + ) next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL)))) @@ -181,15 +201,30 @@ def user_set_password(request, user_id=None, user_id_list=None): for user in users: try: if user.is_superuser or user.is_staff: - messages.error(request, _('Super user and staff user password reseting is not allowed, use the admin interface for these cases.')) + messages.error( + request, + _( + 'Super user and staff user password ' + 'reseting is not allowed, use the admin ' + 'interface for these cases.' + ) + ) else: user.set_password(password_1) user.save() - messages.success(request, _('Successfull password reset for user: %s.') % user) + messages.success( + request, _( + 'Successfull password reset for user: %s.' + ) % user + ) except Exception as exception: - messages.error(request, _('Error reseting password for user "%(user)s": %(error)s') % { - 'user': user, 'error': exception - }) + messages.error( + request, _( + 'Error reseting password for user "%(user)s": %(error)s' + ) % { + 'user': user, 'error': exception + } + ) return HttpResponseRedirect(next) else: @@ -243,10 +278,14 @@ class UserGroupsView(AssignRemoveView): return get_object_or_404(User, pk=self.kwargs['pk']) def left_list(self): - return AssignRemoveView.generate_choices(get_user_non_groups(self.get_object())) + return AssignRemoveView.generate_choices( + get_user_non_groups(self.get_object()) + ) def right_list(self): - return AssignRemoveView.generate_choices(get_user_groups(self.get_object())) + return AssignRemoveView.generate_choices( + get_user_groups(self.get_object()) + ) def remove(self, item): item.user_set.remove(self.get_object()) @@ -297,7 +336,9 @@ def group_delete(request, group_id=None, group_id_list=None): groups = [get_object_or_404(Group, pk=group_id)] post_action_redirect = reverse('user_management:group_list') elif group_id_list: - groups = [get_object_or_404(Group, pk=group_id) for group_id in group_id_list.split(',')] + groups = [ + get_object_or_404(Group, pk=group_id) for group_id in group_id_list.split(',') + ] else: messages.error(request, _('Must provide at least one group.')) return HttpResponseRedirect(request.META.get('HTTP_REFERER', reverse(settings.LOGIN_REDIRECT_URL))) @@ -359,10 +400,16 @@ class GroupMembersView(AssignRemoveView): return get_object_or_404(Group, pk=self.kwargs['pk']) def left_list(self): - return AssignRemoveView.generate_choices(User.objects.exclude(groups=self.get_object()).exclude(is_staff=True).exclude(is_superuser=True)) + return AssignRemoveView.generate_choices( + User.objects.exclude( + groups=self.get_object() + ).exclude(is_staff=True).exclude(is_superuser=True) + ) def right_list(self): - return AssignRemoveView.generate_choices(self.get_object().user_set.all()) + return AssignRemoveView.generate_choices( + self.get_object().user_set.all() + ) def remove(self, item): self.get_object().user_set.remove(item)