From 84f3b8fdd5db925f39627acb14c38970cd3daa5d Mon Sep 17 00:00:00 2001 From: Alex Root Junior Date: Mon, 24 Jul 2017 22:25:35 +0300 Subject: [PATCH] Oops add Versions util --- aiogram/__init__.py | 10 ++--- aiogram/utils/versions.py | 89 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 7 deletions(-) create mode 100644 aiogram/utils/versions.py diff --git a/aiogram/__init__.py b/aiogram/__init__.py index e30ce6ef..c8241e36 100644 --- a/aiogram/__init__.py +++ b/aiogram/__init__.py @@ -1,11 +1,7 @@ +from aiogram.utils.versions import Version from .bot import Bot -major_version = 0 -minor_version = 3 -major_build = 1 -build_type = '' -build_number = '' +VERSION = Version(0, 3, 2, build=2) - -__version__ = f"{major_version}.{minor_version}.{major_build}.{build_type}{build_number}" +__version__ = VERSION.version diff --git a/aiogram/utils/versions.py b/aiogram/utils/versions.py new file mode 100644 index 00000000..bf9fb1c6 --- /dev/null +++ b/aiogram/utils/versions.py @@ -0,0 +1,89 @@ +from aiogram.utils.helper import Helper, HelperMode, Item + + +class Version: + def __init__(self, major=0, minor=0, maintenance=0, stage='final', build=0): + self.__raw_version = None + self.__version = None + + self.version = (major, minor, maintenance, stage, build) + + @property + def version(self): + if self.__version is None: + self.__version = self.get_version() + return self.__version + + @version.setter + def version(self, version): + assert isinstance(version, (tuple, list)) + self.__raw_version = version + self.__version = None + + @property + def major(self): + return self.__raw_version[0] + + @property + def minor(self): + return self.__raw_version[1] + + @property + def maintenance(self): + return self.__raw_version[2] + + @property + def stage(self): + return self.__raw_version[3] + + @property + def build(self): + return self.__raw_version[4] + + def get_version(self): + """ + Returns a PEP 440-compliant version number from VERSION. + :param: + :return: + """ + version = self.__raw_version + + # Now build the two parts of the version number: + # app = X.Y[.Z] + # sub = .devN - for pre-alpha releases + # | {a|b|rc}N - for alpha, beta, and rc releases + + main = self.get_main_version() + + sub = '' + + if version[3] != 'final': + mapping = {'alpha': 'a', 'beta': 'b', 'rc': 'rc'} + sub = mapping[version[3]] + str(version[4]) + + return str(main + sub) + + def get_main_version(self): + """ + Returns app version (X.Y[.Z]) from VERSION. + :param: + :return: + """ + version = self.__raw_version + parts = 2 if version[2] == 0 else 3 + return '.'.join(str(x) for x in version[:parts]) + + def __str__(self): + return self.version + + def __repr__(self): + return '' + + +class Stage(Helper): + mode = HelperMode.lowercase + + FINAL = Item() + ALPHA = Item() + BETA = Item() + RC = Item()