Skip to content

Commit 209d716

Browse files
Merge pull request #59 from Azraeht/add-skip-dependencies
Add skip dependencies
2 parents 975e78d + ecefb1b commit 209d716

File tree

9 files changed

+66
-52
lines changed

9 files changed

+66
-52
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,8 @@ options:
304304
a list of licenses to ignore (skipped, compat may still be False)
305305
--fail-licenses FAIL_LICENSES [FAIL_LICENSES ...]
306306
a list of licenses to fail (compat=False)
307+
--skip-dependencies SKIP_DEPENDENCIES [SKIP_DEPENDENCIES ...]
308+
a list of dependencies to skip (compat=False)
307309
--zero, -0 Return non zero exit code if an incompatible license is found
308310
```
309311

licensecheck/__init__.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ def cli() -> None:
3232
parser.add_argument(
3333
"--using",
3434
"-u",
35-
help="Environment to use e.g. requirements.txt. one of: "
36-
f"{', '.join(get_deps.USINGS)}. default=poetry",
35+
help="Environment to use e.g. requirements.txt. one of: " f"{', '.join(get_deps.USINGS)}. default=poetry",
3736
)
3837
parser.add_argument(
3938
"--ignore-packages",
@@ -55,6 +54,11 @@ def cli() -> None:
5554
help="a list of licenses to fail (compat=False)",
5655
nargs="+",
5756
)
57+
parser.add_argument(
58+
"--skip-dependencies",
59+
help="a list of packages to skip (compat=True)",
60+
nargs="+",
61+
)
5862
parser.add_argument(
5963
"--zero",
6064
"-0",
@@ -81,11 +85,7 @@ def cli() -> None:
8185
simpleConf = SimpleConf(configparser, "licensecheck", args)
8286

8387
# File
84-
filename = (
85-
stdout
86-
if simpleConf.get("file") is None
87-
else open(simpleConf.get("file"), "w", encoding="utf-8")
88-
)
88+
filename = stdout if simpleConf.get("file") is None else open(simpleConf.get("file"), "w", encoding="utf-8")
8989

9090
# Get list of licenses
9191
myLice, depsWithLicenses = get_deps.getDepsWithLicenses(
@@ -94,6 +94,7 @@ def cli() -> None:
9494
list(map(types.ucstr, simpleConf.get("fail_packages", []))),
9595
list(map(types.ucstr, simpleConf.get("ignore_licenses", []))),
9696
list(map(types.ucstr, simpleConf.get("fail_licenses", []))),
97+
list(map(types.ucstr, simpleConf.get("skip_dependencies", []))),
9798
)
9899

99100
# Are any licenses incompatible?
@@ -102,9 +103,7 @@ def cli() -> None:
102103
# Format the results
103104
if simpleConf.get("format", "simple") in formatter.formatMap:
104105
print(
105-
formatter.formatMap[simpleConf.get("format", "simple")](
106-
myLice, sorted(depsWithLicenses)
107-
),
106+
formatter.formatMap[simpleConf.get("format", "simple")](myLice, sorted(depsWithLicenses)),
108107
file=filename,
109108
)
110109
else:

licensecheck/get_deps.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
USINGS = ["requirements", "poetry", "PEP631"]
1818

1919

20-
def getReqs(using: str) -> set[ucstr]:
20+
def getReqs(using: str, skipDependencies: list(ucstr)) -> set[ucstr]:
2121
"""Get requirements for the end user project/ lib.
2222
2323
>>> getReqs("poetry")
@@ -29,6 +29,7 @@ def getReqs(using: str) -> set[ucstr]:
2929
3030
Args:
3131
using (str): use requirements, poetry or PEP631.
32+
skipDependencies (list[str]): list of dependencies to skip.
3233
3334
Returns:
3435
set[str]: set of requirement packages
@@ -50,13 +51,16 @@ def getReqs(using: str) -> set[ucstr]:
5051
if using == "requirements":
5152
requirementsPaths = [Path(x) for x in (extras or "requirements.txt").split(";")]
5253

53-
return _doGetReqs(using, extras, pyproject, requirementsPaths)
54+
return _doGetReqs(using, skipDependencies, extras, pyproject, requirementsPaths)
5455

5556

5657
def _doGetReqs(
57-
using: str, extras: str | None, pyproject: dict[str, Any], requirementsPaths: list[Path]
58+
using: str,
59+
skipDependencies: list(ucstr),
60+
extras: str | None,
61+
pyproject: dict[str, Any],
62+
requirementsPaths: list[Path],
5863
) -> set[ucstr]:
59-
6064
reqs = set()
6165
extrasReqs = {}
6266

@@ -99,9 +103,7 @@ def resolveExtraReq(extraReq: str) -> ucstr | None:
99103
project = pyproject["project"]
100104
reqLists = [project["dependencies"]]
101105
except KeyError as error:
102-
raise RuntimeError(
103-
"Could not find specification of requirements (pyproject.toml)."
104-
) from error
106+
raise RuntimeError("Could not find specification of requirements (pyproject.toml).") from error
105107
if extras:
106108
reqLists.extend(project["optional-dependencies"][x] for x in extras.split(";"))
107109
for reqList in reqLists:
@@ -120,10 +122,17 @@ def resolveExtraReq(extraReq: str) -> ucstr | None:
120122
continue
121123
reqs.add(resolveReq(line))
122124

125+
# Remove PYTHON if define as requirement
123126
try:
124127
reqs.remove("PYTHON")
125128
except KeyError:
126129
pass
130+
# Remove skip dependencies
131+
for skipDependency in skipDependencies:
132+
try:
133+
reqs.remove(skipDependency)
134+
except KeyError:
135+
pass
127136

128137
# Get Dependencies (1 deep)
129138
requirementsWithDeps = reqs.copy()
@@ -160,6 +169,7 @@ def getDepsWithLicenses(
160169
failPackages: list[ucstr],
161170
ignoreLicenses: list[ucstr],
162171
failLicenses: list[ucstr],
172+
skipDependencies: list[ucstr],
163173
) -> tuple[License, set[PackageInfo]]:
164174
"""Get a set of dependencies with licenses and determine license compatibility.
165175
@@ -169,13 +179,14 @@ def getDepsWithLicenses(
169179
failPackages (list[ucstr]): a list of packages to fail (compat=False)
170180
ignoreLicenses (list[ucstr]): a list of licenses to ignore (skipped, compat may still be False)
171181
failLicenses (list[ucstr]): a list of licenses to fail (compat=False)
182+
skipDependencies (list[ucstr]): a list of dependencies to skip (compat=False)
172183
173184
Returns:
174185
tuple[License, set[PackageInfo]]: tuple of
175186
my package license
176187
set of updated dependencies with licenseCompat set
177188
"""
178-
reqs = getReqs(using)
189+
reqs = getReqs(using, skipDependencies)
179190

180191
# Get my license
181192
myLiceTxt = packageinfo.getMyPackageLicense()

tests/data/advanced.ansi

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
 
22
 Info 
3-
┌─────────────────┬──────────────┐
4-
 Item   Value  
5-
├─────────────────┼──────────────┤
3+
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
4+
 Item   Value  
5+
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
66
│ program  │ licensecheck │
77
│ version  │ 2023.1.3  │
88
│ license  │ MIT LICENSE  │
@@ -11,16 +11,16 @@
1111
 
1212
 List Of 
1313
 Errors 
14-
┌──────────┐
15-
 Package  
16-
├──────────┤
14+
┏━━━━━━━━━━┓
15+
 Package  
16+
┡━━━━━━━━━━┩
1717
│ example1 │
1818
└──────────┘
1919
 
2020
 List Of Packages 
21-
┌────────────┬──────────┬────────────┐
22-
 Compatible  Package   License(s) 
23-
├────────────┼──────────┼────────────┤
21+
┏━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━┓
22+
 Compatible  Package   License(s) 
23+
┡━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━┩
2424
│ ✔  │ example0 │ mit  │
2525
│ ✖  │ example1 │ gpl3  │
2626
└────────────┴──────────┴────────────┘

tests/data/advanced.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11

22
Info
3-
┌─────────────────┬──────────────┐
4-
Item Value
5-
├─────────────────┼──────────────┤
3+
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
4+
Item Value
5+
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
66
│ program │ licensecheck │
77
│ version │ 2023.1.3 │
88
│ license │ MIT LICENSE │
@@ -11,16 +11,16 @@
1111

1212
List Of
1313
Errors
14-
┌──────────┐
15-
Package
16-
├──────────┤
14+
┏━━━━━━━━━━┓
15+
Package
16+
┡━━━━━━━━━━┩
1717
│ example1 │
1818
└──────────┘
1919

2020
List Of Packages
21-
┌────────────┬──────────┬────────────┐
22-
Compatible Package License(s)
23-
├────────────┼──────────┼────────────┤
21+
┏━━━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━━━┓
22+
Compatible Package License(s)
23+
┡━━━━━━━━━━━━╇━━━━━━━━━━╇━━━━━━━━━━━━┩
2424
│ ✔ │ example0 │ mit │
2525
│ ✖ │ example1 │ gpl3 │
2626
└────────────┴──────────┴────────────┘

tests/data/pep631_socks.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ dependencies = [
1515
'requests >= 2.20.0, < 3',
1616
'texttable >= 0.9.0, < 2',
1717
'websocket-client >= 0.32.0, < 1',
18+
'toskip >= 0.0.1',
1819

1920
# Conditional
2021
'backports.shutil_get_terminal_size == 1.0.0; python_version < "3.3"',

tests/data/simple.ansi

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
 
22
 Info 
3-
┌─────────────────┬──────────────┐
4-
 Item   Value  
5-
├─────────────────┼──────────────┤
3+
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
4+
 Item   Value  
5+
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
66
│ program  │ licensecheck │
77
│ version  │ 2023.1.3  │
88
│ license  │ MIT LICENSE  │
99
│ project_license │ MIT LICENSE  │
1010
└─────────────────┴──────────────┘
1111
 
1212
 List Of Packages 
13-
┌────────────┬─────────┬────────────┐
14-
 Compatible  Package  License(s) 
15-
├────────────┼─────────┼────────────┤
13+
┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━┓
14+
 Compatible  Package  License(s) 
15+
┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━┩
1616
│ ✖  │ example │ UNKNOWN  │
1717
└────────────┴─────────┴────────────┘

tests/data/simple.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11

22
Info
3-
┌─────────────────┬──────────────┐
4-
Item Value
5-
├─────────────────┼──────────────┤
3+
┏━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━┓
4+
Item Value
5+
┡━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━┩
66
│ program │ licensecheck │
77
│ version │ 2023.1.3 │
88
│ license │ MIT LICENSE │
99
│ project_license │ MIT LICENSE │
1010
└─────────────────┴──────────────┘
1111

1212
List Of Packages
13-
┌────────────┬─────────┬────────────┐
14-
Compatible Package License(s)
15-
├────────────┼─────────┼────────────┤
13+
┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━━┓
14+
Compatible Package License(s)
15+
┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━━┩
1616
│ ✖ │ example │ UNKNOWN │
1717
└────────────┴─────────┴────────────┘

tests/test_get_deps.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,13 @@
88

99

1010
def test_doGetReqs_PEP631():
11-
1211
using = "PEP631"
1312
extras = "socks"
1413
pyproject = tomli.loads((THISDIR / "data/pep631_socks.toml").read_text(encoding="utf-8"))
1514
requirementsPaths = []
15+
skipDependencies = ["TOSKIP"]
1616

17-
assert get_deps._doGetReqs(using, extras, pyproject, requirementsPaths) == {
17+
assert get_deps._doGetReqs(using, skipDependencies, extras, pyproject, requirementsPaths) == {
1818
"DOCKERPTY",
1919
"PACKAGING",
2020
"ATTRS",
@@ -51,12 +51,13 @@ def test_doGetReqs_PEP631():
5151

5252

5353
def test_doGetReqs_requirements():
54-
5554
using = "requirements"
5655
extras = f"{THISDIR}/data/test_requirements.txt"
5756
pyproject = {}
5857
requirementsPaths = [Path(f"{THISDIR}/data/test_requirements.txt")]
59-
deps = get_deps._doGetReqs(using, extras, pyproject, requirementsPaths)
58+
skipDependencies = ["TOSKIP"]
59+
60+
deps = get_deps._doGetReqs(using, skipDependencies, extras, pyproject, requirementsPaths)
6061
assert deps == {
6162
"NUMPY",
6263
"ODFPY",

0 commit comments

Comments
 (0)