Skip to content

Commit 42431ba

Browse files
add test dependencies_test.py
1 parent a7a3362 commit 42431ba

File tree

4 files changed

+2199
-56
lines changed

4 files changed

+2199
-56
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
.lint.json
22
.lint.txt
33
.security.json
4+
.packages.json
45

56
odbcconfig/odbcinst.ini
67

Lines changed: 63 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
from __future__ import annotations
22

3-
import json
43
from collections import defaultdict
54
from dataclasses import dataclass
65
from inspect import cleandoc
6+
from json import loads
77
from pathlib import Path
88

99
import nox
@@ -15,8 +15,8 @@
1515
class Package:
1616
name: str
1717
package_link: str
18-
license: str
1918
version: str
19+
license: str
2020
license_link: str
2121

2222

@@ -26,31 +26,34 @@ def _dependencies(toml_str: str) -> dict[str, list]:
2626
dependencies: dict[str, list] = {}
2727

2828
packages = poetry.get("dependencies", {})
29-
dependencies["project"] = []
29+
if packages:
30+
dependencies["project"] = []
3031
for package in packages:
3132
dependencies["project"].append(package)
3233

3334
packages = poetry.get("dev", {}).get("dependencies", {})
34-
dependencies["dev"] = []
35+
if packages:
36+
dependencies["dev"] = []
3537
for package in packages:
36-
dependencies["dependencies"].append(package)
38+
dependencies["dev"].append(package)
3739

3840
groups = poetry.get("group", {})
3941
for group in groups:
4042
packages = groups.get(group, {}).get("dependencies")
41-
dependencies[group] = []
43+
if packages and not dependencies.get(group, {}):
44+
dependencies[group] = []
4245
for package in packages:
4346
dependencies[group].append(package)
4447
return dependencies
4548

4649

47-
def _licenses(session: Session) -> None:
50+
def _licenses(session: Session, filename: str) -> None:
4851
session.run(
4952
"poetry",
5053
"run",
5154
"pip-licenses",
5255
"--format=json",
53-
"--output-file=packages.json",
56+
"--output-file=" + filename,
5457
"--with-system",
5558
"--with-urls",
5659
)
@@ -71,7 +74,6 @@ def select_most_permissive(l: str) -> str:
7174
"MPLv2": 3,
7275
"LGPLv2": 4,
7376
"GPLv2": 5,
74-
"GPLv3": 6,
7577
},
7678
)
7779
priority_to_license = defaultdict(
@@ -99,8 +101,8 @@ def select_most_permissive(l: str) -> str:
99101
return mapping[_license]
100102

101103

102-
def _packages_from_json(file: Path) -> list[Package]:
103-
packages = json.loads(file.read_text())
104+
def _packages_from_json(json: str) -> list[Package]:
105+
packages = loads(json)
104106
packages_list = []
105107
for package in packages:
106108
packages_list.append(
@@ -115,58 +117,62 @@ def _packages_from_json(file: Path) -> list[Package]:
115117
return packages_list
116118

117119

118-
def dependency(group: str, group_packages: list, packages: list[Package]) -> str:
119-
def header(group: str):
120-
group = "".join([word.capitalize() for word in group.strip().split()])
121-
text = f"## {group} Dependencies\n"
122-
text += "---\n"
123-
text += "|Package|version|Licence|\n"
124-
text += "|---|---|---|\n"
125-
return text
126-
127-
def rows(group_packages: list, packages: list[Package]) -> str:
128-
def _normalize_package_name(name: str) -> str:
129-
_name = name.lower()
130-
while "_" in _name:
131-
_name = _name.replace("_", "-")
132-
return _name
133-
134-
text = ""
135-
for package in group_packages:
136-
consistent = filter(
137-
lambda elem: (_normalize_package_name(elem.name) == package),
138-
packages,
139-
)
140-
for content in consistent:
141-
text += f"|[{content.name}]({content.package_link})"
142-
text += f"|{content.version}"
143-
text += f"|[{content.license}]({content.license_link})|\n"
144-
text += "\n"
145-
return text
146-
147-
_template = cleandoc(
148-
"""
149-
{header}{rows}
150-
"""
151-
)
152-
return _template.format(
153-
header=header(group), rows=rows(group_packages, packages)
154-
)
155-
156-
157-
def packages_markdown(dependencies: dict[str, list], packages: list[Package]) -> str:
120+
def _packages_to_markdown(
121+
dependencies: dict[str, list], packages: list[Package]
122+
) -> str:
158123
def heading():
159124
text = "# Dependecies\n"
160-
text += "---\n"
125+
text += "---\n\n"
161126
return text
162127

128+
def dependency(group: str, group_packages: list, packages: list[Package]) -> str:
129+
def _header(_group: str):
130+
_group = "".join([word.capitalize() for word in _group.strip().split()])
131+
text = f"## {_group} Dependencies\n"
132+
text += "---\n"
133+
text += "|Package|version|Licence|\n"
134+
text += "|---|---|---|\n"
135+
return text
136+
137+
def _rows(_group_packages: list, _packages: list[Package]) -> str:
138+
def _normalize_package_name(name: str) -> str:
139+
_name = name.lower()
140+
while "_" in _name:
141+
_name = _name.replace("_", "-")
142+
return _name
143+
144+
text = ""
145+
for package in _group_packages:
146+
consistent = filter(
147+
lambda elem: (_normalize_package_name(elem.name) == package),
148+
_packages,
149+
)
150+
for content in consistent:
151+
text += f"|[{content.name}]({content.package_link})"
152+
text += f"|{content.version}"
153+
if content.license_link:
154+
text += f"|[{content.license}]({content.license_link})|\n"
155+
else:
156+
text += f"|{content.license}|\n"
157+
text += "\n"
158+
return text
159+
160+
_template = cleandoc(
161+
"""
162+
{header}{rows}
163+
"""
164+
)
165+
return _template.format(
166+
header=_header(group), rows=_rows(group_packages, packages)
167+
)
168+
163169
template = cleandoc(
164170
"""
165171
{heading}{rows}
166172
"""
167173
)
168-
rows = ""
169174

175+
rows = ""
170176
for group in dependencies:
171177
rows += dependency(group, dependencies[group], packages)
172178
return template.format(heading=heading(), rows=rows)
@@ -177,6 +183,7 @@ def dependency_licenses(session: Session) -> None:
177183
"""returns the packages and their licenses"""
178184
toml = Path("pyproject.toml")
179185
dependencies = _dependencies(toml.read_text())
180-
_licenses(session)
181-
package_infos = _packages_from_json(Path("packages.json"))
182-
print(packages_markdown(dependencies, package_infos))
186+
_licenses(session=session, filename=".packages.json")
187+
json = Path(".packages.json").read_text()
188+
package_infos = _packages_from_json(json)
189+
print(_packages_to_markdown(dependencies=dependencies, packages=package_infos))

0 commit comments

Comments
 (0)