HEX
Server: Apache
System: Linux webd004.cluster130.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User: frenchy (106757)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/frenchy/www/french-american.org/current/node_modules/snyk-python-plugin/pysrc/setup_file.py
import distutils.core
import re
import setuptools

def parse(setup_py_content):
    """Parse a setup.py file and extract the arguments passed to the setup method"""
    # Make the setup method return the arguments that are passed to it
    def _save_passed_args(**kwargs):
        return kwargs

    distutils.core.setup = _save_passed_args
    setuptools.setup = _save_passed_args
    setup_py_content = setup_py_content.replace("setup(", "passed_arguments = setup(")

    # Fetch the arguments that were passed to the setup.py
    exec(setup_py_content, globals())
    return globals()["passed_arguments"]


def parse_name_and_version(setup_py_content):
    """Extract the name and version from a setup.py file"""
    passed_arguments = parse(setup_py_content)
    return passed_arguments.get("name"), passed_arguments.get("version")


def get_provenance(setup_py_content):
    """Provenance for a setup.py file is the index of the line that contains `install_requires`"""
    for index, line in enumerate(setup_py_content.splitlines()):
        if re.search(r"(packages|install_requires)\s*=", line):
            return index + 1
    return -1


def parse_requirements(setup_py_content):
    """Extract the dependencies from a setup.py file"""
    passed_arguments = parse(setup_py_content)
    requirements = passed_arguments.get("install_requires", passed_arguments.get("packages", []))
    return "\n".join(requirements)