class Dependabot::Uv::FileUpdater
def self.updated_files_regex
def self.updated_files_regex [ /^.*\.txt$/, # Match any .txt files (e.g., requirements.txt) at any level /^.*\.in$/, # Match any .in files at any level /^.*pyproject\.toml$/, # Match pyproject.toml at any level /^.*uv\.lock$/ # Match uv.lock at any level ] end
def check_required_files
def check_required_files filenames = dependency_files.map(&:name) return if filenames.any? { |name| name.end_with?(".txt", ".in") } return if pyproject raise "Missing required files!" end
def pip_compile_files
def pip_compile_files @pip_compile_files ||= T.let( dependency_files.select { |f| f.name.end_with?(".in") }, T.nilable(T::Array[DependencyFile]) ) end
def pip_compile_index_urls
def pip_compile_index_urls if credentials.any?(&:replaces_base?) credentials.select(&:replaces_base?).map { |cred| AuthedUrlBuilder.authed_url(credential: cred) } else urls = credentials.map { |cred| AuthedUrlBuilder.authed_url(credential: cred) } # If there are no credentials that replace the base, we need to # ensure that the base URL is included in the list of extra-index-urls. [nil, *urls] end end
def pyproject
def pyproject @pyproject ||= T.let(get_original_file("pyproject.toml"), T.nilable(Dependabot::DependencyFile)) end
def subdependency_resolver
def subdependency_resolver raise "Claimed to be a sub-dependency, but no lockfile exists!" if pip_compile_files.empty? :pip_compile if pip_compile_files.any? end
def updated_dependency_files
def updated_dependency_files updated_files = updated_pip_compile_based_files updated_files += updated_uv_lock_files if updated_files.none? || updated_files.sort_by(&:name) == dependency_files.sort_by(&:name) raise "No files have changed!" end updated_files end
def updated_pip_compile_based_files
def updated_pip_compile_based_files CompileFileUpdater.new( dependencies: dependencies, dependency_files: dependency_files, credentials: credentials, index_urls: pip_compile_index_urls ).updated_dependency_files end
def updated_requirement_based_files
def updated_requirement_based_files RequirementFileUpdater.new( dependencies: dependencies, dependency_files: dependency_files, credentials: credentials, index_urls: pip_compile_index_urls ).updated_dependency_files end
def updated_uv_lock_files
def updated_uv_lock_files LockFileUpdater.new( dependencies: dependencies, dependency_files: dependency_files, credentials: credentials, index_urls: pip_compile_index_urls ).updated_dependency_files end