Return a list of unique fixed univers Versions given a ``fixed_range`` univers VersionRange and a ``raw_id``. For example:: >>> get_fixed_versions(fixed_range={}, raw_id="GHSA-j3f7-7rmc-6wqj", supported_ecosystem="pypi",) [] >>> get_fixed_versions( ... fixed_range={"ty
(fixed_range, raw_id, supported_ecosystem)
| 280 | |
| 281 | |
| 282 | def get_fixed_versions(fixed_range, raw_id, supported_ecosystem) -> List[Version]: |
| 283 | """ |
| 284 | Return a list of unique fixed univers Versions given a ``fixed_range`` |
| 285 | univers VersionRange and a ``raw_id``. |
| 286 | For example:: |
| 287 | >>> get_fixed_versions(fixed_range={}, raw_id="GHSA-j3f7-7rmc-6wqj", supported_ecosystem="pypi",) |
| 288 | [] |
| 289 | >>> get_fixed_versions( |
| 290 | ... fixed_range={"type": "ECOSYSTEM", "events": [{"fixed": "1.7.0"}], }, |
| 291 | ... raw_id="GHSA-j3f7-7rmc-6wqj", |
| 292 | ... supported_ecosystem="pypi", |
| 293 | ... ) |
| 294 | [PypiVersion(string='1.7.0')] |
| 295 | """ |
| 296 | fixed_versions = [] |
| 297 | if "type" not in fixed_range: |
| 298 | logger.error(f"Invalid fixed_range type for: {fixed_range} for OSV id: {raw_id!r}") |
| 299 | return [] |
| 300 | |
| 301 | fixed_range_type = fixed_range["type"] |
| 302 | |
| 303 | version_range_class = RANGE_CLASS_BY_SCHEMES.get(supported_ecosystem) |
| 304 | version_class = version_range_class.version_class if version_range_class else None |
| 305 | |
| 306 | for version in extract_fixed_versions(fixed_range): |
| 307 | if fixed_range_type == "ECOSYSTEM": |
| 308 | try: |
| 309 | if not version_class: |
| 310 | raise InvalidVersion( |
| 311 | f"Unsupported version for ecosystem: {supported_ecosystem}" |
| 312 | ) |
| 313 | fixed_versions.append(version_class(version)) |
| 314 | except InvalidVersion: |
| 315 | logger.error( |
| 316 | f"Invalid version class: {version_class} - {version!r} for OSV id: {raw_id!r}" |
| 317 | ) |
| 318 | |
| 319 | elif fixed_range_type == "SEMVER": |
| 320 | try: |
| 321 | fixed_versions.append(SemverVersion(version)) |
| 322 | except InvalidVersion: |
| 323 | logger.error(f"Invalid SemverVersion: {version!r} for OSV id: {raw_id!r}") |
| 324 | else: |
| 325 | logger.error(f"Unsupported fixed version type: {version!r} for OSV id: {raw_id!r}") |
| 326 | |
| 327 | # if fixed_range_type == "GIT": |
| 328 | # TODO add GitHubVersion univers fix_version |
| 329 | # logger.error(f"NotImplementedError GIT Version - {raw_id !r} - {i !r}") |
| 330 | |
| 331 | return dedupe(fixed_versions) |