diff --git a/tests/test_yajl.py b/tests/test_yajl.py index 9fb0076..948c622 100644 --- a/tests/test_yajl.py +++ b/tests/test_yajl.py @@ -242,11 +242,11 @@ def test_get_yajl_version_correctlyParsesYajlVersion(self): def test_check_yajl_version_warnsOnlyWhenMismatchedVersions(self): import warnings self.mock('warnings.warn') - self.mock('yajl.__version__', mock_obj='1.1.1') - self.mock('yajl.yajl_version', mock_obj='1.1.1') + self.mock('yajl.wrapped.__version__', mock_obj='1.1.1') + self.mock('yajl.wrapped.yajl_version', mock_obj='1.1.1') self.assertTrue(yajl.check_yajl_version()) self.assertSameTrace('') - self.mock('yajl.yajl_version', mock_obj='1.1.0') + self.mock('yajl.wrapped.yajl_version', mock_obj='1.1.0') self.assertFalse(yajl.check_yajl_version()) self.assertSameTrace( "Called warnings.warn(" @@ -257,3 +257,12 @@ def test_check_yajl_version_warnsOnlyWhenMismatchedVersions(self): def test_checkYajlPyAndYajlHaveSameVersion(self): self.assertTrue(yajl.check_yajl_version()) + + def test_checkYajlPyRaisesImportErrorIfDumpsOrLoadsUsedAnyJSONHack(self): + for attr in 'dumps', 'loads': + try: + getattr(yajl, attr) + except ImportError: + pass + else: + self.fail('No ImportError Raised for yajl.%s' % attr) diff --git a/yajl/__init__.py b/yajl/__init__.py index 7fc07ac..b197c6c 100644 --- a/yajl/__init__.py +++ b/yajl/__init__.py @@ -14,7 +14,7 @@ from yajl_parse import * from yajl_gen import * -__version__ = '2.0.5' +__version__ = '2.0.5' yajl_version = get_yajl_version() def check_yajl_version(): @@ -35,3 +35,15 @@ def check_yajl_version(): return True check_yajl_version() + +# monkey patch yajl, because anyjson devs are slacking off, +# and I got an issue request that I would like to help out. +class Wrapper(object): + def __init__(self, wrapped): + self.wrapped = wrapped + def __getattr__(self, name): + if name in ('dumps', 'loads'): + raise ImportError('this is not py-yajl ... anyjson!') + return getattr(self.wrapped, name) + +sys.modules[__name__] = Wrapper(sys.modules[__name__])