def load(stream, filename):
if filename.endswith('.cdg'):
import ubjson
cg = ubjson.load(stream)
elif filename.endswith('.json'):
import json
cg = json.load(stream)
elif filename.endswith('.yaml'):
import yaml
try:
from yaml import CLoader as Loader
except ImportError:
from yaml import Loader
cg = yaml.load(stream, Loader=Loader)
else:
raise ValueError('Unhandled file type: %s' % filename)
graph = create(filename)
for (name, props) in cg['functions'].items():
graph.add_node(name)
if 'attributes' in props:
graph.node[name].update(props['attributes'])
if 'calls' in props:
calls = props['calls']
if calls:
for target in calls:
graph.add_edge(name, target, kind = EdgeKind.Call)
if 'flows' in props:
flows = props['flows']
if flows:
for source in flows:
graph.add_edge(source, name, kind = EdgeKind.Flow)
return graph
评论列表
文章目录