2022年8月10日水曜日

Python の packaging を使って一つ前のバージョンを算出する方法を考える

Python の packaging を使って一つ前のバージョンを算出する方法を考える

概要

過去にセマンティクスバージョンを比較する方法を紹介しました
今回は現在のバージョンから一つ前のバージョンを取得する方法を考えます

環境

  • macOS 11.8.6
  • Python 3.10.2
  • packaging 21.3

サンプルコード

"""バージョン管理モジュール."""
from packaging.version import Version


class VersionManager():
    """バージョン管理するクラス."""

    def __init__(self, version: str):
        """初期化."""
        self.current_version = Version(version)

    def get_current_version(self) -> Version:
        """現在のバージョンを取得する."""
        return self.current_version

    def get_latest_minor_version(self, major_version: int) -> int:
        """メジャーバージョンの最新のマイナーバージョンを取得する."""
        if major_version == 0:
            return 9
        elif major_version == 8:
            return 30

    def get_pre_version(self):
        """一つ前のバージョンを取得する."""
        if self.current_version.minor - 1 < 0:
            if self.current_version.major - 1 < 0:
                raise
            else:
                return Version("{}.{}".format(self.current_version.major - 1,
                                              self.get_latest_minor_version(self.current_version.major - 1)))
        else:
            return Version("{}.{}".format(self.current_version.major,
                                          self.current_version.minor - 1))


if __name__ == '__main__':
    print(VersionManager("10.10.0").get_pre_version()) # => 10.9
    print(VersionManager("1.0.0").get_pre_version())  # => 0.9
    print(VersionManager("9.0.0").get_pre_version())  # => 8.30

解説

マイナーバージョンを中心に考えます
マイナーバージョンがマイナスになる場合はメジャーバージョンをマイナスします
そしてそのメジャーバージョンにおける最新のマイナーバージョンを取得します

今回はマイクロバージョンの部分までは考慮していないのでそこも考慮する必要がありますが感じとしてはマイナーバージョンの取得方法と同じ感じかなと思います

0 件のコメント:

コメントを投稿