diff --git a/cppython/project.py b/cppython/project.py index 1f2af26..63f7bf6 100644 --- a/cppython/project.py +++ b/cppython/project.py @@ -36,7 +36,9 @@ class ProjectBuilder: def __init__(self, configuration: ProjectConfiguration) -> None: self.configuration = configuration - def gather_plugins(self, plugin_type: Type[Plugin]) -> list[Type[Plugin]]: + DerivedPlugin = TypeVar("DerivedPlugin", bound=Plugin) + + def gather_plugins(self, plugin_type: Type[DerivedPlugin]) -> list[Type[DerivedPlugin]]: """ TODO """ @@ -50,7 +52,7 @@ def gather_plugins(self, plugin_type: Type[Plugin]) -> list[Type[Plugin]]: return plugins - def generate_model(self, plugins: list[Type[Plugin]]) -> Type[PyProject]: + def generate_model(self, plugins: list[Type[Generator]]) -> Type[PyProject]: """ TODO """ @@ -58,21 +60,21 @@ def generate_model(self, plugins: list[Type[Plugin]]) -> Type[PyProject]: for plugin_type in plugins: plugin_fields[plugin_type.name()] = plugin_type.data_type() - ExtendedCPPythonData = create_model( + extended_cppython_type = create_model( "ExtendedCPPythonData", **plugin_fields, __base__=CPPythonData, ) - ExtendedToolData = create_model( + extended_tool_type = create_model( "ToolData", - cppython=ExtendedCPPythonData, + cppython=extended_cppython_type, __base__=ToolData, ) return create_model( "PyProject", - tool=ExtendedToolData, + tool=extended_tool_type, __base__=PyProject, ) @@ -110,8 +112,8 @@ def __init__( interface.print("No generator plugin was found.") return - ExtendedPyProject = builder.generate_model(plugins) - pyproject = ExtendedPyProject(**pyproject_data) + extended_pyproject_type = builder.generate_model(plugins) + pyproject = extended_pyproject_type(**pyproject_data) if pyproject.tool is None: if self.configuration.verbose: diff --git a/pdm.lock b/pdm.lock index 0c31f8e..839d8c8 100644 --- a/pdm.lock +++ b/pdm.lock @@ -62,7 +62,7 @@ extras = ["toml"] requires_python = ">=3.7" summary = "Code coverage measurement for Python" dependencies = [ - "coverage", + "coverage>=5.2.1", "tomli", ] @@ -167,9 +167,9 @@ dependencies = [ [[package]] name = "pyparsing" -version = "3.0.7" -requires_python = ">=3.6" -summary = "Python parsing module" +version = "3.0.8" +requires_python = ">=3.6.8" +summary = "pyparsing module - Classes and methods to define and execute parsing grammars" [[package]] name = "pytest" @@ -462,9 +462,9 @@ content_hash = "sha256:f53b6399862b1bc49a0ad0dc5017dfeb3c9348259b7b5fbabf9c70536 {file = "pylint-2.13.5-py3-none-any.whl", hash = "sha256:c149694cfdeaee1aa2465e6eaab84c87a881a7d55e6e93e09466be7164764d1e"}, {file = "pylint-2.13.5.tar.gz", hash = "sha256:dab221658368c7a05242e673c275c488670144123f4bd262b2777249c1c0de9b"}, ] -"pyparsing 3.0.7" = [ - {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, - {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, +"pyparsing 3.0.8" = [ + {file = "pyparsing-3.0.8-py3-none-any.whl", hash = "sha256:ef7b523f6356f763771559412c0d7134753f037822dad1b16945b7b846f7ad06"}, + {file = "pyparsing-3.0.8.tar.gz", hash = "sha256:7bf433498c016c4314268d95df76c81b842a4cb2b276fa3312cfb1e1d85f6954"}, ] "pytest 7.1.1" = [ {file = "pytest-7.1.1-py3-none-any.whl", hash = "sha256:92f723789a8fdd7180b6b06483874feca4c48a5c76968e03bb3e7f806a1869ea"}, diff --git a/tests/unit/test_project.py b/tests/unit/test_project.py index 81d8e0f..58ac989 100644 --- a/tests/unit/test_project.py +++ b/tests/unit/test_project.py @@ -47,18 +47,18 @@ def test_generator_data_construction(self, mocker: MockerFixture): configuration = ProjectConfiguration() builder = ProjectBuilder(configuration) - Model = builder.generate_model([]) + model_type = builder.generate_model([]) - assert Model.__base__ == PyProject + assert model_type.__base__ == PyProject generator = mocker.Mock(spec=Generator) generator_data = mocker.Mock(spec=GeneratorData) generator.name.return_value = "mock" generator.data_type.return_value = type(generator_data) - Model = builder.generate_model([generator]) + model_type = builder.generate_model([generator]) - assert Model.__base__ == PyProject + assert model_type.__base__ == PyProject def test_generator_creation(self, mocker: MockerFixture): """