def delete(self, nid): """ file: swagger/node_delete.yml """ node = Node.query.get(nid) if node is None: return {'msg': 'Invalid nid'}, 400 relations = NodeRelation.get_relation_by_node_id(nid) for rel in relations: db.session.delete(rel) db.session.delete(node) db.session.commit() return 'success', 204
def post(self): """ file: swagger/relation_post.yml """ uid = get_jwt_identity() vals = dict(parser.parse_args()) source = Node.query.get(vals['source_node_id']) target = Node.query.get(vals['target_node_id']) if not (source and target and source.graph_id == vals['graph_id'] and source.graph_id == target.graph_id and source.owner_id == uid and target.owner_id == uid): return {'msg': 'Invalid args'}, 400 relation = NodeRelation.find_relation(source.id, target.id, source.graph_id) if relation: return {'msg': 'Already exists'}, 400 vals.update({ 'owner_id': uid, }) relation = NodeRelation(**vals) db.session.add(relation) db.session.commit() return True, 201
def delete(self): """ file: swagger/relation_delete.yml """ data = request.json data = dict(data) sid = data.get('source_node_id') tid = data.get('target_node_id') gid = data.get('graph_id') if not (sid and tid and gid): return {'msg': 'Invalid args'}, 400 relation = NodeRelation.find_relation(sid, tid, gid) if relation is None: return {'msg': 'Invalid args'}, 400 db.session.delete(relation) db.session.commit() return '', 204
def put(self): """ file: swagger/relation_put.yml """ vals = dict(parser.parse_args()) sid = vals.pop('source_node_id') tid = vals.pop('target_node_id') gid = vals.pop('graph_id') relation = NodeRelation.find_relation(sid, tid, gid) uid = get_jwt_identity() if not (relation and relation.owner_id == uid): return {'msg': 'Not allowed to put'}, 400 else: update(relation, vals) db.session.add(relation) db.session.commit() return '', 201
def initdb(): click.echo('Init the db') from itmap.models.user import Role, User from itmap.models.graph import NodeRelation, Node, Graph from itmap.models.article import Article from itmap.models.comment import Comment from itmap.models.book import Book # 必须在调用db.create_all之前导入具体的Model # 原因是如User这种类是元类Model的实例(大体上是) # 当导入时,实际上是创建了User类 # 在此过程中,会将User注册到db.metadata.tables中(具体怎么串起来的没找到) db.drop_all() db.create_all() Role.insert_roles() users = [] for index, email in enumerate(app.config['ITMAP_ADMINS']): user = User.create_user(email=email, password=app.config['ITMAP_ADMIN_PASSWORD'], username='******'.format(index)) users.append(user) #if app.debug == True: if True: user = users[0] graph = Graph(name='test_graph', owner_id=user.id) db.session.add(graph) db.session.commit() node_names = ['python', 'java', 'c++', u'鸡蛋'] nodes = [] for name in node_names: node = Node(name=name, owner_id=user.id, graph_id=graph.id) nodes.append(node) db.session.add_all(nodes) db.session.commit() node_ids = [(1, 2), (1, 3), (2, 4), (2, 1), (2, 3)] relations = [] for item in node_ids: relation = NodeRelation(source_node_id=item[0], target_node_id=item[1], graph_id=graph.id, owner_id=user.id) relations.append(relation) db.session.add_all(relations) db.session.commit()