Class: PyPI::Package Private

Inherits:
Object show all
Defined in:
utils/pypi.rb

Overview

This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.

Represents a Python package. This package can be a PyPI package (either by name/version or PyPI distribution URL), or it can be a non-PyPI URL.

Instance Method Summary collapse

Constructor Details

#initialize(package_string, is_url: false, python_name: "python") ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

  • package_string (String)
  • is_url (Boolean) (defaults to: false)
  • python_name (String) (defaults to: "python")


14
15
16
17
18
19
20
# File 'utils/pypi.rb', line 14

def initialize(package_string, is_url: false, python_name: "python")
  @pypi_info = nil
  @package_string = package_string
  @is_url = is_url
  @is_pypi_url = package_string.start_with? PYTHONHOSTED_URL_PREFIX
  @python_name = python_name
end

Instance Method Details

#extrasArray<String, nil>

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



29
30
31
32
# File 'utils/pypi.rb', line 29

def extras
   if @extras.blank?
  @extras
end

#nameString

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



23
24
25
26
# File 'utils/pypi.rb', line 23

def name
   if @name.blank?
  @name
end

#pypi_info(new_version: nil) ⇒ Array<String>?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Get name, URL, SHA-256 checksum and latest version for a given package. This only works for packages from PyPI or from a PyPI URL; packages derived from non-PyPI URLs will produce nil here.

Parameters:

Returns:



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'utils/pypi.rb', line 56

def pypi_info(new_version: nil)
  return unless valid_pypi_package?
  return @pypi_info if @pypi_info.present? && new_version.blank?

  new_version ||= version
   = if new_version.present?
    "https://pypi.org/pypi/#{name}/#{new_version}/json"
  else
    "https://pypi.org/pypi/#{name}/json"
  end
  out, _, status = Utils::Curl.curl_output , "--location", "--fail"

  return unless status.success?

  begin
    json = JSON.parse out
  rescue JSON::ParserError
    return
  end

  sdist = json["urls"].find { |url| url["packagetype"] == "sdist" }
  return if sdist.nil?

  @pypi_info = [
    PyPI.normalize_python_package(json["info"]["name"]), sdist["url"],
    sdist["digests"]["sha256"], json["info"]["version"]
  ]
end

#same_package?(other) ⇒ Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Parameters:

Returns:

  • (Boolean)


98
99
100
101
# File 'utils/pypi.rb', line 98

def same_package?(other)
  # These names are pre-normalized, so we can compare them directly.
  name == other.name
end

#valid_pypi_package?Boolean

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:

  • (Boolean)


48
49
50
# File 'utils/pypi.rb', line 48

def valid_pypi_package?
  @is_pypi_url || !@is_url
end

#versionString?

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

Returns:



35
36
37
38
# File 'utils/pypi.rb', line 35

def version
   if @version.blank?
  @version
end

#version=(new_version) ⇒ void

This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.

This method returns an undefined value.

Parameters:

Raises:

  • (ArgumentError)


41
42
43
44
45
# File 'utils/pypi.rb', line 41

def version=(new_version)
  raise ArgumentError, "can't update version for non-PyPI packages" unless valid_pypi_package?

  @version = new_version
end