use pydantic_pkgr to parse semver versions

This commit is contained in:
Nick Sweeting 2024-08-23 02:01:24 -07:00
parent 2c2d034d6d
commit c6a80ab256
No known key found for this signature in database

View file

@ -31,8 +31,6 @@ import getpass
import platform import platform
import shutil import shutil
import requests import requests
import django
from sqlite3 import dbapi2 as sqlite3
from hashlib import md5 from hashlib import md5
from pathlib import Path from pathlib import Path
@ -43,6 +41,11 @@ from configparser import ConfigParser
from collections import defaultdict from collections import defaultdict
import importlib.metadata import importlib.metadata
from pydantic_pkgr import SemVer
import django
from django.db.backends.sqlite3.base import Database as sqlite3
from .config_stubs import ( from .config_stubs import (
AttrDict, AttrDict,
SimpleConfigValueDict, SimpleConfigValueDict,
@ -570,7 +573,7 @@ DYNAMIC_CONFIG_SCHEMA: ConfigDefaultDict = {
'PYTHON_VERSION': {'default': lambda c: '{}.{}.{}'.format(*sys.version_info[:3])}, 'PYTHON_VERSION': {'default': lambda c: '{}.{}.{}'.format(*sys.version_info[:3])},
'DJANGO_BINARY': {'default': lambda c: inspect.getfile(django)}, 'DJANGO_BINARY': {'default': lambda c: inspect.getfile(django)},
'DJANGO_VERSION': {'default': lambda c: '{}.{}.{} {} ({})'.format(*django.VERSION)}, 'DJANGO_VERSION': {'default': lambda c: '{}.{}.{}'.format(*django.VERSION[:3])},
'SQLITE_BINARY': {'default': lambda c: inspect.getfile(sqlite3)}, 'SQLITE_BINARY': {'default': lambda c: inspect.getfile(sqlite3)},
'SQLITE_VERSION': {'default': lambda c: sqlite3.version}, 'SQLITE_VERSION': {'default': lambda c: sqlite3.version},
@ -907,16 +910,9 @@ def bin_version(binary: Optional[str], cmd: Optional[str]=None) -> Optional[str]
version_str = run(cmd or [abspath, "--version"], shell=is_cmd_str, stdout=PIPE, stderr=STDOUT).stdout.strip().decode() version_str = run(cmd or [abspath, "--version"], shell=is_cmd_str, stdout=PIPE, stderr=STDOUT).stdout.strip().decode()
# take first 3 columns of first line of version info # take first 3 columns of first line of version info
version_ptn = re.compile(r"\d+?\.\d+?\.?\d*", re.MULTILINE) semver = SemVer.parse(version_str)
try: if semver:
version_nums = version_ptn.findall(version_str.split('\n')[0])[0] return str(semver)
if version_nums:
return version_nums
else:
raise IndexError
except IndexError:
# take first 3 columns of first line of version info
return ' '.join(version_str.split('\n')[0].strip().split()[:3])
except OSError: except OSError:
pass pass
# stderr(f'[X] Unable to find working version of dependency: {binary}', color='red') # stderr(f'[X] Unable to find working version of dependency: {binary}', color='red')