-
Notifications
You must be signed in to change notification settings - Fork 36
Expand file tree
/
Copy pathchecker.py
More file actions
72 lines (62 loc) · 2.45 KB
/
checker.py
File metadata and controls
72 lines (62 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
"""Get a list of packages with package compatibility."""
from __future__ import annotations
from fnmatch import fnmatch
from licensecheck import license_matrix
from licensecheck.packageinfo import PackageInfoManager
from licensecheck.types import JOINS, License, PackageInfo, ucstr
def check(
requirements_paths: list[str],
groups: list[str],
extras: list[str],
this_license: License,
package_info_manager: PackageInfoManager,
ignore_packages: list[ucstr] | None = None,
fail_packages: list[ucstr] | None = None,
ignore_licenses: list[ucstr] | None = None,
fail_licenses: list[ucstr] | None = None,
only_licenses: list[ucstr] | None = None,
skip_dependencies: list[ucstr] | None = None,
) -> tuple[bool, set[PackageInfo]]:
# Def values
ignore_packages = ignore_packages or []
fail_packages = fail_packages or []
ignore_licenses = ignore_licenses or []
fail_licenses = fail_licenses or []
only_licenses = only_licenses or []
skip_dependencies = skip_dependencies or []
package_info_manager.resolve_requirements(
requirements_paths=requirements_paths,
groups=groups,
extras=extras,
skip_dependencies=skip_dependencies,
)
ignoreLicensesType = license_matrix.licenseType(
ucstr(JOINS.join(ignore_licenses)), ignore_licenses
)
failLicensesType = license_matrix.licenseType(ucstr(JOINS.join(fail_licenses)), ignore_licenses)
onlyLicensesType = license_matrix.licenseType(ucstr(JOINS.join(only_licenses)), ignore_licenses)
# licenseType will always return NO_LICENSE when onlyLicenses is empty # noqa: ERA001
if License.NO_LICENSE in onlyLicensesType:
onlyLicensesType.remove(License.NO_LICENSE)
# Check it is compatible with packages and add a note
packages = package_info_manager.getPackages()
for package in packages:
# Deal with --ignore-packages and --fail-packages
package.licenseCompat = False
packageName = package.name.upper()
if any(fnmatch(packageName, pattern) for pattern in ignore_packages):
package.licenseCompat = True
elif any(fnmatch(packageName, pattern) for pattern in fail_packages):
pass # package.licenseCompat = False
# Else get compat with myLice
else:
package.licenseCompat = license_matrix.depCompatWMyLice(
this_license,
license_matrix.licenseType(ucstr(package.license), ignore_licenses),
ignoreLicensesType,
failLicensesType,
onlyLicensesType,
)
# Are any licenses incompatible?
incompatible = any(not package.licenseCompat for package in packages)
return incompatible, packages