55import json
66import re
77import subprocess
8+ import sys
89import tempfile
910from importlib .metadata import version
1011from pathlib import Path
1112
13+ if sys .version_info >= (3 , 11 ):
14+ import tomllib
15+ else :
16+ import tomli as tomllib
17+
1218ROOT_PATH = Path (__file__ ).parent .parent
1319TEMP_DIR = Path (tempfile .mkdtemp (prefix = "requirements_scan-" ))
1420
21+ PYPROJECT_TOML = str (ROOT_PATH / "pyproject.toml" )
1522REQ_TXT = str (ROOT_PATH / "requirements.txt" )
1623REQ_CSV = str (ROOT_PATH / "requirements.csv" )
1724TRIAGE_JSON = str (ROOT_PATH / "triage.json" )
@@ -48,6 +55,15 @@ def get_packages_from_txt(txt_name: str) -> set[str]:
4855 return txt_package_names
4956
5057
58+ def get_packages_from_pyproject_toml (toml_name : str ) -> set [str ]:
59+ toml_package_names : set [str ] = set ()
60+ with open (toml_name , "rb" ) as toml_file :
61+ toml_data = tomllib .load (toml_file )
62+ for package in toml_data ["project" ]["dependencies" ]:
63+ toml_package_names .add (re .split (">|<|\\ [|;|=|\n " , package )[0 ])
64+ return toml_package_names
65+
66+
5167def get_out_of_sync_packages (
5268 csv_packages : set [str ], dependency_packages : set [str ]
5369) -> tuple [set [str ], set [str ]]:
@@ -61,7 +77,7 @@ def test_txt_csv_sync() -> None:
6177 errors : set [str ] = set ()
6278
6379 csv_packages = get_packages_from_csv (REQ_CSV )
64- dependency_packages = get_packages_from_txt ( REQ_TXT )
80+ dependency_packages = get_packages_from_pyproject_toml ( PYPROJECT_TOML )
6581 req_new_packages , req_removed_packages = get_out_of_sync_packages (
6682 csv_packages , dependency_packages
6783 )
0 commit comments