Esempio n. 1
0
 def test_no_set_instantiation(self):
     with self.assertRaises(TypeError):
         typing.Set()
     with self.assertRaises(TypeError):
         typing.Set[T]()
     with self.assertRaises(TypeError):
         typing.Set[int]()
Esempio n. 2
0
def emit_components(m: Module, *, target_module: ModuleType) -> Module:
    m.toplevel.from_("fastapi", "Depends")

    scanned = scan_module(target_module)
    spec_map = {
        component.__name__: fnspec(component) for component in scanned.components
    }
    code_map: t.Dict[str, Object] = {}

    seen: t.Set(str) = set()
    for name, spec in spec_map.items():
        if inspect.iscoroutinefunction(spec.body):
            raise NotImplementedError("async support")

        if len(spec.arguments) > 0:
            code = create_component_code(spec, spec_map)
            code_map[name] = code

    def _visit(name: str) -> None:
        if name in seen:
            return
        seen.add(name)

        if name not in code_map:
            return

        spec = spec_map[name]
        for subname, _, _ in spec.arguments:
            if subname not in code_map:
                continue
            _visit(subname)

        code = code_map[name]
        m.stmt(code)

    # emit with dependencies ordered
    for name in spec_map:
        _visit(name)

    return m