Example #1
0
File: create.py Project: emjemj/ni
def new_port(request, **kwargs):
    if request.POST:
        form = forms.NewPortForm(request.POST)
        if form.is_valid():
            nh = helpers.form_to_generic_node_handle(request, form, 'port',
                                                     'Physical')
            helpers.form_update_node(request.user, nh.handle_id, form)
            if kwargs.get('parent_id',
                          None) or form.cleaned_data['relationship_parent']:
                parent_id = kwargs.get('parent_id', None)
                if not parent_id:
                    parent_id = form.cleaned_data['relationship_parent']
                try:
                    parent_nh = NodeHandle.objects.get(pk=parent_id)
                    helpers.set_has(request.user, parent_nh.get_node(),
                                    nh.handle_id)
                except NoRelationshipPossible:
                    nh.delete()
                    form = forms.NewPortForm(request.POST)
                    form.add_error('parent', 'Parent type can not have ports.')
                    return render(request, 'noclook/create/create_port.html',
                                  {'form': form})
            return redirect(nh.get_absolute_url())
    else:
        form = forms.NewPortForm()
    return render(request, 'noclook/create/create_port.html', {'form': form})
Example #2
0
File: create.py Project: emjemj/ni
def new_patch_panel(request, **kwargs):
    if request.POST:
        form = forms.NewPatchPannelForm(request.POST)
        ports_form = forms.BulkPortsForm(request.POST)
        if form.is_valid() and ports_form.is_valid():
            nh = helpers.form_to_generic_node_handle(request, form,
                                                     'patch-panel', 'Physical')
            helpers.form_update_node(request.user, nh.handle_id, form)
            data = form.cleaned_data
            node = nh.get_node()
            if data['relationship_location']:
                location = NodeHandle.objects.get(
                    pk=data['relationship_location'])
                helpers.set_location(request.user, node, location.handle_id)
            if not ports_form.cleaned_data['no_ports']:
                data = ports_form.cleaned_data
                helpers.bulk_create_ports(nh.get_node(), request.user, **data)

            return redirect(nh.get_absolute_url())
    else:
        form = forms.NewPatchPannelForm()
        ports_form = forms.BulkPortsForm({
            'port_type': 'RJ45',
            'offset': 1,
            'num_ports': '0'
        })
    return render(request, 'noclook/create/create_patch_panel.html', {
        'form': form,
        'ports_form': ports_form
    })
Example #3
0
def new_contact(request, **kwargs):
    if request.POST:
        form = forms.NewContactForm(request.POST)
        if form.is_valid():
            nh = helpers.form_to_generic_node_handle(request, form, 'contact',
                                                     'Relation')
            helpers.form_update_node(request.user, nh.handle_id, form)
            return redirect(nh.get_absolute_url())
    else:
        form = forms.NewContactForm()
    return render(request, 'noclook/create/create_contact.html',
                  {'form': form})
Example #4
0
def new_rack(request, **kwargs):
    if request.POST:
        form = forms.NewRackForm(request.POST)
        if form.is_valid():
            nh = helpers.form_to_generic_node_handle(request, form, 'rack', 'Location')
            helpers.form_update_node(request.user, nh.handle_id, form)
            if form.cleaned_data['relationship_location']:
                parent_nh = NodeHandle.objects.get(pk=form.cleaned_data['relationship_location'])
                helpers.set_has(request.user, parent_nh.get_node(), nh.handle_id)
            return redirect(nh.get_absolute_url())
    else:
        form = forms.NewRackForm()
    return render(request, 'noclook/create/create_rack.html', {'form': form})
Example #5
0
def new_optical_filter(request, **kwargs):
    form = forms.NewOpticalFilter(request.POST or None)
    ports_form = forms.BulkPortsForm(request.POST or None)

    if request.POST:
        if form.is_valid() and ports_form.is_valid():
            nh = helpers.form_to_generic_node_handle(request, form, 'optical-filter', 'Physical')
            helpers.form_update_node(request.user, nh.handle_id, form)
            if not ports_form.cleaned_data['no_ports']:
                data = ports_form.cleaned_data
                helpers.bulk_create_ports(nh.get_node(), request.user, **data)

            return redirect(nh.get_absolute_url())

    return render(request, 'noclook/create/create_optical_filter.html', {'form': form, 'ports_form': ports_form})
Example #6
0
def new_external_equipment(request, **kwargs):
    if request.POST:
        form = forms.NewExternalEquipmentForm(request.POST)
        if form.is_valid():
            nh = helpers.form_to_generic_node_handle(request, form, 'external-equipment', 'Physical')
            helpers.form_update_node(request.user, nh.handle_id, form)
            data = form.cleaned_data
            node = nh.get_node()
            if data['relationship_location']:
                location = NodeHandle.objects.get(pk=data['relationship_location'])
                helpers.set_location(request.user, node, location.handle_id)
            if data['relationship_owner']:
                owner = NodeHandle.objects.get(pk=data['relationship_owner'])
                helpers.set_owner(request.user, node, owner.handle_id)
            return redirect(nh.get_absolute_url())
    else:
        form = forms.NewExternalEquipmentForm()
    return render(request, 'noclook/create/create_external_equipment.html', {'form': form})
Example #7
0
    def do_request(cls, request, **kwargs):
        form_class     = kwargs.get('form_class')
        nimetaclass    = getattr(cls, 'NIMetaClass')
        graphql_type   = getattr(nimetaclass, 'graphql_type')
        nimetatype     = getattr(graphql_type, 'NIMetaType')
        node_type      = getattr(nimetatype, 'ni_type').lower()
        node_meta_type = getattr(nimetatype, 'ni_metatype').capitalize()
        context_method = getattr(nimetatype, 'context_method')
        has_error      = False

        context = context_method()

        # check it can write on this context
        authorized = sriutils.authorize_create_resource(request.user, context)

        if not authorized:
            raise GraphQLAuthException()

        # Get needed data from node
        if request.POST:
            # replace relay ids for handle_id in contacts if present
            post_data = request.POST.copy()

            for field, roledict in DEFAULT_ROLES.items():
                if field in post_data:
                    handle_id = post_data.get(field)
                    handle_id = relay.Node.from_global_id(handle_id)[1]
                    post_data.pop(field)
                    post_data.update({field: handle_id})

            relay_extra_ids = ('relationship_parent_of', 'relationship_uses_a')
            for field in relay_extra_ids:
                handle_id = post_data.get(field)
                if handle_id:
                    try:
                        handle_id = relay.Node.from_global_id(handle_id)[1]
                        post_data.pop(field)
                        post_data.update({field: handle_id})
                    except BinasciiError:
                        pass # the id is already in handle_id format

            form = form_class(post_data)
            form.strict_validation = True

            if form.is_valid():
                try:
                    nh = helpers.form_to_generic_node_handle(request, form,
                            node_type, node_meta_type, context)
                except UniqueNodeError:
                    has_error = True
                    return has_error, [ErrorType(field="_", messages=["A {} with that name already exists.".format(node_type)])]

                # Generic node update
                # use property keys to avoid inserting contacts as a string property of the node
                property_keys = [
                    'name', 'description', 'organization_id', 'type', 'incident_management_info',
                    'affiliation_customer', 'affiliation_end_customer', 'affiliation_provider',
                    'affiliation_partner', 'affiliation_host_user', 'affiliation_site_owner',
                    'website', 'organization_number'
                ]
                helpers.form_update_node(request.user, nh.handle_id, form, property_keys)
                nh_reload, organization = helpers.get_nh_node(nh.handle_id)

                # add default context
                NodeHandleContext(nodehandle=nh, context=context).save()

                # specific role setting
                for field, roledict in DEFAULT_ROLES.items():
                    if field in form.cleaned_data:
                        contact_id = form.cleaned_data[field]

                        role = RoleModel.objects.get(slug=field)
                        set_contact = helpers.get_contact_for_orgrole(organization.handle_id, role)

                        if contact_id:
                            if set_contact:
                                if set_contact.handle_id != contact_id:
                                    helpers.unlink_contact_with_role_from_org(request.user, organization, role)
                                    helpers.link_contact_role_for_organization(request.user, organization, contact_id, role)
                            else:
                                helpers.link_contact_role_for_organization(request.user, organization, contact_id, role)
                        elif set_contact:
                            helpers.unlink_contact_and_role_from_org(request.user, organization, set_contact.handle_id, role)

                # Set child organizations
                if form.cleaned_data['relationship_parent_of']:
                    organization_nh = NodeHandle.objects.get(handle_id=form.cleaned_data['relationship_parent_of'])
                    helpers.set_parent_of(request.user, organization, organization_nh.handle_id)
                if form.cleaned_data['relationship_uses_a']:
                    procedure_nh = NodeHandle.objects.get(handle_id=form.cleaned_data['relationship_uses_a'])
                    helpers.set_uses_a(request.user, organization, procedure_nh.handle_id)

                return has_error, { graphql_type.__name__.lower(): nh }
            else:
                # get the errors and return them
                has_error = True
                errordict = cls.format_error_array(form.errors)
                return has_error, errordict
        else:
            # get the errors and return them
            has_error = True
            errordict = cls.format_error_array(form.errors)
            return has_error, errordict