class VersionManager: def __init__(self, version=None): if not version: version = "0.0.1" parts = version.split(".")[:3] if not all(p.isdecimal() for p in parts): raise ValueError("Error occured while parsing version!") nums = [int(p) for p in parts] while len(nums) < 3: nums.append(0) self.major_v, self.minor_v, self.patch_v = nums self.history = [] def _save(self): self.history.append((self.major_v, self.minor_v, self.patch_v)) def major(self): self._save() self.major_v += 1 self.minor_v = 0 self.patch_v = 0 return self def minor(self): self._save() self.minor_v += 1 self.patch_v = 0 return self def patch(self): self._save() self.patch_v += 1 return self def rollback(self): if not self.history: raise Exception("Cannot rollback!") self.major_v, self.minor_v, self.patch_v = self.history.pop() return self def release(self): return f"{self.major_v}.{self.minor_v}.{self.patch_v}"