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})
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 })
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})
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})
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})
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})
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