Source code for ftrack_api.operation

# :coding: utf-8
# :copyright: Copyright (c) 2015 ftrack

from builtins import object
import copy


[docs]class Operations(object): '''Stack of operations.'''
[docs] def __init__(self): '''Initialise stack.''' self._stack = [] super(Operations, self).__init__()
[docs] def clear(self): '''Clear all operations.''' del self._stack[:]
[docs] def push(self, operation): '''Push *operation* onto stack.''' self._stack.append(operation)
[docs] def pop(self): '''Pop and return most recent operation from stack.''' return self._stack.pop()
def __len__(self): '''Return count of operations.''' return len(self._stack) def __iter__(self): '''Return iterator over operations.''' return iter(self._stack)
[docs]class Operation(object): '''Represent an operation.'''
[docs]class CreateEntityOperation(Operation): '''Represent create entity operation.'''
[docs] def __init__(self, entity_type, entity_key, entity_data): '''Initialise operation. *entity_type* should be the type of entity in string form (as returned from :attr:`ftrack_api.entity.base.Entity.entity_type`). *entity_key* should be the unique key for the entity and should follow the form returned from :func:`ftrack_api.inspection.primary_key`. *entity_data* should be a mapping of the initial data to populate the entity with when creating. .. note:: Shallow copies will be made of each value in *entity_data*. ''' super(CreateEntityOperation, self).__init__() self.entity_type = entity_type self.entity_key = entity_key self.entity_data = {} for key, value in list(entity_data.items()): self.entity_data[key] = copy.copy(value)
[docs]class UpdateEntityOperation(Operation): '''Represent update entity operation.'''
[docs] def __init__( self, entity_type, entity_key, attribute_name, old_value, new_value ): '''Initialise operation. *entity_type* should be the type of entity in string form (as returned from :attr:`ftrack_api.entity.base.Entity.entity_type`). *entity_key* should be the unique key for the entity and should follow the form returned from :func:`ftrack_api.inspection.primary_key`. *attribute_name* should be the string name of the attribute being modified and *old_value* and *new_value* should reflect the change in value. .. note:: Shallow copies will be made of both *old_value* and *new_value*. ''' super(UpdateEntityOperation, self).__init__() self.entity_type = entity_type self.entity_key = entity_key self.attribute_name = attribute_name self.old_value = copy.copy(old_value) self.new_value = copy.copy(new_value)
[docs]class DeleteEntityOperation(Operation): '''Represent delete entity operation.'''
[docs] def __init__(self, entity_type, entity_key): '''Initialise operation. *entity_type* should be the type of entity in string form (as returned from :attr:`ftrack_api.entity.base.Entity.entity_type`). *entity_key* should be the unique key for the entity and should follow the form returned from :func:`ftrack_api.inspection.primary_key`. ''' super(DeleteEntityOperation, self).__init__() self.entity_type = entity_type self.entity_key = entity_key