Skip to content

Commit

Permalink
Adding a monkey patch / sys.modules hack, fixes #5
Browse files Browse the repository at this point in the history
Note:

because anyjson devs are slow this was needed, undo it asap once they
commit the pull request.
  • Loading branch information
pykler committed Nov 13, 2013
1 parent ed111f6 commit c1b8003
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
15 changes: 12 additions & 3 deletions tests/test_yajl.py
Expand Up @@ -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("
Expand All @@ -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)
14 changes: 13 additions & 1 deletion yajl/__init__.py
Expand Up @@ -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():
Expand All @@ -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__])

0 comments on commit c1b8003

Please sign in to comment.