diff options
author | Jhon Honce <jhonce@redhat.com> | 2018-07-12 19:26:14 -0700 |
---|---|---|
committer | Jhon Honce <jhonce@redhat.com> | 2018-07-13 12:50:12 -0700 |
commit | 74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15 (patch) | |
tree | 75ba256d70545d79aa61d7c57c20df886be1555f /contrib/python/podman/client.py | |
parent | 44b523c946c88e540b50d7ba59f441b5f8e0bad0 (diff) | |
download | podman-74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15.tar.gz podman-74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15.tar.bz2 podman-74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15.zip |
Update python directories to better support setup.py
Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'contrib/python/podman/client.py')
-rw-r--r-- | contrib/python/podman/client.py | 206 |
1 files changed, 0 insertions, 206 deletions
diff --git a/contrib/python/podman/client.py b/contrib/python/podman/client.py deleted file mode 100644 index ad166eb06..000000000 --- a/contrib/python/podman/client.py +++ /dev/null @@ -1,206 +0,0 @@ -"""A client for communicating with a Podman varlink service.""" -import errno -import os -from urllib.parse import urlparse - -from varlink import Client as VarlinkClient -from varlink import VarlinkError - -from .libs import cached_property -from .libs.containers import Containers -from .libs.errors import error_factory -from .libs.images import Images -from .libs.system import System -from .libs.tunnel import Context, Portal, Tunnel - - -class BaseClient(object): - """Context manager for API workers to access varlink.""" - - def __call__(self): - """Support being called for old API.""" - return self - - @classmethod - def factory(cls, - uri=None, - interface='io.projectatomic.podman', - *args, - **kwargs): - """Construct a Client based on input.""" - if uri is None: - raise ValueError('uri is required and cannot be None') - if interface is None: - raise ValueError('interface is required and cannot be None') - - unsupported = set(kwargs.keys()).difference( - ('uri', 'interface', 'remote_uri', 'identity_file')) - if unsupported: - raise ValueError('Unknown keyword arguments: {}'.format( - ', '.join(unsupported))) - - local_path = urlparse(uri).path - if local_path == '': - raise ValueError('path is required for uri,' - ' expected format "unix://path_to_socket"') - - if kwargs.get('remote_uri') or kwargs.get('identity_file'): - # Remote access requires the full tuple of information - if kwargs.get('remote_uri') is None: - raise ValueError( - 'remote is required,' - ' expected format "ssh://user@hostname/path_to_socket".') - remote = urlparse(kwargs['remote_uri']) - if remote.username is None: - raise ValueError( - 'username is required for remote_uri,' - ' expected format "ssh://user@hostname/path_to_socket".') - if remote.path == '': - raise ValueError( - 'path is required for remote_uri,' - ' expected format "ssh://user@hostname/path_to_socket".') - if remote.hostname is None: - raise ValueError( - 'hostname is required for remote_uri,' - ' expected format "ssh://user@hostname/path_to_socket".') - - if kwargs.get('identity_file') is None: - raise ValueError('identity_file is required.') - - if not os.path.isfile(kwargs['identity_file']): - raise FileNotFoundError( - errno.ENOENT, - os.strerror(errno.ENOENT), - kwargs['identity_file'], - ) - - return RemoteClient( - Context(uri, interface, local_path, remote.path, - remote.username, remote.hostname, - kwargs['identity_file'])) - else: - return LocalClient( - Context(uri, interface, None, None, None, None, None)) - - -class LocalClient(BaseClient): - """Context manager for API workers to access varlink.""" - - def __init__(self, context): - """Construct LocalClient.""" - self._context = context - - def __enter__(self): - """Enter context for LocalClient.""" - self._client = VarlinkClient(address=self._context.uri) - self._iface = self._client.open(self._context.interface) - return self._iface - - def __exit__(self, e_type, e, e_traceback): - """Cleanup context for LocalClient.""" - if hasattr(self._client, 'close'): - self._client.close() - self._iface.close() - - if isinstance(e, VarlinkError): - raise error_factory(e) - - -class RemoteClient(BaseClient): - """Context manager for API workers to access remote varlink.""" - - def __init__(self, context): - """Construct RemoteCLient.""" - self._context = context - self._portal = Portal() - - def __enter__(self): - """Context manager for API workers to access varlink.""" - tunnel = self._portal.get(self._context.uri) - if tunnel is None: - tunnel = Tunnel(self._context).bore(self._context.uri) - self._portal[self._context.uri] = tunnel - - try: - self._client = VarlinkClient(address=self._context.uri) - self._iface = self._client.open(self._context.interface) - return self._iface - except Exception: - tunnel.close(self._context.uri) - raise - - def __exit__(self, e_type, e, e_traceback): - """Cleanup context for RemoteClient.""" - if hasattr(self._client, 'close'): - self._client.close() - self._iface.close() - - # set timer to shutdown ssh tunnel - if isinstance(e, VarlinkError): - raise error_factory(e) - - -class Client(object): - """A client for communicating with a Podman varlink service. - - Example: - - >>> import podman - >>> c = podman.Client() - >>> c.system.versions - - Example remote podman: - - >>> import podman - >>> c = podman.Client(uri='unix:/tmp/podman.sock', - remote_uri='ssh://user@host/run/podman/io.projectatomic.podman', - identity_file='~/.ssh/id_rsa') - """ - - def __init__(self, - uri='unix:/run/podman/io.projectatomic.podman', - interface='io.projectatomic.podman', - **kwargs): - """Construct a podman varlink Client. - - uri from default systemd unit file. - interface from io.projectatomic.podman.varlink, do not change unless - you are a varlink guru. - """ - self._client = BaseClient.factory(uri, interface, **kwargs) - - address = "{}-{}".format(uri, interface) - # Quick validation of connection data provided - try: - if not System(self._client).ping(): - raise ConnectionRefusedError( - errno.ECONNREFUSED, - 'Failed varlink connection "{}"'.format(address), address) - except FileNotFoundError: - raise ConnectionError( - errno.ECONNREFUSED, - ('Failed varlink connection "{}".' - ' Is podman service running?').format(address), address) - - def __enter__(self): - """Return `self` upon entering the runtime context.""" - return self - - def __exit__(self, exc_type, exc_value, traceback): - """Raise any exception triggered within the runtime context.""" - return None - - @cached_property - def system(self): - """Manage system model for podman.""" - return System(self._client) - - @cached_property - def images(self): - """Manage images model for libpod.""" - return Images(self._client) - - @cached_property - def containers(self): - """Manage containers model for libpod.""" - return Containers(self._client) |