Example #1
0
    def _create_exec_tree_proc(self, item):
        ts_or_cls, obj_or_spec = item
        if ts_or_cls is None:
            return algs.ItemResult(obj_or_spec)

        if isinstance(ts_or_cls, type_.TypeSpec):
            return algs.NodeResult(fn_util.FnCall.stub(ts_or_cls.pack),
                                   ts_or_cls.parse_manifest(obj_or_spec))

        assert isinstance(ts_or_cls, type)
        if obj_or_spec is None:
            return algs.ItemResult(obj_or_spec)

        if obj_.is_direct_object(obj_or_spec, ts_or_cls):
            return algs.ItemResult(obj_or_spec)

        assert isinstance(obj_or_spec, obj_.ObjectSpec)

        _broker = self._broker
        if _broker is None:
            raise errors.GraphError("Broker not found. Target: {}".format(
                misc.qualname(self._cls)))

        mfr = self._broker.get_or_create(ts_or_cls)
        fct = mfr.get(obj_or_spec.key)

        if fct is None:
            if ts_or_cls is dict:
                return algs.ItemResult(obj_or_spec.raw)
            raise KeyError("No such factory for class {}: {}".format(
                misc.qualname(ts_or_cls), obj_or_spec.key))

        return algs.NodeResult(fn_util.FnCall.stub(fct.call_as_fuse_fn),
                               fct.parse_inputs(obj_or_spec.inputs))
Example #2
0
 def markdown_proc(self):
     md_str = "(%s)" % ", ".join("%s" for _ in self._specs)
     fuse_fn = _MarkdownFuseFn(md_str)
     return algs.NodeResult(fuse_fn, iter(self._specs))
Example #3
0
 def markdown_proc(self):
     fuse_fn = _MarkdownFuseFn("{%s: %s}")
     return algs.NodeResult(fuse_fn, iter((self._ks, self._vs)))
Example #4
0
 def markdown_proc(self):
     return algs.NodeResult(_MarkdownFuseFn("\\[%s\\]"), iter((self._ts, )))
Example #5
0
 def _parse_proc(cls, item):
     if isinstance(item, cls):
         return algs.ItemResult(item)
     ts_cls = _TS_MAP[type(item)]
     return algs.NodeResult(ts_cls.fuse_subspecs, ts_cls.iter_raw(item))
Example #6
0
def _run_exec_tree_proc(item):
    if isinstance(item, fn_util.FnCall):
        return algs.NodeResult(item, iter(item.args))
    return algs.ItemResult(item)