mirror of
https://github.com/ynput/ayon-core.git
synced 2025-12-24 12:54:40 +01:00
83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""Get version and license information on used Python packages.
|
|
|
|
This is getting over all packages installed with Poetry and printing out
|
|
their name, version and available license information from PyPi in Markdown
|
|
table format.
|
|
|
|
Usage:
|
|
./.poetry/bin/poetry run python ./tools/get_python_packages_info.py
|
|
|
|
"""
|
|
|
|
import toml
|
|
import requests
|
|
|
|
|
|
packages = []
|
|
|
|
# define column headers
|
|
package_header = "Package"
|
|
version_header = "Version"
|
|
license_header = "License"
|
|
|
|
name_col_width = len(package_header)
|
|
version_col_width = len(version_header)
|
|
license_col_width = len(license_header)
|
|
|
|
# read lock file to get packages
|
|
with open("poetry.lock", "r") as fb:
|
|
lock_content = toml.load(fb)
|
|
|
|
for package in lock_content["package"]:
|
|
# query pypi for license information
|
|
url = f"https://pypi.org/pypi/{package['name']}/json"
|
|
response = requests.get(
|
|
f"https://pypi.org/pypi/{package['name']}/json")
|
|
package_data = response.json()
|
|
version = package.get("version") or "N/A"
|
|
try:
|
|
package_license = package_data["info"].get("license") or "N/A"
|
|
except KeyError:
|
|
package_license = "N/A"
|
|
|
|
if len(package_license) > 64:
|
|
package_license = f"{package_license[:32]}..."
|
|
packages.append(
|
|
(
|
|
package["name"],
|
|
version,
|
|
package_license
|
|
)
|
|
)
|
|
|
|
# update column width based on max string length
|
|
if len(package["name"]) > name_col_width:
|
|
name_col_width = len(package["name"])
|
|
if len(version) > version_col_width:
|
|
version_col_width = len(version)
|
|
if len(package_license) > license_col_width:
|
|
license_col_width = len(package_license)
|
|
|
|
# pad columns
|
|
name_col_width += 2
|
|
version_col_width += 2
|
|
license_col_width += 2
|
|
|
|
# print table header
|
|
print((f"|{package_header.center(name_col_width)}"
|
|
f"|{version_header.center(version_col_width)}"
|
|
f"|{license_header.center(license_col_width)}|"))
|
|
|
|
print(
|
|
"|" + ("-" * len(package_header.center(name_col_width))) +
|
|
"|" + ("-" * len(version_header.center(version_col_width))) +
|
|
"|" + ("-" * len(license_header.center(license_col_width))) + "|")
|
|
|
|
# print rest of the table
|
|
for package in packages:
|
|
print((
|
|
f"|{package[0].center(name_col_width)}"
|
|
f"|{package[1].center(version_col_width)}"
|
|
f"|{package[2].center(license_col_width)}|"
|
|
))
|