示例#1
0
def test_get_effective_base(base, build_base, project_type, name,
                            expected_base):
    result = utils.get_effective_base(base=base,
                                      build_base=build_base,
                                      project_type=project_type,
                                      name=name)
    assert result == expected_base
示例#2
0
def load(filestream: TextIO) -> Dict[str, Any]:
    """Load and parse a YAML-formatted file.

    :param filename: The YAML file to load.

    :raises SnapcraftError: if loading didn't succeed.
    :raises LegacyFallback: if the project's base is not core22.
    """
    try:
        data = yaml.safe_load(filestream)
        build_base = utils.get_effective_base(
            base=data.get("base"),
            build_base=data.get("build-base"),
            project_type=data.get("type"),
            name=data.get("name"),
        )

        if build_base is None:
            raise errors.LegacyFallback("no base defined")
        if build_base != "core22":
            raise errors.LegacyFallback("base is not core22")
    except yaml.error.YAMLError as err:
        raise errors.SnapcraftError(
            f"snapcraft.yaml parsing error: {err!s}") from err

    filestream.seek(0)

    try:
        return yaml.load(filestream, Loader=_SafeLoader)
    except yaml.error.YAMLError as err:
        raise errors.SnapcraftError(
            f"snapcraft.yaml parsing error: {err!s}") from err
示例#3
0
    def get_effective_base(self) -> str:
        """Return the base to use to create the snap."""
        base = get_effective_base(
            base=self.base,
            build_base=self.build_base,
            project_type=self.type,
            name=self.name,
        )

        # will not happen after schema validation
        if base is None:
            raise RuntimeError("cannot determine build base")

        return base