#!/usr/bin/env python3 import os from pathlib import Path from typing import List, Optional from dataclasses import dataclass import argparse import re __VERSION__ = '1.0.0' VERSION_PATTERN = re.compile('^V([\d]+).([\d]+).([\d]+)__.*$') @dataclass class Version: major: int minor: int patch: int def __str__(self) -> str: return f'V{self.major}.{self.minor}.{self.patch}' @classmethod def from_string(cls, literal: str) -> 'Version': return Version(*[int(x) for x in VERSION_PATTERN.match(literal).groups()]) def __eq__(self, other: 'Version') -> bool: return self.major == other.major and self.minor == other.minor and self.patch == other.patch def __lt__(self, other: 'Version') -> bool: if self.major < other.major: return True if self.minor < other.minor: return True if self.patch < other.patch: return True return False def find_latest_version(root_path: str) -> Optional[Version]: versions: List[Version] = [] for pth in Path(root_path).rglob('V*.sql'): try: versions.append(Version.from_string(pth.name)) except Exception as exc: print(pth, '; ', exc) if versions: return max(versions) return Version(0, 0, 0) if __name__ == '__main__': parser = argparse.ArgumentParser(epilog=f'{os.path.basename(__file__)}:{__VERSION__}') parser.add_argument('-p', '--path', type=str, default='./', help='path to the root folder') params = parser.parse_args() ppath = params.path print('Root path:', ppath) print('Latest version is:', find_latest_version(ppath))