diff --git a/django/db/transaction.py b/django/db/transaction.py index e392c13b32..b83aaa6440 100644 --- a/django/db/transaction.py +++ b/django/db/transaction.py @@ -1,7 +1,8 @@ +from contextlib import ContextDecorator + from django.db import ( DEFAULT_DB_ALIAS, DatabaseError, Error, ProgrammingError, connections, ) -from django.utils.decorators import ContextDecorator class TransactionManagementError(ProgrammingError): diff --git a/django/utils/decorators.py b/django/utils/decorators.py index 3b2a002e7b..a3af946b33 100644 --- a/django/utils/decorators.py +++ b/django/utils/decorators.py @@ -1,10 +1,7 @@ "Functions that help with dynamically creating decorators for views." -try: - from contextlib import ContextDecorator -except ImportError: - ContextDecorator = None - +# For backwards compatibility in Django 2.0. +from contextlib import ContextDecorator # noqa from functools import WRAPPER_ASSIGNMENTS, update_wrapper, wraps @@ -166,21 +163,6 @@ def make_middleware_decorator(middleware_class): return _make_decorator -if ContextDecorator is None: - # ContextDecorator was introduced in Python 3.2 - # See https://docs.python.org/3/library/contextlib.html#contextlib.ContextDecorator - class ContextDecorator: - """ - A base class that enables a context manager to also be used as a decorator. - """ - def __call__(self, func): - @wraps(func, assigned=available_attrs(func)) - def inner(*args, **kwargs): - with self: - return func(*args, **kwargs) - return inner - - class classproperty: def __init__(self, method=None): self.fget = method diff --git a/django/utils/timezone.py b/django/utils/timezone.py index 66bfa00030..bc6d60e228 100644 --- a/django/utils/timezone.py +++ b/django/utils/timezone.py @@ -3,13 +3,13 @@ Timezone-related classes and functions. """ import functools +from contextlib import ContextDecorator from datetime import datetime, timedelta, tzinfo from threading import local import pytz from django.conf import settings -from django.utils.decorators import ContextDecorator __all__ = [ 'utc', 'get_fixed_timezone', diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index a8f3b751b4..2c508572b8 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -3,8 +3,8 @@ Internationalization support. """ import re import warnings +from contextlib import ContextDecorator -from django.utils.decorators import ContextDecorator from django.utils.deprecation import RemovedInDjango21Warning from django.utils.encoding import force_text from django.utils.functional import lazy