#28795: Utilize dict.setdefault()
------------------------------------------------+------------------------
               Reporter:  Дилян Палаузов        |          Owner:  nobody
                   Type:  Cleanup/optimization  |         Status:  new
              Component:  Uncategorized         |        Version:  master
               Severity:  Normal                |       Keywords:
           Triage Stage:  Unreviewed            |      Has patch:  0
    Needs documentation:  0                     |    Needs tests:  0
Patch needs improvement:  0                     |  Easy pickings:  0
                  UI/UX:  0                     |
------------------------------------------------+------------------------
 {{{
 diff --git a/django/contrib/gis/apps.py b/django/contrib/gis/apps.py
 --- a/django/contrib/gis/apps.py
 +++ b/django/contrib/gis/apps.py
 @@ -8,5 +8,4 @@ class GISConfig(AppConfig):
      verbose_name = _("GIS")

      def ready(self):
 -        if 'geojson' not in serializers.BUILTIN_SERIALIZERS:
 -            serializers.BUILTIN_SERIALIZERS['geojson'] =
 "django.contrib.gis.serializers.geojson"
 +        serializers.BUILTIN_SERIALIZERS.setdefault('geojson',
 "django.contrib.gis.serializers.geojson")
 diff --git a/django/contrib/gis/db/models/fields.py
 b/django/contrib/gis/db/models/fields.py
 --- a/django/contrib/gis/db/models/fields.py
 +++ b/django/contrib/gis/db/models/fields.py
 @@ -255,9 +255,9 @@ class GeometryField(BaseSpatialField):
                      'srid': self.srid,
                      }
          defaults.update(kwargs)
 -        if (self.dim > 2 and 'widget' not in kwargs and
 +        if (self.dim > 2 and
                  not getattr(defaults['form_class'].widget, 'supports_3d',
 False)):
 -            defaults['widget'] = forms.Textarea
 +            defaults.setdefault('widget', forms.Textarea)
          return super().formfield(**defaults)

      def select_format(self, compiler, sql, params):
 diff --git a/django/contrib/gis/gdal/raster/source.py
 b/django/contrib/gis/gdal/raster/source.py
 --- a/django/contrib/gis/gdal/raster/source.py
 +++ b/django/contrib/gis/gdal/raster/source.py
 @@ -381,27 +381,14 @@ class GDALRaster(GDALRasterBase):
          consult the GDAL_RESAMPLE_ALGORITHMS constant.
          """
          # Get the parameters defining the geotransform, srid, and size of
 the raster
 -        if 'width' not in ds_input:
 -            ds_input['width'] = self.width
 -
 -        if 'height' not in ds_input:
 -            ds_input['height'] = self.height
 -
 -        if 'srid' not in ds_input:
 -            ds_input['srid'] = self.srs.srid
 -
 -        if 'origin' not in ds_input:
 -            ds_input['origin'] = self.origin
 -
 -        if 'scale' not in ds_input:
 -            ds_input['scale'] = self.scale
 -
 -        if 'skew' not in ds_input:
 -            ds_input['skew'] = self.skew
 -
 +        ds_input.setdefault('width', self.width)
 +        ds_input.setdefault('height', self.height)
 +        ds_input.setdefault('srid', self.srs.srid)
 +        ds_input.setdefault('origin', self.origin)
 +        ds_input.setdefault('scale', self.scale)
 +        ds_input.setdefault('skew', self.skew)
          # Get the driver, name, and datatype of the target raster
 -        if 'driver' not in ds_input:
 -            ds_input['driver'] = self.driver.name
 +        ds_input.setdefault('driver', self.driver.name)

          if 'name' not in ds_input:
              ds_input['name'] = self.name + '_copy.' + self.driver.name
 diff --git a/django/db/migrations/operations/models.py
 b/django/db/migrations/operations/models.py
 --- a/django/db/migrations/operations/models.py
 +++ b/django/db/migrations/operations/models.py
 @@ -693,8 +693,8 @@ class AlterModelOptions(ModelOptionOperation):
          model_state.options = dict(model_state.options)
          model_state.options.update(self.options)
          for key in self.ALTER_OPTION_KEYS:
 -            if key not in self.options and key in model_state.options:
 -                del model_state.options[key]
 +            if key not in self.options:
 +                model_state.options.pop(key, False)
          state.reload_model(app_label, self.name_lower, delay=True)

      def database_forwards(self, app_label, schema_editor, from_state,
 to_state):
 diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
 --- a/django/db/models/sql/query.py
 +++ b/django/db/models/sql/query.py
 @@ -692,8 +692,7 @@ class Query:
              # in the parent list. Again, it must be mentioned to ensure
 that
              # only "must include" fields are pulled in.
              for model in orig_opts.get_parent_list():
 -                if model not in seen:
 -                    seen[model] = set()
 +                seen.setdefault(model, set())
              for model, values in seen.items():
                  callback(target, model, values)

 diff --git a/django/forms/boundfield.py b/django/forms/boundfield.py
 --- a/django/forms/boundfield.py
 +++ b/django/forms/boundfield.py
 @@ -88,11 +88,11 @@ class BoundField:
          attrs = attrs or {}
          attrs = self.build_widget_attrs(attrs, widget)
          auto_id = self.auto_id
 -        if auto_id and 'id' not in attrs and 'id' not in widget.attrs:
 +        if auto_id and 'id' not in widget.attrs:
              if not only_initial:
 -                attrs['id'] = auto_id
 +                attrs.setdefault('id', auto_id)
              else:
 -                attrs['id'] = self.html_initial_id
 +                attrs.setdefault('id', self.html_initial_id)

          if not only_initial:
              name = self.html_name
 diff --git a/django/http/response.py b/django/http/response.py
 --- a/django/http/response.py
 +++ b/django/http/response.py
 @@ -136,10 +136,7 @@ class HttpResponseBase:
          self._headers[header.lower()] = (header, value)

      def __delitem__(self, header):
 -        try:
 -            del self._headers[header.lower()]
 -        except KeyError:
 -            pass
 +        self._headers.pop(header.lower(), False)

      def __getitem__(self, header):
          return self._headers[header.lower()][1]
 diff --git a/django/middleware/locale.py b/django/middleware/locale.py
 --- a/django/middleware/locale.py
 +++ b/django/middleware/locale.py
 @@ -57,6 +57,5 @@ class LocaleMiddleware(MiddlewareMixin):

          if not (i18n_patterns_used and language_from_path):
              patch_vary_headers(response, ('Accept-Language',))
 -        if 'Content-Language' not in response:
 -            response['Content-Language'] = language
 +        response.setdefault('Content-Language', language)
          return response
 diff --git a/django/middleware/security.py b/django/middleware/security.py
 --- a/django/middleware/security.py
 +++ b/django/middleware/security.py
 @@ -37,10 +37,10 @@ class SecurityMiddleware(MiddlewareMixin):
                  sts_header = sts_header + "; preload"
              response["strict-transport-security"] = sts_header

 -        if self.content_type_nosniff and 'x-content-type-options' not in
 response:
 -            response["x-content-type-options"] = "nosniff"
 +        if self.content_type_nosniff:
 +            response.setdefault("x-content-type-options", "nosniff")

 -        if self.xss_filter and 'x-xss-protection' not in response:
 -            response["x-xss-protection"] = "1; mode=block"
 +        if self.xss_filter:
 +            response.setdefault("x-xss-protection", "1; mode=block")

          return response
 diff --git a/django/template/defaulttags.py
 b/django/template/defaulttags.py
 --- a/django/template/defaulttags.py
 +++ b/django/template/defaulttags.py
 @@ -225,8 +225,7 @@ class IfChangedNode(Node):
      def render(self, context):
          # Init state storage
          state_frame = self._get_context_stack_frame(context)
 -        if self not in state_frame:
 -            state_frame[self] = None
 +        state_frame.setdefault(self)

          nodelist_true_output = None
          if self._varlist:
 diff --git a/django/views/decorators/http.py
 b/django/views/decorators/http.py
 --- a/django/views/decorators/http.py
 +++ b/django/views/decorators/http.py
 @@ -103,8 +103,8 @@ def condition(etag_func=None,
 last_modified_func=None):
              if request.method in ('GET', 'HEAD'):
                  if res_last_modified and not response.has_header('Last-
 Modified'):
                      response['Last-Modified'] =
 http_date(res_last_modified)
 -                if res_etag and not response.has_header('ETag'):
 -                    response['ETag'] = res_etag
 +                if res_etag:
 +                    response.setdefault('ETag', res_etag)

              return response

 diff --git a/django/views/generic/base.py b/django/views/generic/base.py
 --- a/django/views/generic/base.py
 +++ b/django/views/generic/base.py
 @@ -21,8 +21,7 @@ class ContextMixin:
      extra_context = None

      def get_context_data(self, **kwargs):
 -        if 'view' not in kwargs:
 -            kwargs['view'] = self
 +        kwargs.setdefault('view', self)
          if self.extra_context is not None:
              kwargs.update(self.extra_context)
          return kwargs
 diff --git a/tests/runtests.py b/tests/runtests.py
 --- a/tests/runtests.py
 +++ b/tests/runtests.py
 @@ -455,8 +455,7 @@ if __name__ == "__main__":
      if options.settings:
          os.environ['DJANGO_SETTINGS_MODULE'] = options.settings
      else:
 -        if "DJANGO_SETTINGS_MODULE" not in os.environ:
 -            os.environ['DJANGO_SETTINGS_MODULE'] = 'test_sqlite'
 +        os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'test_sqlite')
          options.settings = os.environ['DJANGO_SETTINGS_MODULE']

      if options.selenium:
 }}}

-- 
Ticket URL: <https://code.djangoproject.com/ticket/28795>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/057.5d4a2e25e2144b38f173bbc8507c207f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to