Skip to main content

A framework for implementing the Stateless OpenPGP CLI

Project description

The Stateless OpenPGP Command-Line Interface

The Stateless OpenPGP Command-Line Interface (or sop) is a specification that encourages OpenPGP implementors to provide a common, relatively simple command-line API for purposes of object security.

This Python module helps implementers build such a CLI from any implementation accessible to the Python interpreter.

It does not provide such an implementation itself -- this is just the scaffolding for the command line, which should make it relatively easy to supply a handful of python functions as methods to a class.

Note that if the user has argcomplete installed, they should also get tab completion in standard shells like bash basically for free.

Example

Here is an example of a minimal command-line tool that just implements the extract_cert() interface, using (imaginary) module foo that has the appropriate

#!/usr/bin/python3
# PYTHON_ARGCOMPLETE_OK
import sop
import foo

class FooSop(sop.StatelessOpenPGP):
    def __init__(self):
        super().__init__(prog='FooPGP', version='0.17')
    # overrides go here...
    def extract_cert(self, key:bytes, armor:bool=True, **kwargs:Namespace) -> bytes:
        self.raise_on_unknown_options(**kwargs)
        return foo.bytes_to_openpgp_key(key).get_certificate(armor=armor)

if __name__ = "__main__":
    foo = FooSop()
    foo.dispatch()

Module Goals

Extensibility

An implementer who wants to extend sop in a simple way (e.g. adding an option to an existing subcommand, or adding a special option) should be able to do so without breaking this interface.

Minimal dependencies

The aim is to only depend on modules from stdlib. We make an exception for optional modules like argcomplete, which can be skipped.

Type-checking

All the code in here should be well-annotated

Self-documenting

Implementers should learn what they need to know from the docstrings, like so:

import sop
help(sop)
help(sop.StatelessOpenPGP)

Semantic Versioning

The major version number will only change when backward-incompatible changes are made.

As long as the major version number is 0, the same holds true for the minor version number.

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

sop-0.2.0.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

sop-0.2.0-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

Details for the file sop-0.2.0.tar.gz.

File metadata

  • Download URL: sop-0.2.0.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.4.2 requests/2.21.0 setuptools/41.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.7.5

File hashes

Hashes for sop-0.2.0.tar.gz
Algorithm Hash digest
SHA256 cecb329153c0f4341ab8ddedaa7e34370cc0802eaf2cce29af0d1adbb4f4923e
MD5 a8044de705aaa3f80e624f00e4997b3c
BLAKE2b-256 89cffe354fd503a87b0cd3c9f85e9712c07ce45f3ee3264cbf815571b8fd0642

See more details on using hashes here.

File details

Details for the file sop-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: sop-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 11.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.4.2 requests/2.21.0 setuptools/41.2.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.7.5

File hashes

Hashes for sop-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6607983caa5123a435a0bde1874a9715f5c123e12dc31b0a2fea10c9ef3eddc1
MD5 f26ef7136d719f772d184ca7aa5041a0
BLAKE2b-256 037e90691db9ce341b4a9951103a2392e1712e0c3091d0c27182eae56238a673

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