diff --git a/django/apps/registry.py b/django/apps/registry.py
index 3484d87aee..166e6adb97 100644
--- a/django/apps/registry.py
+++ b/django/apps/registry.py
@@ -297,8 +297,10 @@ class Apps(object):
available = set(available)
installed = set(app_config.name for app_config in self.get_app_configs())
if not available.issubset(installed):
- raise ValueError("Available apps isn't a subset of installed "
- "apps, extra apps: %s" % ", ".join(available - installed))
+ raise ValueError(
+ "Available apps isn't a subset of installed apps, extra apps: %s"
+ % ", ".join(available - installed)
+ )
self.stored_app_configs.append(self.app_configs)
self.app_configs = OrderedDict(
diff --git a/django/conf/__init__.py b/django/conf/__init__.py
index 76cac3e721..2f8fba14dd 100644
--- a/django/conf/__init__.py
+++ b/django/conf/__init__.py
@@ -108,8 +108,7 @@ class Settings(BaseSettings):
if (setting in tuple_settings and
not isinstance(setting_value, (list, tuple))):
- raise ImproperlyConfigured("The %s setting must be a list or a tuple. "
- "Please fix your settings." % setting)
+ raise ImproperlyConfigured("The %s setting must be a list or a tuple. " % setting)
setattr(self, setting, setting_value)
self._explicit_settings.add(setting)
diff --git a/django/contrib/admin/bin/compress.py b/django/contrib/admin/bin/compress.py
index d2a70ee812..4d5fbecabc 100644
--- a/django/contrib/admin/bin/compress.py
+++ b/django/contrib/admin/bin/compress.py
@@ -20,12 +20,12 @@ compress all jQuery-based files of the admin app. Requires the Google Closure
Compiler library and Java version 6 or later."""
parser = argparse.ArgumentParser(description=description)
parser.add_argument('file', nargs='*')
- parser.add_argument("-c", dest="compiler", default="~/bin/compiler.jar",
- help="path to Closure Compiler jar file")
- parser.add_argument("-v", "--verbose",
- action="store_true", dest="verbose")
- parser.add_argument("-q", "--quiet",
- action="store_false", dest="verbose")
+ parser.add_argument(
+ "-c", dest="compiler", default="~/bin/compiler.jar",
+ help="path to Closure Compiler jar file",
+ )
+ parser.add_argument("-v", "--verbose", action="store_true", dest="verbose")
+ parser.add_argument("-q", "--quiet", action="store_false", dest="verbose")
options = parser.parse_args()
compiler = closure_compiler if closure_compiler else os.path.expanduser(options.compiler)
@@ -38,8 +38,10 @@ Compiler library and Java version 6 or later."""
if not options.file:
if options.verbose:
sys.stdout.write("No filenames given; defaulting to admin scripts\n")
- files = [os.path.join(js_path, f) for f in [
- "actions.js", "collapse.js", "inlines.js", "prepopulate.js"]]
+ files = [
+ os.path.join(js_path, f) for f in
+ ["actions.js", "collapse.js", "inlines.js", "prepopulate.js"]
+ ]
else:
files = options.file
diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py
index d6fe53c220..bb9731bdfc 100644
--- a/django/contrib/admin/filters.py
+++ b/django/contrib/admin/filters.py
@@ -155,8 +155,7 @@ class FieldListFilter(ListFilter):
for test, list_filter_class in cls._field_list_filters:
if not test(field):
continue
- return list_filter_class(field, request, params,
- model, model_admin, field_path=field_path)
+ return list_filter_class(field, request, params, model, model_admin, field_path=field_path)
class RelatedFieldListFilter(FieldListFilter):
@@ -200,8 +199,10 @@ class RelatedFieldListFilter(FieldListFilter):
def choices(self, changelist):
yield {
'selected': self.lookup_val is None and not self.lookup_val_isnull,
- 'query_string': changelist.get_query_string({},
- [self.lookup_kwarg, self.lookup_kwarg_isnull]),
+ 'query_string': changelist.get_query_string(
+ {},
+ [self.lookup_kwarg, self.lookup_kwarg_isnull]
+ ),
'display': _('All'),
}
for pk_val, val in self.lookup_choices:
@@ -230,8 +231,7 @@ class BooleanFieldListFilter(FieldListFilter):
self.lookup_kwarg2 = '%s__isnull' % field_path
self.lookup_val = request.GET.get(self.lookup_kwarg)
self.lookup_val2 = request.GET.get(self.lookup_kwarg2)
- super(BooleanFieldListFilter, self).__init__(field,
- request, params, model, model_admin, field_path)
+ super(BooleanFieldListFilter, self).__init__(field, request, params, model, model_admin, field_path)
def expected_parameters(self):
return [self.lookup_kwarg, self.lookup_kwarg2]
@@ -257,8 +257,10 @@ class BooleanFieldListFilter(FieldListFilter):
'display': _('Unknown'),
}
-FieldListFilter.register(lambda f: isinstance(f,
- (models.BooleanField, models.NullBooleanField)), BooleanFieldListFilter)
+FieldListFilter.register(
+ lambda f: isinstance(f, (models.BooleanField, models.NullBooleanField)),
+ BooleanFieldListFilter
+)
class ChoicesFieldListFilter(FieldListFilter):
@@ -290,8 +292,7 @@ FieldListFilter.register(lambda f: bool(f.choices), ChoicesFieldListFilter)
class DateFieldListFilter(FieldListFilter):
def __init__(self, field, request, params, model, model_admin, field_path):
self.field_generic = '%s__' % field_path
- self.date_params = {k: v for k, v in params.items()
- if k.startswith(self.field_generic)}
+ self.date_params = {k: v for k, v in params.items() if k.startswith(self.field_generic)}
now = timezone.now()
# When time zone support is enabled, convert "now" to the user's time
@@ -387,8 +388,7 @@ class AllValuesFieldListFilter(FieldListFilter):
def choices(self, changelist):
yield {
'selected': self.lookup_val is None and self.lookup_val_isnull is None,
- 'query_string': changelist.get_query_string({},
- [self.lookup_kwarg, self.lookup_kwarg_isnull]),
+ 'query_string': changelist.get_query_string({}, [self.lookup_kwarg, self.lookup_kwarg_isnull]),
'display': _('All'),
}
include_none = False
diff --git a/django/contrib/admin/forms.py b/django/contrib/admin/forms.py
index 2e482b9c15..ed71d63e4c 100644
--- a/django/contrib/admin/forms.py
+++ b/django/contrib/admin/forms.py
@@ -10,9 +10,10 @@ class AdminAuthenticationForm(AuthenticationForm):
A custom authentication form used in the admin app.
"""
error_messages = {
- 'invalid_login': _("Please enter the correct %(username)s and password "
- "for a staff account. Note that both fields may be "
- "case-sensitive."),
+ 'invalid_login': _(
+ "Please enter the correct %(username)s and password for a staff "
+ "account. Note that both fields may be case-sensitive."
+ ),
}
required_css_class = 'required'
diff --git a/django/contrib/admin/helpers.py b/django/contrib/admin/helpers.py
index cc773e7256..a9db82ae78 100644
--- a/django/contrib/admin/helpers.py
+++ b/django/contrib/admin/helpers.py
@@ -25,8 +25,12 @@ ACTION_CHECKBOX_NAME = '_selected_action'
class ActionForm(forms.Form):
action = forms.ChoiceField(label=_('Action:'))
- select_across = forms.BooleanField(label='', required=False, initial=0,
- widget=forms.HiddenInput({'class': 'select-across'}))
+ select_across = forms.BooleanField(
+ label='',
+ required=False,
+ initial=0,
+ widget=forms.HiddenInput({'class': 'select-across'}),
+ )
checkbox = forms.CheckboxInput({'class': 'action-select'}, lambda value: False)
@@ -62,7 +66,7 @@ class AdminForm(object):
class Fieldset(object):
def __init__(self, form, name=None, readonly_fields=(), fields=(), classes=(),
- description=None, model_admin=None):
+ description=None, model_admin=None):
self.form = form
self.name, self.fields = name, fields
self.classes = ' '.join(classes)
@@ -73,9 +77,11 @@ class Fieldset(object):
def _media(self):
if 'collapse' in self.classes:
extra = '' if settings.DEBUG else '.min'
- js = ['vendor/jquery/jquery%s.js' % extra,
- 'jquery.init.js',
- 'collapse%s.js' % extra]
+ js = [
+ 'vendor/jquery/jquery%s.js' % extra,
+ 'jquery.init.js',
+ 'collapse%s.js' % extra,
+ ]
return forms.Media(js=['admin/js/%s' % url for url in js])
return forms.Media()
media = property(_media)
@@ -92,9 +98,10 @@ class Fieldline(object):
self.fields = [field]
else:
self.fields = field
- self.has_visible_field = not all(field in self.form.fields and
- self.form.fields[field].widget.is_hidden
- for field in self.fields)
+ self.has_visible_field = not all(
+ field in self.form.fields and self.form.fields[field].widget.is_hidden
+ for field in self.fields
+ )
self.model_admin = model_admin
if readonly_fields is None:
readonly_fields = ()
@@ -103,15 +110,15 @@ class Fieldline(object):
def __iter__(self):
for i, field in enumerate(self.fields):
if field in self.readonly_fields:
- yield AdminReadonlyField(self.form, field, is_first=(i == 0),
- model_admin=self.model_admin)
+ yield AdminReadonlyField(self.form, field, is_first=(i == 0), model_admin=self.model_admin)
else:
yield AdminField(self.form, field, is_first=(i == 0))
def errors(self):
return mark_safe(
- '\n'.join(self.form[f].errors.as_ul()
- for f in self.fields if f not in self.readonly_fields).strip('\n')
+ '\n'.join(
+ self.form[f].errors.as_ul() for f in self.fields if f not in self.readonly_fields
+ ).strip('\n')
)
@@ -135,8 +142,10 @@ class AdminField(object):
attrs = {'class': ' '.join(classes)} if classes else {}
# checkboxes should not have a label suffix as the checkbox appears
# to the left of the label.
- return self.field.label_tag(contents=mark_safe(contents), attrs=attrs,
- label_suffix='' if self.is_checkbox else None)
+ return self.field.label_tag(
+ contents=mark_safe(contents), attrs=attrs,
+ label_suffix='' if self.is_checkbox else None,
+ )
def errors(self):
return mark_safe(self.field.errors.as_ul())
@@ -225,7 +234,7 @@ class InlineAdminFormSet(object):
A wrapper around an inline formset for use in the admin system.
"""
def __init__(self, inline, formset, fieldsets, prepopulated_fields=None,
- readonly_fields=None, model_admin=None):
+ readonly_fields=None, model_admin=None):
self.opts = inline
self.formset = formset
self.fieldsets = fieldsets
@@ -241,16 +250,21 @@ class InlineAdminFormSet(object):
def __iter__(self):
for form, original in zip(self.formset.initial_forms, self.formset.get_queryset()):
view_on_site_url = self.opts.get_view_on_site_url(original)
- yield InlineAdminForm(self.formset, form, self.fieldsets,
- self.prepopulated_fields, original, self.readonly_fields,
- model_admin=self.opts, view_on_site_url=view_on_site_url)
+ yield InlineAdminForm(
+ self.formset, form, self.fieldsets, self.prepopulated_fields,
+ original, self.readonly_fields, model_admin=self.opts,
+ view_on_site_url=view_on_site_url,
+ )
for form in self.formset.extra_forms:
- yield InlineAdminForm(self.formset, form, self.fieldsets,
- self.prepopulated_fields, None, self.readonly_fields,
- model_admin=self.opts)
- yield InlineAdminForm(self.formset, self.formset.empty_form,
+ yield InlineAdminForm(
+ self.formset, form, self.fieldsets, self.prepopulated_fields,
+ None, self.readonly_fields, model_admin=self.opts,
+ )
+ yield InlineAdminForm(
+ self.formset, self.formset.empty_form,
self.fieldsets, self.prepopulated_fields, None,
- self.readonly_fields, model_admin=self.opts)
+ self.readonly_fields, model_admin=self.opts,
+ )
def fields(self):
fk = getattr(self.formset, "fk", None)
@@ -260,9 +274,7 @@ class InlineAdminFormSet(object):
if field_name in self.readonly_fields:
yield {
'label': label_for_field(field_name, self.opts.model, self.opts),
- 'widget': {
- 'is_hidden': False
- },
+ 'widget': {'is_hidden': False},
'required': False,
'help_text': help_text_for_field(field_name, self.opts.model),
}
@@ -304,19 +316,20 @@ class InlineAdminForm(AdminForm):
A wrapper around an inline form for use in the admin system.
"""
def __init__(self, formset, form, fieldsets, prepopulated_fields, original,
- readonly_fields=None, model_admin=None, view_on_site_url=None):
+ readonly_fields=None, model_admin=None, view_on_site_url=None):
self.formset = formset
self.model_admin = model_admin
self.original = original
self.show_url = original and view_on_site_url is not None
self.absolute_url = view_on_site_url
- super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields,
- readonly_fields, model_admin)
+ super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields, readonly_fields, model_admin)
def __iter__(self):
for name, options in self.fieldsets:
- yield InlineFieldset(self.formset, self.form, name,
- self.readonly_fields, model_admin=self.model_admin, **options)
+ yield InlineFieldset(
+ self.formset, self.form, name, self.readonly_fields,
+ model_admin=self.model_admin, **options
+ )
def needs_explicit_pk_field(self):
# Auto fields are editable (oddly), so need to check for auto or non-editable pk
@@ -358,8 +371,7 @@ class InlineFieldset(Fieldset):
for field in self.fields:
if fk and fk.name == field:
continue
- yield Fieldline(self.form, field, self.readonly_fields,
- model_admin=self.model_admin)
+ yield Fieldline(self.form, field, self.readonly_fields, model_admin=self.model_admin)
class AdminErrorList(forms.utils.ErrorList):
diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
index 764bc22b44..9bc736ed4e 100644
--- a/django/contrib/admin/options.py
+++ b/django/contrib/admin/options.py
@@ -214,8 +214,7 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
"""
db = kwargs.get('using')
if db_field.name in self.raw_id_fields:
- kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.remote_field,
- self.admin_site, using=db)
+ kwargs['widget'] = widgets.ForeignKeyRawIdWidget(db_field.remote_field, self.admin_site, using=db)
elif db_field.name in self.radio_fields:
kwargs['widget'] = widgets.AdminRadioSelect(attrs={
'class': get_ul_class(self.radio_fields[db_field.name]),
@@ -240,8 +239,7 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
db = kwargs.get('using')
if db_field.name in self.raw_id_fields:
- kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.remote_field,
- self.admin_site, using=db)
+ kwargs['widget'] = widgets.ManyToManyRawIdWidget(db_field.remote_field, self.admin_site, using=db)
elif db_field.name in (list(self.filter_vertical) + list(self.filter_horizontal)):
kwargs['widget'] = widgets.FilteredSelectMultiple(
db_field.verbose_name,
@@ -639,8 +637,10 @@ class ModelAdmin(BaseModelAdmin):
try:
return modelform_factory(self.model, **defaults)
except FieldError as e:
- raise FieldError('%s. Check fields/fieldsets/exclude attributes of class %s.'
- % (e, self.__class__.__name__))
+ raise FieldError(
+ '%s. Check fields/fieldsets/exclude attributes of class %s.'
+ % (e, self.__class__.__name__)
+ )
def get_changelist(self, request, **kwargs):
"""
@@ -686,9 +686,10 @@ class ModelAdmin(BaseModelAdmin):
"formfield_callback": partial(self.formfield_for_dbfield, request=request),
}
defaults.update(kwargs)
- return modelformset_factory(self.model,
- self.get_changelist_form(request), extra=0,
- fields=self.list_editable, **defaults)
+ return modelformset_factory(
+ self.model, self.get_changelist_form(request), extra=0,
+ fields=self.list_editable, **defaults
+ )
def get_formsets_with_inlines(self, request, obj=None):
"""
@@ -974,7 +975,6 @@ class ModelAdmin(BaseModelAdmin):
compatibility. For convenience, it accepts the `level` argument as
a string rather than the usual level number.
"""
-
if not isinstance(level, int):
# attempt to get the level if passed a string
try:
@@ -982,11 +982,12 @@ class ModelAdmin(BaseModelAdmin):
except AttributeError:
levels = messages.constants.DEFAULT_TAGS.values()
levels_repr = ', '.join('`%s`' % l for l in levels)
- raise ValueError('Bad message level string: `%s`. '
- 'Possible values are: %s' % (level, levels_repr))
+ raise ValueError(
+ 'Bad message level string: `%s`. Possible values are: %s'
+ % (level, levels_repr)
+ )
- messages.add_message(request, level, message, extra_tags=extra_tags,
- fail_silently=fail_silently)
+ messages.add_message(request, level, message, extra_tags=extra_tags, fail_silently=fail_silently)
def save_form(self, request, form, change):
"""
@@ -1323,23 +1324,26 @@ class ModelAdmin(BaseModelAdmin):
'popup_response_data': popup_response_data,
})
- self.message_user(request,
+ self.message_user(
+ request,
_('The %(name)s "%(obj)s" was deleted successfully.') % {
'name': force_text(opts.verbose_name),
'obj': force_text(obj_display),
- }, messages.SUCCESS)
+ },
+ messages.SUCCESS,
+ )
if self.has_change_permission(request, None):
- post_url = reverse('admin:%s_%s_changelist' %
- (opts.app_label, opts.model_name),
- current_app=self.admin_site.name)
+ post_url = reverse(
+ 'admin:%s_%s_changelist' % (opts.app_label, opts.model_name),
+ current_app=self.admin_site.name,
+ )
preserved_filters = self.get_preserved_filters(request)
post_url = add_preserved_filters(
{'preserved_filters': preserved_filters, 'opts': opts}, post_url
)
else:
- post_url = reverse('admin:index',
- current_app=self.admin_site.name)
+ post_url = reverse('admin:index', current_app=self.admin_site.name)
return HttpResponseRedirect(post_url)
def render_delete_form(self, request, context):
@@ -1353,22 +1357,26 @@ class ModelAdmin(BaseModelAdmin):
media=self.media,
)
- return TemplateResponse(request,
+ return TemplateResponse(
+ request,
self.delete_confirmation_template or [
"admin/{}/{}/delete_confirmation.html".format(app_label, opts.model_name),
"admin/{}/delete_confirmation.html".format(app_label),
- "admin/delete_confirmation.html"
- ], context)
+ "admin/delete_confirmation.html",
+ ],
+ context,
+ )
- def get_inline_formsets(self, request, formsets, inline_instances,
- obj=None):
+ def get_inline_formsets(self, request, formsets, inline_instances, obj=None):
inline_admin_formsets = []
for inline, formset in zip(inline_instances, formsets):
fieldsets = list(inline.get_fieldsets(request, obj))
readonly = list(inline.get_readonly_fields(request, obj))
prepopulated = dict(inline.get_prepopulated_fields(request, obj))
- inline_admin_formset = helpers.InlineAdminFormSet(inline, formset,
- fieldsets, prepopulated, readonly, model_admin=self)
+ inline_admin_formset = helpers.InlineAdminFormSet(
+ inline, formset, fieldsets, prepopulated, readonly,
+ model_admin=self,
+ )
inline_admin_formsets.append(inline_admin_formset)
return inline_admin_formsets
@@ -1462,7 +1470,8 @@ class ModelAdmin(BaseModelAdmin):
for inline_formset in inline_formsets:
media = media + inline_formset.media
- context = dict(self.admin_site.each_context(request),
+ context = dict(
+ self.admin_site.each_context(request),
title=(_('Add %s') if add else _('Change %s')) % force_text(opts.verbose_name),
adminform=adminForm,
object_id=object_id,
@@ -1519,11 +1528,12 @@ class ModelAdmin(BaseModelAdmin):
ChangeList = self.get_changelist(request)
try:
- cl = ChangeList(request, self.model, list_display,
+ cl = ChangeList(
+ request, self.model, list_display,
list_display_links, list_filter, self.date_hierarchy,
search_fields, list_select_related, self.list_per_page,
- self.list_max_show_all, self.list_editable, self)
-
+ self.list_max_show_all, self.list_editable, self,
+ )
except IncorrectLookupParameters:
# Wacky lookup parameters were given, so redirect to the main
# changelist page, without parameters, and pass an 'invalid=1'
@@ -1596,11 +1606,15 @@ class ModelAdmin(BaseModelAdmin):
name = force_text(opts.verbose_name)
else:
name = force_text(opts.verbose_name_plural)
- msg = ungettext("%(count)s %(name)s was changed successfully.",
- "%(count)s %(name)s were changed successfully.",
- changecount) % {'count': changecount,
- 'name': name,
- 'obj': force_text(obj)}
+ msg = ungettext(
+ "%(count)s %(name)s was changed successfully.",
+ "%(count)s %(name)s were changed successfully.",
+ changecount
+ ) % {
+ 'count': changecount,
+ 'name': name,
+ 'obj': force_text(obj),
+ }
self.message_user(request, msg, messages.SUCCESS)
return HttpResponseRedirect(request.get_full_path())
@@ -1623,8 +1637,11 @@ class ModelAdmin(BaseModelAdmin):
else:
action_form = None
- selection_note_all = ungettext('%(total_count)s selected',
- 'All %(total_count)s selected', cl.result_count)
+ selection_note_all = ungettext(
+ '%(total_count)s selected',
+ 'All %(total_count)s selected',
+ cl.result_count
+ )
context = dict(
self.admin_site.each_context(request),
@@ -1744,7 +1761,8 @@ class ModelAdmin(BaseModelAdmin):
content_type=get_content_type_for_model(model)
).select_related().order_by('action_time')
- context = dict(self.admin_site.each_context(request),
+ context = dict(
+ self.admin_site.each_context(request),
title=_('Change history: %s') % force_text(obj),
action_list=action_list,
module_name=capfirst(force_text(opts.verbose_name_plural)),
diff --git a/django/contrib/admin/sites.py b/django/contrib/admin/sites.py
index ba9cbcc135..d867aacbc1 100644
--- a/django/contrib/admin/sites.py
+++ b/django/contrib/admin/sites.py
@@ -84,8 +84,9 @@ class AdminSite(object):
model_or_iterable = [model_or_iterable]
for model in model_or_iterable:
if model._meta.abstract:
- raise ImproperlyConfigured('The model %s is abstract, so it '
- 'cannot be registered with admin.' % model.__name__)
+ raise ImproperlyConfigured(
+ 'The model %s is abstract, so it cannot be registered with admin.' % model.__name__
+ )
if model in self._registry:
raise AlreadyRegistered('The model %s is already registered' % model.__name__)
@@ -362,7 +363,8 @@ class AdminSite(object):
# it cannot import models from other applications at the module level,
# and django.contrib.admin.forms eventually imports User.
from django.contrib.admin.forms import AdminAuthenticationForm
- context = dict(self.each_context(request),
+ context = dict(
+ self.each_context(request),
title=_('Log in'),
app_path=request.get_full_path(),
)
@@ -479,8 +481,7 @@ class AdminSite(object):
request.current_app = self.name
- return TemplateResponse(request, self.index_template or
- 'admin/index.html', context)
+ return TemplateResponse(request, self.index_template or 'admin/index.html', context)
def app_index(self, request, app_label, extra_context=None):
app_dict = self._build_app_dict(request, app_label)
@@ -489,7 +490,8 @@ class AdminSite(object):
# Sort the models alphabetically within each app.
app_dict['models'].sort(key=lambda x: x['name'])
app_name = apps.get_app_config(app_label).verbose_name
- context = dict(self.each_context(request),
+ context = dict(
+ self.each_context(request),
title=_('%(app)s administration') % {'app': app_name},
app_list=[app_dict],
app_label=app_label,
diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
index 9e6db8e53b..081488efb5 100644
--- a/django/contrib/admin/views/main.py
+++ b/django/contrib/admin/views/main.py
@@ -36,8 +36,8 @@ IGNORED_PARAMS = (
class ChangeList(object):
def __init__(self, request, model, list_display, list_display_links,
- list_filter, date_hierarchy, search_fields, list_select_related,
- list_per_page, list_max_show_all, list_editable, model_admin):
+ list_filter, date_hierarchy, search_fields, list_select_related,
+ list_per_page, list_max_show_all, list_editable, model_admin):
self.model = model
self.opts = model._meta
self.lookup_opts = self.opts
@@ -111,8 +111,7 @@ class ChangeList(object):
for list_filter in self.list_filter:
if callable(list_filter):
# This is simply a custom list filter class.
- spec = list_filter(request, lookup_params,
- self.model, self.model_admin)
+ spec = list_filter(request, lookup_params, self.model, self.model_admin)
else:
field_path = None
if isinstance(list_filter, (tuple, list)):
@@ -126,12 +125,12 @@ class ChangeList(object):
if not isinstance(field, models.Field):
field_path = field
field = get_fields_from_path(self.model, field_path)[-1]
- spec = field_list_filter_class(field, request, lookup_params,
- self.model, self.model_admin, field_path=field_path)
+ spec = field_list_filter_class(
+ field, request, lookup_params,
+ self.model, self.model_admin, field_path=field_path
+ )
# Check if we need to use distinct()
- use_distinct = (use_distinct or
- lookup_needs_distinct(self.lookup_opts,
- field_path))
+ use_distinct = use_distinct or lookup_needs_distinct(self.lookup_opts, field_path)
if spec and spec.has_output():
filter_specs.append(spec)
@@ -144,8 +143,7 @@ class ChangeList(object):
try:
for key, value in lookup_params.items():
lookup_params[key] = prepare_lookup_value(key, value)
- use_distinct = (use_distinct or
- lookup_needs_distinct(self.lookup_opts, key))
+ use_distinct = use_distinct or lookup_needs_distinct(self.lookup_opts, key)
return filter_specs, bool(filter_specs), lookup_params, use_distinct
except FieldDoesNotExist as e:
six.reraise(IncorrectLookupParameters, IncorrectLookupParameters(e), sys.exc_info()[2])
@@ -345,8 +343,7 @@ class ChangeList(object):
qs = qs.order_by(*ordering)
# Apply search results
- qs, search_use_distinct = self.model_admin.get_search_results(
- request, qs, self.query)
+ qs, search_use_distinct = self.model_admin.get_search_results(request, qs, self.query)
# Remove duplicates from results, if necessary
if filters_use_distinct | search_use_distinct:
diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py
index 2103788de9..41239ee9a1 100644
--- a/django/contrib/admin/widgets.py
+++ b/django/contrib/admin/widgets.py
@@ -106,10 +106,12 @@ class AdminRadioSelect(forms.RadioSelect):
class AdminFileWidget(forms.ClearableFileInput):
- template_with_initial = ('
%s
'
- % forms.ClearableFileInput.template_with_initial)
- template_with_clear = ('%s'
- % forms.ClearableFileInput.template_with_clear)
+ template_with_initial = (
+ '%s
' % forms.ClearableFileInput.template_with_initial
+ )
+ template_with_clear = (
+ '%s' % forms.ClearableFileInput.template_with_clear
+ )
def url_params_from_lookup_dict(lookups):
@@ -170,8 +172,10 @@ class ForeignKeyRawIdWidget(forms.TextInput):
attrs['class'] = 'vForeignKeyRawIdAdminField' # The JavaScript code looks for this hook.
# TODO: "lookup_id_" is hard-coded here. This should instead use
# the correct API to determine the ID dynamically.
- extra.append('' %
- (related_url, url, name, _('Lookup')))
+ extra.append(
+ ''
+ % (related_url, url, name, _('Lookup'))
+ )
output = [super(ForeignKeyRawIdWidget, self).render(name, value, attrs)] + extra
if value:
output.append(self.label_for_value(value))
diff --git a/django/contrib/admindocs/utils.py b/django/contrib/admindocs/utils.py
index ecc7eafc72..e532079b62 100644
--- a/django/contrib/admindocs/utils.py
+++ b/django/contrib/admindocs/utils.py
@@ -82,9 +82,11 @@ def parse_rst(text, default_reference_context, thing_being_parsed=None):
.. default-role::
"""
- parts = docutils.core.publish_parts(source % text,
- source_path=thing_being_parsed, destination_path=None,
- writer_name='html', settings_overrides=overrides)
+ parts = docutils.core.publish_parts(
+ source % text,
+ source_path=thing_being_parsed, destination_path=None,
+ writer_name='html', settings_overrides=overrides,
+ )
return mark_safe(parts['fragment'])
#
diff --git a/django/contrib/auth/__init__.py b/django/contrib/auth/__init__.py
index 71faae6de6..734c03731a 100644
--- a/django/contrib/auth/__init__.py
+++ b/django/contrib/auth/__init__.py
@@ -82,8 +82,7 @@ def authenticate(**credentials):
return user
# The credentials supplied are invalid to all backends, fire signal
- user_login_failed.send(sender=__name__,
- credentials=_clean_credentials(credentials))
+ user_login_failed.send(sender=__name__, credentials=_clean_credentials(credentials))
def login(request, user, backend=None):
diff --git a/django/contrib/auth/admin.py b/django/contrib/auth/admin.py
index e14ea24976..fe9ccf6ff6 100644
--- a/django/contrib/auth/admin.py
+++ b/django/contrib/auth/admin.py
@@ -183,10 +183,12 @@ class UserAdmin(admin.ModelAdmin):
request.current_app = self.admin_site.name
- return TemplateResponse(request,
+ return TemplateResponse(
+ request,
self.change_user_password_template or
'admin/auth/user/change_password.html',
- context)
+ context,
+ )
def response_add(self, request, obj, post_url_continue=None):
"""
diff --git a/django/contrib/auth/apps.py b/django/contrib/auth/apps.py
index 79c44e78f2..d5590158cf 100644
--- a/django/contrib/auth/apps.py
+++ b/django/contrib/auth/apps.py
@@ -12,7 +12,9 @@ class AuthConfig(AppConfig):
verbose_name = _("Authentication and Authorization")
def ready(self):
- post_migrate.connect(create_permissions,
- dispatch_uid="django.contrib.auth.management.create_permissions")
+ post_migrate.connect(
+ create_permissions,
+ dispatch_uid="django.contrib.auth.management.create_permissions"
+ )
checks.register(check_user_model, checks.Tags.models)
checks.register(check_models_permissions, checks.Tags.models)
diff --git a/django/contrib/auth/forms.py b/django/contrib/auth/forms.py
index 171fa1fb41..692cdb5dab 100644
--- a/django/contrib/auth/forms.py
+++ b/django/contrib/auth/forms.py
@@ -33,13 +33,13 @@ class ReadOnlyPasswordHashWidget(forms.Widget):
hasher = identify_hasher(encoded)
except ValueError:
summary = mark_safe("%s" % ugettext(
- "Invalid password format or unknown hashing algorithm."))
+ "Invalid password format or unknown hashing algorithm."
+ ))
else:
- summary = format_html_join('',
- "{}: {} ",
- ((ugettext(key), value)
- for key, value in hasher.safe_summary(encoded).items())
- )
+ summary = format_html_join(
+ '', '{}: {} ',
+ ((ugettext(key), value) for key, value in hasher.safe_summary(encoded).items())
+ )
return format_html("{}
", flatatt(final_attrs), summary)
@@ -68,13 +68,17 @@ class UserCreationForm(forms.ModelForm):
error_messages = {
'password_mismatch': _("The two password fields didn't match."),
}
- password1 = forms.CharField(label=_("Password"),
+ password1 = forms.CharField(
+ label=_("Password"),
strip=False,
- widget=forms.PasswordInput)
- password2 = forms.CharField(label=_("Password confirmation"),
+ widget=forms.PasswordInput,
+ )
+ password2 = forms.CharField(
+ label=_("Password confirmation"),
widget=forms.PasswordInput,
strip=False,
- help_text=_("Enter the same password as before, for verification."))
+ help_text=_("Enter the same password as before, for verification."),
+ )
class Meta:
model = User
@@ -105,10 +109,14 @@ class UserCreationForm(forms.ModelForm):
class UserChangeForm(forms.ModelForm):
- password = ReadOnlyPasswordHashField(label=_("Password"),
- help_text=_("Raw passwords are not stored, so there is no way to see "
- "this user's password, but you can change the password "
- "using this form."))
+ password = ReadOnlyPasswordHashField(
+ label=_("Password"),
+ help_text=_(
+ "Raw passwords are not stored, so there is no way to see this "
+ "user's password, but you can change the password using "
+ "this form."
+ ),
+ )
class Meta:
model = User
@@ -136,11 +144,17 @@ class AuthenticationForm(forms.Form):
max_length=254,
widget=forms.TextInput(attrs={'autofocus': ''}),
)
- password = forms.CharField(label=_("Password"), strip=False, widget=forms.PasswordInput)
+ password = forms.CharField(
+ label=_("Password"),
+ strip=False,
+ widget=forms.PasswordInput,
+ )
error_messages = {
- 'invalid_login': _("Please enter a correct %(username)s and password. "
- "Note that both fields may be case-sensitive."),
+ 'invalid_login': _(
+ "Please enter a correct %(username)s and password. Note that both "
+ "fields may be case-sensitive."
+ ),
'inactive': _("This account is inactive."),
}
@@ -164,8 +178,7 @@ class AuthenticationForm(forms.Form):
password = self.cleaned_data.get('password')
if username and password:
- self.user_cache = authenticate(username=username,
- password=password)
+ self.user_cache = authenticate(username=username, password=password)
if self.user_cache is None:
raise forms.ValidationError(
self.error_messages['invalid_login'],
@@ -263,9 +276,10 @@ class PasswordResetForm(forms.Form):
}
if extra_email_context is not None:
context.update(extra_email_context)
- self.send_mail(subject_template_name, email_template_name,
- context, from_email, user.email,
- html_email_template_name=html_email_template_name)
+ self.send_mail(
+ subject_template_name, email_template_name, context, from_email,
+ user.email, html_email_template_name=html_email_template_name,
+ )
class SetPasswordForm(forms.Form):
@@ -276,13 +290,17 @@ class SetPasswordForm(forms.Form):
error_messages = {
'password_mismatch': _("The two password fields didn't match."),
}
- new_password1 = forms.CharField(label=_("New password"),
- widget=forms.PasswordInput,
- strip=False,
- help_text=password_validation.password_validators_help_text_html())
- new_password2 = forms.CharField(label=_("New password confirmation"),
- strip=False,
- widget=forms.PasswordInput)
+ new_password1 = forms.CharField(
+ label=_("New password"),
+ widget=forms.PasswordInput,
+ strip=False,
+ help_text=password_validation.password_validators_help_text_html(),
+ )
+ new_password2 = forms.CharField(
+ label=_("New password confirmation"),
+ strip=False,
+ widget=forms.PasswordInput,
+ )
def __init__(self, user, *args, **kwargs):
self.user = user
@@ -314,8 +332,7 @@ class PasswordChangeForm(SetPasswordForm):
password.
"""
error_messages = dict(SetPasswordForm.error_messages, **{
- 'password_incorrect': _("Your old password was entered incorrectly. "
- "Please enter it again."),
+ 'password_incorrect': _("Your old password was entered incorrectly. Please enter it again."),
})
old_password = forms.CharField(
label=_("Old password"),
diff --git a/django/contrib/auth/management/__init__.py b/django/contrib/auth/management/__init__.py
index 3ab9458ad3..c05a728e49 100644
--- a/django/contrib/auth/management/__init__.py
+++ b/django/contrib/auth/management/__init__.py
@@ -30,8 +30,10 @@ def _get_builtin_permissions(opts):
"""
perms = []
for action in opts.default_permissions:
- perms.append((get_permission_codename(action, opts),
- 'Can %s %s' % (action, opts.verbose_name_raw)))
+ perms.append((
+ get_permission_codename(action, opts),
+ 'Can %s %s' % (action, opts.verbose_name_raw)
+ ))
return perms
@@ -125,9 +127,11 @@ def get_default_username(check_db=True):
default_username = get_system_username()
try:
- default_username = (unicodedata.normalize('NFKD', default_username)
- .encode('ascii', 'ignore').decode('ascii')
- .replace(' ', '').lower())
+ default_username = (
+ unicodedata.normalize('NFKD', default_username)
+ .encode('ascii', 'ignore').decode('ascii')
+ .replace(' ', '').lower()
+ )
except UnicodeDecodeError:
return ''
diff --git a/django/contrib/auth/management/commands/changepassword.py b/django/contrib/auth/management/commands/changepassword.py
index f6a73a8af0..173ea2ae27 100644
--- a/django/contrib/auth/management/commands/changepassword.py
+++ b/django/contrib/auth/management/commands/changepassword.py
@@ -22,11 +22,15 @@ class Command(BaseCommand):
return p
def add_arguments(self, parser):
- parser.add_argument('username', nargs='?',
- help='Username to change password for; by default, it\'s the current username.')
- parser.add_argument('--database', action='store', dest='database',
+ parser.add_argument(
+ 'username', nargs='?',
+ help='Username to change password for; by default, it\'s the current username.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database',
default=DEFAULT_DB_ALIAS,
- help='Specifies the database to use. Default is "default".')
+ help='Specifies the database to use. Default is "default".',
+ )
def handle(self, *args, **options):
if options['username']:
diff --git a/django/contrib/auth/management/commands/createsuperuser.py b/django/contrib/auth/management/commands/createsuperuser.py
index 30850fd4ac..76971b7b72 100644
--- a/django/contrib/auth/management/commands/createsuperuser.py
+++ b/django/contrib/auth/management/commands/createsuperuser.py
@@ -31,22 +31,32 @@ class Command(BaseCommand):
self.username_field = self.UserModel._meta.get_field(self.UserModel.USERNAME_FIELD)
def add_arguments(self, parser):
- parser.add_argument('--%s' % self.UserModel.USERNAME_FIELD,
+ parser.add_argument(
+ '--%s' % self.UserModel.USERNAME_FIELD,
dest=self.UserModel.USERNAME_FIELD, default=None,
- help='Specifies the login for the superuser.')
- parser.add_argument('--noinput', '--no-input',
+ help='Specifies the login for the superuser.',
+ )
+ parser.add_argument(
+ '--noinput', '--no-input',
action='store_false', dest='interactive', default=True,
- help=('Tells Django to NOT prompt the user for input of any kind. '
- 'You must use --%s with --noinput, along with an option for '
- 'any other required field. Superusers created with --noinput will '
- ' not be able to log in until they\'re given a valid password.' %
- self.UserModel.USERNAME_FIELD))
- parser.add_argument('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS,
- help='Specifies the database to use. Default is "default".')
+ help=(
+ 'Tells Django to NOT prompt the user for input of any kind. '
+ 'You must use --%s with --noinput, along with an option for '
+ 'any other required field. Superusers created with --noinput will '
+ 'not be able to log in until they\'re given a valid password.' %
+ self.UserModel.USERNAME_FIELD
+ ),
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database',
+ default=DEFAULT_DB_ALIAS,
+ help='Specifies the database to use. Default is "default".',
+ )
for field in self.UserModel.REQUIRED_FIELDS:
- parser.add_argument('--%s' % field, dest=field, default=None,
- help='Specifies the %s for the superuser.' % field)
+ parser.add_argument(
+ '--%s' % field, dest=field, default=None,
+ help='Specifies the %s for the superuser.' % field,
+ )
def execute(self, *args, **options):
self.stdin = options.get('stdin', sys.stdin) # Used for testing
@@ -67,8 +77,7 @@ class Command(BaseCommand):
if not options['interactive']:
try:
if not username:
- raise CommandError("You must use --%s with --noinput." %
- self.UserModel.USERNAME_FIELD)
+ raise CommandError("You must use --%s with --noinput." % self.UserModel.USERNAME_FIELD)
username = self.username_field.clean(username, None)
for field_name in self.UserModel.REQUIRED_FIELDS:
diff --git a/django/contrib/contenttypes/checks.py b/django/contrib/contenttypes/checks.py
index 3db58cfdbe..43a2fb7a7a 100644
--- a/django/contrib/contenttypes/checks.py
+++ b/django/contrib/contenttypes/checks.py
@@ -15,10 +15,10 @@ def check_generic_foreign_keys(app_configs=None, **kwargs):
else:
models = chain.from_iterable(app_config.get_models() for app_config in app_configs)
errors = []
- fields = (obj
- for model in models
- for obj in six.itervalues(vars(model))
- if isinstance(obj, GenericForeignKey))
+ fields = (
+ obj for model in models for obj in six.itervalues(vars(model))
+ if isinstance(obj, GenericForeignKey)
+ )
for field in fields:
errors.extend(field.check())
return errors
diff --git a/django/contrib/contenttypes/fields.py b/django/contrib/contenttypes/fields.py
index f9d5d7cfd2..3ff5ad7f0e 100644
--- a/django/contrib/contenttypes/fields.py
+++ b/django/contrib/contenttypes/fields.py
@@ -299,7 +299,7 @@ class GenericRelation(ForeignObject):
rel_class = GenericRel
def __init__(self, to, object_id_field='object_id', content_type_field='content_type',
- for_concrete_model=True, related_query_name=None, limit_choices_to=None, **kwargs):
+ for_concrete_model=True, related_query_name=None, limit_choices_to=None, **kwargs):
kwargs['rel'] = self.rel_class(
self, to,
related_query_name=related_query_name,
diff --git a/django/contrib/contenttypes/forms.py b/django/contrib/contenttypes/forms.py
index b862735ade..ff8a60114c 100644
--- a/django/contrib/contenttypes/forms.py
+++ b/django/contrib/contenttypes/forms.py
@@ -38,16 +38,11 @@ class BaseGenericInlineFormSet(BaseModelFormSet):
@classmethod
def get_default_prefix(cls):
opts = cls.model._meta
- return '-'.join(
- (opts.app_label, opts.model_name,
- cls.ct_field.name, cls.ct_fk_field.name)
- )
+ return '-'.join((opts.app_label, opts.model_name, cls.ct_field.name, cls.ct_fk_field.name))
def save_new(self, form, commit=True):
- setattr(form.instance, self.ct_field.get_attname(),
- ContentType.objects.get_for_model(self.instance).pk)
- setattr(form.instance, self.ct_fk_field.get_attname(),
- self.instance.pk)
+ setattr(form.instance, self.ct_field.get_attname(), ContentType.objects.get_for_model(self.instance).pk)
+ setattr(form.instance, self.ct_fk_field.get_attname(), self.instance.pk)
return form.save(commit=commit)
@@ -76,13 +71,12 @@ def generic_inlineformset_factory(model, form=ModelForm,
exclude.extend([ct_field.name, fk_field.name])
else:
exclude = [ct_field.name, fk_field.name]
- FormSet = modelformset_factory(model, form=form,
- formfield_callback=formfield_callback,
- formset=formset,
- extra=extra, can_delete=can_delete, can_order=can_order,
- fields=fields, exclude=exclude, max_num=max_num,
- validate_max=validate_max, min_num=min_num,
- validate_min=validate_min)
+ FormSet = modelformset_factory(
+ model, form=form, formfield_callback=formfield_callback,
+ formset=formset, extra=extra, can_delete=can_delete,
+ can_order=can_order, fields=fields, exclude=exclude, max_num=max_num,
+ validate_max=validate_max, min_num=min_num, validate_min=validate_min,
+ )
FormSet.ct_field = ct_field
FormSet.ct_fk_field = fk_field
FormSet.for_concrete_model = for_concrete_model
diff --git a/django/contrib/flatpages/models.py b/django/contrib/flatpages/models.py
index b3cad733aa..add1fdd879 100644
--- a/django/contrib/flatpages/models.py
+++ b/django/contrib/flatpages/models.py
@@ -22,9 +22,11 @@ class FlatPage(models.Model):
"the system will use 'flatpages/default.html'."
),
)
- registration_required = models.BooleanField(_('registration required'),
+ registration_required = models.BooleanField(
+ _('registration required'),
help_text=_("If this is checked, only logged-in users will be able to view the page."),
- default=False)
+ default=False,
+ )
sites = models.ManyToManyField(Site, verbose_name=_('sites'))
class Meta:
diff --git a/django/contrib/flatpages/views.py b/django/contrib/flatpages/views.py
index b8f65e4e55..10e13a73be 100644
--- a/django/contrib/flatpages/views.py
+++ b/django/contrib/flatpages/views.py
@@ -34,13 +34,11 @@ def flatpage(request, url):
url = '/' + url
site_id = get_current_site(request).id
try:
- f = get_object_or_404(FlatPage,
- url=url, sites=site_id)
+ f = get_object_or_404(FlatPage, url=url, sites=site_id)
except Http404:
if not url.endswith('/') and settings.APPEND_SLASH:
url += '/'
- f = get_object_or_404(FlatPage,
- url=url, sites=site_id)
+ f = get_object_or_404(FlatPage, url=url, sites=site_id)
return HttpResponsePermanentRedirect('%s/' % request.path)
else:
raise
diff --git a/django/contrib/gis/gdal/libgdal.py b/django/contrib/gis/gdal/libgdal.py
index b7fb97fb89..020234520e 100644
--- a/django/contrib/gis/gdal/libgdal.py
+++ b/django/contrib/gis/gdal/libgdal.py
@@ -26,8 +26,7 @@ elif os.name == 'nt':
lib_names = ['gdal111', 'gdal110', 'gdal19', 'gdal18', 'gdal17']
elif os.name == 'posix':
# *NIX library names.
- lib_names = ['gdal', 'GDAL', 'gdal1.11.0', 'gdal1.10.0', 'gdal1.9.0',
- 'gdal1.8.0', 'gdal1.7.0']
+ lib_names = ['gdal', 'GDAL', 'gdal1.11.0', 'gdal1.10.0', 'gdal1.9.0', 'gdal1.8.0', 'gdal1.7.0']
else:
raise GDALException('Unsupported OS "%s"' % os.name)
@@ -40,9 +39,10 @@ if lib_names:
break
if lib_path is None:
- raise GDALException('Could not find the GDAL library (tried "%s"). '
- 'Try setting GDAL_LIBRARY_PATH in your settings.' %
- '", "'.join(lib_names))
+ raise GDALException(
+ 'Could not find the GDAL library (tried "%s"). Try setting '
+ 'GDAL_LIBRARY_PATH in your settings.' % '", "'.join(lib_names)
+ )
# This loads the GDAL/OGR C library
lgdal = CDLL(lib_path)
diff --git a/django/contrib/gis/gdal/prototypes/ds.py b/django/contrib/gis/gdal/prototypes/ds.py
index 8fe54dbc8e..030d142c1c 100644
--- a/django/contrib/gis/gdal/prototypes/ds.py
+++ b/django/contrib/gis/gdal/prototypes/ds.py
@@ -42,7 +42,8 @@ reset_reading = void_output(lgdal.OGR_L_ResetReading, [c_void_p], errcheck=False
test_capability = int_output(lgdal.OGR_L_TestCapability, [c_void_p, c_char_p])
get_spatial_filter = geom_output(lgdal.OGR_L_GetSpatialFilter, [c_void_p])
set_spatial_filter = void_output(lgdal.OGR_L_SetSpatialFilter, [c_void_p, c_void_p], errcheck=False)
-set_spatial_filter_rect = void_output(lgdal.OGR_L_SetSpatialFilterRect,
+set_spatial_filter_rect = void_output(
+ lgdal.OGR_L_SetSpatialFilterRect,
[c_void_p, c_double, c_double, c_double, c_double], errcheck=False
)
@@ -61,7 +62,8 @@ get_feat_geom_ref = geom_output(lgdal.OGR_F_GetGeometryRef, [c_void_p])
get_feat_field_count = int_output(lgdal.OGR_F_GetFieldCount, [c_void_p])
get_feat_field_defn = voidptr_output(lgdal.OGR_F_GetFieldDefnRef, [c_void_p, c_int])
get_fid = int_output(lgdal.OGR_F_GetFID, [c_void_p])
-get_field_as_datetime = int_output(lgdal.OGR_F_GetFieldAsDateTime,
+get_field_as_datetime = int_output(
+ lgdal.OGR_F_GetFieldAsDateTime,
[c_void_p, c_int, c_int_p, c_int_p, c_int_p, c_int_p, c_int_p, c_int_p]
)
get_field_as_double = double_output(lgdal.OGR_F_GetFieldAsDouble, [c_void_p, c_int])
diff --git a/django/contrib/gis/gdal/prototypes/generation.py b/django/contrib/gis/gdal/prototypes/generation.py
index 965e158040..04b89be6a6 100644
--- a/django/contrib/gis/gdal/prototypes/generation.py
+++ b/django/contrib/gis/gdal/prototypes/generation.py
@@ -112,8 +112,7 @@ def string_output(func, argtypes, offset=-1, str_result=False, decoding=None):
# Dynamically defining our error-checking function with the
# given offset.
def _check_str(result, func, cargs):
- res = check_string(result, func, cargs,
- offset=offset, str_result=str_result)
+ res = check_string(result, func, cargs, offset=offset, str_result=str_result)
if res and decoding:
res = res.decode(decoding)
return res
diff --git a/django/contrib/gis/gdal/prototypes/geom.py b/django/contrib/gis/gdal/prototypes/geom.py
index 993c15c166..d1c43a47c2 100644
--- a/django/contrib/gis/gdal/prototypes/geom.py
+++ b/django/contrib/gis/gdal/prototypes/geom.py
@@ -82,7 +82,8 @@ get_geom_count = int_output(lgdal.OGR_G_GetGeometryCount, [c_void_p])
get_geom_name = const_string_output(lgdal.OGR_G_GetGeometryName, [c_void_p], decoding='ascii')
get_geom_type = int_output(lgdal.OGR_G_GetGeometryType, [c_void_p])
get_point_count = int_output(lgdal.OGR_G_GetPointCount, [c_void_p])
-get_point = void_output(lgdal.OGR_G_GetPoint,
+get_point = void_output(
+ lgdal.OGR_G_GetPoint,
[c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double)], errcheck=False
)
geom_close_rings = void_output(lgdal.OGR_G_CloseRings, [c_void_p], errcheck=False)
diff --git a/django/contrib/gis/gdal/prototypes/raster.py b/django/contrib/gis/gdal/prototypes/raster.py
index eb0818e342..1002344292 100644
--- a/django/contrib/gis/gdal/prototypes/raster.py
+++ b/django/contrib/gis/gdal/prototypes/raster.py
@@ -35,7 +35,8 @@ if GDAL_VERSION >= (2, 0):
else:
close_ds = void_output(std_call('GDALClose'), [c_void_p])
flush_ds = int_output(std_call('GDALFlushCache'), [c_void_p])
-copy_ds = voidptr_output(std_call('GDALCreateCopy'),
+copy_ds = voidptr_output(
+ std_call('GDALCreateCopy'),
[c_void_p, c_char_p, c_void_p, c_int, POINTER(c_char_p), c_void_p, c_void_p]
)
add_band_ds = void_output(std_call('GDALAddBand'), [c_void_p, c_int])
@@ -51,7 +52,8 @@ get_ds_geotransform = void_output(std_call('GDALGetGeoTransform'), [c_void_p, PO
set_ds_geotransform = void_output(std_call('GDALSetGeoTransform'), [c_void_p, POINTER(c_double * 6)])
# Raster Band Routines
-band_io = void_output(std_call('GDALRasterIO'),
+band_io = void_output(
+ std_call('GDALRasterIO'),
[c_void_p, c_int, c_int, c_int, c_int, c_int, c_void_p, c_int, c_int, c_int, c_int, c_int]
)
get_band_xsize = int_output(std_call('GDALGetRasterBandXSize'), [c_void_p])
@@ -74,15 +76,18 @@ get_band_statistics = void_output(
],
errcheck=False
)
-compute_band_statistics = void_output(std_call('GDALComputeRasterStatistics'),
+compute_band_statistics = void_output(
+ std_call('GDALComputeRasterStatistics'),
[c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double), POINTER(c_double), c_void_p, c_void_p],
errcheck=False
)
# Reprojection routine
-reproject_image = void_output(std_call('GDALReprojectImage'),
+reproject_image = void_output(
+ std_call('GDALReprojectImage'),
[c_void_p, c_char_p, c_void_p, c_char_p, c_int, c_double, c_double, c_void_p, c_void_p, c_void_p]
)
-auto_create_warped_vrt = voidptr_output(std_call('GDALAutoCreateWarpedVRT'),
+auto_create_warped_vrt = voidptr_output(
+ std_call('GDALAutoCreateWarpedVRT'),
[c_void_p, c_char_p, c_char_p, c_int, c_double, c_void_p]
)
diff --git a/django/contrib/gis/gdal/prototypes/srs.py b/django/contrib/gis/gdal/prototypes/srs.py
index 96b5130a2c..ccd24c5f96 100644
--- a/django/contrib/gis/gdal/prototypes/srs.py
+++ b/django/contrib/gis/gdal/prototypes/srs.py
@@ -56,7 +56,8 @@ angular_units = units_func(lgdal.OSRGetAngularUnits)
# For exporting to WKT, PROJ.4, "Pretty" WKT, and XML.
to_wkt = string_output(std_call('OSRExportToWkt'), [c_void_p, POINTER(c_char_p)], decoding='ascii')
to_proj = string_output(std_call('OSRExportToProj4'), [c_void_p, POINTER(c_char_p)], decoding='ascii')
-to_pretty_wkt = string_output(std_call('OSRExportToPrettyWkt'),
+to_pretty_wkt = string_output(
+ std_call('OSRExportToPrettyWkt'),
[c_void_p, POINTER(c_char_p), c_int], offset=-2, decoding='ascii'
)
diff --git a/django/contrib/gis/geos/polygon.py b/django/contrib/gis/geos/polygon.py
index 067730063f..434e27b4d9 100644
--- a/django/contrib/gis/geos/polygon.py
+++ b/django/contrib/gis/geos/polygon.py
@@ -176,6 +176,8 @@ class Polygon(GEOSGeometry):
@property
def kml(self):
"Returns the KML representation of this Polygon."
- inner_kml = ''.join("%s" % self[i + 1].kml
- for i in range(self.num_interior_rings))
+ inner_kml = ''.join(
+ "%s" % self[i + 1].kml
+ for i in range(self.num_interior_rings)
+ )
return "%s%s" % (self[0].kml, inner_kml)
diff --git a/django/contrib/gis/management/commands/ogrinspect.py b/django/contrib/gis/management/commands/ogrinspect.py
index f161c06e89..cb4ee96e4c 100644
--- a/django/contrib/gis/management/commands/ogrinspect.py
+++ b/django/contrib/gis/management/commands/ogrinspect.py
@@ -31,49 +31,70 @@ class ListOptionAction(argparse.Action):
class Command(BaseCommand):
- help = ('Inspects the given OGR-compatible data source (e.g., a shapefile) and outputs\n'
- 'a GeoDjango model with the given model name. For example:\n'
- ' ./manage.py ogrinspect zipcode.shp Zipcode')
+ help = (
+ 'Inspects the given OGR-compatible data source (e.g., a shapefile) and outputs\n'
+ 'a GeoDjango model with the given model name. For example:\n'
+ ' ./manage.py ogrinspect zipcode.shp Zipcode'
+ )
requires_system_checks = False
def add_arguments(self, parser):
parser.add_argument('data_source', help='Path to the data source.')
parser.add_argument('model_name', help='Name of the model to create.')
- parser.add_argument('--blank', dest='blank',
+ parser.add_argument(
+ '--blank', dest='blank',
action=ListOptionAction, default=False,
help='Use a comma separated list of OGR field names to add '
- 'the `blank=True` option to the field definition. Set to `true` '
- 'to apply to all applicable fields.')
- parser.add_argument('--decimal', dest='decimal',
+ 'the `blank=True` option to the field definition. Set to `true` '
+ 'to apply to all applicable fields.',
+ )
+ parser.add_argument(
+ '--decimal', dest='decimal',
action=ListOptionAction, default=False,
help='Use a comma separated list of OGR float fields to '
- 'generate `DecimalField` instead of the default '
- '`FloatField`. Set to `true` to apply to all OGR float fields.')
- parser.add_argument('--geom-name', dest='geom_name', default='geom',
- help='Specifies the model name for the Geometry Field '
- '(defaults to `geom`)')
- parser.add_argument('--layer', dest='layer_key',
+ 'generate `DecimalField` instead of the default '
+ '`FloatField`. Set to `true` to apply to all OGR float fields.',
+ )
+ parser.add_argument(
+ '--geom-name', dest='geom_name', default='geom',
+ help='Specifies the model name for the Geometry Field (defaults to `geom`)'
+ )
+ parser.add_argument(
+ '--layer', dest='layer_key',
action=LayerOptionAction, default=0,
help='The key for specifying which layer in the OGR data '
- 'source to use. Defaults to 0 (the first layer). May be '
- 'an integer or a string identifier for the layer.')
- parser.add_argument('--multi-geom', action='store_true',
+ 'source to use. Defaults to 0 (the first layer). May be '
+ 'an integer or a string identifier for the layer.',
+ )
+ parser.add_argument(
+ '--multi-geom', action='store_true',
dest='multi_geom', default=False,
- help='Treat the geometry in the data source as a geometry collection.')
- parser.add_argument('--name-field', dest='name_field',
- help='Specifies a field name to return for the `__unicode__`/`__str__` function.')
- parser.add_argument('--no-imports', action='store_false', dest='imports', default=True,
- help='Do not include `from django.contrib.gis.db import models` statement.')
- parser.add_argument('--null', dest='null', action=ListOptionAction, default=False,
+ help='Treat the geometry in the data source as a geometry collection.',
+ )
+ parser.add_argument(
+ '--name-field', dest='name_field',
+ help='Specifies a field name to return for the `__unicode__`/`__str__` function.',
+ )
+ parser.add_argument(
+ '--no-imports', action='store_false', dest='imports', default=True,
+ help='Do not include `from django.contrib.gis.db import models` statement.',
+ )
+ parser.add_argument(
+ '--null', dest='null', action=ListOptionAction, default=False,
help='Use a comma separated list of OGR field names to add '
- 'the `null=True` option to the field definition. Set to `true` '
- 'to apply to all applicable fields.')
- parser.add_argument('--srid', dest='srid',
+ 'the `null=True` option to the field definition. Set to `true` '
+ 'to apply to all applicable fields.',
+ )
+ parser.add_argument(
+ '--srid', dest='srid',
help='The SRID to use for the Geometry Field. If it can be '
- 'determined, the SRID of the data source is used.')
- parser.add_argument('--mapping', action='store_true', dest='mapping',
- help='Generate mapping dictionary for use with `LayerMapping`.')
+ 'determined, the SRID of the data source is used.',
+ )
+ parser.add_argument(
+ '--mapping', action='store_true', dest='mapping',
+ help='Generate mapping dictionary for use with `LayerMapping`.',
+ )
def handle(self, *args, **options):
data_source, model_name = options.pop('data_source'), options.pop('model_name')
@@ -97,10 +118,11 @@ class Command(BaseCommand):
if options['mapping']:
# Constructing the keyword arguments for `mapping`, and
# calling it on the data source.
- kwargs = {'geom_name': options['geom_name'],
- 'layer_key': options['layer_key'],
- 'multi_geom': options['multi_geom'],
- }
+ kwargs = {
+ 'geom_name': options['geom_name'],
+ 'layer_key': options['layer_key'],
+ 'multi_geom': options['multi_geom'],
+ }
mapping_dict = mapping(ds, **kwargs)
# This extra legwork is so that the dictionary definition comes
# out in the same order as the fields in the model definition.
diff --git a/django/contrib/gis/measure.py b/django/contrib/gis/measure.py
index 0981c7e09b..209bcb5369 100644
--- a/django/contrib/gis/measure.py
+++ b/django/contrib/gis/measure.py
@@ -78,8 +78,7 @@ class MeasureBase(object):
raise AttributeError('Unknown unit type: %s' % name)
def __repr__(self):
- return '%s(%s=%s)' % (pretty_name(self), self._default_unit,
- getattr(self, self._default_unit))
+ return '%s(%s=%s)' % (pretty_name(self), self._default_unit, getattr(self, self._default_unit))
def __str__(self):
return '%s %s' % (getattr(self, self._default_unit), self._default_unit)
@@ -102,8 +101,10 @@ class MeasureBase(object):
def __add__(self, other):
if isinstance(other, self.__class__):
- return self.__class__(default_unit=self._default_unit,
- **{self.STANDARD_UNIT: (self.standard + other.standard)})
+ return self.__class__(
+ default_unit=self._default_unit,
+ **{self.STANDARD_UNIT: (self.standard + other.standard)}
+ )
else:
raise TypeError('%(class)s must be added with %(class)s' % {"class": pretty_name(self)})
@@ -116,8 +117,10 @@ class MeasureBase(object):
def __sub__(self, other):
if isinstance(other, self.__class__):
- return self.__class__(default_unit=self._default_unit,
- **{self.STANDARD_UNIT: (self.standard - other.standard)})
+ return self.__class__(
+ default_unit=self._default_unit,
+ **{self.STANDARD_UNIT: (self.standard - other.standard)}
+ )
else:
raise TypeError('%(class)s must be subtracted from %(class)s' % {"class": pretty_name(self)})
@@ -130,8 +133,10 @@ class MeasureBase(object):
def __mul__(self, other):
if isinstance(other, NUMERIC_TYPES):
- return self.__class__(default_unit=self._default_unit,
- **{self.STANDARD_UNIT: (self.standard * other)})
+ return self.__class__(
+ default_unit=self._default_unit,
+ **{self.STANDARD_UNIT: (self.standard * other)}
+ )
else:
raise TypeError('%(class)s must be multiplied with number' % {"class": pretty_name(self)})
@@ -149,8 +154,10 @@ class MeasureBase(object):
if isinstance(other, self.__class__):
return self.standard / other.standard
if isinstance(other, NUMERIC_TYPES):
- return self.__class__(default_unit=self._default_unit,
- **{self.STANDARD_UNIT: (self.standard / other)})
+ return self.__class__(
+ default_unit=self._default_unit,
+ **{self.STANDARD_UNIT: (self.standard / other)}
+ )
else:
raise TypeError('%(class)s must be divided with number or %(class)s' % {"class": pretty_name(self)})
@@ -300,11 +307,15 @@ class Distance(MeasureBase):
def __mul__(self, other):
if isinstance(other, self.__class__):
- return Area(default_unit=AREA_PREFIX + self._default_unit,
- **{AREA_PREFIX + self.STANDARD_UNIT: (self.standard * other.standard)})
+ return Area(
+ default_unit=AREA_PREFIX + self._default_unit,
+ **{AREA_PREFIX + self.STANDARD_UNIT: (self.standard * other.standard)}
+ )
elif isinstance(other, NUMERIC_TYPES):
- return self.__class__(default_unit=self._default_unit,
- **{self.STANDARD_UNIT: (self.standard * other)})
+ return self.__class__(
+ default_unit=self._default_unit,
+ **{self.STANDARD_UNIT: (self.standard * other)}
+ )
else:
raise TypeError('%(distance)s must be multiplied with number or %(distance)s' % {
"distance": pretty_name(self.__class__),
@@ -320,8 +331,10 @@ class Area(MeasureBase):
def __truediv__(self, other):
if isinstance(other, NUMERIC_TYPES):
- return self.__class__(default_unit=self._default_unit,
- **{self.STANDARD_UNIT: (self.standard / other)})
+ return self.__class__(
+ default_unit=self._default_unit,
+ **{self.STANDARD_UNIT: (self.standard / other)}
+ )
else:
raise TypeError('%(class)s must be divided by a number' % {"class": pretty_name(self)})
diff --git a/django/contrib/gis/shortcuts.py b/django/contrib/gis/shortcuts.py
index 2df690c116..6e0caaee60 100644
--- a/django/contrib/gis/shortcuts.py
+++ b/django/contrib/gis/shortcuts.py
@@ -24,8 +24,10 @@ def compress_kml(kml):
def render_to_kml(*args, **kwargs):
"Renders the response as KML (using the correct MIME type)."
- return HttpResponse(loader.render_to_string(*args, **kwargs),
- content_type='application/vnd.google-earth.kml+xml')
+ return HttpResponse(
+ loader.render_to_string(*args, **kwargs),
+ content_type='application/vnd.google-earth.kml+xml',
+ )
def render_to_kmz(*args, **kwargs):
@@ -33,11 +35,12 @@ def render_to_kmz(*args, **kwargs):
Compresses the KML content and returns as KMZ (using the correct
MIME type).
"""
- return HttpResponse(compress_kml(loader.render_to_string(*args, **kwargs)),
- content_type='application/vnd.google-earth.kmz')
+ return HttpResponse(
+ compress_kml(loader.render_to_string(*args, **kwargs)),
+ content_type='application/vnd.google-earth.kmz',
+ )
def render_to_text(*args, **kwargs):
"Renders the response using the MIME type for plain text."
- return HttpResponse(loader.render_to_string(*args, **kwargs),
- content_type='text/plain')
+ return HttpResponse(loader.render_to_string(*args, **kwargs), content_type='text/plain')
diff --git a/django/contrib/messages/api.py b/django/contrib/messages/api.py
index 2566d71238..ceb6057f8d 100644
--- a/django/contrib/messages/api.py
+++ b/django/contrib/messages/api.py
@@ -24,8 +24,10 @@ def add_message(request, level, message, extra_tags='', fail_silently=False):
if hasattr(request, '_messages'):
return request._messages.add(level, message, extra_tags)
if not fail_silently:
- raise MessageFailure('You cannot add messages without installing '
- 'django.contrib.messages.middleware.MessageMiddleware')
+ raise MessageFailure(
+ 'You cannot add messages without installing '
+ 'django.contrib.messages.middleware.MessageMiddleware'
+ )
def get_messages(request):
diff --git a/django/contrib/messages/storage/cookie.py b/django/contrib/messages/storage/cookie.py
index eb927411a7..dec609dffa 100644
--- a/django/contrib/messages/storage/cookie.py
+++ b/django/contrib/messages/storage/cookie.py
@@ -82,13 +82,14 @@ class CookieStorage(BaseStorage):
store, or deletes the cookie.
"""
if encoded_data:
- response.set_cookie(self.cookie_name, encoded_data,
+ response.set_cookie(
+ self.cookie_name, encoded_data,
domain=settings.SESSION_COOKIE_DOMAIN,
secure=settings.SESSION_COOKIE_SECURE or None,
- httponly=settings.SESSION_COOKIE_HTTPONLY or None)
+ httponly=settings.SESSION_COOKIE_HTTPONLY or None,
+ )
else:
- response.delete_cookie(self.cookie_name,
- domain=settings.SESSION_COOKIE_DOMAIN)
+ response.delete_cookie(self.cookie_name, domain=settings.SESSION_COOKIE_DOMAIN)
def _store(self, messages, response, remove_oldest=True, *args, **kwargs):
"""
diff --git a/django/contrib/postgres/validators.py b/django/contrib/postgres/validators.py
index fd3169c285..5676da78b0 100644
--- a/django/contrib/postgres/validators.py
+++ b/django/contrib/postgres/validators.py
@@ -44,14 +44,16 @@ class KeysValidator(object):
keys = set(value.keys())
missing_keys = self.keys - keys
if missing_keys:
- raise ValidationError(self.messages['missing_keys'],
+ raise ValidationError(
+ self.messages['missing_keys'],
code='missing_keys',
params={'keys': ', '.join(missing_keys)},
)
if self.strict:
extra_keys = keys - self.keys
if extra_keys:
- raise ValidationError(self.messages['extra_keys'],
+ raise ValidationError(
+ self.messages['extra_keys'],
code='extra_keys',
params={'keys': ', '.join(extra_keys)},
)
diff --git a/django/contrib/redirects/models.py b/django/contrib/redirects/models.py
index 41260a54d1..a52a89d642 100644
--- a/django/contrib/redirects/models.py
+++ b/django/contrib/redirects/models.py
@@ -7,10 +7,18 @@ from django.utils.translation import ugettext_lazy as _
@python_2_unicode_compatible
class Redirect(models.Model):
site = models.ForeignKey(Site, models.CASCADE, verbose_name=_('site'))
- old_path = models.CharField(_('redirect from'), max_length=200, db_index=True,
- help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."))
- new_path = models.CharField(_('redirect to'), max_length=200, blank=True,
- help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."))
+ old_path = models.CharField(
+ _('redirect from'),
+ max_length=200,
+ db_index=True,
+ help_text=_("This should be an absolute path, excluding the domain name. Example: '/events/search/'."),
+ )
+ new_path = models.CharField(
+ _('redirect to'),
+ max_length=200,
+ blank=True,
+ help_text=_("This can be either an absolute path (as above) or a full URL starting with 'http://'."),
+ )
class Meta:
verbose_name = _('redirect')
diff --git a/django/contrib/sessions/backends/base.py b/django/contrib/sessions/backends/base.py
index bb9bcdac94..e18b3c753f 100644
--- a/django/contrib/sessions/backends/base.py
+++ b/django/contrib/sessions/backends/base.py
@@ -110,8 +110,7 @@ class SessionBase(object):
# ValueError, SuspiciousOperation, unpickling exceptions. If any of
# these happen, just return an empty dictionary (an empty session).
if isinstance(e, SuspiciousOperation):
- logger = logging.getLogger('django.security.%s' %
- e.__class__.__name__)
+ logger = logging.getLogger('django.security.%s' % e.__class__.__name__)
logger.warning(force_text(e))
return {}
diff --git a/django/contrib/sessions/backends/cached_db.py b/django/contrib/sessions/backends/cached_db.py
index fda3a76a2e..3f33e78c89 100644
--- a/django/contrib/sessions/backends/cached_db.py
+++ b/django/contrib/sessions/backends/cached_db.py
@@ -45,12 +45,10 @@ class SessionStore(DBStore):
expire_date__gt=timezone.now()
)
data = self.decode(s.session_data)
- self._cache.set(self.cache_key, data,
- self.get_expiry_age(expiry=s.expire_date))
+ self._cache.set(self.cache_key, data, self.get_expiry_age(expiry=s.expire_date))
except (self.model.DoesNotExist, SuspiciousOperation) as e:
if isinstance(e, SuspiciousOperation):
- logger = logging.getLogger('django.security.%s' %
- e.__class__.__name__)
+ logger = logging.getLogger('django.security.%s' % e.__class__.__name__)
logger.warning(force_text(e))
self._session_key = None
data = {}
diff --git a/django/contrib/sessions/backends/db.py b/django/contrib/sessions/backends/db.py
index 7ed6945431..95c2f0d225 100644
--- a/django/contrib/sessions/backends/db.py
+++ b/django/contrib/sessions/backends/db.py
@@ -37,8 +37,7 @@ class SessionStore(SessionBase):
return self.decode(s.session_data)
except (self.model.DoesNotExist, SuspiciousOperation) as e:
if isinstance(e, SuspiciousOperation):
- logger = logging.getLogger('django.security.%s' %
- e.__class__.__name__)
+ logger = logging.getLogger('django.security.%s' % e.__class__.__name__)
logger.warning(force_text(e))
self._session_key = None
return {}
diff --git a/django/contrib/sessions/backends/file.py b/django/contrib/sessions/backends/file.py
index 145eeb3f6d..594973ec91 100644
--- a/django/contrib/sessions/backends/file.py
+++ b/django/contrib/sessions/backends/file.py
@@ -92,8 +92,7 @@ class SessionStore(SessionBase):
session_data = self.decode(file_data)
except (EOFError, SuspiciousOperation) as e:
if isinstance(e, SuspiciousOperation):
- logger = logging.getLogger('django.security.%s' %
- e.__class__.__name__)
+ logger = logging.getLogger('django.security.%s' % e.__class__.__name__)
logger.warning(force_text(e))
self.create()
@@ -160,8 +159,7 @@ class SessionStore(SessionBase):
dir, prefix = os.path.split(session_file_name)
try:
- output_file_fd, output_file_name = tempfile.mkstemp(dir=dir,
- prefix=prefix + '_out_')
+ output_file_fd, output_file_name = tempfile.mkstemp(dir=dir, prefix=prefix + '_out_')
renamed = False
try:
try:
diff --git a/django/contrib/sessions/backends/signed_cookies.py b/django/contrib/sessions/backends/signed_cookies.py
index 8efdaa9c0c..f4c085fb59 100644
--- a/django/contrib/sessions/backends/signed_cookies.py
+++ b/django/contrib/sessions/backends/signed_cookies.py
@@ -12,11 +12,13 @@ class SessionStore(SessionBase):
raises BadSignature if signature fails.
"""
try:
- return signing.loads(self.session_key,
+ return signing.loads(
+ self.session_key,
serializer=self.serializer,
# This doesn't handle non-default expiry dates, see #19201
max_age=settings.SESSION_COOKIE_AGE,
- salt='django.contrib.sessions.backends.signed_cookies')
+ salt='django.contrib.sessions.backends.signed_cookies',
+ )
except Exception:
# BadSignature, ValueError, or unpickling exceptions. If any of
# these happen, reset the session.
@@ -73,9 +75,11 @@ class SessionStore(SessionBase):
session key.
"""
session_cache = getattr(self, '_session_cache', {})
- return signing.dumps(session_cache, compress=True,
+ return signing.dumps(
+ session_cache, compress=True,
salt='django.contrib.sessions.backends.signed_cookies',
- serializer=self.serializer)
+ serializer=self.serializer,
+ )
@classmethod
def clear_expired(cls):
diff --git a/django/contrib/sessions/middleware.py b/django/contrib/sessions/middleware.py
index 51e0101616..73ffe5a2a2 100644
--- a/django/contrib/sessions/middleware.py
+++ b/django/contrib/sessions/middleware.py
@@ -33,8 +33,7 @@ class SessionMiddleware(object):
# First check if we need to delete this cookie.
# The session should be deleted only if the session is entirely empty
if settings.SESSION_COOKIE_NAME in request.COOKIES and empty:
- response.delete_cookie(settings.SESSION_COOKIE_NAME,
- domain=settings.SESSION_COOKIE_DOMAIN)
+ response.delete_cookie(settings.SESSION_COOKIE_NAME, domain=settings.SESSION_COOKIE_DOMAIN)
else:
if accessed:
patch_vary_headers(response, ('Cookie',))
@@ -56,10 +55,12 @@ class SessionMiddleware(object):
# page will result in a redirect to the login page
# if required.
return redirect(request.path)
- response.set_cookie(settings.SESSION_COOKIE_NAME,
- request.session.session_key, max_age=max_age,
- expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
- path=settings.SESSION_COOKIE_PATH,
- secure=settings.SESSION_COOKIE_SECURE or None,
- httponly=settings.SESSION_COOKIE_HTTPONLY or None)
+ response.set_cookie(
+ settings.SESSION_COOKIE_NAME,
+ request.session.session_key, max_age=max_age,
+ expires=expires, domain=settings.SESSION_COOKIE_DOMAIN,
+ path=settings.SESSION_COOKIE_PATH,
+ secure=settings.SESSION_COOKIE_SECURE or None,
+ httponly=settings.SESSION_COOKIE_HTTPONLY or None,
+ )
return response
diff --git a/django/contrib/sites/models.py b/django/contrib/sites/models.py
index 7ee7e091c0..744ccd358c 100644
--- a/django/contrib/sites/models.py
+++ b/django/contrib/sites/models.py
@@ -85,8 +85,12 @@ class SiteManager(models.Manager):
@python_2_unicode_compatible
class Site(models.Model):
- domain = models.CharField(_('domain name'), max_length=100,
- validators=[_simple_domain_name_validator], unique=True)
+ domain = models.CharField(
+ _('domain name'),
+ max_length=100,
+ validators=[_simple_domain_name_validator],
+ unique=True,
+ )
name = models.CharField(_('display name'), max_length=50)
objects = SiteManager()
diff --git a/django/contrib/staticfiles/management/commands/collectstatic.py b/django/contrib/staticfiles/management/commands/collectstatic.py
index 9ebc009590..1e4a577b0b 100644
--- a/django/contrib/staticfiles/management/commands/collectstatic.py
+++ b/django/contrib/staticfiles/management/commands/collectstatic.py
@@ -39,30 +39,43 @@ class Command(BaseCommand):
return True
def add_arguments(self, parser):
- parser.add_argument('--noinput', '--no-input',
+ parser.add_argument(
+ '--noinput', '--no-input',
action='store_false', dest='interactive', default=True,
- help="Do NOT prompt the user for input of any kind.")
- parser.add_argument('--no-post-process',
+ help="Do NOT prompt the user for input of any kind.",
+ )
+ parser.add_argument(
+ '--no-post-process',
action='store_false', dest='post_process', default=True,
- help="Do NOT post process collected files.")
- parser.add_argument('-i', '--ignore', action='append', default=[],
+ help="Do NOT post process collected files.",
+ )
+ parser.add_argument(
+ '-i', '--ignore', action='append', default=[],
dest='ignore_patterns', metavar='PATTERN',
help="Ignore files or directories matching this glob-style "
- "pattern. Use multiple times to ignore more.")
- parser.add_argument('-n', '--dry-run',
+ "pattern. Use multiple times to ignore more.",
+ )
+ parser.add_argument(
+ '-n', '--dry-run',
action='store_true', dest='dry_run', default=False,
- help="Do everything except modify the filesystem.")
- parser.add_argument('-c', '--clear',
+ help="Do everything except modify the filesystem.",
+ )
+ parser.add_argument(
+ '-c', '--clear',
action='store_true', dest='clear', default=False,
help="Clear the existing files using the storage "
- "before trying to copy or link the original file.")
- parser.add_argument('-l', '--link',
+ "before trying to copy or link the original file.",
+ )
+ parser.add_argument(
+ '-l', '--link',
action='store_true', dest='link', default=False,
- help="Create a symbolic link to each file instead of copying.")
- parser.add_argument('--no-default-ignore', action='store_false',
+ help="Create a symbolic link to each file instead of copying.",
+ )
+ parser.add_argument(
+ '--no-default-ignore', action='store_false',
dest='use_default_ignore_patterns', default=True,
- help="Don't ignore the common private glob-style patterns 'CVS', "
- "'.*' and '*~'.")
+ help="Don't ignore the common private glob-style patterns 'CVS', '.*' and '*~'.",
+ )
def set_options(self, **options):
"""
diff --git a/django/contrib/staticfiles/management/commands/findstatic.py b/django/contrib/staticfiles/management/commands/findstatic.py
index 367242fd21..dcb198b221 100644
--- a/django/contrib/staticfiles/management/commands/findstatic.py
+++ b/django/contrib/staticfiles/management/commands/findstatic.py
@@ -13,18 +13,21 @@ class Command(LabelCommand):
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
- parser.add_argument('--first', action='store_false', dest='all',
+ parser.add_argument(
+ '--first', action='store_false', dest='all',
default=True,
- help="Only return the first match for each static file.")
+ help="Only return the first match for each static file.",
+ )
def handle_label(self, path, **options):
verbosity = options['verbosity']
result = finders.find(path, all=options['all'])
path = force_text(path)
if verbosity >= 2:
- searched_locations = ("\nLooking in the following locations:\n %s" %
- "\n ".join(force_text(location)
- for location in finders.searched_locations))
+ searched_locations = (
+ "\nLooking in the following locations:\n %s" %
+ "\n ".join(force_text(location) for location in finders.searched_locations)
+ )
else:
searched_locations = ''
if result:
diff --git a/django/contrib/staticfiles/management/commands/runserver.py b/django/contrib/staticfiles/management/commands/runserver.py
index b6108b8e97..c25ac1f369 100644
--- a/django/contrib/staticfiles/management/commands/runserver.py
+++ b/django/contrib/staticfiles/management/commands/runserver.py
@@ -9,10 +9,14 @@ class Command(RunserverCommand):
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
- parser.add_argument('--nostatic', action="store_false", dest='use_static_handler', default=True,
- help='Tells Django to NOT automatically serve static files at STATIC_URL.')
- parser.add_argument('--insecure', action="store_true", dest='insecure_serving', default=False,
- help='Allows serving static files even if DEBUG is False.')
+ parser.add_argument(
+ '--nostatic', action="store_false", dest='use_static_handler', default=True,
+ help='Tells Django to NOT automatically serve static files at STATIC_URL.',
+ )
+ parser.add_argument(
+ '--insecure', action="store_true", dest='insecure_serving', default=False,
+ help='Allows serving static files even if DEBUG is False.',
+ )
def get_handler(self, *args, **options):
"""
diff --git a/django/core/cache/backends/base.py b/django/core/cache/backends/base.py
index 76e98a25b6..a07a34e3b5 100644
--- a/django/core/cache/backends/base.py
+++ b/django/core/cache/backends/base.py
@@ -234,14 +234,16 @@ class BaseCache(object):
cache code.
"""
if len(key) > MEMCACHE_MAX_KEY_LENGTH:
- warnings.warn('Cache key will cause errors if used with memcached: '
- '%r (longer than %s)' % (key, MEMCACHE_MAX_KEY_LENGTH),
- CacheKeyWarning)
+ warnings.warn(
+ 'Cache key will cause errors if used with memcached: %r '
+ '(longer than %s)' % (key, MEMCACHE_MAX_KEY_LENGTH), CacheKeyWarning
+ )
for char in key:
if ord(char) < 33 or ord(char) == 127:
- warnings.warn('Cache key contains characters that will cause '
- 'errors if used with memcached: %r' % key,
- CacheKeyWarning)
+ warnings.warn(
+ 'Cache key contains characters that will cause errors if '
+ 'used with memcached: %r' % key, CacheKeyWarning
+ )
break
def incr_version(self, key, delta=1, version=None):
diff --git a/django/core/files/temp.py b/django/core/files/temp.py
index 0791b8536e..f70d975dbe 100644
--- a/django/core/files/temp.py
+++ b/django/core/files/temp.py
@@ -35,8 +35,7 @@ if os.name == 'nt':
Python 2.6+, or the 'delete', 'buffering', 'encoding', or 'newline'
keyword arguments in Python 3.0+.
"""
- def __init__(self, mode='w+b', bufsize=-1, suffix='', prefix='',
- dir=None):
+ def __init__(self, mode='w+b', bufsize=-1, suffix='', prefix='', dir=None):
fd, name = tempfile.mkstemp(suffix=suffix, prefix=prefix, dir=dir)
self.name = name
self.file = os.fdopen(fd, mode, bufsize)
diff --git a/django/core/files/uploadedfile.py b/django/core/files/uploadedfile.py
index 20eaecea75..156c35a1ed 100644
--- a/django/core/files/uploadedfile.py
+++ b/django/core/files/uploadedfile.py
@@ -62,8 +62,7 @@ class TemporaryUploadedFile(UploadedFile):
"""
def __init__(self, name, content_type, size, charset, content_type_extra=None):
if settings.FILE_UPLOAD_TEMP_DIR:
- file = tempfile.NamedTemporaryFile(suffix='.upload',
- dir=settings.FILE_UPLOAD_TEMP_DIR)
+ file = tempfile.NamedTemporaryFile(suffix='.upload', dir=settings.FILE_UPLOAD_TEMP_DIR)
else:
file = tempfile.NamedTemporaryFile(suffix='.upload')
super(TemporaryUploadedFile, self).__init__(file, name, content_type, size, charset, content_type_extra)
diff --git a/django/core/handlers/base.py b/django/core/handlers/base.py
index b8447de073..69cd2b030f 100644
--- a/django/core/handlers/base.py
+++ b/django/core/handlers/base.py
@@ -154,8 +154,10 @@ class BaseHandler(object):
view_name = callback.__name__
else: # CBV
view_name = callback.__class__.__name__ + '.__call__'
- raise ValueError("The view %s.%s didn't return an HttpResponse object. It returned None instead."
- % (callback.__module__, view_name))
+ raise ValueError(
+ "The view %s.%s didn't return an HttpResponse object. It "
+ "returned None instead." % (callback.__module__, view_name)
+ )
# If the response supports deferred rendering, apply template
# response middleware and then render the response
@@ -167,7 +169,8 @@ class BaseHandler(object):
raise ValueError(
"%s.process_template_response didn't return an "
"HttpResponse object. It returned None instead."
- % (middleware_method.__self__.__class__.__name__))
+ % (middleware_method.__self__.__class__.__name__)
+ )
try:
response = response.render()
except Exception as e:
@@ -176,11 +179,10 @@ class BaseHandler(object):
response_is_rendered = True
except http.Http404 as exc:
- logger.warning('Not Found: %s', request.path,
- extra={
- 'status_code': 404,
- 'request': request
- })
+ logger.warning(
+ 'Not Found: %s', request.path,
+ extra={'status_code': 404, 'request': request},
+ )
if settings.DEBUG:
response = debug.technical_404_response(request, exc)
else:
@@ -189,32 +191,25 @@ class BaseHandler(object):
except PermissionDenied as exc:
logger.warning(
'Forbidden (Permission denied): %s', request.path,
- extra={
- 'status_code': 403,
- 'request': request
- })
+ extra={'status_code': 403, 'request': request},
+ )
response = self.get_exception_response(request, resolver, 403, exc)
except MultiPartParserError as exc:
logger.warning(
'Bad request (Unable to parse request body): %s', request.path,
- extra={
- 'status_code': 400,
- 'request': request
- })
+ extra={'status_code': 400, 'request': request},
+ )
response = self.get_exception_response(request, resolver, 400, exc)
except SuspiciousOperation as exc:
# The request logger receives events for any problematic request
# The security logger receives events for all SuspiciousOperations
- security_logger = logging.getLogger('django.security.%s' %
- exc.__class__.__name__)
+ security_logger = logging.getLogger('django.security.%s' % exc.__class__.__name__)
security_logger.error(
force_text(exc),
- extra={
- 'status_code': 400,
- 'request': request
- })
+ extra={'status_code': 400, 'request': request},
+ )
if settings.DEBUG:
return debug.technical_500_response(request, *sys.exc_info(), status_code=400)
@@ -277,12 +272,10 @@ class BaseHandler(object):
if settings.DEBUG_PROPAGATE_EXCEPTIONS:
raise
- logger.error('Internal Server Error: %s', request.path,
+ logger.error(
+ 'Internal Server Error: %s', request.path,
exc_info=exc_info,
- extra={
- 'status_code': 500,
- 'request': request
- }
+ extra={'status_code': 500, 'request': request},
)
if settings.DEBUG:
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index c4de78ea60..1f85511f62 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -158,7 +158,8 @@ class WSGIHandler(base.BaseHandler):
try:
request = self.request_class(environ)
except UnicodeDecodeError:
- logger.warning('Bad Request (UnicodeDecodeError)',
+ logger.warning(
+ 'Bad Request (UnicodeDecodeError)',
exc_info=sys.exc_info(),
extra={
'status_code': 400,
diff --git a/django/core/mail/__init__.py b/django/core/mail/__init__.py
index 9fb3bdb42b..5741f8a829 100644
--- a/django/core/mail/__init__.py
+++ b/django/core/mail/__init__.py
@@ -50,11 +50,12 @@ def send_mail(subject, message, from_email, recipient_list,
Note: The API for this method is frozen. New code wanting to extend the
functionality should use the EmailMessage class directly.
"""
- connection = connection or get_connection(username=auth_user,
- password=auth_password,
- fail_silently=fail_silently)
- mail = EmailMultiAlternatives(subject, message, from_email, recipient_list,
- connection=connection)
+ connection = connection or get_connection(
+ username=auth_user,
+ password=auth_password,
+ fail_silently=fail_silently,
+ )
+ mail = EmailMultiAlternatives(subject, message, from_email, recipient_list, connection=connection)
if html_message:
mail.attach_alternative(html_message, 'text/html')
@@ -75,12 +76,15 @@ def send_mass_mail(datatuple, fail_silently=False, auth_user=None,
Note: The API for this method is frozen. New code wanting to extend the
functionality should use the EmailMessage class directly.
"""
- connection = connection or get_connection(username=auth_user,
- password=auth_password,
- fail_silently=fail_silently)
- messages = [EmailMessage(subject, message, sender, recipient,
- connection=connection)
- for subject, message, sender, recipient in datatuple]
+ connection = connection or get_connection(
+ username=auth_user,
+ password=auth_password,
+ fail_silently=fail_silently,
+ )
+ messages = [
+ EmailMessage(subject, message, sender, recipient, connection=connection)
+ for subject, message, sender, recipient in datatuple
+ ]
return connection.send_messages(messages)
@@ -89,9 +93,11 @@ def mail_admins(subject, message, fail_silently=False, connection=None,
"""Sends a message to the admins, as defined by the ADMINS setting."""
if not settings.ADMINS:
return
- mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
- message, settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
- connection=connection)
+ mail = EmailMultiAlternatives(
+ '%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message,
+ settings.SERVER_EMAIL, [a[1] for a in settings.ADMINS],
+ connection=connection,
+ )
if html_message:
mail.attach_alternative(html_message, 'text/html')
mail.send(fail_silently=fail_silently)
@@ -102,9 +108,11 @@ def mail_managers(subject, message, fail_silently=False, connection=None,
"""Sends a message to the managers, as defined by the MANAGERS setting."""
if not settings.MANAGERS:
return
- mail = EmailMultiAlternatives('%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject),
- message, settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS],
- connection=connection)
+ mail = EmailMultiAlternatives(
+ '%s%s' % (settings.EMAIL_SUBJECT_PREFIX, subject), message,
+ settings.SERVER_EMAIL, [a[1] for a in settings.MANAGERS],
+ connection=connection,
+ )
if html_message:
mail.attach_alternative(html_message, 'text/html')
mail.send(fail_silently=fail_silently)
diff --git a/django/core/mail/message.py b/django/core/mail/message.py
index 8725900ed1..546b895352 100644
--- a/django/core/mail/message.py
+++ b/django/core/mail/message.py
@@ -90,8 +90,7 @@ def forbid_multi_line_headers(name, val, encoding):
val.encode('ascii')
except UnicodeEncodeError:
if name.lower() in ADDRESS_HEADERS:
- val = ', '.join(sanitize_address(addr, encoding)
- for addr in getaddresses((val,)))
+ val = ', '.join(sanitize_address(addr, encoding) for addr in getaddresses((val,)))
else:
val = Header(val, encoding).encode()
else:
@@ -418,8 +417,8 @@ class EmailMultiAlternatives(EmailMessage):
alternative_subtype = 'alternative'
def __init__(self, subject='', body='', from_email=None, to=None, bcc=None,
- connection=None, attachments=None, headers=None, alternatives=None,
- cc=None, reply_to=None):
+ connection=None, attachments=None, headers=None, alternatives=None,
+ cc=None, reply_to=None):
"""
Initialize a single email message (which can be sent to multiple
recipients).
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index eef52e74ba..aa649176d2 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -196,8 +196,10 @@ class ManagementUtility(object):
settings.INSTALLED_APPS
else:
sys.stderr.write("No Django settings specified.\n")
- sys.stderr.write("Unknown command: %r\nType '%s help' for usage.\n" %
- (subcommand, self.prog_name))
+ sys.stderr.write(
+ "Unknown command: %r\nType '%s help' for usage.\n"
+ % (subcommand, self.prog_name)
+ )
sys.exit(1)
if isinstance(app_name, BaseCommand):
# If the command is already loaded, use it directly.
diff --git a/django/core/management/base.py b/django/core/management/base.py
index f747e57ab4..1601d6d055 100644
--- a/django/core/management/base.py
+++ b/django/core/management/base.py
@@ -241,25 +241,33 @@ class BaseCommand(object):
Create and return the ``ArgumentParser`` which will be used to
parse the arguments to this command.
"""
- parser = CommandParser(self, prog="%s %s" % (os.path.basename(prog_name), subcommand),
- description=self.help or None)
+ parser = CommandParser(
+ self, prog="%s %s" % (os.path.basename(prog_name), subcommand),
+ description=self.help or None,
+ )
parser.add_argument('--version', action='version', version=self.get_version())
- parser.add_argument('-v', '--verbosity', action='store', dest='verbosity', default=1,
+ parser.add_argument(
+ '-v', '--verbosity', action='store', dest='verbosity', default=1,
type=int, choices=[0, 1, 2, 3],
- help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output')
- parser.add_argument('--settings',
+ help='Verbosity level; 0=minimal output, 1=normal output, 2=verbose output, 3=very verbose output',
+ )
+ parser.add_argument(
+ '--settings',
help=(
'The Python path to a settings module, e.g. '
'"myproject.settings.main". If this isn\'t provided, the '
'DJANGO_SETTINGS_MODULE environment variable will be used.'
),
)
- parser.add_argument('--pythonpath',
- help='A directory to add to the Python path, e.g. "/home/djangoprojects/myproject".')
- parser.add_argument('--traceback', action='store_true',
- help='Raise on CommandError exceptions')
- parser.add_argument('--no-color', action='store_true', dest='no_color', default=False,
- help="Don't colorize the command output.")
+ parser.add_argument(
+ '--pythonpath',
+ help='A directory to add to the Python path, e.g. "/home/djangoprojects/myproject".',
+ )
+ parser.add_argument('--traceback', action='store_true', help='Raise on CommandError exceptions')
+ parser.add_argument(
+ '--no-color', action='store_true', dest='no_color', default=False,
+ help="Don't colorize the command output.",
+ )
self.add_arguments(parser)
return parser
@@ -478,8 +486,7 @@ class AppCommand(BaseCommand):
missing_args_message = "Enter at least one application label."
def add_arguments(self, parser):
- parser.add_argument('args', metavar='app_label', nargs='+',
- help='One or more application label.')
+ parser.add_argument('args', metavar='app_label', nargs='+', help='One or more application label.')
def handle(self, *app_labels, **options):
from django.apps import apps
diff --git a/django/core/management/commands/check.py b/django/core/management/commands/check.py
index 4f5cc71f43..aa9685caa9 100644
--- a/django/core/management/commands/check.py
+++ b/django/core/management/commands/check.py
@@ -14,12 +14,18 @@ class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('args', metavar='app_label', nargs='*')
- parser.add_argument('--tag', '-t', action='append', dest='tags',
- help='Run only checks labeled with given tag.')
- parser.add_argument('--list-tags', action='store_true', dest='list_tags',
- help='List available tags.')
- parser.add_argument('--deploy', action='store_true', dest='deploy',
- help='Check deployment settings.')
+ parser.add_argument(
+ '--tag', '-t', action='append', dest='tags',
+ help='Run only checks labeled with given tag.',
+ )
+ parser.add_argument(
+ '--list-tags', action='store_true', dest='list_tags',
+ help='List available tags.',
+ )
+ parser.add_argument(
+ '--deploy', action='store_true', dest='deploy',
+ help='Check deployment settings.',
+ )
parser.add_argument(
'--fail-level',
default='ERROR',
diff --git a/django/core/management/commands/compilemessages.py b/django/core/management/commands/compilemessages.py
index 07e108fa1b..874fea4b5a 100644
--- a/django/core/management/commands/compilemessages.py
+++ b/django/core/management/commands/compilemessages.py
@@ -36,13 +36,19 @@ class Command(BaseCommand):
program_options = ['--check-format']
def add_arguments(self, parser):
- parser.add_argument('--locale', '-l', dest='locale', action='append', default=[],
+ parser.add_argument(
+ '--locale', '-l', dest='locale', action='append', default=[],
help='Locale(s) to process (e.g. de_AT). Default is to process all. '
- 'Can be used multiple times.')
- parser.add_argument('--exclude', '-x', dest='exclude', action='append', default=[],
- help='Locales to exclude. Default is none. Can be used multiple times.')
- parser.add_argument('--use-fuzzy', '-f', dest='fuzzy', action='store_true', default=False,
- help='Use fuzzy translations.')
+ 'Can be used multiple times.',
+ )
+ parser.add_argument(
+ '--exclude', '-x', dest='exclude', action='append', default=[],
+ help='Locales to exclude. Default is none. Can be used multiple times.',
+ )
+ parser.add_argument(
+ '--use-fuzzy', '-f', dest='fuzzy', action='store_true', default=False,
+ help='Use fuzzy translations.',
+ )
def handle(self, **options):
locale = options['locale']
@@ -116,8 +122,9 @@ class Command(BaseCommand):
"mo files will not be updated/created." % dirpath)
return
- args = [self.program] + self.program_options + ['-o',
- npath(base_path + '.mo'), npath(base_path + '.po')]
+ args = [self.program] + self.program_options + [
+ '-o', npath(base_path + '.mo'), npath(base_path + '.po')
+ ]
output, errors, status = popen_wrapper(args)
if status:
if errors:
diff --git a/django/core/management/commands/createcachetable.py b/django/core/management/commands/createcachetable.py
index 4a6456b536..f80fa8834e 100644
--- a/django/core/management/commands/createcachetable.py
+++ b/django/core/management/commands/createcachetable.py
@@ -15,16 +15,20 @@ class Command(BaseCommand):
requires_system_checks = False
def add_arguments(self, parser):
- parser.add_argument('args', metavar='table_name', nargs='*',
- help='Optional table names. Otherwise, settings.CACHES is used to '
- 'find cache tables.')
- parser.add_argument('--database', action='store', dest='database',
+ parser.add_argument(
+ 'args', metavar='table_name', nargs='*',
+ help='Optional table names. Otherwise, settings.CACHES is used to find cache tables.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database',
default=DEFAULT_DB_ALIAS,
help='Nominates a database onto which the cache tables will be '
- 'installed. Defaults to the "default" database.')
- parser.add_argument('--dry-run', action='store_true', dest='dry_run',
- help='Does not create the table, just prints the SQL that would '
- 'be run.')
+ 'installed. Defaults to the "default" database.',
+ )
+ parser.add_argument(
+ '--dry-run', action='store_true', dest='dry_run',
+ help='Does not create the table, just prints the SQL that would be run.',
+ )
def handle(self, *tablenames, **options):
db = options['database']
@@ -72,9 +76,10 @@ class Command(BaseCommand):
field_output.append("UNIQUE")
if f.db_index:
unique = "UNIQUE " if f.unique else ""
- index_output.append("CREATE %sINDEX %s ON %s (%s);" %
- (unique, qn('%s_%s' % (tablename, f.name)), qn(tablename),
- qn(f.name)))
+ index_output.append(
+ "CREATE %sINDEX %s ON %s (%s);" %
+ (unique, qn('%s_%s' % (tablename, f.name)), qn(tablename), qn(f.name))
+ )
table_output.append(" ".join(field_output))
full_statement = ["CREATE TABLE %s (" % qn(tablename)]
for i, line in enumerate(table_output):
@@ -89,8 +94,7 @@ class Command(BaseCommand):
self.stdout.write(statement)
return
- with transaction.atomic(using=database,
- savepoint=connection.features.can_rollback_ddl):
+ with transaction.atomic(using=database, savepoint=connection.features.can_rollback_ddl):
with connection.cursor() as curs:
try:
curs.execute(full_statement)
diff --git a/django/core/management/commands/dbshell.py b/django/core/management/commands/dbshell.py
index d2ff81f7ca..eda1ff68c9 100644
--- a/django/core/management/commands/dbshell.py
+++ b/django/core/management/commands/dbshell.py
@@ -3,15 +3,18 @@ from django.db import DEFAULT_DB_ALIAS, connections
class Command(BaseCommand):
- help = ("Runs the command-line client for specified database, or the "
- "default database if none is provided.")
+ help = (
+ "Runs the command-line client for specified database, or the "
+ "default database if none is provided."
+ )
requires_system_checks = False
def add_arguments(self, parser):
- parser.add_argument('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database onto which to '
- 'open a shell. Defaults to the "default" database.')
+ parser.add_argument(
+ '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database onto which to open a shell. Defaults to the "default" database.',
+ )
def handle(self, **options):
connection = connections[options['database']]
@@ -22,5 +25,7 @@ class Command(BaseCommand):
# isn't installed. There's a possibility OSError would be raised
# for some other reason, in which case this error message would be
# inaccurate. Still, this message catches the common case.
- raise CommandError('You appear not to have the %r program installed or on your path.' %
- connection.client.executable_name)
+ raise CommandError(
+ 'You appear not to have the %r program installed or on your path.' %
+ connection.client.executable_name
+ )
diff --git a/django/core/management/commands/diffsettings.py b/django/core/management/commands/diffsettings.py
index 9729131b3f..7bae48c218 100644
--- a/django/core/management/commands/diffsettings.py
+++ b/django/core/management/commands/diffsettings.py
@@ -14,9 +14,10 @@ class Command(BaseCommand):
requires_system_checks = False
def add_arguments(self, parser):
- parser.add_argument('--all', action='store_true', dest='all', default=False,
- help='Display all settings, regardless of their value. '
- 'Default values are prefixed by "###".')
+ parser.add_argument(
+ '--all', action='store_true', dest='all', default=False,
+ help='Display all settings, regardless of their value. Default values are prefixed by "###".',
+ )
def handle(self, **options):
# Inspired by Postfix's "postconf -n".
diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py
index f8edcafabb..b8547d684f 100644
--- a/django/core/management/commands/dumpdata.py
+++ b/django/core/management/commands/dumpdata.py
@@ -12,37 +12,57 @@ class ProxyModelWarning(Warning):
class Command(BaseCommand):
- help = ("Output the contents of the database as a fixture of the given "
- "format (using each model's default manager unless --all is "
- "specified).")
+ help = (
+ "Output the contents of the database as a fixture of the given format "
+ "(using each model's default manager unless --all is specified)."
+ )
def add_arguments(self, parser):
- parser.add_argument('args', metavar='app_label[.ModelName]', nargs='*',
- help='Restricts dumped data to the specified app_label or app_label.ModelName.')
- parser.add_argument('--format', default='json', dest='format',
- help='Specifies the output serialization format for fixtures.')
- parser.add_argument('--indent', default=None, dest='indent', type=int,
- help='Specifies the indent level to use when pretty-printing output.')
- parser.add_argument('--database', action='store', dest='database',
+ parser.add_argument(
+ 'args', metavar='app_label[.ModelName]', nargs='*',
+ help='Restricts dumped data to the specified app_label or app_label.ModelName.',
+ )
+ parser.add_argument(
+ '--format', default='json', dest='format',
+ help='Specifies the output serialization format for fixtures.',
+ )
+ parser.add_argument(
+ '--indent', default=None, dest='indent', type=int,
+ help='Specifies the indent level to use when pretty-printing output.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database',
default=DEFAULT_DB_ALIAS,
help='Nominates a specific database to dump fixtures from. '
- 'Defaults to the "default" database.')
- parser.add_argument('-e', '--exclude', dest='exclude', action='append', default=[],
+ 'Defaults to the "default" database.',
+ )
+ parser.add_argument(
+ '-e', '--exclude', dest='exclude', action='append', default=[],
help='An app_label or app_label.ModelName to exclude '
- '(use multiple --exclude to exclude multiple apps/models).')
- parser.add_argument('--natural-foreign', action='store_true', dest='use_natural_foreign_keys', default=False,
- help='Use natural foreign keys if they are available.')
- parser.add_argument('--natural-primary', action='store_true', dest='use_natural_primary_keys', default=False,
- help='Use natural primary keys if they are available.')
- parser.add_argument('-a', '--all', action='store_true', dest='use_base_manager', default=False,
+ '(use multiple --exclude to exclude multiple apps/models).',
+ )
+ parser.add_argument(
+ '--natural-foreign', action='store_true', dest='use_natural_foreign_keys', default=False,
+ help='Use natural foreign keys if they are available.',
+ )
+ parser.add_argument(
+ '--natural-primary', action='store_true', dest='use_natural_primary_keys', default=False,
+ help='Use natural primary keys if they are available.',
+ )
+ parser.add_argument(
+ '-a', '--all', action='store_true', dest='use_base_manager', default=False,
help="Use Django's base manager to dump all models stored in the database, "
- "including those that would otherwise be filtered or modified by a custom manager.")
- parser.add_argument('--pks', dest='primary_keys',
- help="Only dump objects with given primary keys. "
- "Accepts a comma separated list of keys. "
- "This option will only work when you specify one model.")
- parser.add_argument('-o', '--output', default=None, dest='output',
- help='Specifies file to which the output is written.')
+ "including those that would otherwise be filtered or modified by a custom manager.",
+ )
+ parser.add_argument(
+ '--pks', dest='primary_keys',
+ help="Only dump objects with given primary keys. Accepts a comma-separated "
+ "list of keys. This option only works when you specify one model.",
+ )
+ parser.add_argument(
+ '-o', '--output', default=None, dest='output',
+ help='Specifies file to which the output is written.'
+ )
def handle(self, *app_labels, **options):
format = options['format']
@@ -80,9 +100,10 @@ class Command(BaseCommand):
if len(app_labels) == 0:
if primary_keys:
raise CommandError("You can only use --pks option with one model")
- app_list = OrderedDict((app_config, None)
- for app_config in apps.get_app_configs()
- if app_config.models_module is not None and app_config not in excluded_apps)
+ app_list = OrderedDict(
+ (app_config, None) for app_config in apps.get_app_configs()
+ if app_config.models_module is not None and app_config not in excluded_apps
+ )
else:
if len(app_labels) > 1 and primary_keys:
raise CommandError("You can only use --pks option with one model")
@@ -171,11 +192,13 @@ class Command(BaseCommand):
object_count = sum(get_objects(count_only=True))
stream = open(output, 'w') if output else None
try:
- serializers.serialize(format, get_objects(), indent=indent,
- use_natural_foreign_keys=use_natural_foreign_keys,
- use_natural_primary_keys=use_natural_primary_keys,
- stream=stream or self.stdout, progress_output=progress_output,
- object_count=object_count)
+ serializers.serialize(
+ format, get_objects(), indent=indent,
+ use_natural_foreign_keys=use_natural_foreign_keys,
+ use_natural_primary_keys=use_natural_primary_keys,
+ stream=stream or self.stdout, progress_output=progress_output,
+ object_count=object_count,
+ )
finally:
if stream:
stream.close()
diff --git a/django/core/management/commands/flush.py b/django/core/management/commands/flush.py
index 3820f2cce8..68226355b8 100644
--- a/django/core/management/commands/flush.py
+++ b/django/core/management/commands/flush.py
@@ -13,16 +13,21 @@ from django.utils.six.moves import input
class Command(BaseCommand):
- help = ('Removes ALL DATA from the database, including data added during '
- 'migrations. Does not achieve a "fresh install" state.')
+ help = (
+ 'Removes ALL DATA from the database, including data added during '
+ 'migrations. Does not achieve a "fresh install" state.'
+ )
def add_arguments(self, parser):
- parser.add_argument('--noinput', '--no-input',
+ parser.add_argument(
+ '--noinput', '--no-input',
action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
- parser.add_argument('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS,
- help='Nominates a database to flush. Defaults to the "default" database.')
+ help='Tells Django to NOT prompt the user for input of any kind.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to flush. Defaults to the "default" database.',
+ )
def handle(self, **options):
database = options['database']
diff --git a/django/core/management/commands/inspectdb.py b/django/core/management/commands/inspectdb.py
index 24310ee390..02a8ac225e 100644
--- a/django/core/management/commands/inspectdb.py
+++ b/django/core/management/commands/inspectdb.py
@@ -17,11 +17,14 @@ class Command(BaseCommand):
db_module = 'django.db'
def add_arguments(self, parser):
- parser.add_argument('table', action='store', nargs='*', type=str,
- help='Selects what tables or views should be introspected.')
- parser.add_argument('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to '
- 'introspect. Defaults to using the "default" database.')
+ parser.add_argument(
+ 'table', action='store', nargs='*', type=str,
+ help='Selects what tables or views should be introspected.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to introspect. Defaults to using the "default" database.',
+ )
def handle(self, **options):
try:
diff --git a/django/core/management/commands/loaddata.py b/django/core/management/commands/loaddata.py
index a53270a38b..1b0cee0d2b 100644
--- a/django/core/management/commands/loaddata.py
+++ b/django/core/management/commands/loaddata.py
@@ -32,21 +32,26 @@ except ImportError:
class Command(BaseCommand):
help = 'Installs the named fixture(s) in the database.'
- missing_args_message = ("No database fixture specified. Please provide the "
- "path of at least one fixture in the command line.")
+ missing_args_message = (
+ "No database fixture specified. Please provide the path of at least "
+ "one fixture in the command line."
+ )
def add_arguments(self, parser):
- parser.add_argument('args', metavar='fixture', nargs='+',
- help='Fixture labels.')
- parser.add_argument('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a specific database to load '
- 'fixtures into. Defaults to the "default" database.')
- parser.add_argument('--app', action='store', dest='app_label',
- default=None, help='Only look for fixtures in the specified app.')
- parser.add_argument('--ignorenonexistent', '-i', action='store_true',
- dest='ignore', default=False,
+ parser.add_argument('args', metavar='fixture', nargs='+', help='Fixture labels.')
+ parser.add_argument(
+ '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a specific database to load fixtures into. Defaults to the "default" database.',
+ )
+ parser.add_argument(
+ '--app', action='store', dest='app_label', default=None,
+ help='Only look for fixtures in the specified app.',
+ )
+ parser.add_argument(
+ '--ignorenonexistent', '-i', action='store_true', dest='ignore', default=False,
help='Ignores entries in the serialized data for fields that do not '
- 'currently exist on the model.')
+ 'currently exist on the model.',
+ )
def handle(self, *fixture_labels, **options):
@@ -120,11 +125,15 @@ class Command(BaseCommand):
if self.verbosity >= 1:
if self.fixture_object_count == self.loaded_object_count:
- self.stdout.write("Installed %d object(s) from %d fixture(s)" %
- (self.loaded_object_count, self.fixture_count))
+ self.stdout.write(
+ "Installed %d object(s) from %d fixture(s)"
+ % (self.loaded_object_count, self.fixture_count)
+ )
else:
- self.stdout.write("Installed %d object(s) (of %d) from %d fixture(s)" %
- (self.loaded_object_count, self.fixture_object_count, self.fixture_count))
+ self.stdout.write(
+ "Installed %d object(s) (of %d) from %d fixture(s)"
+ % (self.loaded_object_count, self.fixture_object_count, self.fixture_count)
+ )
def load_label(self, fixture_label):
"""
@@ -140,11 +149,14 @@ class Command(BaseCommand):
objects_in_fixture = 0
loaded_objects_in_fixture = 0
if self.verbosity >= 2:
- self.stdout.write("Installing %s fixture '%s' from %s." %
- (ser_fmt, fixture_name, humanize(fixture_dir)))
+ self.stdout.write(
+ "Installing %s fixture '%s' from %s."
+ % (ser_fmt, fixture_name, humanize(fixture_dir))
+ )
- objects = serializers.deserialize(ser_fmt, fixture,
- using=self.using, ignorenonexistent=self.ignore)
+ objects = serializers.deserialize(
+ ser_fmt, fixture, using=self.using, ignorenonexistent=self.ignore,
+ )
for obj in objects:
objects_in_fixture += 1
@@ -208,8 +220,10 @@ class Command(BaseCommand):
for dir_ in fixture_dirs]
fixture_name = os.path.basename(fixture_name)
- suffixes = ('.'.join(ext for ext in combo if ext)
- for combo in product(databases, ser_fmts, cmp_fmts))
+ suffixes = (
+ '.'.join(ext for ext in combo if ext)
+ for combo in product(databases, ser_fmts, cmp_fmts)
+ )
targets = set('.'.join((fixture_name, suffix)) for suffix in suffixes)
fixture_files = []
diff --git a/django/core/management/commands/makemessages.py b/django/core/management/commands/makemessages.py
index cfe6d3d087..45113b68ab 100644
--- a/django/core/management/commands/makemessages.py
+++ b/django/core/management/commands/makemessages.py
@@ -30,8 +30,10 @@ NO_LOCALE_DIR = object()
def check_programs(*programs):
for program in programs:
if find_command(program) is None:
- raise CommandError("Can't find %s. Make sure you have GNU "
- "gettext tools 0.15 or newer installed." % program)
+ raise CommandError(
+ "Can't find %s. Make sure you have GNU gettext tools 0.15 or "
+ "newer installed." % program
+ )
@total_ordering
@@ -161,11 +163,13 @@ def write_pot_file(potfile, msgs):
class Command(BaseCommand):
- help = ("Runs over the entire source tree of the current directory and "
-"pulls out all strings marked for translation. It creates (or updates) a message "
-"file in the conf/locale (in the django tree) or locale (for projects and "
-"applications) directory.\n\nYou must run this command with one of either the "
-"--locale, --exclude or --all options.")
+ help = (
+ "Runs over the entire source tree of the current directory and "
+ "pulls out all strings marked for translation. It creates (or updates) a message "
+ "file in the conf/locale (in the django tree) or locale (for projects and "
+ "applications) directory.\n\nYou must run this command with one of either the "
+ "--locale, --exclude, or --all options."
+ )
translatable_file_class = TranslatableFile
build_file_class = BuildFile
@@ -179,37 +183,60 @@ class Command(BaseCommand):
xgettext_options = ['--from-code=UTF-8', '--add-comments=Translators']
def add_arguments(self, parser):
- parser.add_argument('--locale', '-l', default=[], dest='locale', action='append',
+ parser.add_argument(
+ '--locale', '-l', default=[], dest='locale', action='append',
help='Creates or updates the message files for the given locale(s) (e.g. pt_BR). '
- 'Can be used multiple times.')
- parser.add_argument('--exclude', '-x', default=[], dest='exclude', action='append',
- help='Locales to exclude. Default is none. Can be used multiple times.')
- parser.add_argument('--domain', '-d', default='django', dest='domain',
- help='The domain of the message files (default: "django").')
- parser.add_argument('--all', '-a', action='store_true', dest='all',
- default=False, help='Updates the message files for all existing locales.')
- parser.add_argument('--extension', '-e', dest='extensions',
+ 'Can be used multiple times.',
+ )
+ parser.add_argument(
+ '--exclude', '-x', default=[], dest='exclude', action='append',
+ help='Locales to exclude. Default is none. Can be used multiple times.',
+ )
+ parser.add_argument(
+ '--domain', '-d', default='django', dest='domain',
+ help='The domain of the message files (default: "django").',
+ )
+ parser.add_argument(
+ '--all', '-a', action='store_true', dest='all', default=False,
+ help='Updates the message files for all existing locales.',
+ )
+ parser.add_argument(
+ '--extension', '-e', dest='extensions', action='append',
help='The file extension(s) to examine (default: "html,txt,py", or "js" '
'if the domain is "djangojs"). Separate multiple extensions with '
'commas, or use -e multiple times.',
- action='append')
- parser.add_argument('--symlinks', '-s', action='store_true', dest='symlinks',
- default=False, help='Follows symlinks to directories when examining '
- 'source code and templates for translation strings.')
- parser.add_argument('--ignore', '-i', action='append', dest='ignore_patterns',
+ )
+ parser.add_argument(
+ '--symlinks', '-s', action='store_true', dest='symlinks', default=False,
+ help='Follows symlinks to directories when examining source code '
+ 'and templates for translation strings.',
+ )
+ parser.add_argument(
+ '--ignore', '-i', action='append', dest='ignore_patterns',
default=[], metavar='PATTERN',
help='Ignore files or directories matching this glob-style pattern. '
- 'Use multiple times to ignore more.')
- parser.add_argument('--no-default-ignore', action='store_false', dest='use_default_ignore_patterns',
- default=True, help="Don't ignore the common glob-style patterns 'CVS', '.*', '*~' and '*.pyc'.")
- parser.add_argument('--no-wrap', action='store_true', dest='no_wrap',
- default=False, help="Don't break long message lines into several lines.")
- parser.add_argument('--no-location', action='store_true', dest='no_location',
- default=False, help="Don't write '#: filename:line' lines.")
- parser.add_argument('--no-obsolete', action='store_true', dest='no_obsolete',
- default=False, help="Remove obsolete message strings.")
- parser.add_argument('--keep-pot', action='store_true', dest='keep_pot',
- default=False, help="Keep .pot file after making messages. Useful when debugging.")
+ 'Use multiple times to ignore more.',
+ )
+ parser.add_argument(
+ '--no-default-ignore', action='store_false', dest='use_default_ignore_patterns',
+ default=True, help="Don't ignore the common glob-style patterns 'CVS', '.*', '*~' and '*.pyc'.",
+ )
+ parser.add_argument(
+ '--no-wrap', action='store_true', dest='no_wrap',
+ default=False, help="Don't break long message lines into several lines.",
+ )
+ parser.add_argument(
+ '--no-location', action='store_true', dest='no_location',
+ default=False, help="Don't write '#: filename:line' lines.",
+ )
+ parser.add_argument(
+ '--no-obsolete', action='store_true', dest='no_obsolete',
+ default=False, help="Remove obsolete message strings.",
+ )
+ parser.add_argument(
+ '--keep-pot', action='store_true', dest='keep_pot',
+ default=False, help="Keep .pot file after making messages. Useful when debugging.",
+ )
def handle(self, *args, **options):
locale = options['locale']
@@ -256,12 +283,16 @@ class Command(BaseCommand):
self.extensions = handle_extensions(exts)
if (locale is None and not exclude and not process_all) or self.domain is None:
- raise CommandError("Type '%s help %s' for usage information." % (
- os.path.basename(sys.argv[0]), sys.argv[1]))
+ raise CommandError(
+ "Type '%s help %s' for usage information."
+ % (os.path.basename(sys.argv[0]), sys.argv[1])
+ )
if self.verbosity > 1:
- self.stdout.write('examining files with the extensions: %s\n'
- % get_text_list(list(self.extensions), 'and'))
+ self.stdout.write(
+ 'examining files with the extensions: %s\n'
+ % get_text_list(list(self.extensions), 'and')
+ )
self.invoked_for_django = False
self.locale_paths = []
diff --git a/django/core/management/commands/makemigrations.py b/django/core/management/commands/makemigrations.py
index fc691391f5..6766434193 100644
--- a/django/core/management/commands/makemigrations.py
+++ b/django/core/management/commands/makemigrations.py
@@ -24,24 +24,40 @@ class Command(BaseCommand):
help = "Creates new migration(s) for apps."
def add_arguments(self, parser):
- parser.add_argument('args', metavar='app_label', nargs='*',
- help='Specify the app label(s) to create migrations for.')
- parser.add_argument('--dry-run', action='store_true', dest='dry_run', default=False,
- help="Just show what migrations would be made; don't actually write them.")
- parser.add_argument('--merge', action='store_true', dest='merge', default=False,
- help="Enable fixing of migration conflicts.")
- parser.add_argument('--empty', action='store_true', dest='empty', default=False,
- help="Create an empty migration.")
- parser.add_argument('--noinput', '--no-input',
+ parser.add_argument(
+ 'args', metavar='app_label', nargs='*',
+ help='Specify the app label(s) to create migrations for.',
+ )
+ parser.add_argument(
+ '--dry-run', action='store_true', dest='dry_run', default=False,
+ help="Just show what migrations would be made; don't actually write them.",
+ )
+ parser.add_argument(
+ '--merge', action='store_true', dest='merge', default=False,
+ help="Enable fixing of migration conflicts.",
+ )
+ parser.add_argument(
+ '--empty', action='store_true', dest='empty', default=False,
+ help="Create an empty migration.",
+ )
+ parser.add_argument(
+ '--noinput', '--no-input',
action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
- parser.add_argument('-n', '--name', action='store', dest='name', default=None,
- help="Use this name for migration file(s).")
- parser.add_argument('-e', '--exit', action='store_true', dest='exit_code', default=False,
+ help='Tells Django to NOT prompt the user for input of any kind.',
+ )
+ parser.add_argument(
+ '-n', '--name', action='store', dest='name', default=None,
+ help="Use this name for migration file(s).",
+ )
+ parser.add_argument(
+ '-e', '--exit', action='store_true', dest='exit_code', default=False,
help='Exit with error code 1 if no changes needing migrations are found. '
- 'Deprecated, use the --check option instead.')
- parser.add_argument('--check', action='store_true', dest='check_changes',
- help='Exit with a non-zero status if model changes are missing migrations.')
+ 'Deprecated, use the --check option instead.',
+ )
+ parser.add_argument(
+ '--check', action='store_true', dest='check_changes',
+ help='Exit with a non-zero status if model changes are missing migrations.',
+ )
def handle(self, *app_labels, **options):
self.verbosity = options['verbosity']
diff --git a/django/core/management/commands/migrate.py b/django/core/management/commands/migrate.py
index 9c73500d21..84dbc59c65 100644
--- a/django/core/management/commands/migrate.py
+++ b/django/core/management/commands/migrate.py
@@ -22,28 +22,39 @@ class Command(BaseCommand):
help = "Updates database schema. Manages both apps with migrations and those without."
def add_arguments(self, parser):
- parser.add_argument('app_label', nargs='?',
- help='App label of an application to synchronize the state.')
- parser.add_argument('migration_name', nargs='?',
- help=(
- 'Database state will be brought to the state after that '
- 'migration. Use the name "zero" to unapply all migrations.'
- ),
+ parser.add_argument(
+ 'app_label', nargs='?',
+ help='App label of an application to synchronize the state.',
)
- parser.add_argument('--noinput', '--no-input',
+ parser.add_argument(
+ 'migration_name', nargs='?',
+ help='Database state will be brought to the state after that '
+ 'migration. Use the name "zero" to unapply all migrations.',
+ )
+ parser.add_argument(
+ '--noinput', '--no-input',
action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
- parser.add_argument('--database', action='store', dest='database',
- default=DEFAULT_DB_ALIAS, help='Nominates a database to synchronize. '
- 'Defaults to the "default" database.')
- parser.add_argument('--fake', action='store_true', dest='fake', default=False,
- help='Mark migrations as run without actually running them.')
- parser.add_argument('--fake-initial', action='store_true', dest='fake_initial', default=False,
+ help='Tells Django to NOT prompt the user for input of any kind.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database',
+ default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to synchronize. Defaults to the "default" database.',
+ )
+ parser.add_argument(
+ '--fake', action='store_true', dest='fake', default=False,
+ help='Mark migrations as run without actually running them.',
+ )
+ parser.add_argument(
+ '--fake-initial', action='store_true', dest='fake_initial', default=False,
help='Detect if tables already exist and fake-apply initial migrations if so. Make sure '
'that the current database schema matches your initial migration before using this '
- 'flag. Django will only check for an existing table name.')
- parser.add_argument('--run-syncdb', action='store_true', dest='run_syncdb',
- help='Creates tables for apps without migrations.')
+ 'flag. Django will only check for an existing table name.',
+ )
+ parser.add_argument(
+ '--run-syncdb', action='store_true', dest='run_syncdb',
+ help='Creates tables for apps without migrations.',
+ )
def handle(self, *args, **options):
@@ -238,8 +249,10 @@ class Command(BaseCommand):
opts = model._meta
converter = connection.introspection.table_name_converter
# Note that if a model is unmanaged we short-circuit and never try to install it
- return not ((converter(opts.db_table) in tables) or
- (opts.auto_created and converter(opts.auto_created._meta.db_table) in tables))
+ return not (
+ (converter(opts.db_table) in tables) or
+ (opts.auto_created and converter(opts.auto_created._meta.db_table) in tables)
+ )
manifest = OrderedDict(
(app_name, list(filter(model_installed, model_list)))
diff --git a/django/core/management/commands/runserver.py b/django/core/management/commands/runserver.py
index d5c8189d6b..18c2d61a88 100644
--- a/django/core/management/commands/runserver.py
+++ b/django/core/management/commands/runserver.py
@@ -32,14 +32,22 @@ class Command(BaseCommand):
default_port = '8000'
def add_arguments(self, parser):
- parser.add_argument('addrport', nargs='?',
- help='Optional port number, or ipaddr:port')
- parser.add_argument('--ipv6', '-6', action='store_true', dest='use_ipv6', default=False,
- help='Tells Django to use an IPv6 address.')
- parser.add_argument('--nothreading', action='store_false', dest='use_threading', default=True,
- help='Tells Django to NOT use threading.')
- parser.add_argument('--noreload', action='store_false', dest='use_reloader', default=True,
- help='Tells Django to NOT use the auto-reloader.')
+ parser.add_argument(
+ 'addrport', nargs='?',
+ help='Optional port number, or ipaddr:port'
+ )
+ parser.add_argument(
+ '--ipv6', '-6', action='store_true', dest='use_ipv6', default=False,
+ help='Tells Django to use an IPv6 address.',
+ )
+ parser.add_argument(
+ '--nothreading', action='store_false', dest='use_threading', default=True,
+ help='Tells Django to NOT use threading.',
+ )
+ parser.add_argument(
+ '--noreload', action='store_false', dest='use_reloader', default=True,
+ help='Tells Django to NOT use the auto-reloader.',
+ )
def execute(self, *args, **options):
if options['no_color']:
diff --git a/django/core/management/commands/sendtestemail.py b/django/core/management/commands/sendtestemail.py
index 3e3b40a959..6ca011b544 100644
--- a/django/core/management/commands/sendtestemail.py
+++ b/django/core/management/commands/sendtestemail.py
@@ -10,12 +10,18 @@ class Command(BaseCommand):
missing_args_message = "You must specify some email recipients, or pass the --managers or --admin options."
def add_arguments(self, parser):
- parser.add_argument('email', nargs='*',
- help='One or more email addresses to send a test email to.')
- parser.add_argument('--managers', action='store_true', dest='managers', default=False,
- help='Send a test email to the addresses specified in settings.MANAGERS.')
- parser.add_argument('--admins', action='store_true', dest='admins', default=False,
- help='Send a test email to the addresses specified in settings.ADMINS.')
+ parser.add_argument(
+ 'email', nargs='*',
+ help='One or more email addresses to send a test email to.',
+ )
+ parser.add_argument(
+ '--managers', action='store_true', dest='managers', default=False,
+ help='Send a test email to the addresses specified in settings.MANAGERS.',
+ )
+ parser.add_argument(
+ '--admins', action='store_true', dest='admins', default=False,
+ help='Send a test email to the addresses specified in settings.ADMINS.',
+ )
def handle(self, *args, **kwargs):
subject = 'Test email from %s on %s' % (socket.gethostname(), timezone.now())
diff --git a/django/core/management/commands/shell.py b/django/core/management/commands/shell.py
index bd61940aba..d6d6f6a087 100644
--- a/django/core/management/commands/shell.py
+++ b/django/core/management/commands/shell.py
@@ -11,15 +11,23 @@ class Command(BaseCommand):
shells = ['ipython', 'bpython', 'python']
def add_arguments(self, parser):
- parser.add_argument('--plain', action='store_true', dest='plain',
+ parser.add_argument(
+ '--plain', action='store_true', dest='plain',
help='Tells Django to use plain Python, not IPython or bpython. '
- 'Deprecated, use the `-i python` or `--interface python` option instead.')
- parser.add_argument('--no-startup', action='store_true', dest='no_startup',
- help='When using plain Python, ignore the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.')
- parser.add_argument('-i', '--interface', choices=self.shells, dest='interface',
- help='Specify an interactive interpreter interface. Available options: "ipython", "bpython", and "python"')
- parser.add_argument('-c', '--command', dest='command',
- help='Instead of opening an interactive shell, run a command as Django and exit.')
+ 'Deprecated, use the `-i python` or `--interface python` option instead.',
+ )
+ parser.add_argument(
+ '--no-startup', action='store_true', dest='no_startup',
+ help='When using plain Python, ignore the PYTHONSTARTUP environment variable and ~/.pythonrc.py script.',
+ )
+ parser.add_argument(
+ '-i', '--interface', choices=self.shells, dest='interface',
+ help='Specify an interactive interpreter interface. Available options: "ipython", "bpython", and "python"',
+ )
+ parser.add_argument(
+ '-c', '--command', dest='command',
+ help='Instead of opening an interactive shell, run a command as Django and exit.',
+ )
def _ipython_pre_011(self):
"""Start IPython pre-0.11"""
diff --git a/django/core/management/commands/showmigrations.py b/django/core/management/commands/showmigrations.py
index 0e53e11259..0d239b1eef 100644
--- a/django/core/management/commands/showmigrations.py
+++ b/django/core/management/commands/showmigrations.py
@@ -10,16 +10,24 @@ class Command(BaseCommand):
help = "Shows all available migrations for the current project"
def add_arguments(self, parser):
- parser.add_argument('app_label', nargs='*',
- help='App labels of applications to limit the output to.')
- parser.add_argument('--database', action='store', dest='database', default=DEFAULT_DB_ALIAS,
- help='Nominates a database to synchronize. Defaults to the "default" database.')
+ parser.add_argument(
+ 'app_label', nargs='*',
+ help='App labels of applications to limit the output to.',
+ )
+ parser.add_argument(
+ '--database', action='store', dest='database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to synchronize. Defaults to the "default" database.',
+ )
formats = parser.add_mutually_exclusive_group()
- formats.add_argument('--list', '-l', action='store_const', dest='format', const='list',
- help='Shows a list of all migrations and which are applied.')
- formats.add_argument('--plan', '-p', action='store_const', dest='format', const='plan',
- help='Shows all migrations in the order they will be applied.')
+ formats.add_argument(
+ '--list', '-l', action='store_const', dest='format', const='list',
+ help='Shows a list of all migrations and which are applied.',
+ )
+ formats.add_argument(
+ '--plan', '-p', action='store_const', dest='format', const='plan',
+ help='Shows all migrations in the order they will be applied.',
+ )
parser.set_defaults(format='list')
diff --git a/django/core/management/commands/sqlflush.py b/django/core/management/commands/sqlflush.py
index eba9197be7..f0c7e30270 100644
--- a/django/core/management/commands/sqlflush.py
+++ b/django/core/management/commands/sqlflush.py
@@ -15,9 +15,10 @@ class Command(BaseCommand):
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
- parser.add_argument('--database', default=DEFAULT_DB_ALIAS,
- help='Nominates a database to print the SQL for. Defaults to the '
- '"default" database.')
+ parser.add_argument(
+ '--database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to print the SQL for. Defaults to the "default" database.',
+ )
def handle(self, **options):
return '\n'.join(sql_flush(self.style, connections[options['database']], only_django=True))
diff --git a/django/core/management/commands/sqlmigrate.py b/django/core/management/commands/sqlmigrate.py
index b858b2b805..5047d900c1 100644
--- a/django/core/management/commands/sqlmigrate.py
+++ b/django/core/management/commands/sqlmigrate.py
@@ -13,15 +13,17 @@ class Command(BaseCommand):
output_transaction = True
def add_arguments(self, parser):
- parser.add_argument('app_label',
- help='App label of the application containing the migration.')
- parser.add_argument('migration_name',
- help='Migration name to print the SQL for.')
- parser.add_argument('--database', default=DEFAULT_DB_ALIAS,
- help='Nominates a database to create SQL for. Defaults to the '
- '"default" database.')
- parser.add_argument('--backwards', action='store_true', dest='backwards',
- default=False, help='Creates SQL to unapply the migration, rather than to apply it')
+ parser.add_argument('app_label', help='App label of the application containing the migration.')
+ parser.add_argument('migration_name', help='Migration name to print the SQL for.')
+ parser.add_argument(
+ '--database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to create SQL for. Defaults to the "default" database.',
+ )
+ parser.add_argument(
+ '--backwards', action='store_true', dest='backwards',
+ default=False,
+ help='Creates SQL to unapply the migration, rather than to apply it',
+ )
def execute(self, *args, **options):
# sqlmigrate doesn't support coloring its output but we need to force
diff --git a/django/core/management/commands/sqlsequencereset.py b/django/core/management/commands/sqlsequencereset.py
index ebb6f9da2e..6ac6e10d60 100644
--- a/django/core/management/commands/sqlsequencereset.py
+++ b/django/core/management/commands/sqlsequencereset.py
@@ -11,9 +11,10 @@ class Command(AppCommand):
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
- parser.add_argument('--database', default=DEFAULT_DB_ALIAS,
- help='Nominates a database to print the SQL for. Defaults to the '
- '"default" database.')
+ parser.add_argument(
+ '--database', default=DEFAULT_DB_ALIAS,
+ help='Nominates a database to print the SQL for. Defaults to the "default" database.',
+ )
def handle_app_config(self, app_config, **options):
if app_config.models_module is None:
diff --git a/django/core/management/commands/squashmigrations.py b/django/core/management/commands/squashmigrations.py
index 61c99baafd..d9babf85f8 100644
--- a/django/core/management/commands/squashmigrations.py
+++ b/django/core/management/commands/squashmigrations.py
@@ -13,17 +13,26 @@ class Command(BaseCommand):
help = "Squashes an existing set of migrations (from first until specified) into a single new one."
def add_arguments(self, parser):
- parser.add_argument('app_label',
- help='App label of the application to squash migrations for.')
- parser.add_argument('start_migration_name', default=None, nargs='?',
- help='Migrations will be squashed starting from and including this migration.')
- parser.add_argument('migration_name',
- help='Migrations will be squashed until and including this migration.')
- parser.add_argument('--no-optimize', action='store_true', dest='no_optimize', default=False,
- help='Do not try to optimize the squashed operations.')
- parser.add_argument('--noinput', '--no-input',
- action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
+ parser.add_argument(
+ 'app_label',
+ help='App label of the application to squash migrations for.',
+ )
+ parser.add_argument(
+ 'start_migration_name', default=None, nargs='?',
+ help='Migrations will be squashed starting from and including this migration.',
+ )
+ parser.add_argument(
+ 'migration_name',
+ help='Migrations will be squashed until and including this migration.',
+ )
+ parser.add_argument(
+ '--no-optimize', action='store_true', dest='no_optimize', default=False,
+ help='Do not try to optimize the squashed operations.',
+ )
+ parser.add_argument(
+ '--noinput', '--no-input', action='store_false', dest='interactive', default=True,
+ help='Tells Django to NOT prompt the user for input of any kind.',
+ )
def handle(self, **options):
diff --git a/django/core/management/commands/startapp.py b/django/core/management/commands/startapp.py
index 23ae25446b..32e9454a3c 100644
--- a/django/core/management/commands/startapp.py
+++ b/django/core/management/commands/startapp.py
@@ -5,9 +5,10 @@ from django.core.management.templates import TemplateCommand
class Command(TemplateCommand):
- help = ("Creates a Django app directory structure for the given app "
- "name in the current directory or optionally in the given "
- "directory.")
+ help = (
+ "Creates a Django app directory structure for the given app name in "
+ "the current directory or optionally in the given directory."
+ )
missing_args_message = "You must provide an application name."
def handle(self, **options):
@@ -20,8 +21,9 @@ class Command(TemplateCommand):
except ImportError:
pass
else:
- raise CommandError("%r conflicts with the name of an existing "
- "Python module and cannot be used as an app "
- "name. Please try another name." % app_name)
+ raise CommandError(
+ "%r conflicts with the name of an existing Python module and "
+ "cannot be used as an app name. Please try another name." % app_name
+ )
super(Command, self).handle('app', app_name, target, **options)
diff --git a/django/core/management/commands/startproject.py b/django/core/management/commands/startproject.py
index f50f27cf1f..d7307e141b 100644
--- a/django/core/management/commands/startproject.py
+++ b/django/core/management/commands/startproject.py
@@ -7,9 +7,10 @@ from ..utils import get_random_secret_key
class Command(TemplateCommand):
- help = ("Creates a Django project directory structure for the given "
- "project name in the current directory or optionally in the "
- "given directory.")
+ help = (
+ "Creates a Django project directory structure for the given project "
+ "name in the current directory or optionally in the given directory."
+ )
missing_args_message = "You must provide a project name."
def handle(self, **options):
@@ -22,10 +23,10 @@ class Command(TemplateCommand):
except ImportError:
pass
else:
- raise CommandError("%r conflicts with the name of an existing "
- "Python module and cannot be used as a "
- "project name. Please try another name." %
- project_name)
+ raise CommandError(
+ "%r conflicts with the name of an existing Python module and "
+ "cannot be used as a project name. Please try another name." % project_name
+ )
# Create a random SECRET_KEY to put it in the main settings.
options['secret_key'] = get_random_secret_key()
diff --git a/django/core/management/commands/test.py b/django/core/management/commands/test.py
index 2d98abebd0..73796fe417 100644
--- a/django/core/management/commands/test.py
+++ b/django/core/management/commands/test.py
@@ -29,24 +29,29 @@ class Command(BaseCommand):
super(Command, self).run_from_argv(argv)
def add_arguments(self, parser):
- parser.add_argument('args', metavar='test_label', nargs='*',
- help='Module paths to test; can be modulename, modulename.TestCase or modulename.TestCase.test_method')
- parser.add_argument('--noinput', '--no-input',
- action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
- parser.add_argument('--failfast',
- action='store_true', dest='failfast', default=False,
- help='Tells Django to stop running the test suite after first '
- 'failed test.')
- parser.add_argument('--testrunner',
- action='store', dest='testrunner',
+ parser.add_argument(
+ 'args', metavar='test_label', nargs='*',
+ help='Module paths to test; can be modulename, modulename.TestCase or modulename.TestCase.test_method'
+ )
+ parser.add_argument(
+ '--noinput', '--no-input', action='store_false', dest='interactive', default=True,
+ help='Tells Django to NOT prompt the user for input of any kind.',
+ )
+ parser.add_argument(
+ '--failfast', action='store_true', dest='failfast', default=False,
+ help='Tells Django to stop running the test suite after first failed test.',
+ )
+ parser.add_argument(
+ '--testrunner', action='store', dest='testrunner',
help='Tells Django to use specified test runner class instead of '
- 'the one specified by the TEST_RUNNER setting.')
- parser.add_argument('--liveserver',
- action='store', dest='liveserver', default=None,
+ 'the one specified by the TEST_RUNNER setting.',
+ )
+ parser.add_argument(
+ '--liveserver', action='store', dest='liveserver', default=None,
help='Overrides the default address where the live server (used '
'with LiveServerTestCase) is expected to run from. The '
- 'default value is localhost:8081-8179.')
+ 'default value is localhost:8081-8179.',
+ )
test_runner_class = get_runner(settings, self.test_runner)
diff --git a/django/core/management/commands/testserver.py b/django/core/management/commands/testserver.py
index a241283ce2..223a045f7c 100644
--- a/django/core/management/commands/testserver.py
+++ b/django/core/management/commands/testserver.py
@@ -9,15 +9,22 @@ class Command(BaseCommand):
requires_system_checks = False
def add_arguments(self, parser):
- parser.add_argument('args', metavar='fixture', nargs='*',
- help='Path(s) to fixtures to load before running the server.')
- parser.add_argument('--noinput', '--no-input',
- action='store_false', dest='interactive', default=True,
- help='Tells Django to NOT prompt the user for input of any kind.')
- parser.add_argument('--addrport', default='',
- help='Port number or ipaddr:port to run the server on.')
- parser.add_argument('--ipv6', '-6', action='store_true', dest='use_ipv6', default=False,
- help='Tells Django to use an IPv6 address.')
+ parser.add_argument(
+ 'args', metavar='fixture', nargs='*',
+ help='Path(s) to fixtures to load before running the server.',
+ )
+ parser.add_argument(
+ '--noinput', '--no-input', action='store_false', dest='interactive', default=True,
+ help='Tells Django to NOT prompt the user for input of any kind.',
+ )
+ parser.add_argument(
+ '--addrport', default='',
+ help='Port number or ipaddr:port to run the server on.',
+ )
+ parser.add_argument(
+ '--ipv6', '-6', action='store_true', dest='use_ipv6', default=False,
+ help='Tells Django to use an IPv6 address.',
+ )
def handle(self, *fixture_labels, **options):
verbosity = options['verbosity']
diff --git a/django/core/management/templates.py b/django/core/management/templates.py
index 1cd06d101a..df522e809c 100644
--- a/django/core/management/templates.py
+++ b/django/core/management/templates.py
@@ -51,18 +51,20 @@ class TemplateCommand(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('name', help='Name of the application or project.')
parser.add_argument('directory', nargs='?', help='Optional destination directory')
- parser.add_argument('--template',
- help='The path or URL to load the template from.')
- parser.add_argument('--extension', '-e', dest='extensions',
+ parser.add_argument('--template', help='The path or URL to load the template from.')
+ parser.add_argument(
+ '--extension', '-e', dest='extensions',
action='append', default=['py'],
help='The file extension(s) to render (default: "py"). '
'Separate multiple extensions with commas, or use '
- '-e multiple times.')
- parser.add_argument('--name', '-n', dest='files',
+ '-e multiple times.'
+ )
+ parser.add_argument(
+ '--name', '-n', dest='files',
action='append', default=[],
- help='The file name(s) to render. '
- 'Separate multiple extensions with commas, or use '
- '-n multiple times.')
+ help='The file name(s) to render. Separate multiple extensions '
+ 'with commas, or use -n multiple times.'
+ )
def handle(self, app_or_project, name, target=None, **options):
self.app_or_project = app_or_project
diff --git a/django/core/serializers/__init__.py b/django/core/serializers/__init__.py
index b3f23b223a..e62dbf75da 100644
--- a/django/core/serializers/__init__.py
+++ b/django/core/serializers/__init__.py
@@ -227,9 +227,12 @@ def sort_dependencies(app_list):
else:
skipped.append((model, deps))
if not changed:
- raise RuntimeError("Can't resolve dependencies for %s in serialized app list." %
- ', '.join('%s.%s' % (model._meta.app_label, model._meta.object_name)
- for model, deps in sorted(skipped, key=lambda obj: obj[0].__name__))
+ raise RuntimeError(
+ "Can't resolve dependencies for %s in serialized app list." %
+ ', '.join(
+ '%s.%s' % (model._meta.app_label, model._meta.object_name)
+ for model, deps in sorted(skipped, key=lambda obj: obj[0].__name__)
+ )
)
model_dependencies = skipped
diff --git a/django/core/serializers/python.py b/django/core/serializers/python.py
index 8a8a776d48..94a0272729 100644
--- a/django/core/serializers/python.py
+++ b/django/core/serializers/python.py
@@ -75,8 +75,9 @@ class Serializer(base.Serializer):
else:
def m2m_value(value):
return force_text(value._get_pk_val(), strings_only=True)
- self._current[field.name] = [m2m_value(related)
- for related in getattr(obj, field.name).iterator()]
+ self._current[field.name] = [
+ m2m_value(related) for related in getattr(obj, field.name).iterator()
+ ]
def getvalue(self):
return self.objects
diff --git a/django/core/signing.py b/django/core/signing.py
index 9d4c665ad2..22b438315b 100644
--- a/django/core/signing.py
+++ b/django/core/signing.py
@@ -160,8 +160,7 @@ class Signer(object):
'Unsafe Signer separator: %r (cannot be empty or consist of '
'only A-z0-9-_=)' % sep,
)
- self.salt = force_str(salt or
- '%s.%s' % (self.__class__.__module__, self.__class__.__name__))
+ self.salt = force_str(salt or '%s.%s' % (self.__class__.__module__, self.__class__.__name__))
def signature(self, value):
signature = base64_hmac(self.salt + 'signer', value, self.key)
diff --git a/django/db/backends/base/introspection.py b/django/db/backends/base/introspection.py
index 7f3c7aca59..b3eec72469 100644
--- a/django/db/backends/base/introspection.py
+++ b/django/db/backends/base/introspection.py
@@ -6,8 +6,7 @@ from django.utils import six
TableInfo = namedtuple('TableInfo', ['name', 'type'])
# Structure returned by the DB-API cursor.description interface (PEP 249)
-FieldInfo = namedtuple('FieldInfo',
- 'name type_code display_size internal_size precision scale null_ok')
+FieldInfo = namedtuple('FieldInfo', 'name type_code display_size internal_size precision scale null_ok')
class BaseDatabaseIntrospection(object):
diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py
index f674232ab3..761e5faaff 100644
--- a/django/db/backends/mysql/base.py
+++ b/django/db/backends/mysql/base.py
@@ -43,8 +43,8 @@ from .validation import DatabaseValidation # isort:skip
# lexicographic ordering in this check because then (1, 2, 1, 'gamma')
# inadvertently passes the version test.
version = Database.version_info
-if (version < (1, 2, 1) or (version[:3] == (1, 2, 1) and
- (len(version) < 5 or version[3] != 'final' or version[4] < 2))):
+if (version < (1, 2, 1) or (
+ version[:3] == (1, 2, 1) and (len(version) < 5 or version[3] != 'final' or version[4] < 2))):
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured("MySQLdb-1.2.1p2 or newer is required; you have %s" % Database.__version__)
@@ -334,19 +334,27 @@ class DatabaseWrapper(BaseDatabaseWrapper):
continue
key_columns = self.introspection.get_key_columns(cursor, table_name)
for column_name, referenced_table_name, referenced_column_name in key_columns:
- cursor.execute("""
+ cursor.execute(
+ """
SELECT REFERRING.`%s`, REFERRING.`%s` FROM `%s` as REFERRING
LEFT JOIN `%s` as REFERRED
ON (REFERRING.`%s` = REFERRED.`%s`)
- WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL"""
- % (primary_key_column_name, column_name, table_name, referenced_table_name,
- column_name, referenced_column_name, column_name, referenced_column_name))
+ WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL
+ """ % (
+ primary_key_column_name, column_name, table_name,
+ referenced_table_name, column_name, referenced_column_name,
+ column_name, referenced_column_name,
+ )
+ )
for bad_row in cursor.fetchall():
- raise utils.IntegrityError("The row in table '%s' with primary key '%s' has an invalid "
+ raise utils.IntegrityError(
+ "The row in table '%s' with primary key '%s' has an invalid "
"foreign key: %s.%s contains a value '%s' that does not have a corresponding value in %s.%s."
- % (table_name, bad_row[0],
- table_name, column_name, bad_row[1],
- referenced_table_name, referenced_column_name))
+ % (
+ table_name, bad_row[0], table_name, column_name,
+ bad_row[1], referenced_table_name, referenced_column_name,
+ )
+ )
def is_usable(self):
try:
diff --git a/django/db/backends/mysql/operations.py b/django/db/backends/mysql/operations.py
index 963ad42f10..b9b8cd9089 100644
--- a/django/db/backends/mysql/operations.py
+++ b/django/db/backends/mysql/operations.py
@@ -12,7 +12,8 @@ class DatabaseOperations(BaseDatabaseOperations):
compiler_module = "django.db.backends.mysql.compiler"
# MySQL stores positive fields as UNSIGNED ints.
- integer_field_ranges = dict(BaseDatabaseOperations.integer_field_ranges,
+ integer_field_ranges = dict(
+ BaseDatabaseOperations.integer_field_ranges,
PositiveSmallIntegerField=(0, 65535),
PositiveIntegerField=(0, 4294967295),
)
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index 62b17fbe42..91af08acb6 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -367,8 +367,7 @@ class OracleParam(object):
else:
# To transmit to the database, we need Unicode if supported
# To get size right, we must consider bytes.
- self.force_bytes = convert_unicode(param, cursor.charset,
- strings_only)
+ self.force_bytes = convert_unicode(param, cursor.charset, strings_only)
if isinstance(self.force_bytes, six.string_types):
# We could optimize by only converting up to 4000 bytes here
string_size = len(force_bytes(param, cursor.charset, strings_only))
@@ -498,8 +497,7 @@ class FormatStylePlaceholderCursor(object):
formatted = [firstparams] + [self._format_params(p) for p in params_iter]
self._guess_input_sizes(formatted)
try:
- return self.cursor.executemany(query,
- [self._param_generator(p) for p in formatted])
+ return self.cursor.executemany(query, [self._param_generator(p) for p in formatted])
except Database.DatabaseError as e:
# cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400.
if hasattr(e.args[0], 'code') and e.args[0].code == 1400 and not isinstance(e, IntegrityError):
diff --git a/django/db/backends/oracle/operations.py b/django/db/backends/oracle/operations.py
index c101fcd870..8670e2f4d1 100644
--- a/django/db/backends/oracle/operations.py
+++ b/django/db/backends/oracle/operations.py
@@ -99,8 +99,7 @@ WHEN (new.%(col_name)s IS NULL)
days = str(timedelta.days)
day_precision = len(days)
fmt = "INTERVAL '%s %02d:%02d:%02d.%06d' DAY(%d) TO SECOND(6)"
- return fmt % (days, hours, minutes, seconds, timedelta.microseconds,
- day_precision), []
+ return fmt % (days, hours, minutes, seconds, timedelta.microseconds, day_precision), []
def date_trunc_sql(self, lookup_type, field_name):
# http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions230.htm#i1002084
diff --git a/django/db/backends/postgresql/operations.py b/django/db/backends/postgresql/operations.py
index 41d3a7a230..f0715a24e3 100644
--- a/django/db/backends/postgresql/operations.py
+++ b/django/db/backends/postgresql/operations.py
@@ -139,11 +139,11 @@ class DatabaseOperations(BaseDatabaseOperations):
# This will be the case if it's an m2m using an autogenerated
# intermediate table (see BaseDatabaseIntrospection.sequence_list)
column_name = 'id'
- sql.append("%s setval(pg_get_serial_sequence('%s','%s'), 1, false);" %
- (style.SQL_KEYWORD('SELECT'),
+ sql.append("%s setval(pg_get_serial_sequence('%s','%s'), 1, false);" % (
+ style.SQL_KEYWORD('SELECT'),
style.SQL_TABLE(self.quote_name(table_name)),
- style.SQL_FIELD(column_name))
- )
+ style.SQL_FIELD(column_name),
+ ))
return sql
def tablespace_sql(self, tablespace, inline=False):
diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py
index 2330a98a53..4f52cc3637 100644
--- a/django/db/backends/sqlite3/base.py
+++ b/django/db/backends/sqlite3/base.py
@@ -282,18 +282,28 @@ class DatabaseWrapper(BaseDatabaseWrapper):
continue
key_columns = self.introspection.get_key_columns(cursor, table_name)
for column_name, referenced_table_name, referenced_column_name in key_columns:
- cursor.execute("""
+ cursor.execute(
+ """
SELECT REFERRING.`%s`, REFERRING.`%s` FROM `%s` as REFERRING
LEFT JOIN `%s` as REFERRED
ON (REFERRING.`%s` = REFERRED.`%s`)
- WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL"""
- % (primary_key_column_name, column_name, table_name, referenced_table_name,
- column_name, referenced_column_name, column_name, referenced_column_name))
+ WHERE REFERRING.`%s` IS NOT NULL AND REFERRED.`%s` IS NULL
+ """
+ % (
+ primary_key_column_name, column_name, table_name,
+ referenced_table_name, column_name, referenced_column_name,
+ column_name, referenced_column_name,
+ )
+ )
for bad_row in cursor.fetchall():
- raise utils.IntegrityError("The row in table '%s' with primary key '%s' has an invalid "
- "foreign key: %s.%s contains a value '%s' that does not have a corresponding value in %s.%s."
- % (table_name, bad_row[0], table_name, column_name, bad_row[1],
- referenced_table_name, referenced_column_name))
+ raise utils.IntegrityError(
+ "The row in table '%s' with primary key '%s' has an "
+ "invalid foreign key: %s.%s contains a value '%s' that "
+ "does not have a corresponding value in %s.%s." % (
+ table_name, bad_row[0], table_name, column_name,
+ bad_row[1], referenced_table_name, referenced_column_name,
+ )
+ )
def is_usable(self):
return True
diff --git a/django/db/backends/utils.py b/django/db/backends/utils.py
index 94134811dd..dce453b7b0 100644
--- a/django/db/backends/utils.py
+++ b/django/db/backends/utils.py
@@ -85,7 +85,8 @@ class CursorDebugWrapper(CursorWrapper):
'sql': sql,
'time': "%.3f" % duration,
})
- logger.debug('(%.3f) %s; args=%s', duration, sql, params,
+ logger.debug(
+ '(%.3f) %s; args=%s', duration, sql, params,
extra={'duration': duration, 'sql': sql, 'params': params}
)
@@ -104,7 +105,8 @@ class CursorDebugWrapper(CursorWrapper):
'sql': '%s times: %s' % (times, sql),
'time': "%.3f" % duration,
})
- logger.debug('(%.3f) %s; args=%s', duration, sql, param_list,
+ logger.debug(
+ '(%.3f) %s; args=%s', duration, sql, param_list,
extra={'duration': duration, 'sql': sql, 'params': param_list}
)
@@ -154,9 +156,11 @@ def typecast_timestamp(s): # does NOT store time zone information
else:
microseconds = '0'
tzinfo = utc if settings.USE_TZ else None
- return datetime.datetime(int(dates[0]), int(dates[1]), int(dates[2]),
+ return datetime.datetime(
+ int(dates[0]), int(dates[1]), int(dates[2]),
int(times[0]), int(times[1]), int(seconds),
- int((microseconds + '000000')[:6]), tzinfo)
+ int((microseconds + '000000')[:6]), tzinfo
+ )
def typecast_decimal(s):
diff --git a/django/db/models/base.py b/django/db/models/base.py
index 7b0b68f983..c029fd812a 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -519,9 +519,10 @@ class Model(six.with_metaclass(ModelBase)):
if pickled_version:
current_version = get_version()
if current_version != pickled_version:
- msg = ("Pickled model instance's Django version %s does"
- " not match the current version %s."
- % (pickled_version, current_version))
+ msg = (
+ "Pickled model instance's Django version %s does not match "
+ "the current version %s." % (pickled_version, current_version)
+ )
else:
msg = "Pickled model instance's Django version is not specified."
@@ -1285,9 +1286,7 @@ class Model(six.with_metaclass(ModelBase)):
@classmethod
def _check_id_field(cls):
""" Check if `id` field is a primary key. """
-
- fields = list(f for f in cls._meta.local_fields
- if f.name == 'id' and f != cls._meta.pk)
+ fields = list(f for f in cls._meta.local_fields if f.name == 'id' and f != cls._meta.pk)
# fields is empty or consists of the invalid "id" field
if fields and not fields[0].primary_key and cls._meta.pk.name == 'id':
return [
@@ -1342,8 +1341,7 @@ class Model(six.with_metaclass(ModelBase)):
# field "id" and automatically added unique field "id", both
# defined at the same model. This special case is considered in
# _check_id_field and here we ignore it.
- id_conflict = (f.name == "id" and
- clash and clash.name == "id" and clash.model == cls)
+ id_conflict = f.name == "id" and clash and clash.name == "id" and clash.model == cls
if clash and not id_conflict:
errors.append(
checks.Error(
@@ -1397,8 +1395,7 @@ class Model(six.with_metaclass(ModelBase)):
)
]
- elif any(not isinstance(fields, (tuple, list))
- for fields in cls._meta.index_together):
+ elif any(not isinstance(fields, (tuple, list)) for fields in cls._meta.index_together):
return [
checks.Error(
"All 'index_together' elements must be lists or tuples.",
@@ -1425,8 +1422,7 @@ class Model(six.with_metaclass(ModelBase)):
)
]
- elif any(not isinstance(fields, (tuple, list))
- for fields in cls._meta.unique_together):
+ elif any(not isinstance(fields, (tuple, list)) for fields in cls._meta.unique_together):
return [
checks.Error(
"All 'unique_together' elements must be lists or tuples.",
diff --git a/django/db/models/deletion.py b/django/db/models/deletion.py
index 7c9db0d87a..07ee0459de 100644
--- a/django/db/models/deletion.py
+++ b/django/db/models/deletion.py
@@ -20,8 +20,9 @@ def CASCADE(collector, field, sub_objs, using):
def PROTECT(collector, field, sub_objs, using):
- raise ProtectedError("Cannot delete some instances of model '%s' because "
- "they are referenced through a protected foreign key: '%s.%s'" % (
+ raise ProtectedError(
+ "Cannot delete some instances of model '%s' because they are "
+ "referenced through a protected foreign key: '%s.%s'" % (
field.remote_field.model.__name__, sub_objs[0].__class__.__name__, field.name
),
sub_objs
@@ -165,7 +166,7 @@ class Collector(object):
return [objs]
def collect(self, objs, source=None, nullable=False, collect_related=True,
- source_attr=None, reverse_dependency=False, keep_parents=False):
+ source_attr=None, reverse_dependency=False, keep_parents=False):
"""
Adds 'objs' to the collection of objects to be deleted as well as all
parent instances. 'objs' must be a homogeneous iterable collection of
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 14f7058285..812e5425fc 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -137,12 +137,12 @@ class Field(RegisterLookupMixin):
description = property(_description)
def __init__(self, verbose_name=None, name=None, primary_key=False,
- max_length=None, unique=False, blank=False, null=False,
- db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
- serialize=True, unique_for_date=None, unique_for_month=None,
- unique_for_year=None, choices=None, help_text='', db_column=None,
- db_tablespace=None, auto_created=False, validators=[],
- error_messages=None):
+ max_length=None, unique=False, blank=False, null=False,
+ db_index=False, rel=None, default=NOT_PROVIDED, editable=True,
+ serialize=True, unique_for_date=None, unique_for_month=None,
+ unique_for_year=None, choices=None, help_text='', db_column=None,
+ db_tablespace=None, auto_created=False, validators=[],
+ error_messages=None):
self.name = name
self.verbose_name = verbose_name # May be set by set_attributes_from_name
self._verbose_name = verbose_name # Store original for deconstruction
@@ -806,8 +806,7 @@ class Field(RegisterLookupMixin):
if callable(self.default):
return self.default()
return self.default
- if (not self.empty_strings_allowed or (self.null and
- not connection.features.interprets_empty_strings_as_nulls)):
+ if not self.empty_strings_allowed or self.null and not connection.features.interprets_empty_strings_as_nulls:
return None
return ""
@@ -1177,10 +1176,8 @@ class DateTimeCheckMixin(object):
# auto_now, auto_now_add, and default are mutually exclusive
# options. The use of more than one of these options together
# will trigger an Error
- mutually_exclusive_options = [self.auto_now_add, self.auto_now,
- self.has_default()]
- enabled_options = [option not in (None, False)
- for option in mutually_exclusive_options].count(True)
+ mutually_exclusive_options = [self.auto_now_add, self.auto_now, self.has_default()]
+ enabled_options = [option not in (None, False) for option in mutually_exclusive_options].count(True)
if enabled_options > 1:
return [
checks.Error(
@@ -1314,12 +1311,14 @@ class DateField(DateTimeCheckMixin, Field):
def contribute_to_class(self, cls, name, **kwargs):
super(DateField, self).contribute_to_class(cls, name, **kwargs)
if not self.null:
- setattr(cls, 'get_next_by_%s' % self.name,
- curry(cls._get_next_or_previous_by_FIELD, field=self,
- is_next=True))
- setattr(cls, 'get_previous_by_%s' % self.name,
- curry(cls._get_next_or_previous_by_FIELD, field=self,
- is_next=False))
+ setattr(
+ cls, 'get_next_by_%s' % self.name,
+ curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=True)
+ )
+ setattr(
+ cls, 'get_previous_by_%s' % self.name,
+ curry(cls._get_next_or_previous_by_FIELD, field=self, is_next=False)
+ )
def get_prep_value(self, value):
value = super(DateField, self).get_prep_value(value)
@@ -1633,8 +1632,7 @@ class DecimalField(Field):
return utils.format_number(value, self.max_digits, self.decimal_places)
def get_db_prep_save(self, value, connection):
- return connection.ops.adapt_decimalfield_value(self.to_python(value),
- self.max_digits, self.decimal_places)
+ return connection.ops.adapt_decimalfield_value(self.to_python(value), self.max_digits, self.decimal_places)
def get_prep_value(self, value):
value = super(DecimalField, self).get_prep_value(value)
@@ -2002,8 +2000,7 @@ class GenericIPAddressField(Field):
value = force_text(value)
value = value.strip()
if ':' in value:
- return clean_ipv6_address(value,
- self.unpack_ipv4, self.error_messages['invalid'])
+ return clean_ipv6_address(value, self.unpack_ipv4, self.error_messages['invalid'])
return value
def get_db_prep_value(self, value, connection, prepared=False):
diff --git a/django/db/models/fields/files.py b/django/db/models/fields/files.py
index 763fdd8093..1d0308b7da 100644
--- a/django/db/models/fields/files.py
+++ b/django/db/models/fields/files.py
@@ -369,8 +369,7 @@ class ImageField(FileField):
descriptor_class = ImageFileDescriptor
description = _("Image")
- def __init__(self, verbose_name=None, name=None, width_field=None,
- height_field=None, **kwargs):
+ def __init__(self, verbose_name=None, name=None, width_field=None, height_field=None, **kwargs):
self.width_field, self.height_field = width_field, height_field
super(ImageField, self).__init__(verbose_name, name, **kwargs)
diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
index 001b0907ab..0539647bcc 100644
--- a/django/db/models/fields/related.py
+++ b/django/db/models/fields/related.py
@@ -221,8 +221,7 @@ class RelatedField(Field):
# model_set and it clashes with Target.model_set.
potential_clashes = rel_opts.fields + rel_opts.many_to_many
for clash_field in potential_clashes:
- clash_name = "%s.%s" % (rel_opts.object_name,
- clash_field.name) # i. e. "Target.model_set"
+ clash_name = "%s.%s" % (rel_opts.object_name, clash_field.name) # i.e. "Target.model_set"
if not rel_is_hidden and clash_field.name == rel_name:
errors.append(
checks.Error(
@@ -441,8 +440,8 @@ class ForeignObject(RelatedField):
rel_class = ForeignObjectRel
def __init__(self, to, on_delete, from_fields, to_fields, rel=None, related_name=None,
- related_query_name=None, limit_choices_to=None, parent_link=False,
- swappable=True, **kwargs):
+ related_query_name=None, limit_choices_to=None, parent_link=False,
+ swappable=True, **kwargs):
if rel is None:
rel = self.rel_class(
@@ -491,8 +490,9 @@ class ForeignObject(RelatedField):
has_unique_constraint = any(u <= foreign_fields for u in unique_foreign_fields)
if not has_unique_constraint and len(self.foreign_related_fields) > 1:
- field_combination = ', '.join("'%s'" % rel_field.name
- for rel_field in self.foreign_related_fields)
+ field_combination = ', '.join(
+ "'%s'" % rel_field.name for rel_field in self.foreign_related_fields
+ )
model_name = self.remote_field.model.__name__
return [
checks.Error(
@@ -743,8 +743,8 @@ class ForeignKey(ForeignObject):
description = _("Foreign Key (type determined by related field)")
def __init__(self, to, on_delete=None, related_name=None, related_query_name=None,
- limit_choices_to=None, parent_link=False, to_field=None,
- db_constraint=True, **kwargs):
+ limit_choices_to=None, parent_link=False, to_field=None,
+ db_constraint=True, **kwargs):
try:
to._meta.model_name
except AttributeError:
@@ -1111,9 +1111,9 @@ class ManyToManyField(RelatedField):
description = _("Many-to-many relationship")
def __init__(self, to, related_name=None, related_query_name=None,
- limit_choices_to=None, symmetrical=None, through=None,
- through_fields=None, db_constraint=True, db_table=None,
- swappable=True, **kwargs):
+ limit_choices_to=None, symmetrical=None, through=None,
+ through_fields=None, db_constraint=True, db_table=None,
+ swappable=True, **kwargs):
try:
to._meta
except AttributeError:
@@ -1241,8 +1241,10 @@ class ManyToManyField(RelatedField):
# Count foreign keys in intermediate model
if self_referential:
- seen_self = sum(from_model == getattr(field.remote_field, 'model', None)
- for field in self.remote_field.through._meta.fields)
+ seen_self = sum(
+ from_model == getattr(field.remote_field, 'model', None)
+ for field in self.remote_field.through._meta.fields
+ )
if seen_self > 2 and not self.remote_field.through_fields:
errors.append(
@@ -1260,10 +1262,14 @@ class ManyToManyField(RelatedField):
else:
# Count foreign keys in relationship model
- seen_from = sum(from_model == getattr(field.remote_field, 'model', None)
- for field in self.remote_field.through._meta.fields)
- seen_to = sum(to_model == getattr(field.remote_field, 'model', None)
- for field in self.remote_field.through._meta.fields)
+ seen_from = sum(
+ from_model == getattr(field.remote_field, 'model', None)
+ for field in self.remote_field.through._meta.fields
+ )
+ seen_to = sum(
+ to_model == getattr(field.remote_field, 'model', None)
+ for field in self.remote_field.through._meta.fields
+ )
if seen_from > 1 and not self.remote_field.through_fields:
errors.append(
@@ -1469,8 +1475,7 @@ class ManyToManyField(RelatedField):
elif self.db_table:
return self.db_table
else:
- return utils.truncate_name('%s_%s' % (opts.db_table, self.name),
- connection.ops.max_name_length())
+ return utils.truncate_name('%s_%s' % (opts.db_table, self.name), connection.ops.max_name_length())
def _get_m2m_attr(self, related, attr):
"""
diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py
index b6349e5c49..8599911a41 100644
--- a/django/db/models/fields/related_descriptors.py
+++ b/django/db/models/fields/related_descriptors.py
@@ -868,16 +868,19 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
def clear(self):
db = router.db_for_write(self.through, instance=self.instance)
with transaction.atomic(using=db, savepoint=False):
- signals.m2m_changed.send(sender=self.through, action="pre_clear",
+ signals.m2m_changed.send(
+ sender=self.through, action="pre_clear",
instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=None, using=db)
-
+ model=self.model, pk_set=None, using=db,
+ )
filters = self._build_remove_filters(super(ManyRelatedManager, self).get_queryset().using(db))
self.through._default_manager.using(db).filter(filters).delete()
- signals.m2m_changed.send(sender=self.through, action="post_clear",
+ signals.m2m_changed.send(
+ sender=self.through, action="post_clear",
instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=None, using=db)
+ model=self.model, pk_set=None, using=db,
+ )
clear.alters_data = True
def set(self, objs, **kwargs):
@@ -905,9 +908,10 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
new_objs = []
for obj in objs:
- fk_val = (self.target_field.get_foreign_related_value(obj)[0]
- if isinstance(obj, self.model) else obj)
-
+ fk_val = (
+ self.target_field.get_foreign_related_value(obj)[0]
+ if isinstance(obj, self.model) else obj
+ )
if fk_val in old_ids:
old_ids.remove(fk_val)
else:
@@ -998,9 +1002,11 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
if self.reverse or source_field_name == self.source_field_name:
# Don't send the signal when we are inserting the
# duplicate data row for symmetrical reverse entries.
- signals.m2m_changed.send(sender=self.through, action='pre_add',
+ signals.m2m_changed.send(
+ sender=self.through, action='pre_add',
instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=new_ids, using=db)
+ model=self.model, pk_set=new_ids, using=db,
+ )
# Add the ones that aren't there already
self.through._default_manager.using(db).bulk_create([
@@ -1014,9 +1020,11 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
if self.reverse or source_field_name == self.source_field_name:
# Don't send the signal when we are inserting the
# duplicate data row for symmetrical reverse entries.
- signals.m2m_changed.send(sender=self.through, action='post_add',
+ signals.m2m_changed.send(
+ sender=self.through, action='post_add',
instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=new_ids, using=db)
+ model=self.model, pk_set=new_ids, using=db,
+ )
def _remove_items(self, source_field_name, target_field_name, *objs):
# source_field_name: the PK colname in join table for the source object
@@ -1037,9 +1045,11 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
db = router.db_for_write(self.through, instance=self.instance)
with transaction.atomic(using=db, savepoint=False):
# Send a signal to the other end if need be.
- signals.m2m_changed.send(sender=self.through, action="pre_remove",
+ signals.m2m_changed.send(
+ sender=self.through, action="pre_remove",
instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=old_ids, using=db)
+ model=self.model, pk_set=old_ids, using=db,
+ )
target_model_qs = super(ManyRelatedManager, self).get_queryset()
if target_model_qs._has_filters():
old_vals = target_model_qs.using(db).filter(**{
@@ -1049,8 +1059,10 @@ def create_forward_many_to_many_manager(superclass, rel, reverse):
filters = self._build_remove_filters(old_vals)
self.through._default_manager.using(db).filter(filters).delete()
- signals.m2m_changed.send(sender=self.through, action="post_remove",
+ signals.m2m_changed.send(
+ sender=self.through, action="post_remove",
instance=self.instance, reverse=self.reverse,
- model=self.model, pk_set=old_ids, using=db)
+ model=self.model, pk_set=old_ids, using=db,
+ )
return ManyRelatedManager
diff --git a/django/db/models/fields/reverse_related.py b/django/db/models/fields/reverse_related.py
index 0d2ed35c69..93f0d4aba0 100644
--- a/django/db/models/fields/reverse_related.py
+++ b/django/db/models/fields/reverse_related.py
@@ -40,7 +40,7 @@ class ForeignObjectRel(object):
null = True
def __init__(self, field, to, related_name=None, related_query_name=None,
- limit_choices_to=None, parent_link=False, on_delete=None):
+ limit_choices_to=None, parent_link=False, on_delete=None):
self.field = field
self.model = to
self.related_name = related_name
@@ -212,7 +212,7 @@ class ManyToOneRel(ForeignObjectRel):
"""
def __init__(self, field, to, field_name, related_name=None, related_query_name=None,
- limit_choices_to=None, parent_link=False, on_delete=None):
+ limit_choices_to=None, parent_link=False, on_delete=None):
super(ManyToOneRel, self).__init__(
field, to,
related_name=related_name,
@@ -235,8 +235,7 @@ class ManyToOneRel(ForeignObjectRel):
"""
field = self.model._meta.get_field(self.field_name)
if not field.concrete:
- raise exceptions.FieldDoesNotExist("No related field named '%s'" %
- self.field_name)
+ raise exceptions.FieldDoesNotExist("No related field named '%s'" % self.field_name)
return field
def set_field_name(self):
@@ -252,7 +251,7 @@ class OneToOneRel(ManyToOneRel):
"""
def __init__(self, field, to, field_name, related_name=None, related_query_name=None,
- limit_choices_to=None, parent_link=False, on_delete=None):
+ limit_choices_to=None, parent_link=False, on_delete=None):
super(OneToOneRel, self).__init__(
field, to, field_name,
related_name=related_name,
@@ -274,8 +273,8 @@ class ManyToManyRel(ForeignObjectRel):
"""
def __init__(self, field, to, related_name=None, related_query_name=None,
- limit_choices_to=None, symmetrical=True, through=None, through_fields=None,
- db_constraint=True):
+ limit_choices_to=None, symmetrical=True, through=None,
+ through_fields=None, db_constraint=True):
super(ManyToManyRel, self).__init__(
field, to,
related_name=related_name,
diff --git a/django/db/models/options.py b/django/db/models/options.py
index a0b2f56082..0432d6958a 100644
--- a/django/db/models/options.py
+++ b/django/db/models/options.py
@@ -28,13 +28,14 @@ IMMUTABLE_WARNING = (
"for your own use, make a copy first."
)
-DEFAULT_NAMES = ('verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
- 'unique_together', 'permissions', 'get_latest_by',
- 'order_with_respect_to', 'app_label', 'db_tablespace',
- 'abstract', 'managed', 'proxy', 'swappable', 'auto_created',
- 'index_together', 'apps', 'default_permissions',
- 'select_on_save', 'default_related_name',
- 'required_db_features', 'required_db_vendor')
+DEFAULT_NAMES = (
+ 'verbose_name', 'verbose_name_plural', 'db_table', 'ordering',
+ 'unique_together', 'permissions', 'get_latest_by', 'order_with_respect_to',
+ 'app_label', 'db_tablespace', 'abstract', 'managed', 'proxy', 'swappable',
+ 'auto_created', 'index_together', 'apps', 'default_permissions',
+ 'select_on_save', 'default_related_name', 'required_db_features',
+ 'required_db_vendor',
+)
def normalize_together(option_together):
@@ -249,8 +250,7 @@ class Options(object):
field.primary_key = True
self.setup_pk(field)
else:
- auto = AutoField(verbose_name='ID', primary_key=True,
- auto_created=True)
+ auto = AutoField(verbose_name='ID', primary_key=True, auto_created=True)
model.add_to_class('id', auto)
def add_field(self, field, virtual=False):
@@ -385,8 +385,7 @@ class Options(object):
return make_immutable_fields_list(
"fields",
(f for f in self._get_fields(reverse=False)
- if is_not_an_m2m_field(f) and is_not_a_generic_relation(f) and
- is_not_a_generic_foreign_key(f))
+ if is_not_an_m2m_field(f) and is_not_a_generic_relation(f) and is_not_a_generic_foreign_key(f))
)
@cached_property
@@ -426,8 +425,7 @@ class Options(object):
"""
return make_immutable_fields_list(
"many_to_many",
- (f for f in self._get_fields(reverse=False)
- if f.is_relation and f.many_to_many)
+ (f for f in self._get_fields(reverse=False) if f.is_relation and f.many_to_many)
)
@cached_property
@@ -444,8 +442,7 @@ class Options(object):
all_related_fields = self._get_fields(forward=False, reverse=True, include_hidden=True)
return make_immutable_fields_list(
"related_objects",
- (obj for obj in all_related_fields
- if not obj.hidden or obj.field.many_to_many)
+ (obj for obj in all_related_fields if not obj.hidden or obj.field.many_to_many)
)
@cached_property
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 150d77bc91..61c52167c7 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -220,9 +220,10 @@ class QuerySet(object):
if pickled_version:
current_version = get_version()
if current_version != pickled_version:
- msg = ("Pickled queryset instance's Django version %s does"
- " not match the current version %s."
- % (pickled_version, current_version))
+ msg = (
+ "Pickled queryset instance's Django version %s does not "
+ "match the current version %s." % (pickled_version, current_version)
+ )
else:
msg = "Pickled queryset instance's Django version is not specified."
@@ -673,9 +674,7 @@ class QuerySet(object):
def raw(self, raw_query, params=None, translations=None, using=None):
if using is None:
using = self.db
- return RawQuerySet(raw_query, model=self.model,
- params=params, translations=translations,
- using=using)
+ return RawQuerySet(raw_query, model=self.model, params=params, translations=translations, using=using)
def _values(self, *fields):
clone = self._clone()
@@ -726,8 +725,7 @@ class QuerySet(object):
def values_list(self, *fields, **kwargs):
flat = kwargs.pop('flat', False)
if kwargs:
- raise TypeError('Unexpected keyword arguments to values_list: %s'
- % (list(kwargs),))
+ raise TypeError('Unexpected keyword arguments to values_list: %s' % (list(kwargs),))
if flat and len(fields) > 1:
raise TypeError("'flat' is not valid when values_list is called with more than one field.")
@@ -1116,8 +1114,10 @@ class QuerySet(object):
set(self.query.values_select) != set(other.query.values_select) or
set(self.query.extra_select) != set(other.query.extra_select) or
set(self.query.annotation_select) != set(other.query.annotation_select)):
- raise TypeError("Merging '%s' classes must involve the same values in each case."
- % self.__class__.__name__)
+ raise TypeError(
+ "Merging '%s' classes must involve the same values in each case."
+ % self.__class__.__name__
+ )
def _merge_known_related_objects(self, other):
"""
@@ -1214,7 +1214,7 @@ class RawQuerySet(object):
annotated model instances.
"""
def __init__(self, raw_query, model=None, query=None, params=None,
- translations=None, using=None, hints=None):
+ translations=None, using=None, hints=None):
self.raw_query = raw_query
self.model = model
self._db = using
@@ -1291,10 +1291,12 @@ class RawQuerySet(object):
"""
Selects which database this Raw QuerySet should execute its query against.
"""
- return RawQuerySet(self.raw_query, model=self.model,
- query=self.query.clone(using=alias),
- params=self.params, translations=self.translations,
- using=alias)
+ return RawQuerySet(
+ self.raw_query, model=self.model,
+ query=self.query.clone(using=alias),
+ params=self.params, translations=self.translations,
+ using=alias,
+ )
@property
def columns(self):
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index 9fd6e83220..9447f06f85 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -1059,8 +1059,9 @@ class SQLInsertCompiler(SQLCompiler):
if self.connection.features.can_return_id_from_insert:
assert len(self.query.objs) == 1
return self.connection.ops.fetch_returned_insert_id(cursor)
- return self.connection.ops.last_insert_id(cursor,
- self.query.get_meta().db_table, self.query.get_meta().pk.column)
+ return self.connection.ops.last_insert_id(
+ cursor, self.query.get_meta().db_table, self.query.get_meta().pk.column
+ )
class SQLDeleteCompiler(SQLCompiler):
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index 4a5eb1701a..6946c273c7 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -576,8 +576,7 @@ class Query(object):
# really make sense (or return consistent value sets). Not worth
# the extra complexity when you can write a real query instead.
if self._extra and rhs._extra:
- raise ValueError("When merging querysets using 'or', you "
- "cannot have extra(select=...) on both sides.")
+ raise ValueError("When merging querysets using 'or', you cannot have extra(select=...) on both sides.")
self.extra.update(rhs.extra)
extra_select_mask = set()
if self.extra_select_mask is not None:
diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py
index 266b6a017c..316a5c684d 100644
--- a/django/db/models/sql/subqueries.py
+++ b/django/db/models/sql/subqueries.py
@@ -105,8 +105,7 @@ class UpdateQuery(Query):
self.related_updates = {}
def clone(self, klass=None, **kwargs):
- return super(UpdateQuery, self).clone(klass,
- related_updates=self.related_updates.copy(), **kwargs)
+ return super(UpdateQuery, self).clone(klass, related_updates=self.related_updates.copy(), **kwargs)
def update_batch(self, pk_list, values, using):
self.add_update_values(values)
diff --git a/django/dispatch/dispatcher.py b/django/dispatch/dispatcher.py
index 2878ffac02..052c72c777 100644
--- a/django/dispatch/dispatcher.py
+++ b/django/dispatch/dispatcher.py
@@ -144,8 +144,7 @@ class Signal(object):
the unique identifier of the receiver to disconnect
"""
if weak is not None:
- warnings.warn("Passing `weak` to disconnect has no effect.",
- RemovedInDjango20Warning, stacklevel=2)
+ warnings.warn("Passing `weak` to disconnect has no effect.", RemovedInDjango20Warning, stacklevel=2)
if dispatch_uid:
lookup_key = (dispatch_uid, _make_id(sender))
else:
diff --git a/django/forms/fields.py b/django/forms/fields.py
index 3ad362b9b8..c6704883a3 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -775,8 +775,10 @@ class ChoiceField(Field):
def __init__(self, choices=(), required=True, widget=None, label=None,
initial=None, help_text='', *args, **kwargs):
- super(ChoiceField, self).__init__(required=required, widget=widget, label=label,
- initial=initial, help_text=help_text, *args, **kwargs)
+ super(ChoiceField, self).__init__(
+ required=required, widget=widget, label=label, initial=initial,
+ help_text=help_text, *args, **kwargs
+ )
self.choices = choices
def __deepcopy__(self, memo):
@@ -1090,9 +1092,10 @@ class FilePathField(ChoiceField):
initial=None, help_text='', *args, **kwargs):
self.path, self.match, self.recursive = path, match, recursive
self.allow_files, self.allow_folders = allow_files, allow_folders
- super(FilePathField, self).__init__(choices=(), required=required,
- widget=widget, label=label, initial=initial, help_text=help_text,
- *args, **kwargs)
+ super(FilePathField, self).__init__(
+ choices=(), required=required, widget=widget, label=label,
+ initial=initial, help_text=help_text, *args, **kwargs
+ )
if self.required:
self.choices = []
diff --git a/django/forms/forms.py b/django/forms/forms.py
index 0a15ec510f..df382deda9 100644
--- a/django/forms/forms.py
+++ b/django/forms/forms.py
@@ -38,8 +38,7 @@ class DeclarativeFieldsMetaclass(MediaDefiningClass):
current_fields.sort(key=lambda x: x[1].creation_counter)
attrs['declared_fields'] = OrderedDict(current_fields)
- new_class = (super(DeclarativeFieldsMetaclass, mcs)
- .__new__(mcs, name, bases, attrs))
+ new_class = super(DeclarativeFieldsMetaclass, mcs).__new__(mcs, name, bases, attrs)
# Walk through the MRO.
declared_fields = OrderedDict()
diff --git a/django/forms/models.py b/django/forms/models.py
index b06709ea23..849f7a111a 100644
--- a/django/forms/models.py
+++ b/django/forms/models.py
@@ -738,14 +738,15 @@ class BaseModelFormSet(BaseFormSet):
"field": unique_check[0],
}
else:
- return ugettext("Please correct the duplicate data for %(field)s, "
- "which must be unique.") % {
+ return ugettext("Please correct the duplicate data for %(field)s, which must be unique.") % {
"field": get_text_list(unique_check, six.text_type(_("and"))),
}
def get_date_error_message(self, date_check):
- return ugettext("Please correct the duplicate data for %(field_name)s "
- "which must be unique for the %(lookup)s in %(date_field)s.") % {
+ return ugettext(
+ "Please correct the duplicate data for %(field_name)s "
+ "which must be unique for the %(lookup)s in %(date_field)s."
+ ) % {
'field_name': date_check[2],
'date_field': date_check[3],
'lookup': six.text_type(date_check[1]),
@@ -1126,8 +1127,7 @@ class ModelChoiceIterator(object):
yield self.choice(obj)
def __len__(self):
- return (len(self.queryset) +
- (1 if self.field.empty_label is not None else 0))
+ return (len(self.queryset) + (1 if self.field.empty_label is not None else 0))
def choice(self, obj):
return (self.field.prepare_value(obj), self.field.label_from_instance(obj))
@@ -1252,8 +1252,10 @@ class ModelMultipleChoiceField(ModelChoiceField):
def __init__(self, queryset, required=True, widget=None, label=None,
initial=None, help_text='', *args, **kwargs):
- super(ModelMultipleChoiceField, self).__init__(queryset, None,
- required, widget, label, initial, help_text, *args, **kwargs)
+ super(ModelMultipleChoiceField, self).__init__(
+ queryset, None, required, widget, label, initial, help_text,
+ *args, **kwargs
+ )
def to_python(self, value):
if not value:
diff --git a/django/forms/widgets.py b/django/forms/widgets.py
index f48f84dfa8..4ec2cce075 100644
--- a/django/forms/widgets.py
+++ b/django/forms/widgets.py
@@ -147,8 +147,7 @@ class MediaDefiningClass(type):
Metaclass for classes that can have media definitions.
"""
def __new__(mcs, name, bases, attrs):
- new_class = (super(MediaDefiningClass, mcs)
- .__new__(mcs, name, bases, attrs))
+ new_class = super(MediaDefiningClass, mcs).__new__(mcs, name, bases, attrs)
if 'media' not in attrs:
new_class.media = media_property(new_class)
@@ -433,9 +432,7 @@ class Textarea(Widget):
if value is None:
value = ''
final_attrs = self.build_attrs(attrs, name=name)
- return format_html('',
- flatatt(final_attrs),
- force_text(value))
+ return format_html('', flatatt(final_attrs), force_text(value))
class DateTimeBaseInput(TextInput):
@@ -447,8 +444,7 @@ class DateTimeBaseInput(TextInput):
self.format = format if format else None
def _format_value(self, value):
- return formats.localize_input(value,
- self.format or formats.get_format(self.format_key)[0])
+ return formats.localize_input(value, self.format or formats.get_format(self.format_key)[0])
class DateInput(DateTimeBaseInput):
@@ -536,10 +532,7 @@ class Select(Widget):
selected_choices.remove(option_value)
else:
selected_html = ''
- return format_html('',
- option_value,
- selected_html,
- force_text(option_label))
+ return format_html('', option_value, selected_html, force_text(option_label))
def render_options(self, selected_choices):
# Normalize to strings.
@@ -561,9 +554,11 @@ class NullBooleanSelect(Select):
A Select Widget intended to be used with NullBooleanField.
"""
def __init__(self, attrs=None):
- choices = (('1', ugettext_lazy('Unknown')),
- ('2', ugettext_lazy('Yes')),
- ('3', ugettext_lazy('No')))
+ choices = (
+ ('1', ugettext_lazy('Unknown')),
+ ('2', ugettext_lazy('Yes')),
+ ('3', ugettext_lazy('No')),
+ )
super(NullBooleanSelect, self).__init__(attrs, choices)
def render(self, name, value, attrs=None):
@@ -575,12 +570,14 @@ class NullBooleanSelect(Select):
def value_from_datadict(self, data, files, name):
value = data.get(name)
- return {'2': True,
- True: True,
- 'True': True,
- '3': False,
- 'False': False,
- False: False}.get(value)
+ return {
+ '2': True,
+ True: True,
+ 'True': True,
+ '3': False,
+ 'False': False,
+ False: False,
+ }.get(value)
class SelectMultiple(Select):
@@ -714,16 +711,18 @@ class ChoiceFieldRenderer(object):
choices=choice_label,
)
sub_ul_renderer.choice_input_class = self.choice_input_class
- output.append(format_html(self.inner_html, choice_value=choice_value,
- sub_widgets=sub_ul_renderer.render()))
+ output.append(format_html(
+ self.inner_html, choice_value=choice_value,
+ sub_widgets=sub_ul_renderer.render(),
+ ))
else:
- w = self.choice_input_class(self.name, self.value,
- self.attrs.copy(), choice, i)
- output.append(format_html(self.inner_html,
- choice_value=force_text(w), sub_widgets=''))
- return format_html(self.outer_html,
- id_attr=format_html(' id="{}"', id_) if id_ else '',
- content=mark_safe('\n'.join(output)))
+ w = self.choice_input_class(self.name, self.value, self.attrs.copy(), choice, i)
+ output.append(format_html(self.inner_html, choice_value=force_text(w), sub_widgets=''))
+ return format_html(
+ self.outer_html,
+ id_attr=format_html(' id="{}"', id_) if id_ else '',
+ content=mark_safe('\n'.join(output)),
+ )
class RadioFieldRenderer(ChoiceFieldRenderer):
@@ -889,8 +888,10 @@ class SplitDateTimeWidget(MultiWidget):
supports_microseconds = False
def __init__(self, attrs=None, date_format=None, time_format=None):
- widgets = (DateInput(attrs=attrs, format=date_format),
- TimeInput(attrs=attrs, format=time_format))
+ widgets = (
+ DateInput(attrs=attrs, format=date_format),
+ TimeInput(attrs=attrs, format=time_format),
+ )
super(SplitDateTimeWidget, self).__init__(widgets, attrs)
def decompress(self, value):
diff --git a/django/http/response.py b/django/http/response.py
index da9f9ef6a6..f91a46bbbe 100644
--- a/django/http/response.py
+++ b/django/http/response.py
@@ -366,8 +366,10 @@ class StreamingHttpResponse(HttpResponseBase):
@property
def content(self):
- raise AttributeError("This %s instance has no `content` attribute. "
- "Use `streaming_content` instead." % self.__class__.__name__)
+ raise AttributeError(
+ "This %s instance has no `content` attribute. Use "
+ "`streaming_content` instead." % self.__class__.__name__
+ )
@property
def streaming_content(self):
@@ -508,8 +510,10 @@ class JsonResponse(HttpResponse):
def __init__(self, data, encoder=DjangoJSONEncoder, safe=True,
json_dumps_params=None, **kwargs):
if safe and not isinstance(data, dict):
- raise TypeError('In order to allow non-dict objects to be '
- 'serialized set the safe parameter to False')
+ raise TypeError(
+ 'In order to allow non-dict objects to be serialized set the '
+ 'safe parameter to False.'
+ )
if json_dumps_params is None:
json_dumps_params = {}
kwargs.setdefault('content_type', 'application/json')
diff --git a/django/middleware/csrf.py b/django/middleware/csrf.py
index ca6c053339..823fa46047 100644
--- a/django/middleware/csrf.py
+++ b/django/middleware/csrf.py
@@ -97,7 +97,8 @@ class CsrfViewMiddleware(object):
return None
def _reject(self, request, reason):
- logger.warning('Forbidden (%s): %s', reason, request.path,
+ logger.warning(
+ 'Forbidden (%s): %s', reason, request.path,
extra={
'status_code': 403,
'request': request,
@@ -106,7 +107,6 @@ class CsrfViewMiddleware(object):
return _get_failure_view()(request, reason=reason)
def process_view(self, request, callback, callback_args, callback_kwargs):
-
if getattr(request, 'csrf_processing_done', False):
return None
diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py
index a7c9b718ff..fb473ec99d 100644
--- a/django/template/defaultfilters.py
+++ b/django/template/defaultfilters.py
@@ -168,8 +168,7 @@ def floatformat(text, arg=-1):
# Avoid conversion to scientific notation by accessing `sign`, `digits`
# and `exponent` from `Decimal.as_tuple()` directly.
- sign, digits, exponent = d.quantize(exp, ROUND_HALF_UP,
- Context(prec=prec)).as_tuple()
+ sign, digits, exponent = d.quantize(exp, ROUND_HALF_UP, Context(prec=prec)).as_tuple()
digits = [six.text_type(digit) for digit in reversed(digits)]
while len(digits) <= abs(exponent):
digits.append('0')
@@ -367,8 +366,7 @@ def urlizetrunc(value, limit, autoescape=True):
Argument: Length to truncate URLs to.
"""
- return mark_safe(_urlize(value, trim_url_limit=int(limit), nofollow=True,
- autoescape=autoescape))
+ return mark_safe(_urlize(value, trim_url_limit=int(limit), nofollow=True, autoescape=autoescape))
@register.filter(is_safe=False)
diff --git a/django/template/library.py b/django/template/library.py
index 23364e8024..04f4a7322d 100644
--- a/django/template/library.py
+++ b/django/template/library.py
@@ -119,8 +119,10 @@ class Library(object):
if len(bits) >= 2 and bits[-2] == 'as':
target_var = bits[-1]
bits = bits[:-2]
- args, kwargs = parse_bits(parser, bits, params,
- varargs, varkw, defaults, takes_context, function_name)
+ args, kwargs = parse_bits(
+ parser, bits, params, varargs, varkw, defaults,
+ takes_context, function_name
+ )
return SimpleNode(func, takes_context, args, kwargs, target_var)
self.tag(function_name, compile_func)
return func
diff --git a/django/template/response.py b/django/template/response.py
index e76cf9f5a6..944a1dcd17 100644
--- a/django/template/response.py
+++ b/django/template/response.py
@@ -119,15 +119,17 @@ class SimpleTemplateResponse(HttpResponse):
def __iter__(self):
if not self._is_rendered:
- raise ContentNotRenderedError('The response content must be '
- 'rendered before it can be iterated over.')
+ raise ContentNotRenderedError(
+ 'The response content must be rendered before it can be iterated over.'
+ )
return super(SimpleTemplateResponse, self).__iter__()
@property
def content(self):
if not self._is_rendered:
- raise ContentNotRenderedError('The response content must be '
- 'rendered before it can be accessed.')
+ raise ContentNotRenderedError(
+ 'The response content must be rendered before it can be accessed.'
+ )
return super(SimpleTemplateResponse, self).content
@content.setter
@@ -142,7 +144,7 @@ class TemplateResponse(SimpleTemplateResponse):
rendering_attrs = SimpleTemplateResponse.rendering_attrs + ['_request']
def __init__(self, request, template, context=None, content_type=None,
- status=None, charset=None, using=None):
+ status=None, charset=None, using=None):
super(TemplateResponse, self).__init__(
template, context, content_type, status, charset, using)
self._request = request
diff --git a/django/templatetags/cache.py b/django/templatetags/cache.py
index 997e03fc99..1b49bca1b6 100644
--- a/django/templatetags/cache.py
+++ b/django/templatetags/cache.py
@@ -86,8 +86,8 @@ def do_cache(parser, token):
tokens = tokens[:-1]
else:
cache_name = None
- return CacheNode(nodelist,
- parser.compile_filter(tokens[1]),
+ return CacheNode(
+ nodelist, parser.compile_filter(tokens[1]),
tokens[2], # fragment_name can't be a variable.
[parser.compile_filter(t) for t in tokens[3:]],
cache_name,
diff --git a/django/templatetags/i18n.py b/django/templatetags/i18n.py
index 9420ecd507..0c4f03e948 100644
--- a/django/templatetags/i18n.py
+++ b/django/templatetags/i18n.py
@@ -102,7 +102,7 @@ class TranslateNode(Node):
class BlockTranslateNode(Node):
def __init__(self, extra_context, singular, plural=None, countervar=None,
- counter=None, message_context=None, trimmed=False, asvar=None):
+ counter=None, message_context=None, trimmed=False, asvar=None):
self.extra_context = extra_context
self.singular = singular
self.plural = plural
@@ -169,8 +169,10 @@ class BlockTranslateNode(Node):
except (KeyError, ValueError):
if nested:
# Either string is malformed, or it's a bug
- raise TemplateSyntaxError("'blocktrans' is unable to format "
- "string returned by gettext: %r using %r" % (result, data))
+ raise TemplateSyntaxError(
+ "'blocktrans' is unable to format string returned by gettext: %r using %r"
+ % (result, data)
+ )
with translation.override(None):
result = self.render(context, nested=True)
if self.asvar:
diff --git a/django/test/html.py b/django/test/html.py
index 79331a098e..84f4862693 100644
--- a/django/test/html.py
+++ b/django/test/html.py
@@ -148,8 +148,10 @@ class RootElement(Element):
class Parser(HTMLParser):
- SELF_CLOSING_TAGS = ('br', 'hr', 'input', 'img', 'meta', 'spacer',
- 'link', 'frame', 'base', 'col')
+ SELF_CLOSING_TAGS = (
+ 'br', 'hr', 'input', 'img', 'meta', 'spacer', 'link', 'frame', 'base',
+ 'col',
+ )
def __init__(self):
HTMLParser.__init__(self)
diff --git a/django/test/runner.py b/django/test/runner.py
index b025e2a1f7..c60f5e8a72 100644
--- a/django/test/runner.py
+++ b/django/test/runner.py
@@ -376,29 +376,39 @@ class DiscoverRunner(object):
@classmethod
def add_arguments(cls, parser):
- parser.add_argument('-t', '--top-level-directory',
- action='store', dest='top_level', default=None,
- help='Top level of project for unittest discovery.')
- parser.add_argument('-p', '--pattern', action='store', dest='pattern',
- default="test*.py",
- help='The test matching pattern. Defaults to test*.py.')
- parser.add_argument('-k', '--keepdb', action='store_true', dest='keepdb',
- default=False,
- help='Preserves the test DB between runs.')
- parser.add_argument('-r', '--reverse', action='store_true', dest='reverse',
- default=False,
- help='Reverses test cases order.')
- parser.add_argument('-d', '--debug-sql', action='store_true', dest='debug_sql',
- default=False,
- help='Prints logged SQL queries on failure.')
+ parser.add_argument(
+ '-t', '--top-level-directory', action='store', dest='top_level', default=None,
+ help='Top level of project for unittest discovery.',
+ )
+ parser.add_argument(
+ '-p', '--pattern', action='store', dest='pattern', default="test*.py",
+ help='The test matching pattern. Defaults to test*.py.',
+ )
+ parser.add_argument(
+ '-k', '--keepdb', action='store_true', dest='keepdb', default=False,
+ help='Preserves the test DB between runs.'
+ )
+ parser.add_argument(
+ '-r', '--reverse', action='store_true', dest='reverse', default=False,
+ help='Reverses test cases order.',
+ )
+ parser.add_argument(
+ '-d', '--debug-sql', action='store_true', dest='debug_sql', default=False,
+ help='Prints logged SQL queries on failure.',
+ )
parser.add_argument(
'--parallel', dest='parallel', nargs='?', default=1, type=int,
const=default_test_processes(), metavar='N',
- help='Run tests using up to N parallel processes.')
- parser.add_argument('--tag', action='append', dest='tags',
- help='Run only tests with the specified tag. Can be used multiple times.')
- parser.add_argument('--exclude-tag', action='append', dest='exclude_tags',
- help='Do not run tests with the specified tag. Can be used multiple times.')
+ help='Run tests using up to N parallel processes.',
+ )
+ parser.add_argument(
+ '--tag', action='append', dest='tags',
+ help='Run only tests with the specified tag. Can be used multiple times.',
+ )
+ parser.add_argument(
+ '--exclude-tag', action='append', dest='exclude_tags',
+ help='Do not run tests with the specified tag. Can be used multiple times.',
+ )
def setup_test_environment(self, **kwargs):
setup_test_environment()
diff --git a/django/test/testcases.py b/django/test/testcases.py
index c989a8748a..26a1325532 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -199,8 +199,10 @@ class SimpleTestCase(unittest.TestCase):
include a call to super().setUp().
"""
testMethod = getattr(self, self._testMethodName)
- skipped = (getattr(self.__class__, "__unittest_skip__", False) or
- getattr(testMethod, "__unittest_skip__", False))
+ skipped = (
+ getattr(self.__class__, "__unittest_skip__", False) or
+ getattr(testMethod, "__unittest_skip__", False)
+ )
if not skipped:
try:
@@ -263,30 +265,34 @@ class SimpleTestCase(unittest.TestCase):
if hasattr(response, 'redirect_chain'):
# The request was a followed redirect
- self.assertTrue(len(response.redirect_chain) > 0,
- msg_prefix + "Response didn't redirect as expected: Response"
- " code was %d (expected %d)" %
- (response.status_code, status_code))
+ self.assertTrue(
+ len(response.redirect_chain) > 0,
+ msg_prefix + "Response didn't redirect as expected: Response code was %d (expected %d)"
+ % (response.status_code, status_code)
+ )
- self.assertEqual(response.redirect_chain[0][1], status_code,
- msg_prefix + "Initial response didn't redirect as expected:"
- " Response code was %d (expected %d)" %
- (response.redirect_chain[0][1], status_code))
+ self.assertEqual(
+ response.redirect_chain[0][1], status_code,
+ msg_prefix + "Initial response didn't redirect as expected: Response code was %d (expected %d)"
+ % (response.redirect_chain[0][1], status_code)
+ )
url, status_code = response.redirect_chain[-1]
scheme, netloc, path, query, fragment = urlsplit(url)
- self.assertEqual(response.status_code, target_status_code,
- msg_prefix + "Response didn't redirect as expected: Final"
- " Response code was %d (expected %d)" %
- (response.status_code, target_status_code))
+ self.assertEqual(
+ response.status_code, target_status_code,
+ msg_prefix + "Response didn't redirect as expected: Final Response code was %d (expected %d)"
+ % (response.status_code, target_status_code)
+ )
else:
# Not a followed redirect
- self.assertEqual(response.status_code, status_code,
- msg_prefix + "Response didn't redirect as expected: Response"
- " code was %d (expected %d)" %
- (response.status_code, status_code))
+ self.assertEqual(
+ response.status_code, status_code,
+ msg_prefix + "Response didn't redirect as expected: Response code was %d (expected %d)"
+ % (response.status_code, status_code)
+ )
url = response.url
scheme, netloc, path, query, fragment = urlsplit(url)
@@ -297,15 +303,15 @@ class SimpleTestCase(unittest.TestCase):
path = urljoin(response.request['PATH_INFO'], path)
if fetch_redirect_response:
- redirect_response = response.client.get(path, QueryDict(query),
- secure=(scheme == 'https'))
+ redirect_response = response.client.get(path, QueryDict(query), secure=(scheme == 'https'))
# Get the redirection page, using the same client that was used
# to obtain the original response.
- self.assertEqual(redirect_response.status_code, target_status_code,
- msg_prefix + "Couldn't retrieve redirection page '%s':"
- " response code was %d (expected %d)" %
- (path, redirect_response.status_code, target_status_code))
+ self.assertEqual(
+ redirect_response.status_code, target_status_code,
+ msg_prefix + "Couldn't retrieve redirection page '%s': response code was %d (expected %d)"
+ % (path, redirect_response.status_code, target_status_code)
+ )
if url != expected_url:
# For temporary backwards compatibility, try to compare with a relative url
@@ -320,9 +326,10 @@ class SimpleTestCase(unittest.TestCase):
RemovedInDjango20Warning, stacklevel=2)
expected_url = relative_url
- self.assertEqual(url, expected_url,
- msg_prefix + "Response redirected to '%s', expected '%s'" %
- (url, expected_url))
+ self.assertEqual(
+ url, expected_url,
+ msg_prefix + "Response redirected to '%s', expected '%s'" % (url, expected_url)
+ )
def _assert_contains(self, response, text, status_code, msg_prefix, html):
# If the response supports deferred rendering and hasn't been rendered
@@ -333,9 +340,11 @@ class SimpleTestCase(unittest.TestCase):
if msg_prefix:
msg_prefix += ": "
- self.assertEqual(response.status_code, status_code,
+ self.assertEqual(
+ response.status_code, status_code,
msg_prefix + "Couldn't retrieve content: Response code was %d"
- " (expected %d)" % (response.status_code, status_code))
+ " (expected %d)" % (response.status_code, status_code)
+ )
if response.streaming:
content = b''.join(response.streaming_content)
@@ -348,15 +357,12 @@ class SimpleTestCase(unittest.TestCase):
else:
text_repr = repr(text)
if html:
- content = assert_and_parse_html(self, content, None,
- "Response's content is not valid HTML:")
- text = assert_and_parse_html(self, text, None,
- "Second argument is not valid HTML:")
+ content = assert_and_parse_html(self, content, None, "Response's content is not valid HTML:")
+ text = assert_and_parse_html(self, text, None, "Second argument is not valid HTML:")
real_count = content.count(text)
return (text_repr, real_count, msg_prefix)
- def assertContains(self, response, text, count=None, status_code=200,
- msg_prefix='', html=False):
+ def assertContains(self, response, text, count=None, status_code=200, msg_prefix='', html=False):
"""
Asserts that a response indicates that some content was retrieved
successfully, (i.e., the HTTP status code was as expected), and that
@@ -368,15 +374,14 @@ class SimpleTestCase(unittest.TestCase):
response, text, status_code, msg_prefix, html)
if count is not None:
- self.assertEqual(real_count, count,
- msg_prefix + "Found %d instances of %s in response"
- " (expected %d)" % (real_count, text_repr, count))
+ self.assertEqual(
+ real_count, count,
+ msg_prefix + "Found %d instances of %s in response (expected %d)" % (real_count, text_repr, count)
+ )
else:
- self.assertTrue(real_count != 0,
- msg_prefix + "Couldn't find %s in response" % text_repr)
+ self.assertTrue(real_count != 0, msg_prefix + "Couldn't find %s in response" % text_repr)
- def assertNotContains(self, response, text, status_code=200,
- msg_prefix='', html=False):
+ def assertNotContains(self, response, text, status_code=200, msg_prefix='', html=False):
"""
Asserts that a response indicates that some content was retrieved
successfully, (i.e., the HTTP status code was as expected), and that
@@ -385,8 +390,7 @@ class SimpleTestCase(unittest.TestCase):
text_repr, real_count, msg_prefix = self._assert_contains(
response, text, status_code, msg_prefix, html)
- self.assertEqual(real_count, 0,
- msg_prefix + "Response should not contain %s" % text_repr)
+ self.assertEqual(real_count, 0, msg_prefix + "Response should not contain %s" % text_repr)
def assertFormError(self, response, form, field, errors, msg_prefix=''):
"""
@@ -399,8 +403,7 @@ class SimpleTestCase(unittest.TestCase):
# Put context(s) into a list to simplify processing.
contexts = to_list(response.context)
if not contexts:
- self.fail(msg_prefix + "Response did not use any contexts to "
- "render the response")
+ self.fail(msg_prefix + "Response did not use any contexts to render the response")
# Put error(s) into a list to simplify processing.
errors = to_list(errors)
@@ -415,29 +418,34 @@ class SimpleTestCase(unittest.TestCase):
if field:
if field in context[form].errors:
field_errors = context[form].errors[field]
- self.assertTrue(err in field_errors,
+ self.assertTrue(
+ err in field_errors,
msg_prefix + "The field '%s' on form '%s' in"
" context %d does not contain the error '%s'"
" (actual errors: %s)" %
- (field, form, i, err, repr(field_errors)))
+ (field, form, i, err, repr(field_errors))
+ )
elif field in context[form].fields:
- self.fail(msg_prefix + "The field '%s' on form '%s'"
- " in context %d contains no errors" %
- (field, form, i))
+ self.fail(
+ msg_prefix + "The field '%s' on form '%s' in context %d contains no errors" %
+ (field, form, i)
+ )
else:
- self.fail(msg_prefix + "The form '%s' in context %d"
- " does not contain the field '%s'" %
- (form, i, field))
+ self.fail(
+ msg_prefix + "The form '%s' in context %d does not contain the field '%s'" %
+ (form, i, field)
+ )
else:
non_field_errors = context[form].non_field_errors()
- self.assertTrue(err in non_field_errors,
+ self.assertTrue(
+ err in non_field_errors,
msg_prefix + "The form '%s' in context %d does not"
" contain the non-field error '%s'"
" (actual errors: %s)" %
- (form, i, err, non_field_errors))
+ (form, i, err, non_field_errors)
+ )
if not found_form:
- self.fail(msg_prefix + "The form '%s' was not used to render the"
- " response" % form)
+ self.fail(msg_prefix + "The form '%s' was not used to render the response" % form)
def assertFormsetError(self, response, formset, form_index, field, errors,
msg_prefix=''):
@@ -473,48 +481,51 @@ class SimpleTestCase(unittest.TestCase):
if field is not None:
if field in context[formset].forms[form_index].errors:
field_errors = context[formset].forms[form_index].errors[field]
- self.assertTrue(err in field_errors,
- msg_prefix + "The field '%s' on formset '%s', "
- "form %d in context %d does not contain the "
- "error '%s' (actual errors: %s)" %
- (field, formset, form_index, i, err,
- repr(field_errors)))
+ self.assertTrue(
+ err in field_errors,
+ msg_prefix + "The field '%s' on formset '%s', "
+ "form %d in context %d does not contain the "
+ "error '%s' (actual errors: %s)" %
+ (field, formset, form_index, i, err, repr(field_errors))
+ )
elif field in context[formset].forms[form_index].fields:
- self.fail(msg_prefix + "The field '%s' "
- "on formset '%s', form %d in "
- "context %d contains no errors" %
- (field, formset, form_index, i))
+ self.fail(
+ msg_prefix + "The field '%s' on formset '%s', form %d in context %d contains no errors"
+ % (field, formset, form_index, i)
+ )
else:
- self.fail(msg_prefix + "The formset '%s', form %d in "
- "context %d does not contain the field '%s'" %
- (formset, form_index, i, field))
+ self.fail(
+ msg_prefix + "The formset '%s', form %d in context %d does not contain the field '%s'"
+ % (formset, form_index, i, field)
+ )
elif form_index is not None:
non_field_errors = context[formset].forms[form_index].non_field_errors()
- self.assertFalse(len(non_field_errors) == 0,
- msg_prefix + "The formset '%s', form %d in "
- "context %d does not contain any non-field "
- "errors." % (formset, form_index, i))
- self.assertTrue(err in non_field_errors,
- msg_prefix + "The formset '%s', form %d "
- "in context %d does not contain the "
- "non-field error '%s' "
- "(actual errors: %s)" %
- (formset, form_index, i, err,
- repr(non_field_errors)))
+ self.assertFalse(
+ len(non_field_errors) == 0,
+ msg_prefix + "The formset '%s', form %d in context %d "
+ "does not contain any non-field errors." % (formset, form_index, i)
+ )
+ self.assertTrue(
+ err in non_field_errors,
+ msg_prefix + "The formset '%s', form %d in context %d "
+ "does not contain the non-field error '%s' (actual errors: %s)"
+ % (formset, form_index, i, err, repr(non_field_errors))
+ )
else:
non_form_errors = context[formset].non_form_errors()
- self.assertFalse(len(non_form_errors) == 0,
- msg_prefix + "The formset '%s' in "
- "context %d does not contain any "
- "non-form errors." % (formset, i))
- self.assertTrue(err in non_form_errors,
- msg_prefix + "The formset '%s' in context "
- "%d does not contain the "
- "non-form error '%s' (actual errors: %s)" %
- (formset, i, err, repr(non_form_errors)))
+ self.assertFalse(
+ len(non_form_errors) == 0,
+ msg_prefix + "The formset '%s' in context %d does not "
+ "contain any non-form errors." % (formset, i)
+ )
+ self.assertTrue(
+ err in non_form_errors,
+ msg_prefix + "The formset '%s' in context %d does not "
+ "contain the non-form error '%s' (actual errors: %s)"
+ % (formset, i, err, repr(non_form_errors))
+ )
if not found_formset:
- self.fail(msg_prefix + "The formset '%s' was not used to render "
- "the response" % formset)
+ self.fail(msg_prefix + "The formset '%s' was not used to render the response" % formset)
def _assert_template_used(self, response, template_name, msg_prefix):
@@ -537,8 +548,7 @@ class SimpleTestCase(unittest.TestCase):
# use this template with context manager
return template_name, None, msg_prefix
- template_names = [t.name for t in response.templates if t.name is not
- None]
+ template_names = [t.name for t in response.templates if t.name is not None]
return None, template_names, msg_prefix
def assertTemplateUsed(self, response=None, template_name=None, msg_prefix='', count=None):
@@ -555,33 +565,37 @@ class SimpleTestCase(unittest.TestCase):
if not template_names:
self.fail(msg_prefix + "No templates used to render the response")
- self.assertTrue(template_name in template_names,
+ self.assertTrue(
+ template_name in template_names,
msg_prefix + "Template '%s' was not a template used to render"
- " the response. Actual template(s) used: %s" %
- (template_name, ', '.join(template_names)))
+ " the response. Actual template(s) used: %s"
+ % (template_name, ', '.join(template_names))
+ )
if count is not None:
- self.assertEqual(template_names.count(template_name), count,
+ self.assertEqual(
+ template_names.count(template_name), count,
msg_prefix + "Template '%s' was expected to be rendered %d "
- "time(s) but was actually rendered %d time(s)." %
- (template_name, count, template_names.count(template_name)))
+ "time(s) but was actually rendered %d time(s)."
+ % (template_name, count, template_names.count(template_name))
+ )
def assertTemplateNotUsed(self, response=None, template_name=None, msg_prefix=''):
"""
Asserts that the template with the provided name was NOT used in
rendering the response. Also usable as context manager.
"""
-
context_mgr_template, template_names, msg_prefix = self._assert_template_used(
- response, template_name, msg_prefix)
-
+ response, template_name, msg_prefix
+ )
if context_mgr_template:
# Use assertTemplateNotUsed as context manager.
return _AssertTemplateNotUsedContext(self, context_mgr_template)
- self.assertFalse(template_name in template_names,
- msg_prefix + "Template '%s' was used unexpectedly in rendering"
- " the response" % template_name)
+ self.assertFalse(
+ template_name in template_names,
+ msg_prefix + "Template '%s' was used unexpectedly in rendering the response" % template_name
+ )
@contextmanager
def _assert_raises_message_cm(self, expected_exception, expected_message):
@@ -620,7 +634,7 @@ class SimpleTestCase(unittest.TestCase):
callable_obj(*args, **kwargs)
def assertFieldOutput(self, fieldclass, valid, invalid, field_args=None,
- field_kwargs=None, empty_value=''):
+ field_kwargs=None, empty_value=''):
"""
Asserts that a form field behaves correctly with various inputs.
@@ -639,8 +653,7 @@ class SimpleTestCase(unittest.TestCase):
if field_kwargs is None:
field_kwargs = {}
required = fieldclass(*field_args, **field_kwargs)
- optional = fieldclass(*field_args,
- **dict(field_kwargs, required=False))
+ optional = fieldclass(*field_args, **dict(field_kwargs, required=False))
# test valid inputs
for input, output in valid.items():
self.assertEqual(required.clean(input), output)
@@ -659,14 +672,12 @@ class SimpleTestCase(unittest.TestCase):
for e in required.empty_values:
with self.assertRaises(ValidationError) as context_manager:
required.clean(e)
- self.assertEqual(context_manager.exception.messages,
- error_required)
+ self.assertEqual(context_manager.exception.messages, error_required)
self.assertEqual(optional.clean(e), empty_value)
# test that max_length and min_length are always accepted
if issubclass(fieldclass, CharField):
field_kwargs.update({'min_length': 2, 'max_length': 20})
- self.assertIsInstance(fieldclass(*field_args, **field_kwargs),
- fieldclass)
+ self.assertIsInstance(fieldclass(*field_args, **field_kwargs), fieldclass)
def assertHTMLEqual(self, html1, html2, msg=None):
"""
@@ -674,26 +685,23 @@ class SimpleTestCase(unittest.TestCase):
Whitespace in most cases is ignored, and attribute ordering is not
significant. The passed-in arguments must be valid HTML.
"""
- dom1 = assert_and_parse_html(self, html1, msg,
- 'First argument is not valid HTML:')
- dom2 = assert_and_parse_html(self, html2, msg,
- 'Second argument is not valid HTML:')
+ dom1 = assert_and_parse_html(self, html1, msg, 'First argument is not valid HTML:')
+ dom2 = assert_and_parse_html(self, html2, msg, 'Second argument is not valid HTML:')
if dom1 != dom2:
standardMsg = '%s != %s' % (
safe_repr(dom1, True), safe_repr(dom2, True))
diff = ('\n' + '\n'.join(difflib.ndiff(
- six.text_type(dom1).splitlines(),
- six.text_type(dom2).splitlines())))
+ six.text_type(dom1).splitlines(),
+ six.text_type(dom2).splitlines(),
+ )))
standardMsg = self._truncateMessage(standardMsg, diff)
self.fail(self._formatMessage(msg, standardMsg))
def assertHTMLNotEqual(self, html1, html2, msg=None):
"""Asserts that two HTML snippets are not semantically equivalent."""
- dom1 = assert_and_parse_html(self, html1, msg,
- 'First argument is not valid HTML:')
- dom2 = assert_and_parse_html(self, html2, msg,
- 'Second argument is not valid HTML:')
+ dom1 = assert_and_parse_html(self, html1, msg, 'First argument is not valid HTML:')
+ dom2 = assert_and_parse_html(self, html2, msg, 'Second argument is not valid HTML:')
if dom1 == dom2:
standardMsg = '%s == %s' % (
@@ -701,18 +709,16 @@ class SimpleTestCase(unittest.TestCase):
self.fail(self._formatMessage(msg, standardMsg))
def assertInHTML(self, needle, haystack, count=None, msg_prefix=''):
- needle = assert_and_parse_html(self, needle, None,
- 'First argument is not valid HTML:')
- haystack = assert_and_parse_html(self, haystack, None,
- 'Second argument is not valid HTML:')
+ needle = assert_and_parse_html(self, needle, None, 'First argument is not valid HTML:')
+ haystack = assert_and_parse_html(self, haystack, None, 'Second argument is not valid HTML:')
real_count = haystack.count(needle)
if count is not None:
- self.assertEqual(real_count, count,
- msg_prefix + "Found %d instances of '%s' in response"
- " (expected %d)" % (real_count, needle, count))
+ self.assertEqual(
+ real_count, count,
+ msg_prefix + "Found %d instances of '%s' in response (expected %d)" % (real_count, needle, count)
+ )
else:
- self.assertTrue(real_count != 0,
- msg_prefix + "Couldn't find '%s' in response" % needle)
+ self.assertTrue(real_count != 0, msg_prefix + "Couldn't find '%s' in response" % needle)
def assertJSONEqual(self, raw, expected_data, msg=None):
"""
@@ -821,10 +827,12 @@ class TransactionTestCase(SimpleTestCase):
super(TransactionTestCase, self)._pre_setup()
if self.available_apps is not None:
apps.set_available_apps(self.available_apps)
- setting_changed.send(sender=settings._wrapped.__class__,
- setting='INSTALLED_APPS',
- value=self.available_apps,
- enter=True)
+ setting_changed.send(
+ sender=settings._wrapped.__class__,
+ setting='INSTALLED_APPS',
+ value=self.available_apps,
+ enter=True,
+ )
for db_name in self._databases_names(include_mirrors=False):
emit_post_migrate_signal(verbosity=0, interactive=False, db=db_name)
try:
@@ -832,11 +840,12 @@ class TransactionTestCase(SimpleTestCase):
except Exception:
if self.available_apps is not None:
apps.unset_available_apps()
- setting_changed.send(sender=settings._wrapped.__class__,
- setting='INSTALLED_APPS',
- value=settings.INSTALLED_APPS,
- enter=False)
-
+ setting_changed.send(
+ sender=settings._wrapped.__class__,
+ setting='INSTALLED_APPS',
+ value=settings.INSTALLED_APPS,
+ enter=False,
+ )
raise
@classmethod
@@ -844,8 +853,10 @@ class TransactionTestCase(SimpleTestCase):
# If the test case has a multi_db=True flag, act on all databases,
# including mirrors or not. Otherwise, just on the default DB.
if getattr(cls, 'multi_db', False):
- return [alias for alias in connections
- if include_mirrors or not connections[alias].settings_dict['TEST']['MIRROR']]
+ return [
+ alias for alias in connections
+ if include_mirrors or not connections[alias].settings_dict['TEST']['MIRROR']
+ ]
else:
return [DEFAULT_DB_ALIAS]
diff --git a/django/test/utils.py b/django/test/utils.py
index f98d52b514..a5307a4310 100644
--- a/django/test/utils.py
+++ b/django/test/utils.py
@@ -521,9 +521,11 @@ def patch_logger(logger_name, log_level, log_kwargs=False):
# don't enforce a specific timezone (with timezone.override or equivalent),
# or attempt to interpret naive datetimes in the default timezone.
-requires_tz_support = skipUnless(TZ_SUPPORT,
- "This test relies on the ability to run a program in an arbitrary "
- "time zone, but your operating system isn't able to do that.")
+requires_tz_support = skipUnless(
+ TZ_SUPPORT,
+ "This test relies on the ability to run a program in an arbitrary "
+ "time zone, but your operating system isn't able to do that."
+)
@contextmanager
diff --git a/django/utils/cache.py b/django/utils/cache.py
index eb3aa631ec..be1626a263 100644
--- a/django/utils/cache.py
+++ b/django/utils/cache.py
@@ -94,8 +94,7 @@ def get_max_age(response):
"""
if not response.has_header('Cache-Control'):
return
- cc = dict(_to_tuple(el) for el in
- cc_delim_re.split(response['Cache-Control']))
+ cc = dict(_to_tuple(el) for el in cc_delim_re.split(response['Cache-Control']))
if 'max-age' in cc:
try:
return int(cc['max-age'])
@@ -110,7 +109,8 @@ def set_response_etag(response):
def _precondition_failed(request):
- logger.warning('Precondition Failed: %s', request.path,
+ logger.warning(
+ 'Precondition Failed: %s', request.path,
extra={
'status_code': 412,
'request': request,
@@ -173,19 +173,17 @@ def get_conditional_response(request, etag=None, last_modified=None, response=No
(if_match and if_none_match)):
# We only get here if no undefined combinations of headers are
# specified.
- if ((if_none_match and (etag in etags or
- '*' in etags and etag)) and
+ if ((if_none_match and (etag in etags or '*' in etags and etag)) and
(not if_modified_since or
- (last_modified and if_modified_since and
- last_modified <= if_modified_since))):
+ (last_modified and if_modified_since and last_modified <= if_modified_since))):
if request.method in ('GET', 'HEAD'):
return _not_modified(request, response)
else:
return _precondition_failed(request)
- elif (if_match and ((not etag and '*' in etags) or
- (etag and etag not in etags) or
- (last_modified and if_unmodified_since and
- last_modified > if_unmodified_since))):
+ elif (if_match and (
+ (not etag and '*' in etags) or (etag and etag not in etags) or
+ (last_modified and if_unmodified_since and last_modified > if_unmodified_since)
+ )):
return _precondition_failed(request)
elif (not if_none_match and request.method in ('GET', 'HEAD') and
last_modified and if_modified_since and
diff --git a/django/utils/encoding.py b/django/utils/encoding.py
index 6bc285d899..66077e2108 100644
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -21,8 +21,7 @@ class DjangoUnicodeDecodeError(UnicodeDecodeError):
def __str__(self):
original = UnicodeDecodeError.__str__(self)
- return '%s. You passed in %r (%s)' % (original, self.obj,
- type(self.obj))
+ return '%s. You passed in %r (%s)' % (original, self.obj, type(self.obj))
# For backwards compatibility. (originally in Django, then added to six 1.9)
@@ -42,8 +41,9 @@ def smart_text(s, encoding='utf-8', strings_only=False, errors='strict'):
return force_text(s, encoding, strings_only, errors)
-_PROTECTED_TYPES = six.integer_types + (type(None), float, Decimal,
- datetime.datetime, datetime.date, datetime.time)
+_PROTECTED_TYPES = six.integer_types + (
+ type(None), float, Decimal, datetime.datetime, datetime.date, datetime.time
+)
def is_protected_type(obj):
diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py
index 367245be22..3a91af3815 100644
--- a/django/utils/feedgenerator.py
+++ b/django/utils/feedgenerator.py
@@ -89,8 +89,8 @@ def get_tag_uri(url, date):
class SyndicationFeed(object):
"Base class for all syndication feeds. Subclasses should provide write()"
def __init__(self, title, link, description, language=None, author_email=None,
- author_name=None, author_link=None, subtitle=None, categories=None,
- feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs):
+ author_name=None, author_link=None, subtitle=None, categories=None,
+ feed_url=None, feed_copyright=None, feed_guid=None, ttl=None, **kwargs):
def to_unicode(s):
return force_text(s, strings_only=True)
if categories:
@@ -117,10 +117,10 @@ class SyndicationFeed(object):
self.items = []
def add_item(self, title, link, description, author_email=None,
- author_name=None, author_link=None, pubdate=None, comments=None,
- unique_id=None, unique_id_is_permalink=None, enclosure=None,
- categories=(), item_copyright=None, ttl=None, updateddate=None,
- enclosures=None, **kwargs):
+ author_name=None, author_link=None, pubdate=None, comments=None,
+ unique_id=None, unique_id_is_permalink=None, enclosure=None,
+ categories=(), item_copyright=None, ttl=None, updateddate=None,
+ enclosures=None, **kwargs):
"""
Adds an item to the feed. All args are expected to be Python Unicode
objects except pubdate and updateddate, which are datetime.datetime
@@ -262,8 +262,7 @@ class RssFeed(SyndicationFeed):
handler.addQuickElement("link", self.feed['link'])
handler.addQuickElement("description", self.feed['description'])
if self.feed['feed_url'] is not None:
- handler.addQuickElement("atom:link", None,
- {"rel": "self", "href": self.feed['feed_url']})
+ handler.addQuickElement("atom:link", None, {"rel": "self", "href": self.feed['feed_url']})
if self.feed['language'] is not None:
handler.addQuickElement("language", self.feed['language'])
for cat in self.feed['categories']:
@@ -309,13 +308,13 @@ class Rss201rev2Feed(RssFeed):
# Author information.
if item["author_name"] and item["author_email"]:
- handler.addQuickElement("author", "%s (%s)" %
- (item['author_email'], item['author_name']))
+ handler.addQuickElement("author", "%s (%s)" % (item['author_email'], item['author_name']))
elif item["author_email"]:
handler.addQuickElement("author", item["author_email"])
elif item["author_name"]:
- handler.addQuickElement("dc:creator", item["author_name"],
- {"xmlns:dc": "http://purl.org/dc/elements/1.1/"})
+ handler.addQuickElement(
+ "dc:creator", item["author_name"], {"xmlns:dc": "http://purl.org/dc/elements/1.1/"}
+ )
if item['pubdate'] is not None:
handler.addQuickElement("pubDate", rfc2822_date(item['pubdate']))
@@ -324,8 +323,7 @@ class Rss201rev2Feed(RssFeed):
if item['unique_id'] is not None:
guid_attrs = {}
if isinstance(item.get('unique_id_is_permalink'), bool):
- guid_attrs['isPermaLink'] = str(
- item['unique_id_is_permalink']).lower()
+ guid_attrs['isPermaLink'] = str(item['unique_id_is_permalink']).lower()
handler.addQuickElement("guid", item['unique_id'], guid_attrs)
if item['ttl'] is not None:
handler.addQuickElement("ttl", item['ttl'])
diff --git a/django/utils/html.py b/django/utils/html.py
index de515ef8e9..a5cb56ec9e 100644
--- a/django/utils/html.py
+++ b/django/utils/html.py
@@ -38,8 +38,8 @@ html_gunk_re = re.compile(
r'(?:
|<\/i>|<\/b>|<\/em>|<\/strong>|'
'<\/?smallcaps>|<\/?uppercase>)', re.IGNORECASE)
hard_coded_bullets_re = re.compile(
- r'((?:(?:%s).*?[a-zA-Z].*?
\s*)+)' % '|'.join(re.escape(x)
- for x in DOTS), re.DOTALL)
+ r'((?:(?:%s).*?[a-zA-Z].*?
\s*)+)' % '|'.join(re.escape(x) for x in DOTS), re.DOTALL
+)
trailing_empty_content_re = re.compile(r'(?:(?: |\s|
)*?
\s*)+\Z')
@@ -53,8 +53,10 @@ def escape(text):
marked as such. This may result in double-escaping. If this is a concern,
use conditional_escape() instead.
"""
- return mark_safe(force_text(text).replace('&', '&').replace('<', '<')
- .replace('>', '>').replace('"', '"').replace("'", '''))
+ return mark_safe(
+ force_text(text).replace('&', '&').replace('<', '<')
+ .replace('>', '>').replace('"', '"').replace("'", ''')
+ )
_js_escapes = {
ord('\\'): '\\u005C',
diff --git a/django/utils/ipv6.py b/django/utils/ipv6.py
index 819b6a299a..c41f1e2b46 100644
--- a/django/utils/ipv6.py
+++ b/django/utils/ipv6.py
@@ -9,7 +9,7 @@ from django.utils.translation import ugettext_lazy as _
def clean_ipv6_address(ip_str, unpack_ipv4=False,
- error_message=_("This is not a valid IPv6 address.")):
+ error_message=_("This is not a valid IPv6 address.")):
"""
Cleans an IPv6 address string.
diff --git a/django/utils/lorem_ipsum.py b/django/utils/lorem_ipsum.py
index 19bf899613..a9459f4395 100644
--- a/django/utils/lorem_ipsum.py
+++ b/django/utils/lorem_ipsum.py
@@ -16,39 +16,43 @@ COMMON_P = (
'mollit anim id est laborum.'
)
-WORDS = ('exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet',
- 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi',
- 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi',
- 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos',
- 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum',
- 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus',
- 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus',
- 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum',
- 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem',
- 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus',
- 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente',
- 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet',
- 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta',
- 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima',
- 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim',
- 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores',
- 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias',
- 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea',
- 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt',
- 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate',
- 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius',
- 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos',
- 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore',
- 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo',
- 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi',
- 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam',
- 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique',
- 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere',
- 'maxime', 'corrupti')
+WORDS = (
+ 'exercitationem', 'perferendis', 'perspiciatis', 'laborum', 'eveniet',
+ 'sunt', 'iure', 'nam', 'nobis', 'eum', 'cum', 'officiis', 'excepturi',
+ 'odio', 'consectetur', 'quasi', 'aut', 'quisquam', 'vel', 'eligendi',
+ 'itaque', 'non', 'odit', 'tempore', 'quaerat', 'dignissimos',
+ 'facilis', 'neque', 'nihil', 'expedita', 'vitae', 'vero', 'ipsum',
+ 'nisi', 'animi', 'cumque', 'pariatur', 'velit', 'modi', 'natus',
+ 'iusto', 'eaque', 'sequi', 'illo', 'sed', 'ex', 'et', 'voluptatibus',
+ 'tempora', 'veritatis', 'ratione', 'assumenda', 'incidunt', 'nostrum',
+ 'placeat', 'aliquid', 'fuga', 'provident', 'praesentium', 'rem',
+ 'necessitatibus', 'suscipit', 'adipisci', 'quidem', 'possimus',
+ 'voluptas', 'debitis', 'sint', 'accusantium', 'unde', 'sapiente',
+ 'voluptate', 'qui', 'aspernatur', 'laudantium', 'soluta', 'amet',
+ 'quo', 'aliquam', 'saepe', 'culpa', 'libero', 'ipsa', 'dicta',
+ 'reiciendis', 'nesciunt', 'doloribus', 'autem', 'impedit', 'minima',
+ 'maiores', 'repudiandae', 'ipsam', 'obcaecati', 'ullam', 'enim',
+ 'totam', 'delectus', 'ducimus', 'quis', 'voluptates', 'dolores',
+ 'molestiae', 'harum', 'dolorem', 'quia', 'voluptatem', 'molestias',
+ 'magni', 'distinctio', 'omnis', 'illum', 'dolorum', 'voluptatum', 'ea',
+ 'quas', 'quam', 'corporis', 'quae', 'blanditiis', 'atque', 'deserunt',
+ 'laboriosam', 'earum', 'consequuntur', 'hic', 'cupiditate',
+ 'quibusdam', 'accusamus', 'ut', 'rerum', 'error', 'minus', 'eius',
+ 'ab', 'ad', 'nemo', 'fugit', 'officia', 'at', 'in', 'id', 'quos',
+ 'reprehenderit', 'numquam', 'iste', 'fugiat', 'sit', 'inventore',
+ 'beatae', 'repellendus', 'magnam', 'recusandae', 'quod', 'explicabo',
+ 'doloremque', 'aperiam', 'consequatur', 'asperiores', 'commodi',
+ 'optio', 'dolor', 'labore', 'temporibus', 'repellat', 'veniam',
+ 'architecto', 'est', 'esse', 'mollitia', 'nulla', 'a', 'similique',
+ 'eos', 'alias', 'dolore', 'tenetur', 'deleniti', 'porro', 'facere',
+ 'maxime', 'corrupti',
+)
-COMMON_WORDS = ('lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur',
- 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt',
- 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua')
+COMMON_WORDS = (
+ 'lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur',
+ 'adipisicing', 'elit', 'sed', 'do', 'eiusmod', 'tempor', 'incididunt',
+ 'ut', 'labore', 'et', 'dolore', 'magna', 'aliqua',
+)
def sentence():
diff --git a/django/utils/text.py b/django/utils/text.py
index 46872372ac..e6849a018d 100644
--- a/django/utils/text.py
+++ b/django/utils/text.py
@@ -278,10 +278,12 @@ def normalize_newlines(text):
@keep_lazy_text
def phone2numeric(phone):
"""Converts a phone number with letters into its numeric equivalent."""
- char2number = {'a': '2', 'b': '2', 'c': '2', 'd': '3', 'e': '3', 'f': '3',
- 'g': '4', 'h': '4', 'i': '4', 'j': '5', 'k': '5', 'l': '5', 'm': '6',
- 'n': '6', 'o': '6', 'p': '7', 'q': '7', 'r': '7', 's': '7', 't': '8',
- 'u': '8', 'v': '8', 'w': '9', 'x': '9', 'y': '9', 'z': '9'}
+ char2number = {
+ 'a': '2', 'b': '2', 'c': '2', 'd': '3', 'e': '3', 'f': '3', 'g': '4',
+ 'h': '4', 'i': '4', 'j': '5', 'k': '5', 'l': '5', 'm': '6', 'n': '6',
+ 'o': '6', 'p': '7', 'q': '7', 'r': '7', 's': '7', 't': '8', 'u': '8',
+ 'v': '8', 'w': '9', 'x': '9', 'y': '9', 'z': '9',
+ }
return ''.join(char2number.get(c, c) for c in phone.lower())
diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py
index 9004af4998..ecd94390e5 100644
--- a/django/utils/translation/__init__.py
+++ b/django/utils/translation/__init__.py
@@ -120,10 +120,11 @@ def lazy_number(func, resultclass, number=None, **kwargs):
try:
number_value = rhs[number]
except KeyError:
- raise KeyError('Your dictionary lacks key \'%s\'. '
- 'Please provide it, because it is required to '
- 'determine whether string is singular or plural.'
- % number)
+ raise KeyError(
+ "Your dictionary lacks key '%s\'. Please provide "
+ "it, because it is required to determine whether "
+ "string is singular or plural." % number
+ )
else:
number_value = rhs
kwargs['number'] = number_value
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index 34dd7bc768..7a2a1c63a2 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -574,8 +574,10 @@ def templatize(src, origin=None):
does so by translating the Django translation tags into standard gettext
function invocations.
"""
- from django.template.base import (Lexer, TOKEN_TEXT, TOKEN_VAR,
- TOKEN_BLOCK, TOKEN_COMMENT, TRANSLATOR_COMMENT_MARK)
+ from django.template.base import (
+ Lexer, TOKEN_TEXT, TOKEN_VAR, TOKEN_BLOCK, TOKEN_COMMENT,
+ TRANSLATOR_COMMENT_MARK,
+ )
src = force_text(src, settings.FILE_CHARSET)
out = StringIO('')
message_context = None
@@ -690,9 +692,11 @@ def templatize(src, origin=None):
filemsg = ''
if origin:
filemsg = 'file %s, ' % origin
- warn_msg = ("The translator-targeted comment '%s' "
- "(%sline %d) was ignored, because it wasn't the last item "
- "on the line.") % (c, filemsg, comment_lineno_cache)
+ warn_msg = (
+ "The translator-targeted comment '%s' "
+ "(%sline %d) was ignored, because it wasn't "
+ "the last item on the line."
+ ) % (c, filemsg, comment_lineno_cache)
warnings.warn(warn_msg, TranslatorCommentWarning)
lineno_comment_map[comment_lineno_cache] = []
else:
diff --git a/django/utils/version.py b/django/utils/version.py
index 6963899906..f5b0f109e6 100644
--- a/django/utils/version.py
+++ b/django/utils/version.py
@@ -68,9 +68,11 @@ def get_git_changeset():
so it's sufficient for generating the development version numbers.
"""
repo_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
- git_log = subprocess.Popen('git log --pretty=format:%ct --quiet -1 HEAD',
- stdout=subprocess.PIPE, stderr=subprocess.PIPE,
- shell=True, cwd=repo_dir, universal_newlines=True)
+ git_log = subprocess.Popen(
+ 'git log --pretty=format:%ct --quiet -1 HEAD',
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+ shell=True, cwd=repo_dir, universal_newlines=True,
+ )
timestamp = git_log.communicate()[0]
try:
timestamp = datetime.datetime.utcfromtimestamp(int(timestamp))
diff --git a/django/views/debug.py b/django/views/debug.py
index 070d7ff56f..73fedce68d 100644
--- a/django/views/debug.py
+++ b/django/views/debug.py
@@ -509,10 +509,14 @@ def default_urlconf(request):
"title": _("Welcome to Django"),
"heading": _("It worked!"),
"subheading": _("Congratulations on your first Django-powered page."),
- "instructions": _("Of course, you haven't actually done any work yet. "
- "Next, start your first app by running python manage.py startapp [app_label]
."),
- "explanation": _("You're seeing this message because you have DEBUG = True
in your "
- "Django settings file and you haven't configured any URLs. Get to work!"),
+ "instructions": _(
+ "Of course, you haven't actually done any work yet. "
+ "Next, start your first app by running python manage.py startapp [app_label]
."
+ ),
+ "explanation": _(
+ "You're seeing this message because you have DEBUG = True
in your "
+ "Django settings file and you haven't configured any URLs. Get to work!"
+ ),
})
return HttpResponse(t.render(c), content_type='text/html')
@@ -1039,7 +1043,7 @@ Exception Value: {{ exception_value|force_escape }}
{% endif %}