Skip to content

Commit c1b8003

Browse files
committed
Adding a monkey patch / sys.modules hack, fixes #5
Note: because anyjson devs are slow this was needed, undo it asap once they commit the pull request.
1 parent ed111f6 commit c1b8003

File tree

2 files changed

+25
-4
lines changed

2 files changed

+25
-4
lines changed

tests/test_yajl.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -242,11 +242,11 @@ def test_get_yajl_version_correctlyParsesYajlVersion(self):
242242
def test_check_yajl_version_warnsOnlyWhenMismatchedVersions(self):
243243
import warnings
244244
self.mock('warnings.warn')
245-
self.mock('yajl.__version__', mock_obj='1.1.1')
246-
self.mock('yajl.yajl_version', mock_obj='1.1.1')
245+
self.mock('yajl.wrapped.__version__', mock_obj='1.1.1')
246+
self.mock('yajl.wrapped.yajl_version', mock_obj='1.1.1')
247247
self.assertTrue(yajl.check_yajl_version())
248248
self.assertSameTrace('')
249-
self.mock('yajl.yajl_version', mock_obj='1.1.0')
249+
self.mock('yajl.wrapped.yajl_version', mock_obj='1.1.0')
250250
self.assertFalse(yajl.check_yajl_version())
251251
self.assertSameTrace(
252252
"Called warnings.warn("
@@ -257,3 +257,12 @@ def test_check_yajl_version_warnsOnlyWhenMismatchedVersions(self):
257257

258258
def test_checkYajlPyAndYajlHaveSameVersion(self):
259259
self.assertTrue(yajl.check_yajl_version())
260+
261+
def test_checkYajlPyRaisesImportErrorIfDumpsOrLoadsUsedAnyJSONHack(self):
262+
for attr in 'dumps', 'loads':
263+
try:
264+
getattr(yajl, attr)
265+
except ImportError:
266+
pass
267+
else:
268+
self.fail('No ImportError Raised for yajl.%s' % attr)

yajl/__init__.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from yajl_parse import *
1515
from yajl_gen import *
1616

17-
__version__ = '2.0.5'
17+
__version__ = '2.0.5'
1818
yajl_version = get_yajl_version()
1919

2020
def check_yajl_version():
@@ -35,3 +35,15 @@ def check_yajl_version():
3535
return True
3636

3737
check_yajl_version()
38+
39+
# monkey patch yajl, because anyjson devs are slacking off,
40+
# and I got an issue request that I would like to help out.
41+
class Wrapper(object):
42+
def __init__(self, wrapped):
43+
self.wrapped = wrapped
44+
def __getattr__(self, name):
45+
if name in ('dumps', 'loads'):
46+
raise ImportError('this is not py-yajl ... anyjson!')
47+
return getattr(self.wrapped, name)
48+
49+
sys.modules[__name__] = Wrapper(sys.modules[__name__])

0 commit comments

Comments
 (0)