def _update_project_variables(project: Project, project_vars: Dict[str, str]): """Update project fields with values set during lifecycle processing.""" try: if project_vars["version"]: project.version = project_vars["version"] if project_vars["grade"]: project.grade = project_vars["grade"] # type: ignore except pydantic.ValidationError as err: _raise_formatted_validation_error(err) raise errors.SnapcraftError(f"error setting variable: {err}")
def update_project_metadata( project: Project, *, project_vars: Dict[str, str], metadata_list: List[ExtractedMetadata], assets_dir: Path, prime_dir: Path, ) -> None: """Set project fields using corresponding adopted entries. Fields are validated on assignment by pydantic. :param project: The project to update. :param project_vars: The variables updated during lifecycle execution. :param metadata_list: List containing parsed information from metadata files. :raises SnapcraftError: If project update failed. """ _update_project_variables(project, project_vars) for metadata in metadata_list: # Data specified in the project yaml has precedence over extracted data if metadata.title and not project.title: project.title = metadata.title if metadata.summary and not project.summary: project.summary = metadata.summary if metadata.description and not project.description: project.description = metadata.description if metadata.version and not project.version: project.version = metadata.version if metadata.grade and not project.grade: project.grade = metadata.grade # type: ignore emit.debug(f"project icon: {project.icon!r}") emit.debug(f"metadata icon: {metadata.icon!r}") if not project.icon: _update_project_icon(project, metadata=metadata, assets_dir=assets_dir) _update_project_app_desktop_file(project, metadata=metadata, assets_dir=assets_dir, prime_dir=prime_dir) # Fields that must not end empty for field in MANDATORY_ADOPTABLE_FIELDS: if not getattr(project, field): raise errors.SnapcraftError( f"Field {field!r} was not adopted from metadata")