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) ⇒ 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)


17
18
19
20
21
22
# File 'utils/pypi.rb', line 17

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

Instance Method Details

#<=>(other) ⇒ Integer?

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:

  • (Integer, nil)


118
119
120
# File 'utils/pypi.rb', line 118

def <=>(other)
  name <=> other.name
end

#==(other) ⇒ Boolean Also known as: eql?

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.

Compare only names so we can use .include? and .uniq on a Package array

Parameters:

Returns:

  • (Boolean)


107
108
109
# File 'utils/pypi.rb', line 107

def ==(other)
  same_package?(other)
end

#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:



31
32
33
34
# File 'utils/pypi.rb', line 31

def extras
   if @extras.blank?
  @extras
end

#hashInteger

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:

  • (Integer)


113
114
115
# File 'utils/pypi.rb', line 113

def hash
  name.hash
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:



25
26
27
28
# File 'utils/pypi.rb', line 25

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:



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
84
85
# File 'utils/pypi.rb', line 58

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)


100
101
102
103
# File 'utils/pypi.rb', line 100

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

#to_sString

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:



88
89
90
91
92
93
94
95
96
97
# File 'utils/pypi.rb', line 88

def to_s
  if valid_pypi_package?
    out = name
    out += "[#{extras.join(",")}]" if extras.present?
    out += "==#{version}" if version.present?
    out
  else
    @package_string
  end
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)


50
51
52
# File 'utils/pypi.rb', line 50

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:



37
38
39
40
# File 'utils/pypi.rb', line 37

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)


43
44
45
46
47
# File 'utils/pypi.rb', line 43

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

  @version = new_version
end