예제 #1
0
    def test_to_dict_is_a_copy(self):
        metadata = ExtractedMetadata(summary="summary")
        metadata_dict = metadata.to_dict()
        metadata_dict["summary"] = "edited summary"

        # Ensure the metadata cannot be edited with its dict
        self.assertThat(metadata.get_summary(), Equals("summary"))
예제 #2
0
 def test_to_dict_complete(self):
     metadata = ExtractedMetadata(summary="summary",
                                  description="description")
     self.assertThat(
         metadata.to_dict(),
         Equals({
             "summary": "summary",
             "description": "description"
         }),
     )
예제 #3
0
def _adopt_keys(
    config_data: Dict[str, Any],
    extracted_metadata: _metadata.ExtractedMetadata,
    prime_dir: str,
) -> Set[str]:
    ignored_keys = set()
    metadata_dict = extracted_metadata.to_dict()

    # desktop_file_paths and common_ids are special cases that will be handled
    # after all the top level snapcraft.yaml keys.
    ignore = ("desktop_file_paths", "common_id")
    overrides = ((k, v) for k, v in metadata_dict.items() if k not in ignore)

    for key, value in overrides:
        if key in config_data:
            ignored_keys.add(key)
        else:
            if key == "icon":
                # Extracted appstream icon paths will be relative to prime.
                icon = pathlib.Path(prime_dir, str(value))
                if not icon.exists():
                    # Cannot find icon, ignore silently.
                    continue

                if _find_icon_file() is None:
                    # Already have icon file, do not overwrite.
                    continue

            config_data[key] = value

    if "desktop_file_paths" in metadata_dict and "common_id" in metadata_dict:
        app_name = _get_app_name_from_common_id(
            config_data, str(metadata_dict["common_id"]))
        if app_name and not _desktop_file_exists(app_name):
            for desktop_file_path in [
                    os.path.join(prime_dir, d)
                    for d in metadata_dict["desktop_file_paths"]
            ]:
                if os.path.exists(desktop_file_path):
                    config_data["apps"][app_name][
                        "desktop"] = desktop_file_path
                    break

    return ignored_keys
예제 #4
0
 def test_to_dict_partial(self):
     metadata = ExtractedMetadata(summary="summary")
     self.assertThat(metadata.to_dict(), Equals({"summary": "summary"}))