Skip to content

Commit 9a4f968

Browse files
Support Major / Minor / Micro level ABI Compatibility
1 parent 7f2e494 commit 9a4f968

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

variantlib/resolver/lib.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import TYPE_CHECKING
77

88
from packaging.utils import canonicalize_name
9+
from packaging.version import Version
910

1011
from variantlib.constants import VARIANT_ABI_DEPENDENCY_NAMESPACE
1112
from variantlib.models.variant import VariantDescription
@@ -34,9 +35,11 @@ def _normalize_package_name(name: str) -> str:
3435
return canonicalize_name(name).replace("-", "_")
3536

3637

37-
def _normalize_package_version(version: str) -> str:
38-
# VALIDATION_VALUE_REGEX does not accepts "+"
39-
return version.split("+", maxsplit=1)[0]
38+
def _generate_version_matches(version: str) -> Generator[str]:
39+
vspec = Version(version)
40+
yield f"{vspec.major}"
41+
yield f"{vspec.major}.{vspec.minor}"
42+
yield f"{vspec.major}.{vspec.minor}.{vspec.micro}"
4043

4144

4245
def filter_variants(
@@ -156,38 +159,40 @@ def sort_and_filter_supported_variants(
156159
# 1. Manually fed from environment variable
157160
# Note: come first for "implicit higher priority"
158161
# Env Var Format: `VARIANT_ABI_DEPENDENCY=packageA==1.2.3,...,packageZ==7.8.9`
159-
if variant_abi_deps_env := os.environ.get("NV_VARIANT_PROVIDER_FORCE_SM_ARCH"):
162+
if variant_abi_deps_env := os.environ.get("VARIANT_ABI_DEPENDENCY"):
160163
for pkg_spec in variant_abi_deps_env.split(","):
161164
try:
162165
pkg_name, pkg_version = pkg_spec.split("==", maxsplit=1)
163166
except ValueError:
164167
logger.exception(
165-
"`NV_VARIANT_PROVIDER_FORCE_SM_ARCH` received an invalid value "
168+
"`VARIANT_ABI_DEPENDENCY` received an invalid value "
166169
"`%(pkg_spec)s`. It will be ignored.\n"
167170
"Expected format: `packageA==1.2.3,...,packageZ==7.8.9`.",
168171
{"pkg_spec": pkg_spec},
169172
)
170173
continue
171174

172-
supported_vprops.append(
175+
supported_vprops.extend(
173176
VariantProperty(
174177
namespace=VARIANT_ABI_DEPENDENCY_NAMESPACE,
175178
feature=_normalize_package_name(pkg_name),
176-
value=_normalize_package_version(pkg_version),
179+
value=_ver,
177180
)
181+
for _ver in _generate_version_matches(pkg_version)
178182
)
179183

180184
# 2. Automatically populate from the current python environment
181185
packages = [
182186
(dist.metadata["Name"], dist.version) for dist in metadata.distributions()
183187
]
184188
for pkg_name, pkg_version in sorted(packages):
185-
supported_vprops.append(
189+
supported_vprops.extend(
186190
VariantProperty(
187191
namespace=VARIANT_ABI_DEPENDENCY_NAMESPACE,
188192
feature=_normalize_package_name(pkg_name),
189-
value=_normalize_package_version(pkg_version),
193+
value=_ver,
190194
)
195+
for _ver in _generate_version_matches(pkg_version)
191196
)
192197

193198
# 3. Adding `VARIANT_ABI_DEPENDENCY_NAMESPACE` at the back of`namespace_priorities`

0 commit comments

Comments
 (0)