Allow to use RapidJSON. Allow to disable uvloop, ujson or rapidjson by env. variables.

This commit is contained in:
Alex Root Junior 2018-07-14 01:19:35 +03:00
parent 23211fc283
commit afbe7bb458
3 changed files with 45 additions and 17 deletions

View file

@ -1,4 +1,5 @@
import asyncio
import os
from .bot import Bot
from .dispatcher import Dispatcher
@ -8,6 +9,7 @@ try:
except ImportError:
uvloop = None
else:
if 'DISABLE_UVLOOP' not in os.environ:
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
__version__ = '2.0.dev1'

View file

@ -1,27 +1,52 @@
import json
import os
JSON = 'json'
RAPIDJSON = 'rapidjson'
UJSON = 'ujson'
try:
import ujson
if 'DISABLE_UJSON' not in os.environ:
import ujson as json
_UJSON_IS_AVAILABLE = True
except ImportError:
_UJSON_IS_AVAILABLE = False
_use_ujson = _UJSON_IS_AVAILABLE
def disable_ujson():
global _use_ujson
_use_ujson = False
mode = UJSON
def dumps(data):
if _use_ujson:
return ujson.dumps(data)
return json.dumps(data)
return json.dumps(data, ensure_ascii=False)
else:
mode = JSON
except ImportError:
mode = JSON
try:
if 'DISABLE_RAPIDJSON' not in os.environ:
import rapidjson as json
mode = RAPIDJSON
def dumps(data):
return json.dumps(data, ensure_ascii=False, number_mode=json.NM_NATIVE,
datetime_mode=json.DM_ISO8601 | json.DM_NAIVE_IS_UTC)
def loads(data):
return json.loads(data, number_mode=json.NM_NATIVE,
datetime_mode=json.DM_ISO8601 | json.DM_NAIVE_IS_UTC)
else:
mode = JSON
except ImportError:
mode = JSON
if mode == JSON:
import json
def dumps(data):
return json.dumps(data, ensure_ascii=False)
def loads(data):
if _use_ujson:
return ujson.loads(data)
return json.loads(data)

View file

@ -1,6 +1,7 @@
-r requirements.txt
ujson>=1.35
python-rapidjson>=0.6.3
emoji>=0.5.0
pytest>=3.5.0
pytest-asyncio>=0.8.0