diff --git a/Pipfile b/Pipfile index 2ab052f1dac0fd87492f3080c111c25b45bd6616..f779e7286eeae7628fcff358affd95068088980e 100644 --- a/Pipfile +++ b/Pipfile @@ -11,7 +11,7 @@ toolz = "*" maya = "*" ujson = "*" prettytable = "*" -jsonrpcserver = "*" +jsonrpcserver = "4.1.3+8f3437a" aiohttp = "*" aiopg = "*" "psycopg2-binary" = "*" diff --git a/hive/server/serve.py b/hive/server/serve.py index ad75d2c0d6634e08e762cef19a314e23b79bb609..b37a25102647bd0d4fb106a2d311aee92cb953d6 100644 --- a/hive/server/serve.py +++ b/hive/server/serve.py @@ -11,6 +11,8 @@ from aiohttp import web from jsonrpcserver.methods import Methods from jsonrpcserver import async_dispatch as dispatch +import simplejson + from hive.server.condenser_api import methods as condenser_api from hive.server.condenser_api.tags import get_trending_tags as condenser_api_get_trending_tags from hive.server.condenser_api.get_state import get_state as condenser_api_get_state @@ -35,6 +37,12 @@ from hive.server.db import Db # pylint: disable=too-many-lines +def decimal_serialize(obj): + return simplejson.dumps(obj=obj, use_decimal=True) + +def decimal_deserialize(s): + return simplejson.loads(s=s, use_decimal=True) + async def db_head_state(context): """Status/health check.""" db = context['db'] @@ -268,10 +276,10 @@ def run_server(conf): """Handles all hive jsonrpc API requests.""" request = await request.text() # debug=True refs https://github.com/bcb/jsonrpcserver/issues/71 - response = await dispatch(request, methods=methods, debug=True, context=app) + response = await dispatch(request, methods=methods, debug=True, context=app, serialize=decimal_serialize, deserialize=decimal_deserialize) if response.wanted: headers = {'Access-Control-Allow-Origin': '*'} - return web.json_response(response.deserialized(), status=200, headers=headers) + return web.json_response(response.deserialized(), status=200, headers=headers, dumps=decimal_serialize) return web.Response() if conf.get('sync_to_s3'): diff --git a/requirements.txt b/requirements.txt index a0c013dbdfa672b2be95af0d7ad8644b61fa1e14..1234f7b2855f4621b35046ecd2ab119ac95b6a61 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,8 @@ funcy==1.14 -e git+git@gitlab.syncad.com:hive/hivemind.git@ba54fc07c08c2fd08b37475c9a15d61c64e380c9#egg=hivemind humanize==2.4.0 idna==2.9 -jsonrpcserver==4.0.1 +-e git+https://github.com/bcb/jsonrpcserver.git@8f3437a19b6d1a8f600ee2c9b112116c85f17827#egg=jsonrpcserver-4.1.3+8f3437a +simplejson jsonschema==2.6.0 Mako==1.1.2 Markdown==2.4.1 diff --git a/setup.py b/setup.py index c44312a9490cd7d1406881cc441562accdf34f5a..d3cf416ff8c6f066227c12efd4fce555ce8589d8 100644 --- a/setup.py +++ b/setup.py @@ -26,10 +26,14 @@ setup( packages=find_packages(exclude=['scripts']), setup_requires=['pytest-runner', 'setuptools-git-version'], tests_require=tests_require, + dependency_links=[ + 'https://github.com/bcb/jsonrpcserver/tarball/8f3437a19b6d1a8f600ee2c9b112116c85f17827#egg=jsonrpcserver-4.1.3+8f3437a' + ], install_requires=[ #'aiopg==0.16.0', 'aiopg @ https://github.com/aio-libs/aiopg/tarball/862fff97e4ae465333451a4af2a838bfaa3dd0bc', - 'jsonrpcserver==4.0.1', + 'jsonrpcserver @ https://github.com/bcb/jsonrpcserver/tarball/8f3437a19b6d1a8f600ee2c9b112116c85f17827#egg=jsonrpcserver' + 'simplejson', 'aiohttp', 'certifi', 'sqlalchemy',