-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathutils.py
More file actions
63 lines (56 loc) · 1.98 KB
/
Copy pathutils.py
File metadata and controls
63 lines (56 loc) · 1.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import importlib.util as imputil
import importlib, sys, inspect, os, json
def _module_to_namespace(namespace):
# if isinstance(namespace, ModuleType):
members = inspect.getmembers(
namespace, lambda o: inspect.isfunction(o) or isinstance(o, type)
)
return {key: mod for key, mod in members}
def code_to_fn(function_name, code=''):
spec = imputil.spec_from_loader('my_module', loader=None)
my_module = importlib.util.module_from_spec(spec)
exec(code, my_module.__dict__)
sys.modules['my_module'] = my_module
# print(my_module.__dict__)
namespace = _module_to_namespace(my_module)
if function_name in namespace:
fn = namespace[function_name]
# print(fn)
params = {}
return fn(**params)
else:
# print('function not found')
return {'error':'not found'}
def run_fn_by_name(function_name):
# print({k: v for k, v in globals().items() if not k.startswith("__")})
pass
def read_notebook(path):
import codecs
import json, os
from urllib.parse import urlparse
notebook_name = path
ROOT_DIR = os.path.abspath('')
# data_path = os.path.join(ROOT_DIR, r'data\notebooks')
result = urlparse(path)
if not result.netloc:
path = os.path.join(ROOT_DIR , notebook_name)
f = codecs.open(path, 'r')
source = f.read()
y = json.loads(source)
pySource = '##Python .py code from .jpynb:\n'
for x in y['cells']:
if x['cell_type'] == 'code':
for x2 in x['source']:
pySource = pySource + x2
if x2[-1] != '\n':
pySource = pySource + '\n'
return pySource
def code_to_module(code, module_name = 'mymodule'):
# print('code_to_module', module_name)
import sys, imp
mymodule = imp.new_module(code)
# exec(code, mymodule.__dict__)
sys.modules[module_name] = mymodule
globals()[module_name] = mymodule
# print(module_name, globals()[module_name])
return mymodule