Opened 10 years ago

Last modified 3 weeks ago

#23919 closed Cleanup/optimization

Cleanups for when we drop Python 2 compatibility — at Version 79

Reported by: Tim Graham Owned by: nobody
Component: Core (Other) Version:
Severity: Normal Keywords:
Cc: cmawebsite@…, Tom Forbes Triage Stage: Accepted
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no
Pull Requests:19162 merged, 16178 merged, 7869 merged, 7890 merged, 14058 merged, 12939 merged, 12211 merged, 12098 merged, 11711 merged, 10905 unmerged, 7906 unmerged, 10515 merged, 7897 merged, 7899 unmerged, 8944 unmerged, 8825 unmerged, 8797 merged, 9511 merged, 9803 merged, 9441 merged, 7867 merged, 9312 merged, 9182 merged, 9317 merged, 8795 merged, 8739 merged, 8719 merged, 8675 merged, 8621 merged, 8622 merged

Description (last modified by Claude Paroz)

This is a tracking ticket of things that we can remove when we drop Python 2 compatibility in Django 2.0. Please edit the description of the ticket as you come across new items.

  • django.core.mail.message.make_msgid() #23905
  • django.dispatch.weakref_backports
  • django.http.cookie workarounds (remains for Python 3.4)
  • django.utils.2to3_fixes
  • django.utils.decorators.ContextDecorator
  • django.utils.encoding
    • @python_2_unicode_compatible
    • force/smart _unicode
    • either force/smart _text or force/smart _str
  • django.utils.html_parser.use_workaround
  • django.utils.http functions like urlquote_plus -- I think the versions of these functions on Python 3 don't have the unicode characters bug we are working around.
  • Stop using django.utils.lru_cache
  • Figure the deprecation plan for django.utils.lru_cache (staying for now)
  • django.utils.six
  • from __future__ import unicode_literals
  • str() stuff for environment variables, e.g. 0bfb53866199f366ed140d49938fd185e5898156
  • str() stuff for type(name) and __name__
  • Inheriting from object in django.core.servers.basehttp (and perhaps other places) ala 4ee06ec3fc8e94d164afbd2f9c880c60c658a9ac
  • git grep 'long int' (mostly docs)
  • django.utils._os [npath,upath]
  • In tests: contextlib.closing(self.urlopen (contextlib.closing no longer needed)
  • Support for pysqlite (doesn't support Python 3)
  • Replace super(ClassName, self) with super() PR
  • Remove # -*- coding: utf-8 -*- source file encoding (that's the default on Python 3)
  • Evaluate replacement of custom __del__ methods by weakref.finalize
  • Remove __ne__ from objects already defining a __eq__
  • Remove note about PYTHONHASHSEED (see #26243)
  • Remove Field.creation_counter (replace by metaclass __prepare__ returning OrderedDict(), https://docs.python.org/3/reference/datamodel.html#preparing-the-class-namespace)
  • django.test.utils.reset_warning_registry()
  • Replace errno checks by IOError subclasses defined by PEP 3151
  • django.utils.glob
  • django.utils.cookies.SimpleCookie (remains for Python 3.4 compatibility)
  • django.test.mock
  • Replace tempfile.mkdtemp + remove with tempfile.TemporaryDirectory context manager PR
  • Replace io.open() by a plain open()
  • Evaluate need for assertRegex, assertRaisesRegex in tests. Some usage is merely to account for differences in messages between Python 2 and 3.
  • re.U, re.UNICODE (default behavior of Python 3) - PR 7879

Change History (79)

comment:1 by Wojtek Ruszczewski, 10 years ago

Various nonlocal workarounds (example).

comment:2 by Collin Anderson, 10 years ago

Description: modified (diff)

comment:3 by Tim Graham, 10 years ago

Description: modified (diff)

comment:4 by Anssi Kääriäinen, 10 years ago

I believe we can get rid of the Field.creation_counter hack. In Python 3 it is possible to store the attrs in a sorted dictionary. See http://stackoverflow.com/questions/4459531/how-to-read-class-attributes-in-the-same-order-as-declared.

comment:5 by Collin Anderson, 10 years ago

Description: modified (diff)

comment:6 by Tim Graham, 10 years ago

Description: modified (diff)

comment:7 by Tim Graham, 10 years ago

Description: modified (diff)

comment:8 by Collin Anderson, 10 years ago

Cc: cmawebsite@… added
Description: modified (diff)

comment:9 by Collin Anderson, 10 years ago

Description: modified (diff)

comment:10 by Curtis Maloney, 10 years ago

In far too many tests we rely on the fact six aliases builtins [like input] instead of using mock.

I submitted a patch recently to clean up a couple of these I found, but I am finding more.

comment:11 by Curtis Maloney, 10 years ago

Description: modified (diff)

comment:12 by Tim Graham, 10 years ago

Description: modified (diff)

comment:13 by Tim Graham, 9 years ago

Description: modified (diff)

comment:14 by Moritz Sichert, 9 years ago

Description: modified (diff)

comment:15 by Tim Graham, 9 years ago

Description: modified (diff)

comment:16 by Claude Paroz, 9 years ago

Description: modified (diff)

comment:17 by Simon Charette, 9 years ago

Description: modified (diff)

comment:18 by Collin Anderson, 9 years ago

Description: modified (diff)

comment:19 by Anssi Kääriäinen, 9 years ago

Description: modified (diff)

comment:20 by Tim Graham, 9 years ago

Description: modified (diff)

comment:21 by Jon Dufresne, 9 years ago

Description: modified (diff)

comment:22 by Curtis Maloney, 8 years ago

Description: modified (diff)

comment:23 by Curtis Maloney, 8 years ago

Description: modified (diff)

comment:24 by Jon Dufresne, 8 years ago

Description: modified (diff)

comment:25 by Claude Paroz, 8 years ago

Description: modified (diff)

comment:26 by Tim Graham, 8 years ago

Description: modified (diff)

comment:27 by Tim Graham, 8 years ago

Description: modified (diff)

comment:28 by Claude Paroz, 8 years ago

Note that I have a local branch which does some boring removals (unicode_literals, utf-8 preambles, some six usage). So ping me as soon as the Django 2.0 deprecated stuff is removed and I'll offer a patch for that.

comment:29 by Asif Saifuddin Auvi, 8 years ago

I am also working to remove python2 workarounds by following a module by module approach.

comment:30 by Aymeric Augustin, 8 years ago

If Claude has already prepared these changes, perhaps you should wait for his patch instead of duplicating his work?

in reply to:  30 comment:31 by Asif Saifuddin Auvi, 8 years ago

Replying to Aymeric Augustin:

If Claude has already prepared these changes, perhaps you should wait for his patch instead of duplicating his work?

Yes I talked with Claude on IRC to pause before his work is merged.

in reply to:  4 comment:32 by Josh Smeaton, 8 years ago

Replying to Anssi Kääriäinen:

I believe we can get rid of the Field.creation_counter hack. In Python 3 it is possible to store the attrs in a sorted dictionary. See http://stackoverflow.com/questions/4459531/how-to-read-class-attributes-in-the-same-order-as-declared.

We could also remove this when we support python 3.6, as class attributes retain their order. I'm guessing this is a consequence (or the cause of) dictionaries retaining insertion order. https://docs.python.org/3.6/whatsnew/3.6.html#pep-520-preserving-class-attribute-definition-order

comment:33 by Claude Paroz <claude@…>, 8 years ago

In d7b9aaa:

Refs #23919 -- Removed encoding preambles and future imports

comment:34 by Claude Paroz <claude@…>, 8 years ago

In f3c43ad:

Refs #23919 -- Removed python_2_unicode_compatible decorator usage

comment:35 by Tim Graham, 8 years ago

Triage Stage: Someday/MaybeAccepted

PR for removing Python 2 references from docs.

comment:36 by Claude Paroz <claude@…>, 8 years ago

In c716fe87:

Refs #23919 -- Removed six.PY2/PY3 usage

Thanks Tim Graham for the review.

comment:37 by GitHub <noreply@…>, 8 years ago

In f6acd1d:

Refs #23919 -- Removed Python 2 notes in docs.

comment:38 by Claude Paroz <claude@…>, 8 years ago

In 7b2f2e74:

Refs #23919 -- Removed six.<various>_types usage

Thanks Tim Graham and Simon Charette for the reviews.

comment:39 by Claude Paroz <claude@…>, 8 years ago

In 2b281cc3:

Refs #23919 -- Removed most of remaining six usage

Thanks Tim Graham for the review.

comment:40 by Aymeric Augustin, 8 years ago

Description: modified (diff)

comment:41 by Claude Paroz, 8 years ago

Description: modified (diff)

comment:42 by Mariusz Felisiak, 8 years ago

Description: modified (diff)

comment:43 by Tim Graham <timograham@…>, 8 years ago

In 3cc5f01d:

Refs #23919 -- Stopped using django.utils.lru_cache().

comment:44 by Tim Graham <timograham@…>, 8 years ago

In eb422e47:

Refs #23919 -- Removed obsolete ne() methods.

ne() defaults to the opposite of eq() on Python 3
when it doesn't return NotImplemented.

comment:45 by Tim Graham <timograham@…>, 8 years ago

In a5563963:

Refs #23919 -- Replaced io.open() with open().

io.open() is an alias for open() on Python 3.

comment:46 by Simon Charette, 8 years ago

Description: modified (diff)

comment:47 by Simon Charette, 8 years ago

Description: modified (diff)

comment:48 by Claude Paroz <claude@…>, 8 years ago

In cecc079:

Refs #23919 -- Stopped inheriting from object to define new style classes.

comment:49 by ChillarAnand, 8 years ago

Description: modified (diff)

comment:50 by GitHub <noreply@…>, 8 years ago

In 5320fa7:

Refs #23919 -- Removed obsolete contextlib.closing() calls (for Python 2).

comment:51 by GitHub <noreply@…>, 8 years ago

In e5c67f0:

Refs #23919 -- Removed reset_warning_registry() workaround for Python < 3.4.2.

comment:52 by Simon Charette <charette.s@…>, 8 years ago

In 4c5ed3e6:

Refs #23919 -- Removed nonzero() methods (for Python 2).

Thanks Tim for the review.

comment:53 by Tim Graham <timograham@…>, 8 years ago

In 41e0033c:

Refs #23919 -- Removed usage of django.utils.decorators.ContextDecorator.

comment:54 by Simon Charette <charette.s@…>, 8 years ago

In 9695b14:

Refs #23919 -- Removed str() conversion of type and method name.

comment:55 by Simon Charette, 8 years ago

Description: modified (diff)

comment:56 by GitHub <noreply@…>, 8 years ago

In d4bb3759:

Refs #23919 -- Removed obsolete compare_digest() and pbkdf2() implementations.

comment:57 by GitHub <noreply@…>, 8 years ago

In 9e917cc2:

Fixed #23905, refs #23919 -- Used make_msgid() from stdlib.

comment:58 by GitHub <noreply@…>, 8 years ago

In 9d27478:

Refs #23919 -- Removed docs references to long integers.

comment:59 by Tim Graham <timograham@…>, 8 years ago

In 9ee47ce7:

Refs #23919 -- Removed enum ImportError handling for Python 2.

comment:60 by Tim Graham <timograham@…>, 8 years ago

In eb0b921c:

Refs #23919 -- Removed SessionBase.iterkeys(), itervalues(), iteritems().

These methods only work on Python 2.

comment:61 by Tim Graham <timograham@…>, 8 years ago

In fedda6d:

Refs #23919 -- Removed Python 2 version check in django.http.cookie.

comment:62 by Tim Graham <timograham@…>, 8 years ago

In bf1c9570:

Refs #23919 -- Removed Python 2 workaround for hashing Oracle params (refs #27632).

comment:63 by Tim Graham, 8 years ago

Description: modified (diff)

comment:64 by ChillarAnand, 8 years ago

Description: modified (diff)

comment:65 by Claude Paroz <claude@…>, 8 years ago

In dc8834ca:

Refs #23919 -- Removed unneeded force_str calls

comment:66 by Aymeric Augustin <aymeric.augustin@…>, 8 years ago

In 109b33f:

Refs #23919 -- Simplified assertRaisesRegex()'s that accounted for Python 2.

comment:67 by GitHub <noreply@…>, 8 years ago

In 4e729fea:

Refs #23919 -- Removed django.utils._os.upath()/npath()/abspathu() usage.

These functions do nothing on Python 3.

comment:68 by Claude Paroz <claude@…>, 8 years ago

In 042b735:

Refs #23919 -- Removed unneeded str() calls

comment:69 by Claude Paroz, 8 years ago

Description: modified (diff)

comment:70 by Tim Graham <timograham@…>, 8 years ago

In 7aba691:

Refs #23919 -- Removed django.test.mock Python 2 compatibility shim.

comment:71 by Claude Paroz <claude@…>, 8 years ago

In 289fc1bf:

Refs #23919 -- Removed str_prefix usage

comment:72 by Tim Graham <timograham@…>, 8 years ago

In 1b06d5e6:

Refs #23919 -- Removed pysqlite support (it's Python 2 only).

comment:73 by GitHub <noreply@…>, 8 years ago

In 9e6e32bf:

Refs #23919 -- Removed django.utils.decorators.available_attrs() usage.

It's only needed to workaround a bug on Python 2.

comment:74 by Tim Graham <timograham@…>, 8 years ago

In c222122:

Refs #23919 -- Removed re.U and re.UNICODE (default on Python 3).

comment:75 by Mariusz Felisiak, 8 years ago

Description: modified (diff)

comment:76 by GitHub <noreply@…>, 8 years ago

In d170c63:

Refs #23919 -- Removed misc references to Python 2.

comment:77 by ChillarAnand, 8 years ago

Description: modified (diff)

comment:78 by Claude Paroz <claude@…>, 8 years ago

In 6e55e1d:

Refs #23919 -- Replaced six.reraise by raise

comment:79 by Claude Paroz, 8 years ago

Description: modified (diff)
Note: See TracTickets for help on using tickets.
Back to Top