def generate_tree():
    with app.app_context():
        data = flask.json.loads(request.data)
        params = data['params']
        age_params = {
            'avg_age': params['avg_age'],
            'age_dev': params['age_dev']
        }
        sender = ContactsTree(DEPTH, age_params).generate_tree()
        settings = {}
        settings.update(data['params'])
        simulator = SimulationManager(sender=sender, settings=settings)
        nodes = simulator.traverse()
        return flask.jsonify(dict(root=sender.to_dict(), nodes=nodes, edges=make_edges(nodes)))
def simulation():
    with app.app_context():
        data = flask.json.loads(request.data)
        root_id = data['graph']['root']['id']
        tree_dict = deserialize(root_id, data['graph'])
        sender = tree_dict[root_id]
        settings = {}
        settings.update(data['params'])
        settings.update(use_profile_spreading=data['spreading'])
        simulator = SimulationManager(sender=sender, settings=settings)
        simulator.start_simulation()
        statistics = simulator.statistics()
        response = dict(
            statistics=dict(
                votes=statistics['info'],
                replies_log=statistics['replies_log'],
                replies_number=statistics['replies_number'],
                request_number=simulator.average_request_number()-1
            ),
            replies_stats=statistics['replies_stats']
        )
        return flask.jsonify(response)