Пример #1
0
def start(subj, operation, obj=None):
    subj = Obj.query.filter(Obj.name==subj).first()
    op = Operation.query.filter(Operation.name==operation).first()
    if obj is not None:
        obj = Obj.query.filter(Obj.name==obj).first()
        queue.put([subj, op, obj])
    else:
        subj.do_operation(op)
        queue.put([subj, op])
    interpret_situation()
    perform_operations()
    return 'Success'
Пример #2
0
 def test_reaction(self):
     # чистим список событий, иначе будут мешать события из других тестов
     clear_event_list()
     # create objects
     figvan = models.Obj(name='figvan')
     troll = models.Obj(name='troll')
     # set properties
     kwargs = {'x': 1, 'y': 1, 'шаг': 1}
     figvan.set_property(**kwargs)
     db.session.add(figvan)
     db.session.commit()
     kwargs = {'x': 3, 'y': 3, 'шаг': 1}
     troll.set_property(**kwargs)
     db.session.add(troll)
     db.session.commit()
     # create operations
     move = models.Operation(name='move',
                             formulas=[
                                 "subj.x = subj.x + subj.gp('шаг')",
                                 "subj.y = subj.y + subj.gp('шаг')"
                            ])
     db.session.add(move)
     db.session.commit()
     # create interpretations
     obj_nearly = models.Interpretation(name="obj_nearly",
                               conditions=[
                                 "abs(subj.x - obj.x) <= 1",
                                 "abs(subj.y - obj.y) <= 1"
                                 ])
     db.session.add(obj_nearly)
     db.session.commit()
     # create patterns
     escape = models.Pattern(name='escape',
                              obj=troll,
                              operation=move,
                              interpretation=obj_nearly)
     db.session.add(escape)
     db.session.commit()
     # query from db
     figvan = models.Obj.query.get(1)
     # perform operation
     queue.put([figvan, move])
     perform_operations()
     interpret_situation()
     perform_operations()
     # query from db
     figvan = models.Obj.query.get(1)
     troll = models.Obj.query.get(2)
     # assert
     assert figvan.x == 2
     assert figvan.y == 2
     assert troll.x == 4
     assert troll.y == 4