Skip to main content

Latest Version Snap Package Build Status Coverage Status Documentation

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
    'snap-helpers'
    >>> snap.instance_name
    'snap-helpers'
    >>> snap.version
    '0.3.0+git5.5794660'
    >>> snap.revision
    '138'
  • paths:

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

    >>> pprint.pprint(dict(snap.environ))
    {'ARCH': 'amd64',
     'COMMON': '/var/snap/snap-helpers/common',
     'CONTEXT': 'XbhAD8QBMDwJiEi5LcN-5fCrVeAG7qBGojWiWA0vXkx0hX-JxyqX',
     'COOKIE': 'XbhAD8QBMDwJiEi5LcN-5fCrVeAG7qBGojWiWA0vXkx0hX-JxyqX',
     'DATA': '/var/snap/snap-helpers/138',
     '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',
     'REAL_HOME': '/home/ack',
     'REEXEC': '',
     'REVISION': '138',
     'SNAP': '/snap/snap-helpers/138',
     'USER_COMMON': '/home/ack/snap/snap-helpers/common',
     'USER_DATA': '/home/ack/snap/snap-helpers/138',
     'VERSION': '0.3.0+git5.5794660'}
    >>> 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'}}
  • setting snap health status, along with message and optional status code:

    >>> snap.health.okay()
    >>> snap.health.waiting('foo must happen first', code='wait-foo')

    Health status (when different from okay) is visible from the snap CLI:

    $ snap info snap-helpers
    name:    snap-helpers
    summary: Test snap for snap-helpers
    health:
      status:  waiting
      message: foo must happen first
      code:    wait-foo
      checked: today at 16:23 CEST
  • content of snap metadata files such as:

    • snap/metadata.yaml

    • meta/snap.yaml

    • snap/snapcraft.yaml

    These can be accessed as follows:

    >>> snap.metadata_files.snap
    SnapMetadataFile(/snap/snap-helpers/138/meta/snap.yaml)
    >>> snap.metadata_files.snap.path
    PosixPath('/snap/snap-helpers/138/meta/snap.yaml')
    >>> snap.metadata_files.snap["name"]
    'snap-helpers'
    >>> snap.metadata_files.snap["base"]
    'core22'
    >>> pprint.pprint(dict(snap.metadata_files.snap))
    {'apps': {'python': {'command': 'bin/python3',
                         'plugs': ['home', 'network', 'network-bind']},
              'snap-helpers': {'command': 'bin/snap-helpers-shell',
                               'plugs': ['home', 'network', 'network-bind']}},
     'architectures': ['amd64'],
     'base': 'core22',
     'confinement': 'strict',
     'description': 'Test snap for the snap-helpers Python library.\n'
                    '\n'
                    'It provides python and ipython shells to interact and test '
                    'the `snaphelpers`\n'
                    'library.\n'
                    '\n'
                    'See the https://github.com/albertodonato/snap-helpers for '
                    'more details.\n',
     'environment': {'LD_LIBRARY_PATH': '${SNAP_LIBRARY_PATH}${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}:$SNAP/lib',
                     'PATH': '$SNAP/usr/sbin:$SNAP/usr/bin:$SNAP/sbin:$SNAP/bin:$PATH'},
     'grade': 'stable',
     'license': 'LGPL-3.0',
     'name': 'snap-helpers',
     'slots': {'snap-helpers-lib': {'content': 'snap-helpers-lib',
                                    'interface': 'content',
                                    'read': ['$SNAP/lib/python3.10/site-packages/snaphelpers']}},
     'summary': 'Test snap for the snap-helpers Python library.',
     'version': '0.3.0+git5.5794660'}

Hook helpers

The library provides helpers to reduce boilerplate when setting up hooks for the snap, by using entry-points in the package metadata.

This can be done in setup.py:

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

or in setup.cfg:

[options.entry_points]
snaphelpers.hooks =
    configure = testapp:configure_hook
    install = testapp:install_hook

or in pyproject.toml:

[project.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).

Supported snap bases

Currently supported snap bases are:

  • core20 (Python 3.8)

  • core22 (Python 3.10)

The core18 base (with Python 3.6) is supported until the 0.3.2 release.

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 an IPython shell which automatically imports the snaphelpers module and provides a Snap instance for the current snap.

$ snap-helpers
Python 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.7.0 -- An enhanced Interactive Python. Type '?' for help.


Use the "snap" variable for an instance for the current snap.

In [1]: import pprint

In [2]: pprint.pprint(dict(snap.environ))
{'ARCH': 'amd64',
 'COMMON': '/var/snap/snap-helpers/common',
 'CONTEXT': 'XbhAD8QBMDwJiEi5LcN-5fCrVeAG7qBGojWiWA0vXkx0hX-JxyqX',
 'COOKIE': 'XbhAD8QBMDwJiEi5LcN-5fCrVeAG7qBGojWiWA0vXkx0hX-JxyqX',
 'DATA': '/var/snap/snap-helpers/138',
 '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',
 'REAL_HOME': '/home/ack',
 'REEXEC': '',
 'REVISION': '138',
 'SNAP': '/snap/snap-helpers/138',
 'USER_COMMON': '/home/ack/snap/snap-helpers/common',
 'USER_DATA': '/home/ack/snap/snap-helpers/138',
 'VERSION': '0.3.0+git5.5794660'}

The snap can be built and installed as follows:

$ snapcraft -v
$ 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.

Release files for snap-helpers 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for snap-helpers 0.4.2
File Size Uploaded
snap-helpers-0.4.2.tar.gz 20.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for snap-helpers 0.4.2
File Interpreter ABI Platform
snap_helpers-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 42.9 kB

Release files / snap-helpers-0.4.2.tar.gz

Download URL snap-helpers-0.4.2.tar.gz
Size 20.1 kB
Tags Source
SHA-256 checksum
How to use checksums
ef3b8621e331bb71afe27e54ef742a7dd2edd9e8026afac285beb42109c8b9a9
BLAKE2b-256 checksum
How to use checksums
502a221ab0a9c0200065bdd8a5d2b131997e3e19ce81832fdf8138a7f5247216
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Release files / snap_helpers-0.4.2-py3-none-any.whl

Download URL snap_helpers-0.4.2-py3-none-any.whl
Size 22.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
04d0ebd167c943849c99ec68b87829fef4a915cbe9b02d8afc3891d889327327
BLAKE2b-256 checksum
How to use checksums
9b2cc1304eb8787bbed23cfc0b07cee6b21e1310ceb6a6f7a4193dab02525c91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.4

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.6

1 release file

0.1.5

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

0.0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page