Esempio n. 1
0
 def test_graph_clone(self):
     """
     Tests graph clonation
     """
     cloneGraphName = "graphCloneTest"
     mySchema_clone = Schema.objects.create()
     nt = NodeType(id=2, name="test", schema=mySchema_clone)
     nt.save()
     clone_graph = Graph.objects.create(name=cloneGraphName, schema=mySchema_clone, owner=self.u)
     self.assertIsNotNone(clone_graph)
     self.assertNotEqual(self.graph.name, clone_graph.name)
     self.graph.clone(clone_graph, clone_data=True)
     self.assertNotEqual(self.graph, clone_graph)
     self.assertEqual(self.graph.nodes.count(), clone_graph.nodes.count())
     Graph.objects.get(name=self.graphName).destroy()
     Graph.objects.get(name=cloneGraphName).destroy()
Esempio n. 2
0
 def setUp(self):
     self.factory = RequestFactory()
     self.c = Client()
     self.u = User.objects.create(username="******", password="******", is_active=True, is_staff=True)
     self.u.set_password("hello")
     self.u.save()
     mySchema = Schema.objects.create()
     nt = NodeType(id=1, name="test", schema=mySchema)
     nt.save()
     # If label is not a number, it fires an exception
     self.label = "1"
     self.properties = {"property": "value with spaces"}
     self.unicode_label = u"1"
     self.unicode_properties = {u"property": u"value with spaces"}
     self.graphName = "graphTest"
     self.graph = Graph.objects.create(name=self.graphName, schema=mySchema, owner=self.u)
Esempio n. 3
0
 def test_graph_clone(self):
     """
     Tests graph clonation
     """
     cloneGraphName = "graphCloneTest"
     mySchema_clone = Schema.objects.create()
     nt = NodeType(id=2, name="test", schema=mySchema_clone)
     nt.save()
     clone_graph = Graph.objects.create(name=cloneGraphName,
         schema=mySchema_clone, owner=self.u)
     self.assertIsNotNone(clone_graph)
     self.assertNotEqual(self.graph.name, clone_graph.name)
     self.graph.clone(clone_graph, clone_data=True)
     self.assertNotEqual(self.graph, clone_graph)
     self.assertEqual(self.graph.nodes.count(), clone_graph.nodes.count())
     Graph.objects.get(name=self.graphName).destroy()
     Graph.objects.get(name=cloneGraphName).destroy()
Esempio n. 4
0
 def setUp(self):
     self.factory = RequestFactory()
     self.c = Client()
     self.u = User.objects.create(username='******', password='******', is_active=True, is_staff=True)
     self.u.set_password('hello')
     self.u.save()
     mySchema = Schema.objects.create()
     nt = NodeType(id=1, name="test", schema=mySchema)
     nt.save()
     # If label is not a number, it fires an exception
     self.label = "1"
     self.properties = {"property": "value with spaces"}
     self.unicode_label = u"1"
     self.unicode_properties = {u"property": u"value with spaces"}
     self.graphName = "graphTest"
     self.graph = Graph.objects.create(name=self.graphName,
         schema=mySchema, owner=self.u)
Esempio n. 5
0
def schema_nodetype_editcreate(request, graph_slug, nodetype_id=None):
    graph = get_object_or_404(Graph, slug=graph_slug)
    if nodetype_id:
        empty_nodetype = get_object_or_404(NodeType, id=nodetype_id)
    else:
        empty_nodetype = NodeType()
    form = NodeTypeForm(instance=empty_nodetype)
    formset = NodePropertyFormSet(instance=empty_nodetype)
    if request.POST:
        data = request.POST.copy()
        form = NodeTypeForm(data=data, instance=empty_nodetype)
        formset = NodePropertyFormSet(data=data, instance=empty_nodetype)
        if form.is_valid() and formset.is_valid():
            with transaction.commit_on_success():
                node_type = form.save(commit=False)
                node_type.schema = graph.schema
                node_type.save()
                instances = formset.save(commit=False)
                for instance in instances:
                    instance.node = node_type
                    instance.save()
                redirect_url = reverse("schema_edit", args=[graph.slug])
            return redirect(redirect_url)
    return render_to_response('schemas_item_edit.html', {
        "graph":
        graph,
        "item_type_label":
        _("Type"),
        "item_type":
        "node",
        "item_type_id":
        nodetype_id,
        "form":
        form,
        "fields_to_hide": [
            "plural_name", "inverse", "plural_inverse", "arity_source",
            "arity_target", "validation", "inheritance"
        ],
        "item_type_object":
        empty_nodetype,
        "formset":
        formset
    },
                              context_instance=RequestContext(request))
Esempio n. 6
0
 def _clone_schema(self, schema, new_schema):
     nodetypes_map = {}  # map old/new nodetypes IDs
     relationtypes_map = {}  # map old/new relationtypes IDs
     nodetypes = schema.nodetype_set.all()
     for nt in nodetypes:
         new_nt = NodeType(schema=new_schema,
                           name=nt.name,
                           plural_name=nt.plural_name,
                           description=nt.description,
                           order=nt.order,
                           total=0,
                           validation=nt.validation)
         new_nt.save()
         nodetypes_map[nt.id] = new_nt.id
         properties = nt.properties.all()
         for np in properties:
             new_np = NodeProperty(node=new_nt,
                                   key=np.key,
                                   value=np.value,
                                   default=np.default,
                                   datatype=np.datatype,
                                   required=np.required,
                                   display=np.display,
                                   description=np.description,
                                   validation=np.validation,
                                   order=np.order)
             new_np.save()
     relationtypes = schema.relationshiptype_set.all()
     for rt in relationtypes:
         source = NodeType.objects.get(schema=new_schema,
                                       name=rt.source.name)
         target = NodeType.objects.get(schema=new_schema,
                                       name=rt.target.name)
         new_rt = RelationshipType(schema=new_schema,
                                   source=source,
                                   target=target,
                                   name=rt.name,
                                   plural_name=rt.plural_name,
                                   description=rt.description,
                                   order=rt.order,
                                   total=0,
                                   validation=rt.validation,
                                   inverse=rt.inverse,
                                   plural_inverse=rt.plural_inverse,
                                   arity_source=rt.arity_source,
                                   arity_target=rt.arity_target)
         new_rt.save()
         relationtypes_map[rt.id] = new_rt.id
         properties = rt.properties.all()
         for rp in properties:
             new_rp = RelationshipProperty(relationship=new_rt,
                                           key=rp.key,
                                           value=rp.value,
                                           default=rp.default,
                                           datatype=rp.datatype,
                                           required=rp.required,
                                           display=rp.display,
                                           description=rp.description,
                                           validation=rp.validation,
                                           order=rp.order)
             new_rp.save()
     return nodetypes_map, relationtypes_map
Esempio n. 7
0
 def _clone_schema(self, schema, new_schema):
     nodetypes_map = {}      # map old/new nodetypes IDs
     relationtypes_map = {}  # map old/new relationtypes IDs
     nodetypes = schema.nodetype_set.all()
     for nt in nodetypes:
         new_nt = NodeType(schema=new_schema,
                           name=nt.name,
                           plural_name=nt.plural_name,
                           description=nt.description,
                           order=nt.order,
                           total=0,
                           validation=nt.validation)
         new_nt.save()
         nodetypes_map[nt.id] = new_nt.id
         properties = nt.properties.all()
         for np in properties:
             new_np = NodeProperty(node=new_nt,
                                   key=np.key,
                                   value=np.value,
                                   default=np.default,
                                   datatype=np.datatype,
                                   required=np.required,
                                   display=np.display,
                                   description=np.description,
                                   validation=np.validation,
                                   order=np.order)
             new_np.save()
     relationtypes = schema.relationshiptype_set.all()
     for rt in relationtypes:
         source = NodeType.objects.get(schema=new_schema,
                                       name=rt.source.name)
         target = NodeType.objects.get(schema=new_schema,
                                       name=rt.target.name)
         new_rt = RelationshipType(schema=new_schema,
                                   source=source,
                                   target=target,
                                   name=rt.name,
                                   plural_name=rt.plural_name,
                                   description=rt.description,
                                   order=rt.order,
                                   total=0,
                                   validation=rt.validation,
                                   inverse=rt.inverse,
                                   plural_inverse=rt.plural_inverse,
                                   arity_source=rt.arity_source,
                                   arity_target=rt.arity_target)
         new_rt.save()
         relationtypes_map[rt.id] = new_rt.id
         properties = rt.properties.all()
         for rp in properties:
             new_rp = RelationshipProperty(relationship=new_rt,
                                           key=rp.key,
                                           value=rp.value,
                                           default=rp.default,
                                           datatype=rp.datatype,
                                           required=rp.required,
                                           display=rp.display,
                                           description=rp.description,
                                           validation=rp.validation,
                                           order=rp.order)
             new_rp.save()
     return nodetypes_map, relationtypes_map
Esempio n. 8
0
def schema_nodetype_editcreate(request, graph_slug, nodetype_id=None):
    graph = get_object_or_404(Graph, slug=graph_slug)
    # We get the modal variable
    as_modal = bool(request.GET.get("asModal", False))
    # We get the schema main view breadcrumb
    schema_main_url = reverse("schema_edit", args=[graph.slug])
    if nodetype_id:
        empty_nodetype = get_object_or_404(NodeType, id=nodetype_id)
        add_url = reverse("schema_nodetype_edit",
                          args=[graph_slug, nodetype_id])
    else:
        empty_nodetype = NodeType()
        add_url = reverse("schema_nodetype_create", args=[graph_slug])
    form = NodeTypeForm(instance=empty_nodetype)
    formset = NodePropertyFormSet(instance=empty_nodetype)
    changed_props = request.session.get('schema_changed_props', None)
    deleted_props = request.session.get('schema_deleted_props', None)
    if changed_props:
        del request.session['schema_changed_props']
    if deleted_props:
        del request.session['schema_deleted_props']
    if request.POST:
        data = request.POST.copy()
        as_modal = bool(data.get("asModal", False))
        form = NodeTypeForm(data=data, instance=empty_nodetype)
        formset = NodePropertyFormSet(data=data, instance=empty_nodetype)
        if form.is_valid() and formset.is_valid():
            with transaction.atomic():
                node_type = form.save(commit=False)
                node_type.schema = graph.schema
                # Checking the color, it will create it if doesn't exist
                node_type.get_color()
                node_type.save()
                instances = formset.save(commit=False)
                for instance in instances:
                    instance.node = node_type
                    instance.save()
                schema_modified = False
                if formset.deleted_objects:
                    schema_modified = True
                    deleted_props = []
                    for prop_type in formset.deleted_objects:
                        deleted_props.append({'key': prop_type.key})
                    request.session['schema_deleted_props'] = deleted_props
                if formset.changed_objects:
                    changed_props = []
                    for prop_type, prop_dict in formset.changed_objects:
                        if 'key' in prop_dict:
                            schema_modified = True
                            for data in formset.cleaned_data:
                                if 'key' in data and 'id' in data and \
                                        data['key'] == prop_type.key:
                                    changed_props.append({
                                        'key': data['id'].key,
                                        'new_key': data['key']
                                    })
                    request.session['schema_changed_props'] = changed_props
                if schema_modified:
                    messages.success(request, _("Your changes were saved"))
                    redirect_url = reverse("schema_nodetype_properties_mend",
                                           args=[graph.slug, node_type.id])
                    action = "schema_nodetype_editcreate"
                else:
                    redirect_url = reverse("schema_edit", args=[graph.slug])
                    action = "schema_main"
            if as_modal:
                response = {'type': 'data', 'action': action}
                return HttpResponse(json.dumps(response),
                                    status=200,
                                    content_type='application/json')
            else:
                return redirect(redirect_url)
    if as_modal:
        base_template = 'empty.html'
        render = render_to_string
    else:
        base_template = 'base.html'
        render = render_to_response
    broader_context = {
        "graph":
        graph,
        "item_type_label":
        _("Type"),
        "item_type":
        "node",
        "item_type_id":
        nodetype_id,
        "form":
        form,
        "fields_to_hide": [
            "plural_name", "inverse", "plural_inverse", "arity_source",
            "arity_target", "validation", "inheritance"
        ],
        "item_type_object":
        empty_nodetype,
        "formset":
        formset,
        "base_template":
        base_template,
        "add_url":
        add_url,
        "schema_main_url":
        schema_main_url,
        "as_modal":
        as_modal
    }
    response = render('schemas_item_edit.html',
                      broader_context,
                      context_instance=RequestContext(request))
    if as_modal:
        response = {
            'type': 'html',
            'action': 'schema_nodetype_editcreate',
            'html': response
        }
        return HttpResponse(json.dumps(response),
                            status=200,
                            content_type='application/json')
    else:
        return response
Esempio n. 9
0
def schema_nodetype_editcreate(request, graph_slug, nodetype_id=None):
    graph = get_object_or_404(Graph, slug=graph_slug)
    if nodetype_id:
        empty_nodetype = get_object_or_404(NodeType, id=nodetype_id)
    else:
        empty_nodetype = NodeType()
    form = NodeTypeForm(instance=empty_nodetype)
    formset = NodePropertyFormSet(instance=empty_nodetype)
    changed_props = request.session.get('schema_changed_props', None)
    deleted_props = request.session.get('schema_deleted_props', None)
    if changed_props:
        del request.session['schema_changed_props']
    if deleted_props:
        del request.session['schema_deleted_props']
    if request.POST:
        data = request.POST.copy()
        form = NodeTypeForm(data=data, instance=empty_nodetype)
        formset = NodePropertyFormSet(data=data, instance=empty_nodetype)
        if form.is_valid() and formset.is_valid():
            with transaction.commit_on_success():
                node_type = form.save(commit=False)
                node_type.schema = graph.schema
                # Checking the color
                if 'color' not in node_type.get_options():
                    color = node_type.schema.get_color()
                    node_type.set_option('color', color)
                    node_type.schema.save()
                node_type.save()
                instances = formset.save(commit=False)
                for instance in instances:
                    instance.node = node_type
                    instance.save()
                schema_modified = False
                if formset.deleted_objects:
                    schema_modified = True
                    deleted_props = []
                    for prop_type in formset.deleted_objects:
                        deleted_props.append({'key': prop_type.key})
                    request.session['schema_deleted_props'] = deleted_props
                if formset.changed_objects:
                    changed_props = []
                    for prop_type, prop_dict in formset.changed_objects:
                        if 'key' in prop_dict:
                            schema_modified = True
                            for data in formset.cleaned_data:
                                if 'key' in data and 'id' in data and \
                                        data['key'] == prop_type.key:
                                    changed_props.append({
                                        'key': data['id'].key,
                                        'new_key': data['key']
                                    })
                    request.session['schema_changed_props'] = changed_props
                if schema_modified:
                    messages.success(request, _("Your changes were saved"))
                    redirect_url = reverse("schema_nodetype_properties_mend",
                                           args=[graph.slug, node_type.id])
                else:
                    redirect_url = reverse("schema_edit", args=[graph.slug])
            return redirect(redirect_url)
    return render_to_response('schemas_item_edit.html', {
        "graph":
        graph,
        "item_type_label":
        _("Type"),
        "item_type":
        "node",
        "item_type_id":
        nodetype_id,
        "form":
        form,
        "fields_to_hide": [
            "plural_name", "inverse", "plural_inverse", "arity_source",
            "arity_target", "validation", "inheritance"
        ],
        "item_type_object":
        empty_nodetype,
        "formset":
        formset
    },
                              context_instance=RequestContext(request))