def _initialise_type_inference_strategies() -> List[TypeInferenceStrategy]: strategy = config.INSTANCE.type_inference_strategy if strategy == config.TypeInferenceStrategy.NONE: return [NoTypeInferenceStrategy()] if strategy == config.TypeInferenceStrategy.STUB_FILES: if config.INSTANCE.stub_dir is None: raise ConfigurationException( "Missing configuration value `stub_dir' for StubInferenceStrategy" ) return [StubInferenceStrategy(config.INSTANCE.stub_dir)] if strategy == config.TypeInferenceStrategy.TYPE_HINTS: return [TypeHintsInferenceStrategy()] raise ConfigurationException("Invalid type-inference strategy")
def infer_type_info(self, method: Callable) -> InferredSignature: assert self._pyi_dir module = sys.modules[method.__module__] name = module.__name__.replace(".", "/") pyi_src = name + ".pyi" pyi_ast = self._read_stub(pyi_src) parameter_types, return_type = self._get_parameter_annotations(method, pyi_ast) if parameter_types: return InferredSignature( signature=inspect.signature(method), parameters=parameter_types if parameter_types else {}, return_type=return_type if return_type else None, ) return TypeHintsInferenceStrategy().infer_type_info(method)
def test_infer_type_info(method, expected_parameters, expected_return_types): strategy = TypeHintsInferenceStrategy() result = strategy.infer_type_info(method) assert result.parameters == expected_parameters assert result.return_type == expected_return_types