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


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

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:



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

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:



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
86
87
88
89
90
91
92
93
94
95
# 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

  dist = json["urls"].find do |url|
    url["packagetype"] == "sdist"
  end

  # If there isn't an sdist, we use the first universal wheel.
  if dist.nil?
    dist = json["urls"].find do |url|
      url["filename"].end_with?("-none-any.whl")
    end
  end

  return if dist.nil?

  @pypi_info = [
    PyPI.normalize_python_package(json["info"]["name"]), dist["url"],
    dist["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)


110
111
112
113
# File 'utils/pypi.rb', line 110

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)


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