Skip to content

Commit 8a46b2e

Browse files
committed
Refactor Builder Generation
1 parent fa42e21 commit 8a46b2e

File tree

1 file changed

+64
-15
lines changed

1 file changed

+64
-15
lines changed

cppython/plugins/cmake/builder.py

Lines changed: 64 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ def __init__(self) -> None:
1212
"""Initialize the builder"""
1313

1414
@staticmethod
15-
def write_provider_preset(provider_directory: Path, provider_data: CMakeSyncData) -> None:
16-
"""Writes a provider preset from input sync data
15+
def generate_provider_preset(provider_data: CMakeSyncData) -> CMakePresets:
16+
"""Generates a provider preset from input sync data
1717
1818
Args:
1919
provider_directory: The base directory to place the preset files
@@ -26,7 +26,17 @@ def write_provider_preset(provider_directory: Path, provider_data: CMakeSyncData
2626
'CMAKE_PROJECT_TOP_LEVEL_INCLUDES': str(provider_data.top_level_includes.as_posix()),
2727
}
2828

29-
generated_preset = CMakePresets(configurePresets=[generated_configure_preset])
29+
return CMakePresets(configurePresets=[generated_configure_preset])
30+
31+
@staticmethod
32+
def write_provider_preset(provider_directory: Path, provider_data: CMakeSyncData) -> None:
33+
"""Writes a provider preset from input sync data
34+
35+
Args:
36+
provider_directory: The base directory to place the preset files
37+
provider_data: The providers synchronization data
38+
"""
39+
generated_preset = Builder.generate_provider_preset(provider_data)
3040

3141
provider_preset_file = provider_directory / f'{provider_data.provider_name}.json'
3242

@@ -44,18 +54,18 @@ def write_provider_preset(provider_directory: Path, provider_data: CMakeSyncData
4454
file.write(serialized)
4555

4656
@staticmethod
47-
def write_cppython_preset(
57+
def generate_cppython_preset(
4858
cppython_preset_directory: Path, provider_directory: Path, provider_data: CMakeSyncData
49-
) -> Path:
50-
"""Write the cppython presets which inherit from the provider presets
59+
) -> CMakePresets:
60+
"""Generates the cppython preset which inherits from the provider presets
5161
5262
Args:
5363
cppython_preset_directory: The tool directory
5464
provider_directory: The base directory containing provider presets
5565
provider_data: The provider's synchronization data
5666
5767
Returns:
58-
A file path to the written data
68+
A CMakePresets object
5969
"""
6070
generated_configure_preset = ConfigurePreset(name='cppython', inherits=provider_data.provider_name)
6171
generated_preset = CMakePresets(configurePresets=[generated_configure_preset])
@@ -66,7 +76,25 @@ def write_cppython_preset(
6676

6777
# Set the data
6878
generated_preset.include = [relative_preset]
79+
return generated_preset
6980

81+
@staticmethod
82+
def write_cppython_preset(
83+
cppython_preset_directory: Path, provider_directory: Path, provider_data: CMakeSyncData
84+
) -> Path:
85+
"""Write the cppython presets which inherit from the provider presets
86+
87+
Args:
88+
cppython_preset_directory: The tool directory
89+
provider_directory: The base directory containing provider presets
90+
provider_data: The provider's synchronization data
91+
92+
Returns:
93+
A file path to the written data
94+
"""
95+
generated_preset = Builder.generate_cppython_preset(
96+
cppython_preset_directory, provider_directory, provider_data
97+
)
7098
cppython_preset_file = cppython_preset_directory / 'cppython.json'
7199

72100
initial_preset = None
@@ -86,17 +114,15 @@ def write_cppython_preset(
86114
return cppython_preset_file
87115

88116
@staticmethod
89-
def write_root_presets(preset_file: Path, cppython_preset_file: Path) -> None:
90-
"""Read the top level json file and insert the include reference.
91-
92-
Receives a relative path to the tool cmake json file
93-
94-
Raises:
95-
ConfigError: If key files do not exists
117+
def generate_root_preset(preset_file: Path, cppython_preset_file: Path) -> CMakePresets:
118+
"""Generates the top level root preset with the include reference.
96119
97120
Args:
98121
preset_file: Preset file to modify
99122
cppython_preset_file: Path to the cppython preset file to include
123+
124+
Returns:
125+
A CMakePresets object
100126
"""
101127
initial_root_preset = None
102128

@@ -108,7 +134,6 @@ def write_root_presets(preset_file: Path, cppython_preset_file: Path) -> None:
108134
root_preset = initial_root_preset.model_copy(deep=True)
109135
else:
110136
# If the file doesn't exist, we need to default it for the user
111-
112137
# TODO: Forward the tool's build directory
113138
default_configure_preset = ConfigurePreset(name='default', inherits='cppython', binaryDir='build')
114139
root_preset = CMakePresets(configurePresets=[default_configure_preset])
@@ -125,6 +150,30 @@ def write_root_presets(preset_file: Path, cppython_preset_file: Path) -> None:
125150
if str(relative_preset) not in root_preset.include:
126151
root_preset.include.append(str(relative_preset))
127152

153+
return root_preset
154+
155+
@staticmethod
156+
def write_root_presets(preset_file: Path, cppython_preset_file: Path) -> None:
157+
"""Read the top level json file and insert the include reference.
158+
159+
Receives a relative path to the tool cmake json file
160+
161+
Raises:
162+
ConfigError: If key files do not exists
163+
164+
Args:
165+
preset_file: Preset file to modify
166+
cppython_preset_file: Path to the cppython preset file to include
167+
"""
168+
initial_root_preset = None
169+
170+
if preset_file.exists():
171+
with open(preset_file, encoding='utf-8') as file:
172+
initial_json = file.read()
173+
initial_root_preset = CMakePresets.model_validate_json(initial_json)
174+
175+
root_preset = Builder.generate_root_preset(preset_file, cppython_preset_file)
176+
128177
# Only write the file if the data has changed
129178
if root_preset != initial_root_preset:
130179
with open(preset_file, 'w', encoding='utf-8') as file:

0 commit comments

Comments
 (0)