|
6 | 6 | from typing import TYPE_CHECKING |
7 | 7 |
|
8 | 8 | from packaging.utils import canonicalize_name |
| 9 | +from packaging.version import Version |
9 | 10 |
|
10 | 11 | from variantlib.constants import VARIANT_ABI_DEPENDENCY_NAMESPACE |
11 | 12 | from variantlib.models.variant import VariantDescription |
@@ -34,9 +35,11 @@ def _normalize_package_name(name: str) -> str: |
34 | 35 | return canonicalize_name(name).replace("-", "_") |
35 | 36 |
|
36 | 37 |
|
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}" |
40 | 43 |
|
41 | 44 |
|
42 | 45 | def filter_variants( |
@@ -156,38 +159,40 @@ def sort_and_filter_supported_variants( |
156 | 159 | # 1. Manually fed from environment variable |
157 | 160 | # Note: come first for "implicit higher priority" |
158 | 161 | # 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"): |
160 | 163 | for pkg_spec in variant_abi_deps_env.split(","): |
161 | 164 | try: |
162 | 165 | pkg_name, pkg_version = pkg_spec.split("==", maxsplit=1) |
163 | 166 | except ValueError: |
164 | 167 | logger.exception( |
165 | | - "`NV_VARIANT_PROVIDER_FORCE_SM_ARCH` received an invalid value " |
| 168 | + "`VARIANT_ABI_DEPENDENCY` received an invalid value " |
166 | 169 | "`%(pkg_spec)s`. It will be ignored.\n" |
167 | 170 | "Expected format: `packageA==1.2.3,...,packageZ==7.8.9`.", |
168 | 171 | {"pkg_spec": pkg_spec}, |
169 | 172 | ) |
170 | 173 | continue |
171 | 174 |
|
172 | | - supported_vprops.append( |
| 175 | + supported_vprops.extend( |
173 | 176 | VariantProperty( |
174 | 177 | namespace=VARIANT_ABI_DEPENDENCY_NAMESPACE, |
175 | 178 | feature=_normalize_package_name(pkg_name), |
176 | | - value=_normalize_package_version(pkg_version), |
| 179 | + value=_ver, |
177 | 180 | ) |
| 181 | + for _ver in _generate_version_matches(pkg_version) |
178 | 182 | ) |
179 | 183 |
|
180 | 184 | # 2. Automatically populate from the current python environment |
181 | 185 | packages = [ |
182 | 186 | (dist.metadata["Name"], dist.version) for dist in metadata.distributions() |
183 | 187 | ] |
184 | 188 | for pkg_name, pkg_version in sorted(packages): |
185 | | - supported_vprops.append( |
| 189 | + supported_vprops.extend( |
186 | 190 | VariantProperty( |
187 | 191 | namespace=VARIANT_ABI_DEPENDENCY_NAMESPACE, |
188 | 192 | feature=_normalize_package_name(pkg_name), |
189 | | - value=_normalize_package_version(pkg_version), |
| 193 | + value=_ver, |
190 | 194 | ) |
| 195 | + for _ver in _generate_version_matches(pkg_version) |
191 | 196 | ) |
192 | 197 |
|
193 | 198 | # 3. Adding `VARIANT_ABI_DEPENDENCY_NAMESPACE` at the back of`namespace_priorities` |
|
0 commit comments