class Dependabot::Uv::PipenvRunner
def dependency_name
def dependency_name dependency.metadata[:original_name] || dependency.name end
def fetch_version_from_parsed_lockfile(updated_lockfile)
def fetch_version_from_parsed_lockfile(updated_lockfile) deps = updated_lockfile[lockfile_section] || {} deps.dig(dependency_name, "version") &.gsub(/^==/, "") end
def initialize(dependency:, lockfile:, language_version_manager:)
def initialize(dependency:, lockfile:, language_version_manager:) @dependency = dependency @lockfile = lockfile @language_version_manager = language_version_manager end
def lockfile_section
def lockfile_section if dependency.requirements.any? T.must(dependency.requirements.first)[:groups].first else Uv::FileParser::DEPENDENCY_GROUP_KEYS.each do |keys| section = keys.fetch(:lockfile) return section if JSON.parse(T.must(T.must(lockfile).content))[section].keys.any?(dependency_name) end end end
def pipenv_env_variables
def pipenv_env_variables { "PIPENV_YES" => "true", # Install new Python ver if needed "PIPENV_MAX_RETRIES" => "3", # Retry timeouts "PIPENV_NOSPIN" => "1", # Don't pollute logs with spinner "PIPENV_TIMEOUT" => "600", # Set install timeout to 10 minutes "PIP_DEFAULT_TIMEOUT" => "60", # Set pip timeout to 1 minute "COLUMNS" => "250" # Avoid line wrapping } end
def run(command, fingerprint: nil)
def run(command, fingerprint: nil) run_command( "pyenv local #{language_version_manager.python_major_minor}", fingerprint: "pyenv local <python_major_minor>" ) run_command(command, fingerprint: fingerprint) end
def run_command(command, fingerprint: nil)
def run_command(command, fingerprint: nil) SharedHelpers.run_shell_command(command, env: pipenv_env_variables, fingerprint: fingerprint) end
def run_upgrade(constraint)
def run_upgrade(constraint) constraint = "" if constraint == "*" command = "pyenv exec pipenv upgrade --verbose #{dependency_name}#{constraint}" command << " --dev" if lockfile_section == "develop" run(command, fingerprint: "pyenv exec pipenv upgrade --verbose <dependency_name><constraint>") end
def run_upgrade_and_fetch_version(constraint)
def run_upgrade_and_fetch_version(constraint) run_upgrade(constraint) updated_lockfile = JSON.parse(File.read("Pipfile.lock")) fetch_version_from_parsed_lockfile(updated_lockfile) end