def test_command_set_version(self): with patch.object(PackageVersion, "set") as set_mock: assert Executor(Version("1.2.3")).command_set_version() is None set_mock.assert_called_with(Version("1.2.3")) set_mock.side_effect = PackageVersionError with pytest.raises(ExecutorError): Executor(Version("1.2.3")).command_set_version()
def test_command_get_version(self): with patch.object(PackageVersion, "get") as get_mock: get_mock.return_value = "test" assert Executor(Version("1.2.3")).command_get_version() == "test" get_mock.assert_called_with() get_mock.side_effect = PackageVersionError with pytest.raises(ExecutorError): Executor(Version("1.2.3")).command_get_version()
def test_bump_postrelease(self): assert Version("1.2.3").bump_postrelease().dumps() == "1.2.3.post1" assert Version( "1.2.3alpha").bump_postrelease().dumps() == "1.2.3.post1" assert Version("1.2.3.post4").bump_postrelease( 2).dumps() == "1.2.3.post6" assert Version( "1.2.3.post").bump_postrelease().dumps() == "1.2.3.post2" assert Version("1.2.3").bump_postrelease(2).dumps() == "1.2.3.post2"
def get_stdin() -> Version: """ Get input from stdin. Returns: Parsed version. """ if sys.stdin.isatty(): return Version.zero() for line in sys.stdin.readlines(): return Version(line.strip().split(" ")[-1]) return Version.zero()
def _set_in_pyproject(self, version: Version) -> None: if not self._pyproject_path.exists(): return text = self._pyproject_path.read_text() line_ending = EOLFixer.get_line_ending(text) lines = [] changed = False for line in text.splitlines(): if not line.startswith("version"): lines.append(line) continue match = self.RE_PYPROJECT.match(line) if not match: lines.append(line) continue old_version = match.group(1) self._logger.info( f"Changing version in {print_path(self._pyproject_path)}" f" from {old_version} to {version.dumps()}" ) new_line = line.replace(old_version, version.dumps()) lines.append(new_line) changed = True if changed: text = EOLFixer.add_newline(line_ending.join(lines)) self._pyproject_path.write_text(text)
def get_stdin() -> Version: """ Get input from stdin. Returns: Parsed version. """ if sys.stdin.isatty(): return Version.zero() for line in sys.stdin.readlines(): safe_line = line.strip().split(" ")[-1].replace('"', "").replace("'", "") return Version(safe_line) return Version.zero()
def test_get(self): with tempfile.TemporaryDirectory() as path_str: path = Path(path_str) (path / "setup.py").write_text("\n\nsetup(\n version ='1.2.3',\n)") assert PackageVersion(path).get() == Version("1.2.3") (path / "setup.cfg").write_text("name=mypackage\n\nversion = 1.2.4\n\n") assert PackageVersion(path).get() == Version("1.2.4") (path / "version.txt").write_text("1.2.5\n") (path / "setup.cfg" ).write_text("name=mypackage\n\nversion = file: version.txt\n\n") assert PackageVersion(path).get() == Version("1.2.5") (path / "pyproject.toml").write_text( '[tool.poetry]\nname= "mypackage"\n\nversion = "1.2.6"\n\n') assert PackageVersion(path).get() == Version("1.2.6")
def test_set(self): with tempfile.TemporaryDirectory() as path_str: path = Path(path_str) assert PackageVersion(path).set(Version("1.2.3")) is None (path / "setup.py").write_text("\n\nsetup(\n version ='1.2.0',\n)") (path / "setup.cfg").write_text("name=mypackage\n\nversion= 1.1.0\n\n") (path / "pyproject.toml").write_text( '[tool.poetry]\nname= "mypackage"\n\nversion = "1.1.1"\n\n') assert PackageVersion(path).set(Version("1.2.3")) is None assert (path / "setup.py" ).read_text() == "\n\nsetup(\n version ='1.2.3',\n)\n" assert (path / "setup.cfg" ).read_text() == "name=mypackage\n\nversion= 1.2.3\n" assert (path / "pyproject.toml").read_text( ) == '[tool.poetry]\nname= "mypackage"\n\nversion = "1.2.3"\n' (path / "setup.cfg" ).write_text("name=mypackage\n\nversion = file: version.txt\n\n") assert PackageVersion(path).set(Version("1.2.3")) is None assert (path / "version.txt").read_text() == "1.2.3\n"
def test_bump_minor(self): assert Version("1.2.3").bump_minor().dumps() == "1.3.0" assert Version("1.2.3rc4").bump_minor(2).dumps() == "1.4.0" assert Version("1.2.3rc4").bump_minor(0).dumps() == "1.2.0" assert Version("1.3.0rc4").bump_minor().dumps() == "1.3.0" assert Version("1.3.0rc4").bump_minor(2).dumps() == "1.4.0" assert Version("1").bump_minor().dumps() == "1.1.0"
def test_bump_micro(self): assert Version("1.2.3").bump_micro().dumps() == "1.2.4" assert Version("1.2.3rc4").bump_micro().dumps() == "1.2.3" assert Version("1.2.3rc4").bump_micro(2).dumps() == "1.2.4" assert Version("1.2.3rc4").bump_micro(0).dumps() == "1.2.2" assert Version("1").bump_micro().dumps() == "1.0.1" assert Version("1.2").bump_micro().dumps() == "1.2.1"
def test_bump_prerelease(self): assert Version("1.2.3").bump_prerelease().dumps() == "1.2.4rc1" assert Version("1.2.3alpha").bump_prerelease().dumps() == "1.2.3a2" assert Version("1.2.3rc4").bump_prerelease(2).dumps() == "1.2.3rc6" assert Version("1.2.3rc4").bump_prerelease( 2, "alpha").dumps() == "1.2.4a2" assert Version("1.2.3").bump_prerelease(2, "alpha").dumps() == "1.2.4a2" assert Version("1.2.3").bump_prerelease(2, "alpha", "major").dumps() == "2.0.0a2" assert Version("1.2.3a3").bump_prerelease(2, "alpha", "major").dumps() == "1.2.3a5" assert Version("1.2.3a3").bump_prerelease( 2, "rc", "major").dumps() == "1.2.3rc2"
def test_bump_major(self): assert Version("1.2.3").bump_major().dumps() == "2.0.0" assert Version("1.2.3rc4").bump_major(2).dumps() == "3.0.0" assert Version("2.0.0").bump_major().dumps() == "3.0.0" assert Version("2.0.0rc4").bump_major().dumps() == "2.0.0" assert Version("2.1.0rc4").bump_major().dumps() == "3.0.0" assert Version("2.1.0rc4").bump_major(2).dumps() == "4.0.0"
def test_replace(self): assert Version("1.2.3").replace(dev=45).dumps() == "1.2.3.dev45" assert Version("1.2.3.dev14").replace(dev=36).dumps() == "1.2.3.dev36" assert Version("1.2.3-dev14").replace(dev=45).dumps() == "1.2.3.dev45" assert Version("1.2.3rc3").replace(dev=45).dumps() == "1.2.3rc3.dev45" assert Version("1.2.3rc3").replace(major=3).dumps() == "3.2.3rc3" assert Version("1.2.3rc3").replace( local="test-1").dumps() == "1.2.3rc3+test.1"
def _get_from_setup_cfg(self) -> Optional[Version]: if not self._setup_cfg_path.exists(): return self._logger.debug(f"Found {print_path(self._setup_cfg_path)}, extracting version from it") text = self._setup_cfg_path.read_text() for line in text.splitlines(): if not line.startswith("version"): continue match = self.RE_SETUP_CFG_FILE.match(line) if match: version_path = self._path / Path(match.group(1)) self._logger.debug(f"Getting version from {match.group(1)}") return Version(version_path.read_text().strip()) match = self.RE_SETUP_CFG.match(line) if not match: continue version_str = match.group(1) self._logger.debug(f"Version {version_str} found") return Version(version_str)
def test_bump_rc_version(self): body = RecordBody(( RecordSection("removed", "- removed"), RecordSection("added", "- added"), RecordSection("fixed", "- fixed"), )) assert body.bump_rc_version(Version("1.2.3")) == Version("2.0.0rc1") assert body.bump_rc_version(Version("1.2.3rc1")) == Version("2.0.0rc1") assert body.bump_rc_version(Version("1.0.0rc1")) == Version("1.0.0rc2")
def _get_from_pyproject(self) -> Optional[Version]: if not self._pyproject_path.exists(): return self._logger.debug(f"Found {print_path(self._pyproject_path)}, extracting version from it") text = self._pyproject_path.read_text() for line in text.splitlines(): if not line.startswith("version"): continue match = self.RE_PYPROJECT.match(line) if not match: continue version_str = match.group(1) self._logger.debug(f"Version {version_str} found") return Version(version_str)
def test_bump_version(self): body = RecordBody(( RecordSection("removed", "- removed"), RecordSection("added", "- added"), RecordSection("fixed", "- fixed"), )) assert body.bump_version(Version("1.2.3")) == Version("2.0.0") body = RecordBody(( RecordSection("removed", ""), RecordSection("added", "- added"), RecordSection("fixed", "- fixed"), )) assert body.bump_version(Version("1.2.3")) == Version("1.3.0") body = RecordBody(( RecordSection("removed", ""), RecordSection("added", ""), RecordSection("fixed", "- fixed"), )) assert body.bump_version(Version("1.2.3")) == Version("1.2.4") assert RecordBody().bump_version(Version("1.2.3")) == Version("1.2.4")
def test_command_get(self): executor = Executor(Version("1.2.3rc4")) assert executor.command_get("major") == "1" assert executor.command_get("minor") == "2" assert executor.command_get("micro") == "3" assert executor.command_get("rc") == "4" assert executor.command_get("pre") == "rc4" assert executor.command_get("alpha") == "0" assert executor.command_get("beta") == "0" assert executor.command_get("post") == "0" assert executor.command_get("epoch") == "0" assert Executor(Version("1.2.3a4")).command_get("alpha") == "4" assert Executor(Version("1.2.3b5")).command_get("beta") == "5" assert Executor(Version("1.2.3.post7")).command_get("post") == "7" assert Executor(Version("1234!1.2.3.post7")).command_get("epoch") == "1234" assert Executor(Version("1234!1.2.3.post7+localver")).command_get("local") == "localver"
def test_command_stable(self): assert Executor(Version("1.2.3a4")).command_stable() == Version("1.2.3") assert Executor(Version("1.2.4")).command_stable() == Version("1.2.4") assert Executor(Version("1.2.4.post4")).command_stable() == Version("1.2.4") assert Executor(Version("1234!1.2")).command_stable() == Version("1.2.0")
def test_comparison(self): assert Version("1.2.32") > Version("1.2.5") assert Version("1.2.3") > Version("1.2.3.rc3") assert Version("1.2.3.rc3") > Version("1.2.3.rc2") assert Version("1.2.3rc3") == Version("1.2.3.rc3") assert Version("1.2.3alpha3") == Version("1.2.3a3") assert Version("1.2.3.rc3") < Version("1.2.3.rc4") assert Version("1.2.3.rc3") < Version("1.2.3") assert Version("1.2.3.dev3") < Version("1.2.3a1") assert Version("1.2.3.post3") > Version("1.2.3")
def test_get_stable(self): assert Version("1.2.3").get_stable().dumps() == "1.2.3" assert Version("2.1.0a2").get_stable().dumps() == "2.1.0" assert Version("1.2.5.post3").get_stable().dumps() == "1.2.5"
def test_command_compare(self): assert Executor(Version("1.2.3")).command_compare("lt", Version("1.3.0")) is None assert Executor(Version("1.2.3")).command_compare("lte", Version("1.3.0")) is None assert Executor(Version("1.2.3")).command_compare("gt", Version("1.2.0")) is None assert Executor(Version("1.2.3")).command_compare("gte", Version("1.2.3")) is None assert Executor(Version("1.2.3")).command_compare("eq", Version("1.2.3")) is None with pytest.raises(ExecutorError): Executor(Version("1.2.3")).command_compare("ne", Version("1.2.3"))
def test_command_set(self): assert Executor(Version("1.2.3")).command_set("major", 3) == Version("3.2.3") assert Executor(Version("1.2.3")).command_set("minor", 3) == Version("1.3.3") assert Executor(Version("1.2.3")).command_set("micro", 4) == Version("1.2.4") assert Executor(Version("1.2.3")).command_set("pre", 4) == Version("1.2.3rc4") assert Executor(Version("1.2.3rc2")).command_set("pre", 4) == Version("1.2.3rc4") assert Executor(Version("1.2.3a2")).command_set("pre", 4) == Version("1.2.3a4") assert Executor(Version("1.2.3b2")).command_set("pre", 4) == Version("1.2.3b4") assert Executor(Version("1.2.3")).command_set("epoch", 1234) == Version("1234!1.2.3") assert Executor(Version("1.2.3")).command_set("alpha", 4) == Version("1.2.3a4") assert Executor(Version("1.2.3")).command_set("beta", 4) == Version("1.2.3b4") assert Executor(Version("1.2.3")).command_set("rc", 4) == Version("1.2.3rc4")
def test_parse(self): assert Version.zero().dumps() == "0.0.0" assert Version("1.2.3").major == 1 assert Version("1.2.3").minor == 2 assert Version("1.2.3").micro == 3 assert Version("1.2.3").pre == None assert Version("1.2.3rc4").pre == ("rc", 4) assert Version("1.2.3.alpha4").pre == ("a", 4) assert Version("1.2.3.alpha").pre == ("a", 0) assert Version("1.2.3-rc4").pre == ("rc", 4) assert Version("1.2.3-dev5").is_devrelease assert Version("1.2.3").is_stable assert not Version("1.2.3").is_devrelease assert Version("1.2.3.post3").is_stable assert Version("1.2.3.post3").is_postrelease with pytest.raises(VersionError): Version("invalid")
def test_command_bump(self): assert Executor(Version("1.2.3")).command_bump("major", 3) == Version("4.0.0") assert Executor(Version("1.2.3")).command_bump("minor", 3) == Version("1.5.0") assert Executor(Version("1.2.3")).command_bump("micro", 3) == Version("1.2.6") assert Executor(Version("1.2.3")).command_bump("pre", 3) == Version("1.2.4rc3") assert Executor(Version("1.2.3rc1")).command_bump("pre", 3) == Version("1.2.3rc4") assert Executor(Version("1.2.3rc2")).command_bump("rc", 3) == Version("1.2.3rc5") assert Executor(Version("1.2.3rc2")).command_bump("alpha", 3) == Version("1.2.4a3") assert Executor(Version("1.2.3")).command_bump("post", 1) == Version("1.2.3.post1") assert Executor(Version("1.2.3.post5")).command_bump("post", 1) == Version("1.2.3.post6") with pytest.raises(ExecutorError): Executor(Version("1.2.3.post5")).command_bump("unknown", 1)
def __init__( self, input: Version = Version.zero(), ) -> None: self._input = input
def test_command_is_stable(self): assert Executor(Version("1.2.3")).command_is_stable() is None assert Executor(Version("1.2.3.post3")).command_is_stable() is None assert Executor(Version("123!1.2.3.post3")).command_is_stable() is None with pytest.raises(ExecutorError): Executor(Version("1.2.3a4")).command_is_stable()