From 521772ff0779ced13f94a6ebcd96740a9eafbb1d Mon Sep 17 00:00:00 2001 From: Ed Henderson Date: Thu, 2 Jun 2016 12:56:13 -0700 Subject: [PATCH] [1.10.x] Fixed #26021 -- Applied hanging indentation to docs. Backport of 4a4d7f980e2a66756e1e424f7648dcd28ff765b7 from master --- docs/howto/custom-management-commands.txt | 6 ++- docs/howto/error-reporting.txt | 10 ++-- docs/howto/static-files/deployment.txt | 6 +-- docs/intro/tutorial05.txt | 24 ++++----- docs/ref/contrib/admin/index.txt | 33 ++++++------ docs/ref/contrib/gis/db-api.txt | 4 +- docs/ref/contrib/gis/tutorial.txt | 11 ++-- docs/ref/contrib/messages.txt | 9 ++-- docs/ref/contrib/sites.txt | 10 ++-- docs/ref/forms/fields.txt | 23 +++++--- docs/ref/forms/widgets.txt | 7 ++- docs/ref/models/expressions.txt | 3 +- docs/ref/models/fields.txt | 8 +-- docs/topics/auth/customizing.txt | 5 +- docs/topics/auth/default.txt | 8 +-- docs/topics/db/queries.txt | 6 ++- docs/topics/email.txt | 66 +++++++++++++++++------ docs/topics/forms/modelforms.txt | 27 +++++++--- docs/topics/http/shortcuts.txt | 8 +-- docs/topics/i18n/timezones.txt | 5 +- docs/topics/i18n/translation.txt | 13 +++-- 21 files changed, 185 insertions(+), 107 deletions(-) diff --git a/docs/howto/custom-management-commands.txt b/docs/howto/custom-management-commands.txt index 5c13e47c11..d47fecbd60 100644 --- a/docs/howto/custom-management-commands.txt +++ b/docs/howto/custom-management-commands.txt @@ -106,11 +106,13 @@ options can be added in the :meth:`~BaseCommand.add_arguments` method like this: parser.add_argument('poll_id', nargs='+', type=int) # Named (optional) arguments - parser.add_argument('--delete', + parser.add_argument( + '--delete', action='store_true', dest='delete', default=False, - help='Delete poll instead of closing it') + help='Delete poll instead of closing it', + ) def handle(self, *args, **options): # ... diff --git a/docs/howto/error-reporting.txt b/docs/howto/error-reporting.txt index 7a51338539..ee66bfb14f 100644 --- a/docs/howto/error-reporting.txt +++ b/docs/howto/error-reporting.txt @@ -207,10 +207,12 @@ filtered out of error reports in a production environment (that is, where @sensitive_post_parameters('pass_word', 'credit_card_number') def record_user_profile(request): - UserProfile.create(user=request.user, - password=request.POST['pass_word'], - credit_card=request.POST['credit_card_number'], - name=request.POST['name']) + UserProfile.create( + user=request.user, + password=request.POST['pass_word'], + credit_card=request.POST['credit_card_number'], + name=request.POST['name'], + ) ... In the above example, the values for the ``pass_word`` and diff --git a/docs/howto/static-files/deployment.txt b/docs/howto/static-files/deployment.txt index da0427343e..805e799eaa 100644 --- a/docs/howto/static-files/deployment.txt +++ b/docs/howto/static-files/deployment.txt @@ -104,9 +104,9 @@ Here's how this might look in a fabfile:: def deploy_static(): local('./manage.py collectstatic') project.rsync_project( - remote_dir = env.remote_static_root, - local_dir = env.local_static_root, - delete = True + remote_dir=env.remote_static_root, + local_dir=env.local_static_root, + delete=True, ) .. _staticfiles-from-cdn: diff --git a/docs/intro/tutorial05.txt b/docs/intro/tutorial05.txt index 45fdb3746d..bfb43358e6 100644 --- a/docs/intro/tutorial05.txt +++ b/docs/intro/tutorial05.txt @@ -462,8 +462,7 @@ class: in the past, positive for questions that have yet to be published). """ time = timezone.now() + datetime.timedelta(days=days) - return Question.objects.create(question_text=question_text, - pub_date=time) + return Question.objects.create(question_text=question_text, pub_date=time) class QuestionViewTests(TestCase): @@ -495,8 +494,7 @@ class: """ create_question(question_text="Future question.", days=30) response = self.client.get(reverse('polls:index')) - self.assertContains(response, "No polls are available.", - status_code=200) + self.assertContains(response, "No polls are available.") self.assertQuerysetEqual(response.context['latest_question_list'], []) def test_index_view_with_future_question_and_past_question(self): @@ -580,10 +578,9 @@ in the future is not: The detail view of a question with a pub_date in the future should return a 404 not found. """ - future_question = create_question(question_text='Future question.', - days=5) - response = self.client.get(reverse('polls:detail', - args=(future_question.id,))) + future_question = create_question(question_text='Future question.', days=5) + url = reverse('polls:detail', args=(future_question.id,)) + response = self.client.get(url) self.assertEqual(response.status_code, 404) def test_detail_view_with_a_past_question(self): @@ -591,13 +588,10 @@ in the future is not: The detail view of a question with a pub_date in the past should display the question's text. """ - past_question = create_question(question_text='Past Question.', - days=-5) - response = self.client.get(reverse('polls:detail', - args=(past_question.id,))) - self.assertContains(response, past_question.question_text, - status_code=200) - + past_question = create_question(question_text='Past Question.', days=-5) + url = reverse('polls:detail', args=(past_question.id,)) + response = self.client.get(url) + self.assertContains(response, past_question.question_text) Ideas for more tests -------------------- diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt index 66b116ad35..d5afca2c88 100644 --- a/docs/ref/contrib/admin/index.txt +++ b/docs/ref/contrib/admin/index.txt @@ -617,10 +617,12 @@ subclass:: color_code = models.CharField(max_length=6) def colored_name(self): - return format_html('{} {}', - self.color_code, - self.first_name, - self.last_name) + return format_html( + '{} {}', + self.color_code, + self.first_name, + self.last_name, + ) class PersonAdmin(admin.ModelAdmin): list_display = ('first_name', 'last_name', 'colored_name') @@ -706,9 +708,11 @@ subclass:: color_code = models.CharField(max_length=6) def colored_first_name(self): - return format_html('{}', - self.color_code, - self.first_name) + return format_html( + '{}', + self.color_code, + self.first_name, + ) colored_first_name.admin_order_field = 'first_name' @@ -912,13 +916,11 @@ subclass:: def lookups(self, request, model_admin): if request.user.is_superuser: - return super(AuthDecadeBornListFilter, - self).lookups(request, model_admin) + return super(AuthDecadeBornListFilter, self).lookups(request, model_admin) def queryset(self, request, queryset): if request.user.is_superuser: - return super(AuthDecadeBornListFilter, - self).queryset(request, queryset) + return super(AuthDecadeBornListFilter, self).queryset(request, queryset) Also as a convenience, the ``ModelAdmin`` object is passed to the ``lookups`` method, for example if you want to base the @@ -1274,8 +1276,8 @@ subclass:: class PersonAdmin(admin.ModelAdmin): def view_on_site(self, obj): - return 'https://example.com' + reverse('person-detail', - kwargs={'slug': obj.slug}) + url = reverse('person-detail', kwargs={'slug': obj.slug}) + return 'https://example.com' + url Custom template options ~~~~~~~~~~~~~~~~~~~~~~~ @@ -1885,8 +1887,9 @@ provided some extra mapping data that would not otherwise be available:: def change_view(self, request, object_id, form_url='', extra_context=None): extra_context = extra_context or {} extra_context['osm_data'] = self.get_osm_info() - return super(MyModelAdmin, self).change_view(request, object_id, - form_url, extra_context=extra_context) + return super(MyModelAdmin, self).change_view( + request, object_id, form_url, extra_context=extra_context, + ) These views return :class:`~django.template.response.TemplateResponse` instances which allow you to easily customize the response data before diff --git a/docs/ref/contrib/gis/db-api.txt b/docs/ref/contrib/gis/db-api.txt index 4403fff392..0b1f7d3d0b 100644 --- a/docs/ref/contrib/gis/db-api.txt +++ b/docs/ref/contrib/gis/db-api.txt @@ -122,7 +122,7 @@ raster models:: >>> from django.contrib.gis.gdal import GDALRaster >>> rast = GDALRaster({'width': 10, 'height': 10, 'name': 'Canyon', 'srid': 4326, - ... 'scale': [0.1, -0.1]'bands': [{"data": range(100)}]} + ... 'scale': [0.1, -0.1], 'bands': [{"data": range(100)}]}) >>> dem = Elevation(name='Canyon', rast=rast) >>> dem.save() @@ -131,7 +131,7 @@ Note that this equivalent to:: >>> dem = Elevation.objects.create( ... name='Canyon', ... rast={'width': 10, 'height': 10, 'name': 'Canyon', 'srid': 4326, - ... 'scale': [0.1, -0.1]'bands': [{"data": range(100)}]} + ... 'scale': [0.1, -0.1], 'bands': [{"data": range(100)}]}, ... ) .. _spatial-lookups-intro: diff --git a/docs/ref/contrib/gis/tutorial.txt b/docs/ref/contrib/gis/tutorial.txt index 8f597df9fb..5d753a327e 100644 --- a/docs/ref/contrib/gis/tutorial.txt +++ b/docs/ref/contrib/gis/tutorial.txt @@ -452,12 +452,15 @@ with the following code:: 'mpoly' : 'MULTIPOLYGON', } - world_shp = os.path.abspath(os.path.join(os.path.dirname(__file__), 'data', 'TM_WORLD_BORDERS-0.3.shp')) + world_shp = os.path.abspath( + os.path.join(os.path.dirname(__file__), 'data', 'TM_WORLD_BORDERS-0.3.shp'), + ) def run(verbose=True): - lm = LayerMapping(WorldBorder, world_shp, world_mapping, - transform=False, encoding='iso-8859-1') - + lm = LayerMapping( + WorldBorder, world_shp, world_mapping, + transform=False, encoding='iso-8859-1', + ) lm.save(strict=True, verbose=verbose) A few notes about what's going on: diff --git a/docs/ref/contrib/messages.txt b/docs/ref/contrib/messages.txt index 414cf21116..3343707d69 100644 --- a/docs/ref/contrib/messages.txt +++ b/docs/ref/contrib/messages.txt @@ -320,8 +320,7 @@ Adding extra message tags For more direct control over message tags, you can optionally provide a string containing extra tags to any of the add methods:: - messages.add_message(request, messages.INFO, 'Over 9000!', - extra_tags='dragonball') + messages.add_message(request, messages.INFO, 'Over 9000!', extra_tags='dragonball') messages.error(request, 'Email box full', extra_tags='email') Extra tags are added before the default tag for that level and are space @@ -336,8 +335,10 @@ if they don't want to, you may pass an additional keyword argument ``fail_silently=True`` to any of the ``add_message`` family of methods. For example:: - messages.add_message(request, messages.SUCCESS, 'Profile details updated.', - fail_silently=True) + messages.add_message( + request, messages.SUCCESS, 'Profile details updated.', + fail_silently=True, + ) messages.info(request, 'Hello world.', fail_silently=True) .. note:: diff --git a/docs/ref/contrib/sites.txt b/docs/ref/contrib/sites.txt index ec2c1bf2b2..557795b691 100644 --- a/docs/ref/contrib/sites.txt +++ b/docs/ref/contrib/sites.txt @@ -202,10 +202,14 @@ Here's an example of what the form-handling view looks like:: # ... current_site = get_current_site(request) - send_mail('Thanks for subscribing to %s alerts' % current_site.name, - 'Thanks for your subscription. We appreciate it.\n\n-The %s team.' % current_site.name, + send_mail( + 'Thanks for subscribing to %s alerts' % current_site.name, + 'Thanks for your subscription. We appreciate it.\n\n-The %s team.' % ( + current_site.name, + ), 'editor@%s' % current_site.domain, - [user.email]) + [user.email], + ) # ... diff --git a/docs/ref/forms/fields.txt b/docs/ref/forms/fields.txt index b81dbef61c..e6490d6ca6 100644 --- a/docs/ref/forms/fields.txt +++ b/docs/ref/forms/fields.txt @@ -1006,16 +1006,25 @@ Slightly complex built-in ``Field`` classes } # Or define a different message for each field. fields = ( - CharField(error_messages={'incomplete': 'Enter a country calling code.'}, - validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid country calling code.')]), - CharField(error_messages={'incomplete': 'Enter a phone number.'}, - validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid phone number.')]), - CharField(validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid extension.')], - required=False), + CharField( + error_messages={'incomplete': 'Enter a country calling code.'}, + validators=[ + RegexValidator(r'^[0-9]+$', 'Enter a valid country calling code.'), + ], + ), + CharField( + error_messages={'incomplete': 'Enter a phone number.'}, + validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid phone number.')], + ), + CharField( + validators=[RegexValidator(r'^[0-9]+$', 'Enter a valid extension.')], + required=False, + ), ) super(PhoneField, self).__init__( error_messages=error_messages, fields=fields, - require_all_fields=False, *args, **kwargs) + require_all_fields=False, *args, **kwargs + ) .. attribute:: MultiValueField.widget diff --git a/docs/ref/forms/widgets.txt b/docs/ref/forms/widgets.txt index 88ac06903c..071053307e 100644 --- a/docs/ref/forms/widgets.txt +++ b/docs/ref/forms/widgets.txt @@ -62,8 +62,11 @@ widget on the field. In the following example, the class SimpleForm(forms.Form): birth_year = forms.DateField(widget=forms.SelectDateWidget(years=BIRTH_YEAR_CHOICES)) - favorite_colors = forms.MultipleChoiceField(required=False, - widget=forms.CheckboxSelectMultiple, choices=FAVORITE_COLORS_CHOICES) + favorite_colors = forms.MultipleChoiceField( + required=False, + widget=forms.CheckboxSelectMultiple, + choices=FAVORITE_COLORS_CHOICES, + ) See the :ref:`built-in widgets` for more information about which widgets are available and which arguments they accept. diff --git a/docs/ref/models/expressions.txt b/docs/ref/models/expressions.txt index d29d8d05b4..6c767658af 100644 --- a/docs/ref/models/expressions.txt +++ b/docs/ref/models/expressions.txt @@ -375,7 +375,8 @@ SQL that is generated. Here's a brief example:: expression, distinct='DISTINCT ' if distinct else '', output_field=IntegerField(), - **extra) + **extra + ) ``Value()`` expressions diff --git a/docs/ref/models/fields.txt b/docs/ref/models/fields.txt index bafe881cd9..eb93bbab6e 100644 --- a/docs/ref/models/fields.txt +++ b/docs/ref/models/fields.txt @@ -112,9 +112,11 @@ define a suitably-named constant for each value:: (JUNIOR, 'Junior'), (SENIOR, 'Senior'), ) - year_in_school = models.CharField(max_length=2, - choices=YEAR_IN_SCHOOL_CHOICES, - default=FRESHMAN) + year_in_school = models.CharField( + max_length=2, + choices=YEAR_IN_SCHOOL_CHOICES, + default=FRESHMAN, + ) def is_upperclass(self): return self.year_in_school in (self.JUNIOR, self.SENIOR) diff --git a/docs/topics/auth/customizing.txt b/docs/topics/auth/customizing.txt index 8dd938e59a..d12fa6a212 100644 --- a/docs/topics/auth/customizing.txt +++ b/docs/topics/auth/customizing.txt @@ -971,9 +971,10 @@ authentication app:: Creates and saves a superuser with the given email, date of birth and password. """ - user = self.create_user(email, + user = self.create_user( + email, password=password, - date_of_birth=date_of_birth + date_of_birth=date_of_birth, ) user.is_admin = True user.save(using=self._db) diff --git a/docs/topics/auth/default.txt b/docs/topics/auth/default.txt index 7e6794a97b..12a5602b5a 100644 --- a/docs/topics/auth/default.txt +++ b/docs/topics/auth/default.txt @@ -249,9 +249,11 @@ in ``myapp``:: from django.contrib.contenttypes.models import ContentType content_type = ContentType.objects.get_for_model(BlogPost) - permission = Permission.objects.create(codename='can_publish', - name='Can Publish Posts', - content_type=content_type) + permission = Permission.objects.create( + codename='can_publish', + name='Can Publish Posts', + content_type=content_type, + ) The permission can then be assigned to a :class:`~django.contrib.auth.models.User` via its ``user_permissions`` diff --git a/docs/topics/db/queries.txt b/docs/topics/db/queries.txt index 57408ee224..b1f1f2f746 100644 --- a/docs/topics/db/queries.txt +++ b/docs/topics/db/queries.txt @@ -849,14 +849,16 @@ precede the definition of any keyword arguments. For example:: Poll.objects.get( Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)), - question__startswith='Who') + question__startswith='Who', + ) ... would be a valid query, equivalent to the previous example; but:: # INVALID QUERY Poll.objects.get( question__startswith='Who', - Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6))) + Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) + ) ... would not be valid. diff --git a/docs/topics/email.txt b/docs/topics/email.txt index e26bfb3535..2b880e0ba9 100644 --- a/docs/topics/email.txt +++ b/docs/topics/email.txt @@ -20,8 +20,13 @@ In two lines:: from django.core.mail import send_mail - send_mail('Subject here', 'Here is the message.', 'from@example.com', - ['to@example.com'], fail_silently=False) + send_mail( + 'Subject here', + 'Here is the message.', + 'from@example.com', + ['to@example.com'], + fail_silently=False, + ) Mail is sent using the SMTP host and port specified in the :setting:`EMAIL_HOST` and :setting:`EMAIL_PORT` settings. The @@ -149,8 +154,12 @@ Examples This sends a single email to john@example.com and jane@example.com, with them both appearing in the "To:":: - send_mail('Subject', 'Message.', 'from@example.com', - ['john@example.com', 'jane@example.com']) + send_mail( + 'Subject', + 'Message.', + 'from@example.com', + ['john@example.com', 'jane@example.com'], + ) This sends a message to john@example.com and jane@example.com, with them both receiving a separate email:: @@ -281,9 +290,15 @@ For example:: from django.core.mail import EmailMessage - email = EmailMessage('Hello', 'Body goes here', 'from@example.com', - ['to1@example.com', 'to2@example.com'], ['bcc@example.com'], - reply_to=['another@example.com'], headers={'Message-ID': 'foo'}) + email = EmailMessage( + 'Hello', + 'Body goes here', + 'from@example.com', + ['to1@example.com', 'to2@example.com'], + ['bcc@example.com'], + reply_to=['another@example.com'], + headers={'Message-ID': 'foo'}, + ) The class has the following methods: @@ -405,10 +420,14 @@ It can also be used as a context manager, which will automatically call from django.core import mail with mail.get_connection() as connection: - mail.EmailMessage(subject1, body1, from1, [to1], - connection=connection).send() - mail.EmailMessage(subject2, body2, from2, [to2], - connection=connection).send() + mail.EmailMessage( + subject1, body1, from1, [to1], + connection=connection, + ).send() + mail.EmailMessage( + subject2, body2, from2, [to2], + connection=connection, + ).send() Obtaining an instance of an email backend ----------------------------------------- @@ -592,15 +611,28 @@ manually open the connection, you can control when it is closed. For example:: connection.open() # Construct an email message that uses the connection - email1 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com', - ['to1@example.com'], connection=connection) + email1 = mail.EmailMessage( + 'Hello', + 'Body goes here', + 'from@example.com', + ['to1@example.com'], + connection=connection, + ) email1.send() # Send the email # Construct two more messages - email2 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com', - ['to2@example.com']) - email3 = mail.EmailMessage('Hello', 'Body goes here', 'from@example.com', - ['to3@example.com']) + email2 = mail.EmailMessage( + 'Hello', + 'Body goes here', + 'from@example.com', + ['to2@example.com'], + ) + email3 = mail.EmailMessage( + 'Hello', + 'Body goes here', + 'from@example.com', + ['to3@example.com'], + ) # Send the two emails in a single call - connection.send_messages([email2, email3]) diff --git a/docs/topics/forms/modelforms.txt b/docs/topics/forms/modelforms.txt index 146b7503d0..df6bd6bd38 100644 --- a/docs/topics/forms/modelforms.txt +++ b/docs/topics/forms/modelforms.txt @@ -195,8 +195,10 @@ we'll discuss in a moment.):: class AuthorForm(forms.Form): name = forms.CharField(max_length=100) - title = forms.CharField(max_length=3, - widget=forms.Select(choices=TITLE_CHOICES)) + title = forms.CharField( + max_length=3, + widget=forms.Select(choices=TITLE_CHOICES), + ) birth_date = forms.DateField(required=False) class BookForm(forms.Form): @@ -589,8 +591,12 @@ the field declaratively and setting its ``validators`` parameter:: For example, if the ``Article`` model looks like this:: class Article(models.Model): - headline = models.CharField(max_length=200, null=True, blank=True, - help_text="Use puns liberally") + headline = models.CharField( + max_length=200, + null=True, + blank=True, + help_text='Use puns liberally', + ) content = models.TextField() and you want to do some custom validation for ``headline``, while keeping @@ -598,8 +604,11 @@ the field declaratively and setting its ``validators`` parameter:: ``ArticleForm`` like this:: class ArticleForm(ModelForm): - headline = MyFormField(max_length=200, required=False, - help_text="Use puns liberally") + headline = MyFormField( + max_length=200, + required=False, + help_text='Use puns liberally', + ) class Meta: model = Article @@ -1022,8 +1031,10 @@ formset:: def manage_authors(request): AuthorFormSet = modelformset_factory(Author, fields=('name', 'title')) if request.method == "POST": - formset = AuthorFormSet(request.POST, request.FILES, - queryset=Author.objects.filter(name__startswith='O')) + formset = AuthorFormSet( + request.POST, request.FILES, + queryset=Author.objects.filter(name__startswith='O'), + ) if formset.is_valid(): formset.save() # Do something. diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt index af2da254fb..705de11b69 100644 --- a/docs/topics/http/shortcuts.txt +++ b/docs/topics/http/shortcuts.txt @@ -66,8 +66,9 @@ MIME type :mimetype:`application/xhtml+xml`:: def my_view(request): # View code here... - return render(request, 'myapp/index.html', {"foo": "bar"}, - content_type="application/xhtml+xml") + return render(request, 'myapp/index.html', { + 'foo': 'bar', + }, content_type='application/xhtml+xml') This example is equivalent to:: @@ -78,8 +79,7 @@ This example is equivalent to:: # View code here... t = loader.get_template('myapp/index.html') c = {'foo': 'bar'} - return HttpResponse(t.render(c, request), - content_type="application/xhtml+xml") + return HttpResponse(t.render(c, request), content_type='application/xhtml+xml') ``render_to_response()`` ======================== diff --git a/docs/topics/i18n/timezones.txt b/docs/topics/i18n/timezones.txt index 674edc1a19..7beffdea72 100644 --- a/docs/topics/i18n/timezones.txt +++ b/docs/topics/i18n/timezones.txt @@ -434,8 +434,9 @@ traceback by adding the following to your settings file:: import warnings warnings.filterwarnings( - 'error', r"DateTimeField .* received a naive datetime", - RuntimeWarning, r'django\.db\.models\.fields') + 'error', r"DateTimeField .* received a naive datetime", + RuntimeWarning, r'django\.db\.models\.fields', + ) Fixtures -------- diff --git a/docs/topics/i18n/translation.txt b/docs/topics/i18n/translation.txt index 3046d7ca3b..b1d1e8e3be 100644 --- a/docs/topics/i18n/translation.txt +++ b/docs/topics/i18n/translation.txt @@ -468,8 +468,10 @@ If the string contains exactly one unnamed placeholder, you can interpolate directly with the ``number`` argument:: class MyForm(forms.Form): - error_message = ungettext_lazy("You provided %d argument", - "You provided %d arguments") + error_message = ungettext_lazy( + "You provided %d argument", + "You provided %d arguments", + ) def clean(self): # ... @@ -1843,8 +1845,11 @@ If you need more flexibility, you could also add a new argument to your custom def add_arguments(self, parser): super(Command, self).add_arguments(parser) - parser.add_argument('--extra-keyword', dest='xgettext_keywords', - action='append') + parser.add_argument( + '--extra-keyword', + dest='xgettext_keywords', + action='append', + ) def handle(self, *args, **options): xgettext_keywords = options.pop('xgettext_keywords')