/deb-parse

A simple Python parser for Debian Control-File formats

Primary LanguagePythonMIT LicenseMIT

Deb-Parse

A simple parser for Debian control file formats.

Once initialized, it exposes three attributes with information from the input Control File, and one method to export the information to a JSON file.

A CLI functionality may be added later.

Installation

Install using pip:

$ pip install --user deb-parse

Usage

Import it in your project

from deb_parse.parser import Parser

Initialze it with a valid Control File path or a string that follows the schema:

my_parser = Parse("/var/lib/dpkg/status")
  • Note: A TypeError is raised if the input is not str
  • Note: A ValueError is raised if the input string or path don't follow the schema

If everything goes well, my_parser will now have three accessible attributes:

  • my_parser.pkg_names outputs a list of package names in the input
  • my_parser.raw_pkg_info outputs a list of raw dict objects as seen in input
  • my_parser.clean_pkg_info outputs a list of cleaned up dict objects with more useful information

Examples:

print(my_parser.pkg_names)

['libws-commons-util-java', 'python-pkg-resources', 'tcpd', ... ]
print(my_parser.raw_pkg_info)

[{'name': 'libws-commons-util-java', 'details': {'status': 'install ok installed', 'priority': 'optional', 'section': 'java', 'installed-size': '101', 'maintainer': 'Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>', 'architecture': 'all', 'version': '1.0.1-7', 'description': 'Common utilities from the Apache Web Services Project\n This is a small collection of utility classes, that allow high\n performance XML processing based on SAX.', 'original-maintainer': 'Debian Java Maintainers <pkg-java-maintainers@lists.alioth.debian.org>', 'homepage': 'http://ws.apache.org/commons/util/'}}, ... ]
print(my_parser.clean_pkg_info)

[{'name': 'libws-commons-util-java', 'details': {'version': '1.0.1-7', 'synopsis': 'Common utilities from the Apache Web Services Project', 'description': 'This is a small collection of utility classes, that allow high\nperformance XML processing based on SAX.', 'depends': None, 'alt_depends': None, 'reverse_depends': None}}, ... ]

If you want, you can also dump the parsed information in a JSON file using .to_json_file():

Attributes:

  • outfile=str, default: './datastore/dpkgs.json'
  • names_only=bool, default: False (if True outputs list of names and cancels raw option)
  • raw=bool, default: False (if True outputs raw parse)

If both options are False, JSON will be based on clean package information

Development

For working on deb-parse, you will need Python >= 3.7 and pipenv installed. Configure pipenv to create its .venv in the current folder if you want to use the VS-Code settings. With these installed, run the following command to create a virtualenv for the project and fetch the dependencies:

$ pipenv install --dev
...

Next, activate the virtual environment and get to work:

$ pipenv shell
...
(deb-parse) $