Skip to main content

Helpers for interacting with the Snap system within a Snap

Project description

Latest Version Build Status Coverage Status Documentation Status

A Python library to interact with snap configuration and properties from inside a snap.

It exposes a top-level snaphelpers.Snap object which provides access to:

  • snap details:

    >>> snap = snaphelpers.Snap()
    >>> snap.name
    'testapp'
    >>> snap.instance_name
    'testapp'
    >>> snap.version
    '0+git.fdf80cd'
    >>> snap.revision
    'x1'
  • paths:

    >>> snap.paths.common
    PosixPath('/var/snap/testapp/common')
    >>> snap.paths.data
    PosixPath('/var/snap/testapp/x1')
    >>> snap.paths.snap
    PosixPath('/snap/testapp/x1')
    >>> snap.paths.user_common
    PosixPath('/home/ack/snap/testapp/common')
    >>> snap.paths.user_data
    PosixPath('/home/ack/snap/testapp/x1')
  • snap-related environment variables:

    >>> pprint.pprint(dict(snap.environ))
    {'ARCH': 'amd64',
     'COMMON': '/var/snap/testapp/common',
     'CONTEXT': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
     'COOKIE': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
     'DATA': '/var/snap/testapp/x1',
     'INSTANCE_KEY': '',
     'INSTANCE_NAME': 'testapp',
     'LIBRARY_PATH': '/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void',
     'NAME': 'testapp',
     'REEXEC': '',
     'REVISION': 'x1',
     'SNAP': '/snap/testapp/x1',
     'USER_COMMON': '/home/ack/snap/testapp/common',
     'USER_DATA': '/home/ack/snap/testapp/x1',
     'VERSION': '0+git.fdf80cd'}
    >>> snap.environ.ARCH
    'amd64'
  • configuration options:

    >>> snap.config.set({'foo.bar': 'baz', 'asdf': 3})  # this needs to be run as root
    >>> options = snap.config.get_options('foo', 'asdf')
    >>> options['foo']
    {'bar': 'baz'}
    >>> options['foo.bar']
    'baz'
    >>> options['asdf']
    3
    >>> options.as_dict()
    {'asdf': 3, 'foo': {'bar': 'baz'}}

Hook helpers

The library provides helpers to reduce boilerplate when setting up hooks for the snap.

Hooks can be defined by simply registering functions to be called as hooks via entry_points in the application setup.py:

setup(
    # ...
    entry_points={
        'snaphelpers.hooks': [
            'configure = testapp:configure_hook',
            'install = testapp:install_hook'
        ]
    }
)

Hook functions are called with a Snap object as argument:

def install_hook(snap: snaphelpers.Snap):
    # ...


def configure_hook(snap: snaphelpers.Snap):
    # ...

snap-helpers will take care of the hooks plumbing (i.e. creating hook files in $SNAP/snap/hooks).

Testing with the snap

The snap-helpers snap provides a way to easily test code using the library in a real snap environment with strict confinement.

It provides the python and ipython commands:

$ snap-helpers.python -c 'from pprint import pprint; import snaphelpers; pprint(dict(snaphelpers.SnapEnviron()))'
{'ARCH': 'amd64',
 'COMMON': '/var/snap/snap-helpers/common',
 'CONTEXT': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
 'COOKIE': 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',
 'DATA': '/var/snap/snap-helpers/x1',
 'INSTANCE_KEY': '',
 'INSTANCE_NAME': 'snap-helpers',
 'LIBRARY_PATH': '/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl32:/var/lib/snapd/void',
 'NAME': 'snap-helpers',
 'REEXEC': '',
 'REVISION': 'x1',
 'SNAP': '/snap/snap-helpers/x1',
 'USER_COMMON': '/home/ack/snap/snap-helpers/common',
 'USER_DATA': '/home/ack/snap/snap-helpers/x1',
 'VERSION': '0+git.26e1e9d'}

The snap can be built and installed as follows:

$ snapcraft
$ sudo snap install --dangerous snap-helpers_*.snap

Installation

snap-helpers can be installed from PyPI.

Run:

$ pip install snap-helpers

Documentation

Full documentation is available on ReadTheDocs.

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

snap-helpers-0.1.0.tar.gz (17.7 kB view details)

Uploaded Source

File details

Details for the file snap-helpers-0.1.0.tar.gz.

File metadata

  • Download URL: snap-helpers-0.1.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.11.0 pkginfo/1.4.2 requests/2.18.4 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.23.4 CPython/3.6.7

File hashes

Hashes for snap-helpers-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a64002306ff41dc6f1fade7a0ac2b080ddd63ed57cf593f7ad49f7f17e014246
MD5 ae502ebf1b44b7f682e013f0b2c5e698
BLAKE2b-256 c7cbfbca46075b5df3d0af79024242b2eb76037aa5140cfc2d11af4781f35017

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