Skip to main content

python module for parsing, validating and querying distribution/packaging metadata stored in human readable and reviewable text/YAML files

Project description

distroinfo is a python module for parsing, validating and querying distribution/packaging metadata stored in human readable and reviewable text/YAML files.

This is a proper generic (re)implementation of rdoinfo parser which proved well suited for the task of interfacing with distribution metadata in a human friendly way. If you consider code reviews human friendly, that is.

distroinfo is a part of Software Factory project

STATUS

distroinfo is available from Fedora/EPEL repos and is BEING INTEGRATED.

rdopkg and DLRN are first adopters.

rdoinfo compatibility is ensured through offline and online tests.

CI is enabled.

See distroinfo reviews.

Use github Issues to make requests and report bugs.

Installation

from source

If you want to hack distroinfo or just have the latest code without waiting for next release, you can use the git repo directly:

git clone https://github.com/softwarefactory-project/distroinfo
cd distroinfo
python setup.py develop --user

You may set the preference over distroinfo RPM by correctly positioning ~/.local/bin/distroinfo in your $PATH.

Or you can use virtualenv to avoid conflicts with RPM:

git clone https://github.com/softwarefactory-project/distroinfo
cd distroinfo
virtualenv --system-site-packages ~/distroinfo-venv
source ~/distroinfo-venv/bin/activate
python setup.py develop
ln `which distroinfo` ~/bin/distroinfo-dev

distroinfo-dev --version

Required python modules are listed in requirements.txt.

from Fedora/EPEL repos (default)

distroinfo is available on Fedora 27 and newer:

dnf install python2-distroinfo

including Python 3 version:

dnf install python3-distroinfo

On CentOS/RHEL 7, distroinfo is available from EPEL.

On CentOS 7:

yum install epel-release
yum install python2-distroinfo

On RHEL 7:

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install python2-distroinfo

from PyPI

For your convenience, distroinfo is available from the Cheese Shop:

pip install distroinfo

Usage

You can fetch info files from an URL by specifying remote_info base URL:

from distroinfo.info import DistroInfo

RDOINFO_RAW_URL = \
    'https://raw.githubusercontent.com/redhat-openstack/rdoinfo/master/'

di = DistroInfo('rdo-full.yml',
                remote_info=RDOINFO_RAW_URL)
info = di.get_info()

Or you can fetch info files from a remote git repository using remote_git_info:

from distroinfo.info import DistroInfo

RDOINFO_GIT_URL = \
    'https://github.com/redhat-openstack/rdoinfo'

di = DistroInfo('rdo-full.yml',
                remote_git_info=RDOINFO_GIT_URL)
info = di.get_info()

Or you can fetch info files from a local directory using local_info:

from distroinfo.info import DistroInfo

INFO_PATH = '/path/to/info'

di = DistroInfo('rdo-full.yml',
                local_info=INFO_PATH)
info = di.get_info()

For remote fetchers info files/repos are cached in ~/.distroinfo/cache.

You can navigate info structure yourself or use query module:

from distroinfo import query

# get a package info by strict package name
nova = query.get_package(info, 'openstack-nova')

# find a package by human reference (smart search)
keystone = query.find_package(info, 'keystone')

Alternatively, you can get info with packages and releases as dictionaries indexed by project/release name for easier access using info_dicts=True:

info = di.get_info(info_dicts=True)
nova = info['packages']['nova']

It is also possible to filter packages matching a given criteria. The following query will show all packages matching criteria conf: client AND tags: antelope.

::

# rexen is a dictionary of applied filters. # pkg is the currently processed package. info = di.get_info() pkgs = info[‘packages’] rexen = {“conf”: “client”, “tags”: “antelope”}

finding = query.filter_pkgs(pkgs, rexen)

It is also possible to apply negative filtering with “~” character, which can be combined with other filters, like conf: client.

::

info = di.get_info() pkgs = info[‘packages’] rexen = {“tags”: “~newton”, “conf”: “client”} finding = query.filter_pkgs(pkgs, rexen)

When using this feature, the output will contain packages WITHOUT newton tag but containing conf:client.

Until proper documentation is in place, please refer to:

Command Line Interface

A simple CLI is provided in scripts/di.py which can be used to test basic distroinfo functionality, profile, dump parsed data, etc.

An example of dumping parsed rdoinfo into both YAML and JSON files:

$> ./scripts/di.py dump -y rdoinfo.yaml -j rdoinfo.json -f git \
       'https://github.com/redhat-openstack/rdoinfo' rdo-full.yml

Dumping YAML to: rdoinfo.yaml
Dumping JSON to: rdoinfo.json

Additional docopt module is required to run the CLI.

Bugs

Please use the github Issues to report bugs.

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

distroinfo-0.6.2.tar.gz (239.3 kB view details)

Uploaded Source

Built Distribution

distroinfo-0.6.2-py3-none-any.whl (20.9 kB view details)

Uploaded Python 3

File details

Details for the file distroinfo-0.6.2.tar.gz.

File metadata

  • Download URL: distroinfo-0.6.2.tar.gz
  • Upload date:
  • Size: 239.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for distroinfo-0.6.2.tar.gz
Algorithm Hash digest
SHA256 87610c8a8fcf7a57e96b262f726a4cae51ca1e018f8f14ffa6f987a0c6e054c5
MD5 8210da19cc71b260f6edff766dbdbd8f
BLAKE2b-256 f71cc1c8a36568b355a45e4fe485b345eeaf60ce99c0e99232aa74d4616c18a4

See more details on using hashes here.

File details

Details for the file distroinfo-0.6.2-py3-none-any.whl.

File metadata

  • Download URL: distroinfo-0.6.2-py3-none-any.whl
  • Upload date:
  • Size: 20.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.11.2

File hashes

Hashes for distroinfo-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 97ce0229204ec1617b33556687f9b64d76c512f75c04f649554e7fa2d8290e0b
MD5 c6030d9194c5b4145568808dca2455e8
BLAKE2b-256 f72f1f1466b1a00f0e3b26f00054f22f91b8ee99db5af66ac73cb60eeb7de706

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 Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page