Source code for swimlane.core.adapters.app

from swimlane.core.cache import check_cache
from swimlane.core.resolver import SwimlaneResolver
from swimlane.core.resources.app import App
from swimlane.utils import one_of_keyword_only


[docs]class AppAdapter(SwimlaneResolver): """Handles retrieval of Swimlane App resources"""
[docs] @check_cache(App) @one_of_keyword_only('id', 'name') def get(self, key, value): """Get single app by one of id or name Supports resource cache Keyword Args: id (str): Full app id name (str): App name Returns: App: Corresponding App resource instance Raises: TypeError: No or multiple keyword arguments provided ValueError: No matching app found on server ValueError: The lookup value is empty or None """ if not value: raise ValueError('The value provided for the key "{0}" cannot be empty or None'.format(key)) if key == 'id': # Server returns 204 instead of 404 for a non-existent app id response = self._swimlane.request('get', 'app/{}'.format(value)) if response.status_code == 204: raise ValueError('No app with id "{}"'.format(value)) return App( self._swimlane, response.json() ) else: # Workaround for lack of support for get by name # Holdover from previous driver support, to be fixed as part of 3.x for app in self.list(): if value and value == app.name: return app # No matching app found raise ValueError('No app with name "{}"'.format(value))
[docs] def list(self): """Retrieve list of all apps Returns: :class:`list` of :class:`~swimlane.core.resources.app.App`: List of all retrieved apps """ response = self._swimlane.request('get', 'app') return [App(self._swimlane, item) for item in response.json()]