Source code for swimlane.core.fields.history

import pendulum

from swimlane.core.resources.base import APIResource
from swimlane.core.resources.usergroup import UserGroup
from .base import CursorField, FieldCursor, ReadOnly


[docs]class RevisionCursor(FieldCursor): """An iterable object that automatically lazy retrieves and caches history data for a record from API""" def __init__(self, *args, **kwargs): super(RevisionCursor, self).__init__(*args, **kwargs) self.__retrieved = False def _evaluate(self): """Lazily retrieves, caches, and returns the list of record _revisions""" if not self.__retrieved: self._elements = self._retrieve_revisions() self.__retrieved = True return super(RevisionCursor, self)._evaluate() def _retrieve_revisions(self): """Retrieve and populate Revision instances from history API endpoint""" response = self._swimlane.request( 'get', 'history', params={ 'type': 'Records', 'id': self._record.id } ) raw_revisions = response.json() return [Revision(self._record, raw) for raw in raw_revisions]
[docs]class Revision(APIResource): """Encapsulates a single revision returned from a History lookup""" def __init__(self, record, raw): super(Revision, self).__init__(record._swimlane, raw) self.record = record self.modified_date = pendulum.parse(self._raw['modifiedDate']) self.revision_number = int(self._raw['revisionNumber']) self.status = self._raw['status'] # UserGroupSelection, can't set as User without additional lookup self.user = UserGroup(self._swimlane, self._raw['userId']) # Avoid circular imports from swimlane.core.resources.record import Record self.version = Record(self.record._app, self._raw['version']) def __str__(self): return '{} ({})'.format(self.version, self.revision_number)
[docs]class HistoryField(ReadOnly, CursorField): field_type = 'Core.Models.Fields.History.HistoryField, Core' cursor_class = RevisionCursor