class Dependabot::Uv::LanguageVersionManager
def normalize_python_exact_version(requirement_string)
def normalize_python_exact_version(requirement_string) return requirement_string if requirement_string.nil? || requirement_string.strip.empty? requirement_string = requirement_string.strip # If the requirement already has a wildcard, return nil return nil if requirement_string == "*" # If the requirement is not an exact version such as not X.Y.Z, =X.Y.Z, ==X.Y.Z, ===X.Y.Z # then return the requirement as is return requirement_string unless requirement_string.match?(/^=?={0,2}\s*\d+\.\d+(\.\d+)?(-[a-z0-9.-]+)?$/i) parts = requirement_string.gsub(/^=+/, "").split(".") case parts.length when 1 # Only major version (X) ">= #{parts[0]}.0.0 < #{parts[0].to_i + 1}.0.0" # Ensure only major version range when 2 # Major.Minor (X.Y) ">= #{parts[0]}.#{parts[1]}.0 < #{parts[0].to_i}.#{parts[1].to_i + 1}.0" # Ensure only minor version range when 3 # Major.Minor.Patch (X.Y.Z) ">= #{parts[0]}.#{parts[1]}.0 < #{parts[0].to_i}.#{parts[1].to_i + 1}.0" # Convert to >= X.Y.0 else requirement_string end end