Files
PlantAI-dev/tools/pymol-env/lib/python3.12/site-packages/sipbuild/module/abi_version.py
T
2026-08-03 18:42:47 +08:00

66 lines
1.8 KiB
Python

# SPDX-License-Identifier: BSD-2-Clause
# Copyright (c) 2025 Phil Thompson <phil@riverbankcomputing.com>
import os
from ..exceptions import UserException
# The directory containing the different module implementations.
_module_source_dir = os.path.join(os.path.dirname(__file__), 'source')
def get_latest_version(abi_major_version=None):
""" Return the latest minor version for a major version (if given)
otherwise return the latest major version.
"""
_, latest = get_source_version_range(abi_major_version)
return latest
def get_module_source_dir(abi_version):
""" Return the name of the directory containing the source of the sip
module that implements the given ABI version.
"""
major_version, minor_version = abi_version
return os.path.join(_module_source_dir, str(major_version),
str(minor_version))
def get_source_version_range(abi_major_version):
""" Return a 2-tuple of the earliest and latest minor versions, for a
particular major version, for which source code is available.
"""
source_dir = _module_source_dir
if abi_major_version is not None:
source_dir = os.path.join(source_dir, str(abi_major_version))
subdirs = sorted(os.listdir(source_dir), key=int)
return int(subdirs[0]), int(subdirs[-1])
def parse_abi_version(abi_version):
""" Return a 2-tuple of the valid major ABI version and the valid minor ABI
version (or None if it was omitted). Both values are integers.
"""
try:
parts = [int(p) for p in abi_version.split('.')]
nr_parts = len(parts)
if nr_parts > 2:
raise ValueError()
except ValueError:
raise UserException(f"'{abi_version}' is not a valid ABI version")
return parts[0], parts[1] if nr_parts == 2 else None