class Dependabot::Python::FileUpdater::PipfilePreparer
Attributes
lockfile[R]
pipfile_content[R]
Public Class Methods
new(pipfile_content:, lockfile: nil)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 15 def initialize(pipfile_content:, lockfile: nil) @pipfile_content = pipfile_content @lockfile = lockfile end
Public Instance Methods
freeze_dependency(dep_name, pipfile_object, keys)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 49 def freeze_dependency(dep_name, pipfile_object, keys) locked_version = version_from_lockfile( keys[:lockfile], normalise(dep_name) ) locked_ref = ref_from_lockfile( keys[:lockfile], normalise(dep_name) ) pipfile_req = pipfile_object[keys[:pipfile]][dep_name] if pipfile_req.is_a?(Hash) && locked_version pipfile_req["version"] = "==#{locked_version}" elsif pipfile_req.is_a?(Hash) && locked_ref && !pipfile_req["ref"] pipfile_req["ref"] = locked_ref elsif locked_version pipfile_object[keys[:pipfile]][dep_name] = "==#{locked_version}" end end
freeze_top_level_dependencies_except(dependencies)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 30 def freeze_top_level_dependencies_except(dependencies) return pipfile_content unless lockfile pipfile_object = TomlRB.parse(pipfile_content) excluded_names = dependencies.map(&:name) Python::FileParser::DEPENDENCY_GROUP_KEYS.each do |keys| next unless pipfile_object[keys[:pipfile]] pipfile_object.fetch(keys[:pipfile]).each do |dep_name, _| next if excluded_names.include?(normalise(dep_name)) freeze_dependency(dep_name, pipfile_object, keys) end end TomlRB.dump(pipfile_object) end
replace_sources(credentials)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 20 def replace_sources(credentials) pipfile_object = TomlRB.parse(pipfile_content) pipfile_object["source"] = pipfile_sources.reject { |h| h["url"].include?("${") } + config_variable_sources(credentials) TomlRB.dump(pipfile_object) end
update_python_requirement(requirement)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 69 def update_python_requirement(requirement) pipfile_object = TomlRB.parse(pipfile_content) pipfile_object["requires"] ||= {} pipfile_object["requires"].delete("python_full_version") pipfile_object["requires"].delete("python_version") pipfile_object["requires"]["python_full_version"] = requirement TomlRB.dump(pipfile_object) end
Private Instance Methods
config_variable_sources(credentials)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 115 def config_variable_sources(credentials) @config_variable_sources ||= credentials. select { |cred| cred["type"] == "python_index" }. map { |c| { "url" => AuthedUrlBuilder.authed_url(credential: c) } } end
normalise(name)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 105 def normalise(name) NameNormaliser.normalise(name) end
parsed_lockfile()
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 101 def parsed_lockfile @parsed_lockfile ||= JSON.parse(lockfile.content) end
pipfile_sources()
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 109 def pipfile_sources @pipfile_sources ||= TomlRB.parse(pipfile_content).fetch("source", []). map { |h| h.dup.merge("url" => h["url"].gsub(%r{/*$}, "") + "/") } end
ref_from_lockfile(dep_type, dep_name)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 93 def ref_from_lockfile(dep_type, dep_name) details = parsed_lockfile.dig(dep_type, normalise(dep_name)) case details when Hash then details["ref"] end end
version_from_lockfile(dep_type, dep_name)
click to toggle source
# File lib/dependabot/python/file_updater/pipfile_preparer.rb, line 84 def version_from_lockfile(dep_type, dep_name) details = parsed_lockfile.dig(dep_type, normalise(dep_name)) case details when String then details.gsub(/^==/, "") when Hash then details["version"]&.gsub(/^==/, "") end end