Example #1
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(
            remap={
                DBAdd.vtType: 'operation',
                DBChange.vtType: 'operation',
                DBDelete.vtType: 'operation',
                DBAbstractionRef.vtType: DBModule.vtType,
                DBGroup.vtType: DBModule.vtType
            })

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)
Example #2
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstractionRef.vtType: DBModule.vtType})

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)
Example #3
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation'})
        self.idScope.setBeginId('action', 1)
Example #4
0
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstractionRef.vtType: DBModule.vtType})

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}
Example #5
0
 def __init__(self, *args, **kwargs):
     _DBVistrail.__init__(self, *args, **kwargs)
     self.idScope = IdScope(
         remap={
             DBAdd.vtType: 'operation',
             DBChange.vtType: 'operation',
             DBDelete.vtType: 'operation'
         })
     self.idScope.setBeginId('action', 1)
Example #6
0
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstraction.vtType: DBModule.vtType,
                                      DBGroup.vtType: DBModule.vtType})

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None
Example #7
0
class DBAbstraction(_DBAbstraction):
    def __init__(self, *args, **kwargs):
        _DBAbstraction.__init__(self, *args, **kwargs)
        self.idScope = IdScope()
        self.idScope.setBeginId('action', 1)

    def __copy__(self):
        return DBAbstraction.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBAbstraction.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBAbstraction
        # need to go through and reset the index to the copied objects
        cp.idScope = copy.copy(self.idScope)
        return cp
Example #8
0
class DBAbstraction(_DBAbstraction):
    def __init__(self, *args, **kwargs):
        _DBAbstraction.__init__(self, *args, **kwargs)
        self.idScope = IdScope()
        self.idScope.setBeginId('action', 1)

    def __copy__(self):
        return DBAbstraction.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBAbstraction.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBAbstraction
        # need to go through and reset the index to the copied objects
        cp.idScope = copy.copy(self.idScope)
        return cp
Example #9
0
 def __init__(self, *args, **kwargs):
     _DBWorkflow.__init__(self, *args, **kwargs)
     self.objects = {}
     self.tmp_id = IdScope(1, {
         DBAbstraction.vtType: DBModule.vtType,
         DBGroup.vtType: DBModule.vtType
     })
Example #10
0
 def __init__(self, *args, **kwargs):
     _DBLog.__init__(self, *args, **kwargs)
     self.id_scope = IdScope(1,
                             {DBLoopExec.vtType: 'item_exec',
                              DBModuleExec.vtType: 'item_exec',
                              DBGroupExec.vtType: 'item_exec',
                              DBAbstraction.vtType: DBModule.vtType,
                              DBGroup.vtType: DBModule.vtType})
Example #11
0
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstractionRef.vtType: DBModule.vtType})

        self.idScope.setBeginId('action', 1)
Example #12
0
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstraction.vtType: DBModule.vtType,
                                      DBGroup.vtType: DBModule.vtType})

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None
Example #13
0
class DBRegistry(_DBRegistry):
    def __init__(self, *args, **kwargs):
        _DBRegistry.__init__(self, *args, **kwargs)
        self.idScope = IdScope()

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBRegistry()
        new_obj = _DBRegistry.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        return new_obj

    def update_id_scope(self):
        for package in self.db_packages:
            self.idScope.updateBeginId(DBPackage.vtType, package.db_id + 1)
            for descriptor in package.db_module_descriptors:
                self.idScope.updateBeginId(DBModuleDescriptor.vtType,
                                           descriptor.db_id + 1)
                for port_spec in descriptor.db_portSpecs:
                    self.idScope.updateBeginId(DBPortSpec.vtType,
                                               port_spec.db_id + 1)
Example #14
0
class DBRegistry(_DBRegistry):
    def __init__(self, *args, **kwargs):
        _DBRegistry.__init__(self, *args, **kwargs)
        self.idScope = IdScope()

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBRegistry()
        new_obj = _DBRegistry.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        return new_obj
    
    def update_id_scope(self):
        for package in self.db_packages:
            self.idScope.updateBeginId(DBPackage.vtType, package.db_id+1)
            for descriptor in package.db_module_descriptors:
                self.idScope.updateBeginId(DBModuleDescriptor.vtType,
                                           descriptor.db_id+1)
                for port_spec in descriptor.db_portSpecs:
                    self.idScope.updateBeginId(DBPortSpec.vtType, 
                                               port_spec.db_id+1)
Example #15
0
 def __init__(self, *args, **kwargs):
     _DBRegistry.__init__(self, *args, **kwargs)
     self.idScope = IdScope()
Example #16
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstraction.vtType: DBModule.vtType,
                                      DBGroup.vtType: DBModule.vtType})

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None

    def __copy__(self):
        return DBVistrail.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBVistrail.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBVistrail
        
        cp.idScope = copy.copy(self.idScope)
        cp.db_objects = copy.copy(self.db_objects)
        cp.db_log_filename = self.db_log_filename
        if self.log is not None:
            cp.log = copy.copy(self.log)
        else:
            cp.log = None
        
        return cp

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBVistrail()
        new_obj = _DBVistrail.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        if hasattr(old_obj, 'db_log_filename'):
            new_obj.db_log_filename = old_obj.db_log_filename
        if hasattr(old_obj, 'log'):
            new_obj.log = old_obj.log
        return new_obj

    def update_id_scope(self):
        def getOldObjId(operation):
            if operation.vtType == 'change':
                return operation.db_oldObjId
            return operation.db_objectId

        def getNewObjId(operation):
            if operation.vtType == 'change':
                return operation.db_newObjId
            return operation.db_objectId

        for action in self.db_actions:
            self.idScope.updateBeginId('action', action.db_id+1)
            if action.db_session is not None:
                self.idScope.updateBeginId('session', action.db_session + 1)
            for operation in action.db_operations:
                self.idScope.updateBeginId('operation', operation.db_id+1)
                if operation.vtType == 'add' or operation.vtType == 'change':
                    # update ids of data
                    self.idScope.updateBeginId(operation.db_what, 
                                                   getNewObjId(operation)+1)
                    if operation.db_data is None:
                        if operation.vtType == 'change':
                            operation.db_objectId = operation.db_oldObjId
                    self.db_add_object(operation.db_data)
            for annotation in action.db_annotations:
                self.idScope.updateBeginId('annotation', annotation.db_id+1)

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)
 def __init__(self, *args, **kwargs):
     _DBVistrail.__init__(self, *args, **kwargs)
     self.idScope = IdScope(
         remap={DBAdd.vtType: "operation", DBChange.vtType: "operation", DBDelete.vtType: "operation"}
     )
     self.idScope.setBeginId("action", 1)
Example #18
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstraction.vtType: DBModule.vtType,
                                      DBGroup.vtType: DBModule.vtType,
                                      DBActionAnnotation.vtType: \
                                          DBAnnotation.vtType})

        self.idScope.setBeginId('action', 1)
        self.idScope.setBeginId(DBParameterExploration.vtType, 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None

    def __copy__(self):
        return DBVistrail.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBVistrail.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBVistrail
        
        cp.idScope = copy.copy(self.idScope)
        cp.db_objects = copy.copy(self.db_objects)
        cp.db_log_filename = self.db_log_filename
        if self.log is not None:
            cp.log = copy.copy(self.log)
        else:
            cp.log = None
        
        return cp

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBVistrail()
        new_obj = _DBVistrail.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        if hasattr(old_obj, 'db_log_filename'):
            new_obj.db_log_filename = old_obj.db_log_filename
        if hasattr(old_obj, 'log'):
            new_obj.log = old_obj.log
        return new_obj

    def update_id_scope(self):
        def getOldObjId(operation):
            if operation.vtType == 'change':
                return operation.db_oldObjId
            return operation.db_objectId

        def getNewObjId(operation):
            if operation.vtType == 'change':
                return operation.db_newObjId
            return operation.db_objectId

        for action in self.db_actions:
            self.idScope.updateBeginId('action', action.db_id+1)
            if action.db_session is not None:
                self.idScope.updateBeginId('session', action.db_session + 1)
            for operation in action.db_operations:
                self.idScope.updateBeginId('operation', operation.db_id+1)
                if operation.vtType == 'add' or operation.vtType == 'change':
                    # update ids of data
                    self.idScope.updateBeginId(operation.db_what, 
                                               getNewObjId(operation)+1)
                    if operation.db_data is None:
                        if operation.vtType == 'change':
                            operation.db_objectId = operation.db_oldObjId
                    self.db_add_object(operation.db_data)
            for annotation in action.db_annotations:
                self.idScope.updateBeginId('annotation', annotation.db_id+1)
        
        for annotation in self.db_annotations:
            self.idScope.updateBeginId('annotation', annotation.db_id+1)
        for annotation in self.db_actionAnnotations:
            self.idScope.updateBeginId('annotation', annotation.db_id+1)
        for paramexp in self.db_parameter_explorations:
            self.idScope.updateBeginId('parameter_exploration',
                                       paramexp.db_id+1)

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)

    def update_checkout_version(self, app=''):
        checkout_key = "__checkout_version_"
        action_key = checkout_key + app
        annotation_key = action_key + '_annotationhash'
        action_annotation_key = action_key + '_actionannotationhash'

        # delete previous checkout annotations
        deletekeys = [action_key,annotation_key,action_annotation_key]
        for key in deletekeys:
            while self.db_has_annotation_with_key(key):
                a = self.db_get_annotation_by_key(key)
                self.db_delete_annotation(a)
        
        # annotation hash - requires annotations to be clean
        value = self.hashAnnotations()
        if self.db_has_annotation_with_key(annotation_key):
            annotation = self.db_get_annotation_by_key(annotation_key)
            annotation.db_value = value
        else:
            annotation=DBAnnotation(self.idScope.getNewId(DBAnnotation.vtType), 
                                  annotation_key, value)
            self.db_add_annotation(annotation)
        # action annotation hash
        value = self.hashActionAnnotations()
        if self.db_has_annotation_with_key(action_annotation_key):
            annotation = self.db_get_annotation_by_key(action_annotation_key)
            annotation.db_value = value
        else:
            annotation=DBAnnotation(self.idScope.getNewId(DBAnnotation.vtType), 
                                    action_annotation_key, value)
            self.db_add_annotation(annotation)
        # last action id hash
        if len(self.db_actions) == 0:
            value = 0
        else:
            value = max(v.db_id for v in self.db_actions)
        if self.db_has_annotation_with_key(action_key):
            annotation = self.db_get_annotation_by_key(action_key)
            annotation.db_value = str(value)
        else:
            annotation=DBAnnotation(self.idScope.getNewId(DBAnnotation.vtType), 
                                    action_key, str(value))
            self.db_add_annotation(annotation)

    def hashAnnotations(self):
        annotations = {}
        for annotation in self.db_annotations:
            if annotation._db_key not in annotations:
                annotations[annotation._db_key] = []
            if annotation._db_value not in annotations[annotation._db_key]:
                annotations[annotation._db_key].append(annotation._db_value)
        keys = annotations.keys()
        keys.sort()
        m = hashlib.md5()
        for k in keys:
            m.update(str(k))
            annotations[k].sort()
            for v in annotations[k]:
                m.update(str(v))
        return m.hexdigest()

    def hashActionAnnotations(self):
        action_annotations = {}
        for action_id, key, value in [[aa.db_action_id, aa.db_key, 
                         aa.db_value] for aa in self.db_actionAnnotations]:
            index = (str(action_id), key)
            if index not in action_annotations:
                action_annotations[index] = []
            if value not in action_annotations[index]:
                action_annotations[index].append(value)
        keys = action_annotations.keys()
        keys.sort()
        m = hashlib.md5()
        for k in keys:
            m.update(k[0] + k[1])
            action_annotations[k].sort()
            for v in action_annotations[k]:
                m.update(str(v))
        return m.hexdigest()
Example #19
0
 def __init__(self, *args, **kwargs):
     _DBAbstraction.__init__(self, *args, **kwargs)
     self.idScope = IdScope(remap={DBAbstractionRef.vtType: DBModule.vtType})
     self.idScope.setBeginId('action', 1)
Example #20
0
 def __init__(self, *args, **kwargs):
     _DBLog.__init__(self, *args, **kwargs)
     self.id_scope = IdScope(1, {DBAbstractionRef.vtType: DBModule.vtType})
Example #21
0
 def __init__(self, *args, **kwargs):
     _DBVistrail.__init__(self, *args, **kwargs)
     self.idScope = IdScope()
     self.idScope.setBeginId('action', 1)
Example #22
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope()
        self.idScope.setBeginId('action', 1)
Example #23
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(remap={DBAdd.vtType: 'operation',
                                      DBChange.vtType: 'operation',
                                      DBDelete.vtType: 'operation',
                                      DBAbstraction.vtType: DBModule.vtType,
                                      DBGroup.vtType: DBModule.vtType,
                                      DBActionAnnotation.vtType: \
                                          DBAnnotation.vtType})

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None

    def __copy__(self):
        return DBVistrail.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBVistrail.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBVistrail

        cp.idScope = copy.copy(self.idScope)
        cp.db_objects = copy.copy(self.db_objects)
        cp.db_log_filename = self.db_log_filename
        if self.log is not None:
            cp.log = copy.copy(self.log)
        else:
            cp.log = None

        return cp

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBVistrail()
        new_obj = _DBVistrail.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        if hasattr(old_obj, 'db_log_filename'):
            new_obj.db_log_filename = old_obj.db_log_filename
        if hasattr(old_obj, 'log'):
            new_obj.log = old_obj.log
        return new_obj

    def update_id_scope(self):
        def getOldObjId(operation):
            if operation.vtType == 'change':
                return operation.db_oldObjId
            return operation.db_objectId

        def getNewObjId(operation):
            if operation.vtType == 'change':
                return operation.db_newObjId
            return operation.db_objectId

        for action in self.db_actions:
            self.idScope.updateBeginId('action', action.db_id + 1)
            if action.db_session is not None:
                self.idScope.updateBeginId('session', action.db_session + 1)
            for operation in action.db_operations:
                self.idScope.updateBeginId('operation', operation.db_id + 1)
                if operation.vtType == 'add' or operation.vtType == 'change':
                    # update ids of data
                    self.idScope.updateBeginId(operation.db_what,
                                               getNewObjId(operation) + 1)
                    if operation.db_data is None:
                        if operation.vtType == 'change':
                            operation.db_objectId = operation.db_oldObjId
                    self.db_add_object(operation.db_data)
            for annotation in action.db_annotations:
                self.idScope.updateBeginId('annotation', annotation.db_id + 1)

        for annotation in self.db_annotations:
            self.idScope.updateBeginId('annotation', annotation.db_id + 1)
        for annotation in self.db_actionAnnotations:
            self.idScope.updateBeginId('annotation', annotation.db_id + 1)

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)

    def update_checkout_version(self, app=''):
        checkout_key = "__checkout_version_"
        action_key = checkout_key + app
        annotation_key = action_key + '_annotationhash'
        action_annotation_key = action_key + '_actionannotationhash'

        # delete previous checkout annotations
        deletekeys = [action_key, annotation_key, action_annotation_key]
        for key in deletekeys:
            while self.db_has_annotation_with_key(key):
                a = self.db_get_annotation_by_key(key)
                self.db_delete_annotation(a)

        # annotation hash - requires annotations to be clean
        value = self.hashAnnotations()
        if self.db_has_annotation_with_key(annotation_key):
            annotation = self.db_get_annotation_by_key(annotation_key)
            annotation.db_value = value
        else:
            annotation = DBAnnotation(
                self.idScope.getNewId(DBAnnotation.vtType), annotation_key,
                value)
            self.db_add_annotation(annotation)
        # action annotation hash
        value = self.hashActionAnnotations()
        if self.db_has_annotation_with_key(action_annotation_key):
            annotation = self.db_get_annotation_by_key(action_annotation_key)
            annotation.db_value = value
        else:
            annotation = DBAnnotation(
                self.idScope.getNewId(DBAnnotation.vtType),
                action_annotation_key, value)
            self.db_add_annotation(annotation)
        # last action id hash
        if len(self.db_actions) == 0:
            value = 0
        else:
            value = max(v.db_id for v in self.db_actions)
        if self.db_has_annotation_with_key(action_key):
            annotation = self.db_get_annotation_by_key(action_key)
            annotation.db_value = str(value)
        else:
            annotation = DBAnnotation(
                self.idScope.getNewId(DBAnnotation.vtType), action_key,
                str(value))
            self.db_add_annotation(annotation)

    def hashAnnotations(self):
        annotations = {}
        for annotation in self.db_annotations:
            if annotation._db_key not in annotations:
                annotations[annotation._db_key] = []
            if annotation._db_value not in annotations[annotation._db_key]:
                annotations[annotation._db_key].append(annotation._db_value)
        keys = annotations.keys()
        keys.sort()
        m = hashlib.md5()
        for k in keys:
            m.update(str(k))
            annotations[k].sort()
            for v in annotations[k]:
                m.update(str(v))
        return m.hexdigest()

    def hashActionAnnotations(self):
        action_annotations = {}
        for action_id, key, value in [[
                aa.db_action_id, aa.db_key, aa.db_value
        ] for aa in self.db_actionAnnotations]:
            index = (str(action_id), key)
            if index not in action_annotations:
                action_annotations[index] = []
            if value not in action_annotations[index]:
                action_annotations[index].append(value)
        keys = action_annotations.keys()
        keys.sort()
        m = hashlib.md5()
        for k in keys:
            m.update(k[0] + k[1])
            action_annotations[k].sort()
            for v in action_annotations[k]:
                m.update(str(v))
        return m.hexdigest()
Example #24
0
 def __init__(self, *args, **kwargs):
     _DBRegistry.__init__(self, *args, **kwargs)
     self.idScope = IdScope()
Example #25
0
 def __init__(self, *args, **kwargs):
     _DBWorkflow.__init__(self, *args, **kwargs)
     self.objects = {}
     self.tmp_id = IdScope(1)
Example #26
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(
            remap={
                DBAdd.vtType: "operation",
                DBChange.vtType: "operation",
                DBDelete.vtType: "operation",
                DBAbstraction.vtType: DBModule.vtType,
                DBGroup.vtType: DBModule.vtType,
            }
        )

        self.idScope.setBeginId("action", 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None

    def __copy__(self):
        return DBVistrail.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBVistrail.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBVistrail

        cp.idScope = copy.copy(self.idScope)
        cp.db_objects = copy.copy(self.db_objects)
        cp.db_log_filename = self.db_log_filename
        if self.log is not None:
            cp.log = copy.copy(self.log)
        else:
            cp.log = None

        return cp

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBVistrail()
        new_obj = _DBVistrail.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        if hasattr(old_obj, "db_log_filename"):
            new_obj.db_log_filename = old_obj.db_log_filename
        if hasattr(old_obj, "log"):
            new_obj.log = old_obj.log
        return new_obj

    def update_id_scope(self):
        def getOldObjId(operation):
            if operation.vtType == "change":
                return operation.db_oldObjId
            return operation.db_objectId

        def getNewObjId(operation):
            if operation.vtType == "change":
                return operation.db_newObjId
            return operation.db_objectId

        for action in self.db_actions:
            self.idScope.updateBeginId("action", action.db_id + 1)
            if action.db_session is not None:
                self.idScope.updateBeginId("session", action.db_session + 1)
            for operation in action.db_operations:
                self.idScope.updateBeginId("operation", operation.db_id + 1)
                if operation.vtType == "add" or operation.vtType == "change":
                    # update ids of data
                    self.idScope.updateBeginId(operation.db_what, getNewObjId(operation) + 1)
                    if operation.db_data is None:
                        if operation.vtType == "change":
                            operation.db_objectId = operation.db_oldObjId
                    self.db_add_object(operation.db_data)
            for annotation in action.db_annotations:
                self.idScope.updateBeginId("annotation", annotation.db_id + 1)

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)

    def update_checkout_version(self, app=""):
        checkout_key = "__checkout_version_"
        action_key = checkout_key + app
        tag_key = action_key + "_taghash"
        annotation_key = action_key + "_annotationhash"
        action_annotation_key = action_key + "_actionannotationhash"

        # delete previous checkout annotations
        deletekeys = [action_key, tag_key, annotation_key, action_annotation_key]
        for key in deletekeys:
            while self.db_has_annotation_with_key(key):
                a = self.db_get_annotation_by_key(key)
                self.db_delete_annotation(a)

        # annotation hash - requires annotations to be clean
        value = self.hashAnnotations()
        self.set_annotation(annotation_key, value)
        # action annotation hash
        value = self.hashActionAnnotations()
        self.set_annotation(action_annotation_key, value)
        # last action id hash
        if len(self.db_actions) == 0:
            value = 0
        else:
            value = max(v.db_id for v in self.db_actions)
        self.set_annotation(action_key, value)
        # tag hash
        self.set_annotation(tag_key, self.hashTags())

    def hashTags(self):
        tagKeys = [tag.db_id for tag in self.db_tags]
        tagKeys.sort()
        m = hashlib.md5()
        for k in tagKeys:
            m.update(str(k))
            m.update(self.db_get_tag_by_id(k).db_name)
        return m.hexdigest()

    def hashAnnotations(self):
        annotations = {}
        for annotation in self.db_annotations:
            if annotation._db_key not in annotations:
                annotations[annotation._db_key] = []
            if annotation._db_value not in annotations[annotation._db_key]:
                annotations[annotation._db_key].append(annotation._db_value)
        keys = annotations.keys()
        keys.sort()
        m = hashlib.md5()
        for k in keys:
            m.update(k)
            annotations[k].sort()
            for v in annotations[k]:
                m.update(v)
        return m.hexdigest()

    def hashActionAnnotations(self):
        action_annotations = {}
        for id, annotations in [[action.db_id, action.db_annotations] for action in self.db_actions]:
            for annotation in annotations:
                index = (str(id), annotation.db_key)
                if index not in action_annotations:
                    action_annotations[index] = []
                if annotation.db_value not in action_annotations[index]:
                    action_annotations[index].append(annotation.db_value)
        keys = action_annotations.keys()
        keys.sort()
        m = hashlib.md5()
        for k in keys:
            m.update(k[0] + k[1])
            action_annotations[k].sort()
            for v in action_annotations[k]:
                m.update(v)
        return m.hexdigest()
Example #27
0
class DBVistrail(_DBVistrail):
    def __init__(self, *args, **kwargs):
        _DBVistrail.__init__(self, *args, **kwargs)
        self.idScope = IdScope(
            remap={
                DBAdd.vtType: 'operation',
                DBChange.vtType: 'operation',
                DBDelete.vtType: 'operation',
                DBAbstraction.vtType: DBModule.vtType,
                DBGroup.vtType: DBModule.vtType
            })

        self.idScope.setBeginId('action', 1)
        self.db_objects = {}

        # keep a reference to the current logging information here
        self.db_log_filename = None
        self.log = None

    def __copy__(self):
        return DBVistrail.do_copy(self)

    def do_copy(self, new_ids=False, id_scope=None, id_remap=None):
        cp = _DBVistrail.do_copy(self, new_ids, id_scope, id_remap)
        cp.__class__ = DBVistrail

        cp.idScope = copy.copy(self.idScope)
        cp.db_objects = copy.copy(self.db_objects)
        cp.db_log_filename = self.db_log_filename
        if self.log is not None:
            cp.log = copy.copy(self.log)
        else:
            cp.log = None

        return cp

    @staticmethod
    def update_version(old_obj, trans_dict, new_obj=None):
        if new_obj is None:
            new_obj = DBVistrail()
        new_obj = _DBVistrail.update_version(old_obj, trans_dict, new_obj)
        new_obj.update_id_scope()
        if hasattr(old_obj, 'db_log_filename'):
            new_obj.db_log_filename = old_obj.db_log_filename
        if hasattr(old_obj, 'log'):
            new_obj.log = old_obj.log
        return new_obj

    def update_id_scope(self):
        def getOldObjId(operation):
            if operation.vtType == 'change':
                return operation.db_oldObjId
            return operation.db_objectId

        def getNewObjId(operation):
            if operation.vtType == 'change':
                return operation.db_newObjId
            return operation.db_objectId

        for action in self.db_actions:
            self.idScope.updateBeginId('action', action.db_id + 1)
            if action.db_session is not None:
                self.idScope.updateBeginId('session', action.db_session + 1)
            for operation in action.db_operations:
                self.idScope.updateBeginId('operation', operation.db_id + 1)
                if operation.vtType == 'add' or operation.vtType == 'change':
                    # update ids of data
                    self.idScope.updateBeginId(operation.db_what,
                                               getNewObjId(operation) + 1)
                    if operation.db_data is None:
                        if operation.vtType == 'change':
                            operation.db_objectId = operation.db_oldObjId
                    self.db_add_object(operation.db_data)
            for annotation in action.db_annotations:
                self.idScope.updateBeginId('annotation', annotation.db_id + 1)

    def db_add_object(self, obj):
        self.db_objects[(obj.vtType, obj.db_id)] = obj

    def db_get_object(self, type, id):
        return self.db_objects.get((type, id), None)

    def db_update_object(self, obj, **kwargs):
        # want to swap out old object with a new version
        # need this for updating aliases...
        # hack it using setattr...
        real_obj = self.db_objects[(obj.vtType, obj.db_id)]
        for (k, v) in kwargs.iteritems():
            if hasattr(real_obj, k):
                setattr(real_obj, k, v)
Example #28
0
 def __init__(self, *args, **kwargs):
     _DBAbstraction.__init__(self, *args, **kwargs)
     self.idScope = IdScope(
         remap={DBAbstractionRef.vtType: DBModule.vtType})
     self.idScope.setBeginId('action', 1)
Example #29
0
 def __init__(self, *args, **kwargs):
     _DBAbstraction.__init__(self, *args, **kwargs)
     self.idScope = IdScope()
     self.idScope.setBeginId('action', 1)