Class: Dependabot::Conda::CondaRegistryClient
- Inherits:
-
Object
- Object
- Dependabot::Conda::CondaRegistryClient
- Extended by:
- T::Sig
- Defined in:
- lib/dependabot/conda/conda_registry_client.rb
Constant Summary collapse
- SUPPORTED_CHANNELS =
Supported public conda channels (user-facing names from environment.yml)
T.let( %w(anaconda conda-forge defaults bioconda main).freeze, T::Array[String] )
- CHANNEL_ALIASES =
Channel aliases: maps user-facing channel names to API channel names ‘defaults’ is a Conda client alias that doesn’t exist on anaconda.org API
T.let( { "defaults" => "anaconda" }.freeze, T::Hash[String, String] )
- DEFAULT_CHANNEL =
anaconda.org API configuration
T.let("anaconda", String)
- API_BASE_URL =
T.let("https://api.anaconda.org", String)
- CONNECTION_TIMEOUT =
T.let(5, Integer)
- READ_TIMEOUT =
T.let(30, Integer)
- MAX_RETRIES =
T.let(1, Integer)
Instance Method Summary collapse
- #available_versions(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
- #fetch_package_metadata(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
-
#initialize ⇒ CondaRegistryClient
constructor
A new instance of CondaRegistryClient.
- #latest_version(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
- #package_metadata(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
- #version_exists?(package_name, version, channel = DEFAULT_CHANNEL) ⇒ Boolean
Constructor Details
#initialize ⇒ CondaRegistryClient
Returns a new instance of CondaRegistryClient.
36 37 38 39 |
# File 'lib/dependabot/conda/conda_registry_client.rb', line 36 def initialize @cache = T.let({}, T::Hash[String, T.untyped]) @not_found_cache = T.let(Set.new, T::Set[String]) end |
Instance Method Details
#available_versions(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/dependabot/conda/conda_registry_client.rb', line 86 def available_versions(package_name, channel = DEFAULT_CHANNEL) = (package_name, channel) return [] unless versions = ["versions"] return [] unless versions.is_a?(Array) # Parse and sort versions parsed_versions = versions.filter_map do |version_string| Dependabot::Conda::Version.new(version_string) rescue ArgumentError # Invalid version format - skip it Dependabot.logger.debug("Skipping invalid conda version: #{version_string}") nil end # Sort newest first parsed_versions.sort.reverse end |
#fetch_package_metadata(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/dependabot/conda/conda_registry_client.rb', line 48 def (package_name, channel = DEFAULT_CHANNEL) cache_key = "#{channel}/#{package_name}" # Check 404 cache first return nil if @not_found_cache.include?(cache_key) # Check cache return @cache[cache_key] if @cache.key?(cache_key) # Fetch from API fetch_from_api(package_name, channel, cache_key) end |
#latest_version(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
113 114 115 116 |
# File 'lib/dependabot/conda/conda_registry_client.rb', line 113 def latest_version(package_name, channel = DEFAULT_CHANNEL) versions = available_versions(package_name, channel) versions.first end |
#package_metadata(package_name, channel = DEFAULT_CHANNEL) ⇒ Object
125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/dependabot/conda/conda_registry_client.rb', line 125 def (package_name, channel = DEFAULT_CHANNEL) = (package_name, channel) return nil unless { homepage: ["home"], source_url: ["dev_url"], description: ["summary"], license: ["license"] } end |
#version_exists?(package_name, version, channel = DEFAULT_CHANNEL) ⇒ Boolean
69 70 71 72 73 74 75 76 77 |
# File 'lib/dependabot/conda/conda_registry_client.rb', line 69 def version_exists?(package_name, version, channel = DEFAULT_CHANNEL) = (package_name, channel) return false unless versions = ["versions"] return false unless versions.is_a?(Array) versions.include?(version) end |