id,summary,reporter,owner,description,type,status,component,version,severity,resolution,keywords,cc,stage,has_patch,needs_docs,needs_tests,needs_better_patch,easy,ui_ux 23919,Cleanups for when we drop Python 2 compatibility,Tim Graham,nobody,"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 * `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. * `django.utils.lru_cache` * `django.utils.six` * `from __future__ import unicode_literals` * `str()` stuff for environment variables, e.g. 0bfb53866199f366ed140d49938fd185e5898156 * 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()` * Remove `# -*- coding: utf-8 -*-` source file encoding (that's the default on Python 3) * Evaluate replacement of custom `__del__` methods by [https://docs.python.org/3/library/weakref.html#weakref.finalize weakref.finalize]",Cleanup/optimization,new,Core (Other),,Normal,,,cmawebsite@…,Someday/Maybe,0,0,0,0,0,0