Skip to main content

PyPI Simple Repository API client library

Project description

Project Status: Active — The project has reached a stable, usable state and is being actively developed. https://travis-ci.org/jwodder/pypi-simple.svg?branch=master https://codecov.io/gh/jwodder/pypi-simple/branch/master/graph/badge.svg https://img.shields.io/pypi/pyversions/pypi-simple.svg MIT License

GitHub | PyPI | Issues

pypi-simple is a client library for the Python Simple Repository API as specified in PEP 503. With it, you can query the Python Package Index (PyPI) and other pip-compatible repositories for a list of their available projects and lists of each project’s available package files. The library also allows you to query package files for their project version, package type, file digests, requires_python string, and PGP signature URL.

Installation

Just use pip (You have pip, right?) to install pypi-simple and its dependencies:

pip install pypi-simple

Example

>>> from pypi_simple import PyPISimple
>>> client = PyPISimple()
>>> packages = client.get_project_files('requests')
>>> packages[0]
DistributionPackage(filename='requests-0.2.0.tar.gz', url='https://files.pythonhosted.org/packages/ba/bb/dfa0141a32d773c47e4dede1a617c59a23b74dd302e449cf85413fc96bc4/requests-0.2.0.tar.gz#sha256=813202ace4d9301a3c00740c700e012fb9f3f8c73ddcfe02ab558a8df6f175fd', project='requests', version='0.2.0', package_type='sdist', requires_python=None, has_sig=False)
>>> packages[0].filename
'requests-0.2.0.tar.gz'
>>> packages[0].url
'https://files.pythonhosted.org/packages/ba/bb/dfa0141a32d773c47e4dede1a617c59a23b74dd302e449cf85413fc96bc4/requests-0.2.0.tar.gz#sha256=813202ace4d9301a3c00740c700e012fb9f3f8c73ddcfe02ab558a8df6f175fd'
>>> packages[0].project
'requests'
>>> packages[0].version
'0.2.0'
>>> packages[0].package_type
'sdist'
>>> packages[0].get_digests()
{'sha256': '813202ace4d9301a3c00740c700e012fb9f3f8c73ddcfe02ab558a8df6f175fd'}

API

PyPISimple

A client for fetching package information from a Python simple package repository

PyPISimple(endpoint=pypi_simple.PYPI_SIMPLE_ENDPOINT, auth=None)

Create a new PyPISimple object for querying the simple API instance at endpoint. The endpoint defaults to PyPI’s simple API at <https://pypi.org/simple/>.

If necessary, login/authentication details for the repository can be specified by setting the auth parameter to either a (username, password) pair or another authentication object accepted by requests.

client.get_projects()

Returns a generator of names of projects available in the repository. The names are not normalized.

client.get_project_files(project)

Returns a list of DistributionPackage objects representing all of the package files available in the repository for the given project.

When fetching the project’s information from the repository, a 404 response is treated the same as an empty page, resulting in an empty list. All other HTTP errors cause a requests.HTTPError to be raised.

client.get_project_url(project)

Returns the URL for the given project’s page in the repository.

DistributionPackage

Information about a versioned archived file from which a Python project release can be installed. DistributionPackage objects have the following attributes and method:

filename

The basename of the package file

url

The URL from which the package file can be downloaded

project

The name of the project (as extracted from the filename), or None if the filename cannot be parsed

version

The project version (as extracted from the filename), or None if the filename cannot be parsed

package_type

The type of the package, or None if the filename cannot be parsed. The recognized package types are:

  • 'dumb'

  • 'egg'

  • 'msi'

  • 'rpm'

  • 'sdist'

  • 'wheel'

  • 'wininst'

requires_python

An optional version specifier string declaring the Python version(s) in which the package can be installed

has_sig

Whether the package file is accompanied by a PGP signature file

sig_url

If has_sig is true, this equals the URL of the package file’s PGP signature file; otherwise, it equals None.

get_digests()

Extracts the hash digests from the package file’s URL and returns a dict mapping hash algorithm names to hex-encoded digest strings

Utility Functions

parse_simple_index(html, base_url=None, from_encoding=None)

Parse a simple repository’s index page and return a generator of (project name, project URL) pairs. html is a str or bytes value to parse. base_url is an optional URL (usually the URL of the page being parsed) to join to the front of the URLs returned. from_encoding is an optional hint to Beautiful Soup as to the encoding of html.

parse_project_page(html, base_url=None, from_encoding=None, project_hint=None)

Parse a project page from a simple repository and return a list of DistributionPackage objects. html is a str or bytes value to parse. base_url is an optional URL (usually the URL of the page being parsed) to join to the front of the URLs returned. from_encoding is an optional hint to Beautiful Soup as to the encoding of html. project_hint is the name of the project whose page is being parsed; it is used to disambiguate the parsing of certain filenames.

parse_links(html, base_url=None, from_encoding=None)

Parse an HTML page and return a generator of links, where each link is represented as a triple of link text, link URL, and a dict of link tag attributes (including the unmodified href attribute). Link text has all leading & trailing whitespace removed. Keys in the attributes dict are converted to lowercase.

html is a str or bytes value to parse. base_url is an optional URL (usually the URL of the page being parsed) to join to the front of the URLs returned. from_encoding is an optional hint to Beautiful Soup as to the encoding of html.

parse_filename(filename, project_hint=None)

Given the filename of a distribution package, returns a triple of the project name, project version, and package type. The name and version are spelled the same as they appear in the filename; no normalization is performed.

The package type may be any of the following strings:

  • 'dumb'

  • 'egg'

  • 'msi'

  • 'rpm'

  • 'sdist'

  • 'wheel'

  • 'wininst'

If the filename cannot be parsed, (None, None, None) is returned.

Note that some filenames (e.g., 1-2-3.tar.gz) may be ambiguous as to which part is the project name and which is the version. In order to resolve the ambiguity, the expected value for the project name (modulo normalization) can be supplied as the project_name argument to the function. If the filename can be parsed with the given string in the role of the project name, the results of that parse will be returned; otherwise, the function will fall back to breaking the project & version apart at an unspecified point.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pypi-simple-0.4.0.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

pypi_simple-0.4.0-py2.py3-none-any.whl (9.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pypi-simple-0.4.0.tar.gz.

File metadata

  • Download URL: pypi-simple-0.4.0.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/36.4.0 requests-toolbelt/0.8.0 tqdm/4.14.0 CPython/3.5.2

File hashes

Hashes for pypi-simple-0.4.0.tar.gz
Algorithm Hash digest
SHA256 826b734d941b7eeb231a2fe79ed86ab3087b5526fedfd4d906015fd973c163bf
MD5 0f40258b351351067348478a91237e6e
BLAKE2b-256 86ab3eb98a0d4d6da6cb4003d50e697e1a9fe92d0d99308131359a3818ca11cc

See more details on using hashes here.

File details

Details for the file pypi_simple-0.4.0-py2.py3-none-any.whl.

File metadata

  • Download URL: pypi_simple-0.4.0-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/36.4.0 requests-toolbelt/0.8.0 tqdm/4.14.0 CPython/3.5.2

File hashes

Hashes for pypi_simple-0.4.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 bb2f967c8f05a6ca2522084b51ed5db5e576be3134fea79b7ccd34b64232f147
MD5 d7d6b21b59e94ee32c563b41c7ece976
BLAKE2b-256 1e5cb7ada9798fd1c95384d3ed7bb20e6900502dcd59bb4d343e8dad44f24eab

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page