Deprecate DjrillBackendHTTPError

This commit is contained in:
medmunds
2015-05-12 18:27:29 -07:00
parent 8d274e7b16
commit fd75c4b24d
3 changed files with 44 additions and 5 deletions

View File

@@ -16,8 +16,6 @@ import json
import mimetypes import mimetypes
import requests import requests
DjrillBackendHTTPError = MandrillAPIError # Backwards-compat Djrill<=0.2.0
def encode_date_for_mandrill(dt): def encode_date_for_mandrill(dt):
"""Format a date or datetime for use as a Mandrill API date field """Format a date or datetime for use as a Mandrill API date field
@@ -361,3 +359,26 @@ class DjrillBackend(BaseEmailBackend):
'content': content_b64.decode('ascii'), 'content': content_b64.decode('ascii'),
} }
return mandrill_attachment, is_embedded_image return mandrill_attachment, is_embedded_image
############################################################################################
# Recreate this module, but with a warning on attempts to import deprecated properties.
# This is ugly, but (surprisingly) blessed: http://stackoverflow.com/a/7668273/647002
import sys
import types
class ModuleWithDeprecatedProps(types.ModuleType):
def __init__(self, module):
self._orig_module = module # must keep a ref around, or it'll get deallocated
super(ModuleWithDeprecatedProps, self).__init__(module.__name__, module.__doc__)
self.__dict__.update(module.__dict__)
@property
def DjrillBackendHTTPError(self):
removed_in_djrill_2("DjrillBackendHTTPError will be removed in Djrill 2.0. "
"Use djrill.MandrillAPIError instead.")
return MandrillAPIError
sys.modules[__name__] = ModuleWithDeprecatedProps(sys.modules[__name__])

View File

@@ -49,6 +49,14 @@ class DjrillBackendDeprecationTests(DjrillBackendMockAPITestCase):
"DjrillMessage will be removed in Djrill 2.0", "DjrillMessage will be removed in Djrill 2.0",
DjrillMessage) DjrillMessage)
def test_deprecated_djrill_backend_http_error(self):
"""Djrill 0.2 deprecated DjrillBackendHTTPError; 2.0 will drop it"""
def try_import():
# noinspection PyUnresolvedReferences
from djrill.mail.backends.djrill import DjrillBackendHTTPError
self.assertWarnsMessage(DeprecationWarning,
"DjrillBackendHTTPError will be removed in Djrill 2.0",
try_import)
def assertWarnsMessage(self, warning, message, callable, *args, **kwds): def assertWarnsMessage(self, warning, message, callable, *args, **kwds):
"""Checks that `callable` issues a warning of category `warning` containing `message`""" """Checks that `callable` issues a warning of category `warning` containing `message`"""
@@ -149,9 +157,13 @@ class DjrillLegacyExceptionTests(TestCase):
def test_DjrillBackendHTTPError(self): def test_DjrillBackendHTTPError(self):
"""MandrillApiError was DjrillBackendHTTPError in 0.2.0""" """MandrillApiError was DjrillBackendHTTPError in 0.2.0"""
# ... and had to be imported from deep in the package: # ... and had to be imported from deep in the package:
from djrill.mail.backends.djrill import DjrillBackendHTTPError with warnings.catch_warnings():
ex = MandrillAPIError("testing") warnings.filterwarnings('ignore', category=RemovedInDjrill2,
self.assertIsInstance(ex, DjrillBackendHTTPError) message="DjrillBackendHTTPError will be removed in Djrill 2.0")
# noinspection PyUnresolvedReferences
from djrill.mail.backends.djrill import DjrillBackendHTTPError
ex = MandrillAPIError("testing")
self.assertIsInstance(ex, DjrillBackendHTTPError)
def test_NotSupportedByMandrillError(self): def test_NotSupportedByMandrillError(self):
"""Unsupported features used to just raise ValueError in 0.2.0""" """Unsupported features used to just raise ValueError in 0.2.0"""

View File

@@ -55,6 +55,12 @@ in debug mode.)
Djrill 1.4 will report a `DeprecationWarning` if you are still Djrill 1.4 will report a `DeprecationWarning` if you are still
using ``DjrillMessage``. using ``DjrillMessage``.
* **DjrillBackendHTTPError**
The ``DjrillBackendHTTPError`` exception was replaced in Djrill 0.3
with :exc:`djrill.MandrillAPIError`. Djrill 1.4 will report a
`DeprecationWarning` if you are still importing ``DjrillBackendHTTPError``.
Change Log Change Log
---------- ----------