コード例 #1
0
ファイル: models.py プロジェクト: karluxd/socraticqs2
    def save_graph(cls,
                   fsmData,
                   nodeData,
                   edgeData,
                   username,
                   fsmGroups=(),
                   oldLabel='OLD'):
        """Store FSM specification from node

        Store FSM specification from node, edge graph
        by renaming any existing
        FSM with the same name, and creating new FSM.
        Note that ongoing activities
        using the old FSM will continue to work (following the old FSM spec),
        but any new activities will be created using the new FSM spec
        (since they request it by name).
        """
        user = User.objects.get(username=username)
        name = fsmData['name']
        oldName = name + oldLabel
        with transaction.atomic():  # rollback if db error occurs
            try:  # delete nameOLD FSM if any
                old = cls.objects.get(name=oldName)
            except cls.DoesNotExist:
                pass
            else:
                old.delete()
            try:  # rename current to nameOLD
                old = cls.objects.get(name=name)
            except cls.DoesNotExist:
                pass
            else:
                old.name = oldName
                old.save()
                for group in old.fsmgroup_set.all():
                    group.delete()
                # old.fsmgroup_set.clear() # RelatedManager has no attribute clear
            fsm = cls(addedBy=user, **fsmData)  # create new FSM
            fsm.save()
            for groupName in fsmGroups:  # register in specified groups
                fsm.fsmgroup_set.create(group=groupName)
            nodes = {}
            for name, nodeDict in nodeData.items():  # save nodes
                node = FSMNode(name=name, fsm=fsm, addedBy=user, **nodeDict)
                if node.funcName:  # make sure plugin imports successfully
                    get_plugin(node.funcName)
                node.save()
                nodes[name] = node
                if name == 'START':
                    fsm.startNode = node
                    fsm.save()
            for edgeDict in edgeData:  # save edges
                edgeDict = edgeDict.copy()  # don't modify input dict!
                edgeDict['fromNode'] = nodes[edgeDict['fromNode']]
                edgeDict['toNode'] = nodes[edgeDict['toNode']]
                edge = FSMEdge(addedBy=user, **edgeDict)
                edge.save()
        return fsm
コード例 #2
0
ファイル: models.py プロジェクト: VladimirFilonov/socraticqs2
    def save_graph(cls, fsmData, nodeData, edgeData, username, fsmGroups=(), oldLabel='OLD'):
        """Store FSM specification from node

        Store FSM specification from node, edge graph
        by renaming any existing
        FSM with the same name, and creating new FSM.
        Note that ongoing activities
        using the old FSM will continue to work (following the old FSM spec),
        but any new activities will be created using the new FSM spec
        (since they request it by name).
        """
        user = User.objects.get(username=username)
        name = fsmData['name']
        oldName = name + oldLabel
        with transaction.atomic():  # rollback if db error occurs
            try:  # delete nameOLD FSM if any
                old = cls.objects.get(name=oldName)
            except cls.DoesNotExist:
                pass
            else:
                old.delete()
            try:  # rename current to nameOLD
                old = cls.objects.get(name=name)
            except cls.DoesNotExist:
                pass
            else:
                old.name = oldName
                old.save()
                for group in old.fsmgroup_set.all():
                    group.delete()
                # old.fsmgroup_set.clear() # RelatedManager has no attribute clear
            fsm = cls(addedBy=user, **fsmData)  # create new FSM
            fsm.save()
            for groupName in fsmGroups:  # register in specified groups
                fsm.fsmgroup_set.create(group=groupName)
            nodes = {}
            for name, nodeDict in nodeData.items():  # save nodes
                node = FSMNode(name=name, fsm=fsm, addedBy=user, **nodeDict)
                if node.funcName:  # make sure plugin imports successfully
                    get_plugin(node.funcName)
                node.save()
                nodes[name] = node
                if name == 'START':
                    fsm.startNode = node
                    fsm.save()
            for edgeDict in edgeData:  # save edges
                edgeDict = edgeDict.copy()  # don't modify input dict!
                edgeDict['fromNode'] = nodes[edgeDict['fromNode']]
                edgeDict['toNode'] = nodes[edgeDict['toNode']]
                edge = FSMEdge(addedBy=user, **edgeDict)
                edge.save()
        return fsm
コード例 #3
0
ファイル: models.py プロジェクト: VladimirFilonov/socraticqs2
 def __get__(self, obj, objtype):
     try:
         return obj._pluginData
     except AttributeError:
         if not obj.funcName:
             raise AttributeError('no plugin funcName')
         klass = get_plugin(obj.funcName)
         obj._pluginData = klass()
         return obj._pluginData
コード例 #4
0
ファイル: models.py プロジェクト: karluxd/socraticqs2
 def __get__(self, obj, objtype):
     try:
         return obj._pluginData
     except AttributeError:
         if not obj.funcName:
             raise AttributeError('no plugin funcName')
         klass = get_plugin(obj.funcName)
         obj._pluginData = klass()
         return obj._pluginData