Source code for swimlane.core.adapters.report
import weakref
from swimlane.core.resolver import SwimlaneResolver
from swimlane.core.resources.report import Report, report_factory
from swimlane.utils.str_validator import validate_str, validate_str_format
[docs]class ReportAdapter(SwimlaneResolver):
"""Handles retrieval and creation of Report resources"""
def __init__(self, app):
super(ReportAdapter, self).__init__(app._swimlane)
self.__ref_app = weakref.ref(app)
@property
def _app(self):
"""Resolve weak app reference"""
return self.__ref_app()
[docs] def list(self):
"""Retrieve all reports for parent app
Returns:
:class:`list` of :class:`~swimlane.core.resources.report.Report`: List of all returned reports
"""
raw_reports = self._swimlane.request('get', "reports/app/{}".format(self._app.id)).json()
return [Report(self._app, raw_report) for raw_report in raw_reports]
[docs] def get(self, report_id):
"""Retrieve report by ID
Args:
report_id (str): Full report ID
Returns:
Report: Corresponding Report instance
"""
validate_str(report_id, 'report_id')
validate_str_format(report_id, 'report_id')
return Report(
self._app,
self._swimlane.request('get', "reports/{0}".format(report_id)).json()
)
[docs] def build(self, name, **kwargs):
"""Report instance factory for the adapter's App
Args:
name (str): New Report name
Keyword Args:
**kwargs: Extra keyword args passed to Report class
Returns:
Report: Newly created local Report instance
"""
valid = lambda input: input is not None and isinstance(input, int) and input >= 0
limit = kwargs.get('limit', None)
if "limit" in kwargs and not valid(limit):
raise ValueError('The limit value must be a whole number of zero or above')
return report_factory(self._app, name, **kwargs)