Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/lml/utils.py : 50%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2 lml.utils
3 ~~~~~~~~~~~~~~~~~~~
5 json utils for dump plugin info class
7 :copyright: (c) 2017-2020 by Onni Software Ltd.
8 :license: New BSD License, see LICENSE for more details
9"""
10import sys
11import logging
12from json import JSONEncoder, dumps
14PY2 = sys.version_info[0] == 2
15log = logging.getLogger(__name__)
18class PythonObjectEncoder(JSONEncoder):
19 """
20 Custom object encoder for json dump
21 """
23 def default(self, obj):
24 a_list_of_types = (list, dict, str, int, float, bool, type(None))
25 if PY2:
26 a_list_of_types += (unicode,)
27 if isinstance(obj, a_list_of_types):
28 return JSONEncoder.default(self, obj)
29 return {"_python_object": str(obj)}
32def json_dumps(keywords):
33 """
34 Dump function keywords in json
35 """
36 return dumps(keywords, cls=PythonObjectEncoder)
39def do_import(plugin_module_name):
40 """dynamically import a module"""
41 try:
42 return _do_import(plugin_module_name)
43 except ImportError:
44 log.exception("%s is absent or cannot be imported", plugin_module_name)
45 raise
48def _do_import(plugin_module_name):
49 plugin_module = __import__(plugin_module_name)
50 if "." in plugin_module_name:
51 modules = plugin_module_name.split(".")
52 for module in modules[1:]:
53 plugin_module = getattr(plugin_module, module)
54 log.debug("found " + plugin_module_name)
55 return plugin_module
58def do_import_class(plugin_class):
59 """dynamically import a class"""
60 try:
61 plugin_module_name = plugin_class.rsplit(".", 1)[0]
62 plugin_module = __import__(plugin_module_name)
63 modules = plugin_class.split(".")
64 for module in modules[1:]:
65 plugin_module = getattr(plugin_module, module)
66 return plugin_module
67 except ImportError:
68 log.exception("Failed to import %s", plugin_module_name)
69 raise