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
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
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