def synthesis_1(request, discussion, subidea_1, subidea_1_1, test_session): """A Synthesis fixture""" from assembl.models import Synthesis, SubGraphIdeaAssociation,\ SubGraphIdeaLinkAssociation s = Synthesis(discussion=discussion) test_session.add(s) i1_a = SubGraphIdeaAssociation(sub_graph=s, idea=subidea_1) test_session.add(i1_a) i11_a = SubGraphIdeaAssociation(sub_graph=s, idea=subidea_1_1) test_session.add(i11_a) l_1_11 = subidea_1_1.source_links[0] l_1_11_a = SubGraphIdeaLinkAssociation(sub_graph=s, idea_link=l_1_11) test_session.add(l_1_11_a) test_session.flush() def fin(): print "finalizer synthesis_1" test_session.delete(l_1_11_a) test_session.delete(i11_a) test_session.delete(i1_a) test_session.delete(s) test_session.flush() request.addfinalizer(fin) return s
def add_idea_to_synthesis(request): """Add an idea to an ExplictSubgraphView""" ctx = request.context graph_view = ctx.parent_instance if isinstance(graph_view, Synthesis) and not graph_view.is_next_synthesis: raise HTTPBadRequest("Synthesis is published") content = request.json idea_id = content.get('@id', None) if not idea_id: raise HTTPBadRequest("Post an idea with its @id") idea = Idea.get_instance(idea_id) if not idea: raise HTTPNotFound("Unknown idea") link = SubGraphIdeaAssociation(idea=idea, sub_graph=graph_view) duplicate = link.find_duplicate(False) if duplicate: link.delete() return duplicate.idea.generic_json() graph_view.db.add(link) graph_view.db.expire(graph_view, ["idea_assocs"]) graph_view.send_to_changes() # special location return Response(json.dumps(idea.generic_json()), 201, content_type='application/json', location=request.url + "/" + str(idea.id))
def add_idea_to_synthesis(request): """Add an idea to an ExplictSubgraphView""" ctx = request.context graph_view = ctx.parent_instance if isinstance(graph_view, Synthesis) and not graph_view.is_next_synthesis: raise HTTPBadRequest("Synthesis is published") content = request.json idea_id = content.get('@id', None) if not idea_id: raise HTTPBadRequest("Post an idea with its @id") idea = Idea.get_instance(idea_id) if not idea: raise HTTPNotFound("Unknown idea") link = SubGraphIdeaAssociation(idea=idea, sub_graph=graph_view) duplicate = link.find_duplicate(False) if duplicate: link.delete() return duplicate.idea.generic_json() graph_view.db.add(link) graph_view.db.expire(graph_view, ["idea_assocs"]) graph_view.send_to_changes() # special location return Response( json.dumps(idea.generic_json()), 201, content_type='application/json', location=request.url + "/" + str(idea.id))
def synthesis_1(request, discussion, subidea_1, subidea_1_1, test_session): """A Synthesis fixture""" from assembl.models import Synthesis, SubGraphIdeaAssociation,\ SubGraphIdeaLinkAssociation, LangString ls_subject = LangString() ls_subject.add_value("subject FR", "fr") ls_subject.add_value("subject EN", "en") test_session.add(ls_subject) ls_introduction = LangString() ls_introduction.add_value("introduction FR", "fr") ls_introduction.add_value("introduction EN", "en") test_session.add(ls_introduction) ls_conclusion = LangString() ls_conclusion.add_value("conclusion FR", "fr") ls_conclusion.add_value("conclusion EN", "en") test_session.add(ls_conclusion) s = Synthesis(discussion=discussion, subject=ls_subject, introduction=ls_introduction, conclusion=ls_conclusion) test_session.add(s) i1_a = SubGraphIdeaAssociation(sub_graph=s, idea=subidea_1) test_session.add(i1_a) i11_a = SubGraphIdeaAssociation(sub_graph=s, idea=subidea_1_1) test_session.add(i11_a) l_1_11 = subidea_1_1.source_links[0] l_1_11_a = SubGraphIdeaLinkAssociation(sub_graph=s, idea_link=l_1_11) test_session.add(l_1_11_a) test_session.flush() def fin(): print "finalizer synthesis_1" test_session.delete(l_1_11_a) test_session.delete(i11_a) test_session.delete(i1_a) test_session.delete(s) test_session.delete(ls_subject) test_session.delete(ls_introduction) test_session.delete(ls_conclusion) test_session.flush() request.addfinalizer(fin) return s
def test_get_ideas(discussion, test_app, synthesis_1, subidea_1_1_1, test_session): all_ideas = test_app.get('/data/Idea') assert all_ideas.status_code == 200 all_ideas = all_ideas.json disc_ideas = test_app.get('/data/Discussion/%d/ideas?view=id_only' % (discussion.id, )) assert disc_ideas.status_code == 200 disc_ideas = disc_ideas.json assert set(all_ideas) == set(disc_ideas) synthesis_ideasassocs = test_app.get( '/data/Discussion/%d/views/%d/idea_assocs?view=id_only' % (discussion.id, synthesis_1.id)) assert synthesis_ideasassocs.status_code == 200 synthesis_ideasassocs = synthesis_ideasassocs.json syn_ideas = set() for assoc_id in synthesis_ideasassocs: a = SubGraphIdeaAssociation.get_instance(assoc_id) syn_ideas.add(Idea.uri_generic(a.idea_id)) assert syn_ideas < set(disc_ideas) subidea_1_1_1_id = Idea.uri_generic(subidea_1_1_1.id) assert subidea_1_1_1_id in disc_ideas assert subidea_1_1_1_id not in syn_ideas syn_ideas = test_app.get( '/data/Discussion/%d/views/%d/ideas?view=id_only' % (discussion.id, synthesis_1.id)) assert syn_ideas.status_code == 200 syn_ideas = syn_ideas.json assert set(syn_ideas) < set(disc_ideas) subidea_1_1_1_id = Idea.uri_generic(subidea_1_1_1.id) assert subidea_1_1_1_id in disc_ideas assert subidea_1_1_1_id not in syn_ideas
def test_get_ideas(discussion, test_app, synthesis_1, subidea_1_1_1, test_session): all_ideas = test_app.get('/data/Idea') assert all_ideas.status_code == 200 all_ideas = all_ideas.json disc_ideas = test_app.get('/data/Discussion/%d/ideas?view=id_only' % (discussion.id,)) assert disc_ideas.status_code == 200 disc_ideas = disc_ideas.json assert set(all_ideas) == set(disc_ideas) synthesis_ideasassocs = test_app.get( '/data/Discussion/%d/views/%d/idea_assocs?view=id_only' % ( discussion.id, synthesis_1.id)) assert synthesis_ideasassocs.status_code == 200 synthesis_ideasassocs = synthesis_ideasassocs.json syn_ideas = set() for assoc_id in synthesis_ideasassocs: a = SubGraphIdeaAssociation.get_instance(assoc_id) syn_ideas.add(Idea.uri_generic(a.idea_id)) assert syn_ideas < set(disc_ideas) subidea_1_1_1_id = Idea.uri_generic(subidea_1_1_1.id) assert subidea_1_1_1_id in disc_ideas assert subidea_1_1_1_id not in syn_ideas syn_ideas = test_app.get( '/data/Discussion/%d/views/%d/ideas?view=id_only' % ( discussion.id, synthesis_1.id)) assert syn_ideas.status_code == 200 syn_ideas = syn_ideas.json assert set(syn_ideas) < set(disc_ideas) subidea_1_1_1_id = Idea.uri_generic(subidea_1_1_1.id) assert subidea_1_1_1_id in disc_ideas assert subidea_1_1_1_id not in syn_ideas
def remove_idea_from_synthesis(request): """Remove an idea from an ExplictSubgraphView""" ctx = request.context graph_view = ctx.__parent__.parent_instance if isinstance(graph_view, Synthesis) and not graph_view.is_next_synthesis: raise HTTPBadRequest("Synthesis is published") idea = ctx._instance link = SubGraphIdeaAssociation(idea=idea, sub_graph=graph_view) duplicate = link.find_duplicate(True) link.delete() if duplicate: duplicate.delete() graph_view.db.expire(graph_view, ["idea_assocs"]) graph_view.send_to_changes() return {"@tombstone": idea.uri()} else: raise HTTPNotFound("Idea not in view")
def remove_idea_from_synthesis(request): ctx = request.context graph_view = ctx.__parent__.parent_instance if isinstance(graph_view, Synthesis) and not graph_view.is_next_synthesis: raise HTTPBadRequest("Synthesis is published") idea = ctx._instance link = SubGraphIdeaAssociation(idea=idea, sub_graph=graph_view) duplicate = link.find_duplicate(True) link.delete() if duplicate: duplicate.delete() graph_view.db.expire(graph_view, ["idea_assocs"]) graph_view.send_to_changes() return { "@tombstone": idea.uri() } else: raise HTTPNotFound("Idea not in view")