Skip to content

Commit b9d31c9

Browse files
authored
Model Generation Fix (#39)
1 parent 79ba21a commit b9d31c9

File tree

4 files changed

+38
-22
lines changed

4 files changed

+38
-22
lines changed

cppython/console.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def info(config):
6969
"""
7070
TODO
7171
"""
72-
project = config.create_project()
72+
config.create_project()
7373

7474

7575
@cli.command()

cppython/project.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,11 @@ def gather_plugins(self, plugin_type: Type[DerivedPlugin]) -> list[Type[DerivedP
5454

5555
def generate_model(self, plugins: list[Type[Generator]]) -> Type[PyProject]:
5656
"""
57-
TODO
57+
TODO: Proper return type hint
5858
"""
5959
plugin_fields = {}
6060
for plugin_type in plugins:
61-
plugin_fields[plugin_type.name()] = plugin_type.data_type()
61+
plugin_fields[plugin_type.name()] = (plugin_type.data_type(), ...)
6262

6363
extended_cppython_type = create_model(
6464
"ExtendedCPPythonData",
@@ -67,14 +67,14 @@ def generate_model(self, plugins: list[Type[Generator]]) -> Type[PyProject]:
6767
)
6868

6969
extended_tool_type = create_model(
70-
"ToolData",
71-
cppython=extended_cppython_type,
70+
"ExtendedToolData",
71+
cppython=(extended_cppython_type, ...),
7272
__base__=ToolData,
7373
)
7474

7575
return create_model(
76-
"PyProject",
77-
tool=extended_tool_type,
76+
"ExtendedPyProject",
77+
tool=(extended_tool_type, ...),
7878
__base__=PyProject,
7979
)
8080

pdm.lock

+9-9
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/unit/test_project.py

+22-6
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@
99
from cppython.project import Project, ProjectBuilder, ProjectConfiguration
1010

1111

12+
class MockGeneratorData(GeneratorData):
13+
"""
14+
TODO
15+
"""
16+
17+
check: bool
18+
19+
1220
class TestProject:
1321
"""
1422
TODO
@@ -51,14 +59,22 @@ def test_generator_data_construction(self, mocker: MockerFixture):
5159

5260
assert model_type.__base__ == PyProject
5361

54-
generator = mocker.Mock(spec=Generator)
55-
generator_data = mocker.Mock(spec=GeneratorData)
62+
generator_type = mocker.Mock(spec=Generator)
63+
generator_type.name.return_value = "mock"
64+
generator_type.data_type.return_value = MockGeneratorData
5665

57-
generator.name.return_value = "mock"
58-
generator.data_type.return_value = type(generator_data)
59-
model_type = builder.generate_model([generator])
66+
model_type = builder.generate_model([generator_type])
6067

61-
assert model_type.__base__ == PyProject
68+
project_data = default_pyproject.dict()
69+
70+
mock_data = MockGeneratorData(check=True)
71+
project_data["tool"]["cppython"]["mock"] = mock_data.dict()
72+
result = model_type(**project_data)
73+
74+
assert result.tool is not None
75+
assert result.tool.cppython is not None
76+
77+
assert result.tool.cppython.mock.check
6278

6379
def test_generator_creation(self, mocker: MockerFixture):
6480
"""

0 commit comments

Comments
 (0)