Class: Dependabot::Python::Package::SimpleApiParser

Inherits:
Object
  • Object
show all
Extended by:
T::Sig
Defined in:
lib/dependabot/python/package/simple_api_parser.rb

Constant Summary collapse

ReleaseDetail =
T.type_alias { T::Hash[String, T.nilable(T.any(String, T::Boolean))] }

Instance Method Summary collapse

Constructor Details

#initialize(dependency:, project_url:) ⇒ SimpleApiParser

Returns a new instance of SimpleApiParser.



19
20
21
22
# File 'lib/dependabot/python/package/simple_api_parser.rb', line 19

def initialize(dependency:, project_url:)
  @dependency = dependency
  @project_url = project_url
end

Instance Method Details

#parse(json_body) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/dependabot/python/package/simple_api_parser.rb', line 28

def parse(json_body)
  data = JSON.parse(json_body)
  validate_api_version!(data.dig("meta", "api-version").to_s)

  data.fetch("files", []).each_with_object({}) do |file, releases|
    filename = file["filename"]
    next unless filename&.match?(name_regex)

    version = version_from_filename(filename)
    next unless dependency.version_class.correct?(version)

    yanked = file["yanked"] || false
    details = {
      "version" => version,
      "requires_python" => file["requires-python"],
      "yanked" => yanked != false,
      "yanked_reason" => yanked.is_a?(String) ? yanked : nil,
      "upload_time" => file["upload-time"],
      "url" => resolve_url(file["url"])
    }
    releases[version] ||= []
    releases[version] << details
  end
end