@@ -18,31 +18,25 @@ def _load(mod_name: str, pyproject_dict: dict[str, Any]) -> dict[str, Any]:
18
18
return importlib .import_module (mod_name ).dynamic_metadata (pyproject_dict ) # type: ignore[no-any-return]
19
19
20
20
21
+ # If pyproject-metadata eventually supports updates, this can be simplified
21
22
def get_standard_metadata (
22
23
pyproject_dict : dict [str , Any ], settings : ScikitBuildSettings
23
24
) -> StandardMetadata :
24
- metadata = StandardMetadata .from_pyproject (pyproject_dict )
25
-
26
- # handle any dynamic metadata
25
+ # Handle any dynamic metadata
27
26
for field in settings .metadata :
28
- if field not in metadata . dynamic :
27
+ if field not in pyproject_dict . get ( "project" , {}). get ( " dynamic" , []) :
29
28
msg = f"{ field } is not in project.dynamic"
30
29
raise KeyError (msg )
31
30
32
31
plugins = set (settings .metadata .values ())
33
32
cached_plugins = {key : _load (key , pyproject_dict ) for key in plugins }
34
33
35
34
for field , mod_name in settings .metadata .items ():
36
- # would be better to update the metadata directly but this is
37
- # currently not supported by pyproject_metadata
38
- # metadata.__setattr__(field, ep.load()(pyproject_path)
39
- if field in cached_plugins [mod_name ]:
40
- pyproject_dict ["project" ][field ] = cached_plugins [mod_name ][field ]
41
- pyproject_dict ["project" ]["dynamic" ].remove (field )
42
- else :
35
+ if field not in cached_plugins [mod_name ]:
43
36
msg = f"{ field } is not provided by plugin { mod_name } "
44
37
raise KeyError (msg )
45
38
46
- # if pyproject-metadata supports updates, we won't need this line anymore
47
- metadata = StandardMetadata .from_pyproject (pyproject_dict )
48
- return metadata
39
+ pyproject_dict ["project" ][field ] = cached_plugins [mod_name ][field ]
40
+ pyproject_dict ["project" ]["dynamic" ].remove (field )
41
+
42
+ return StandardMetadata .from_pyproject (pyproject_dict )
0 commit comments