def range_detail(request, pk): mrange = get_object_or_404(Range, pk=pk) if mrange.allow == ALLOW_ANY: allow = ['Any client'] elif mrange.allow == ALLOW_KNOWN: allow = ['Known clients'] else: allow = [] if mrange.allow == ALLOW_VRF: allow += map(str, Vrf.objects.filter(network=mrange.network)) if mrange.allow == ALLOW_LEGACY: allow += map(str, Ctnr.objects.filter(ranges=mrange)) allow.sort(key=lambda x: x.lower()) range_type = mrange.range_type range_data = [] ip_usage_percent = None dynamic_interfaces = [] dynamic_interfaces_page_obj = None if range_type == 'st': start_upper = mrange.start_upper start_lower = mrange.start_lower end_upper = mrange.end_upper end_lower = mrange.end_lower range_data, ip_usage_percent = range_usage( two_to_one(start_upper, start_lower), two_to_one(end_upper, end_lower), mrange.ip_type) else: ip_usage_percent = mrange.range_usage DynamicInterface = get_model('cyder', 'dynamicinterface') dynamic_interfaces = DynamicInterface.objects.filter(range=mrange) dynamic_interfaces_page_obj = make_paginator( request, do_sort(request, dynamic_interfaces), 10) if ip_usage_percent: ip_usage_percent = "{0}%".format(ip_usage_percent) return render(request, 'range/range_detail.html', { 'obj': mrange, 'obj_type': 'range', 'pretty_obj_type': mrange.pretty_type, 'ranges_table': tablefy((mrange,), info=False, request=request), 'range_data': make_paginator(request, range_data, 50), 'range_type': range_type, 'attrs_table': tablefy(mrange.rangeav_set.all(), request=request), 'allow_list': allow, 'range_used': ip_usage_percent, 'dynamic_intr_table': tablefy(dynamic_interfaces_page_obj, info=True, request=request), 'page_obj': dynamic_interfaces_page_obj })
def workgroup_detail(request, workgroup_pk): workgroup = get_object_or_404(Workgroup, pk=workgroup_pk) attrs = workgroup.workgroupkeyvalue_set.all() static_hosts_paginator = make_paginator( request, workgroup.staticinterface_set.all(), record_type='static') dynamic_hosts_paginator = make_paginator( request, workgroup.dynamicinterface_set.all(), record_type='dynamic') return render(request, 'workgroup/workgroup_detail.html', { 'object': workgroup, 'workgroup_table': tablefy((workgroup,)), 'dynamic_hosts_page_obj': dynamic_hosts_paginator, 'dynamic_hosts_table': tablefy(dynamic_hosts_paginator), 'static_hosts_page_obj': static_hosts_paginator, 'static_hosts_table': tablefy(static_hosts_paginator), 'attrs_table': tablefy(attrs), })
def range_detail(request, pk): mrange = get_object_or_404(Range, pk=pk) allow = None if mrange.allow == ALLOW_OPTION_VRF: try: allow = [Vrf.objects.get(network=mrange.network)] except ObjectDoesNotExist: allow = [] elif mrange.allow == ALLOW_OPTION_KNOWN: allow = [ALLOW_OPTION_KNOWN] elif mrange.allow == ALLOW_OPTION_LEGACY: allow = [ctnr for ctnr in Ctnr.objects.filter(ranges=mrange)] start_upper = mrange.start_upper start_lower = mrange.start_lower end_upper = mrange.end_upper end_lower = mrange.end_lower range_data, ip_usage_percent = range_usage( two_to_one(start_upper, start_lower), two_to_one(end_upper, end_lower), mrange.ip_type) return render(request, 'range/range_detail.html', { 'obj': mrange, 'obj_type': 'range', 'ranges_table': tablefy((mrange,)), 'range_data': make_paginator(request, range_data, 50), 'attrs_table': tablefy(mrange.rangekeyvalue_set.all()), 'allow_list': allow, 'range_used': "{0}%".format(ip_usage_percent) })
def cy_detail(request, Klass, template, obj_sets, pk=None, obj=None, **kwargs): """Show bunches of related tables. obj_sets -- string of foreign key attribute of the obj OR queryset relating to the obj Pass in either pk or already retrieved obj. """ # Get object if needed. obj_type = request.path.split("/")[2] if not obj and pk: obj = get_object_or_404(Klass, pk=pk) elif not obj and pk: raise Exception("pk or obj required.") # Build related tables and paginators. tables = [] for name, obj_set in obj_sets.items(): if isinstance(obj_set, str): obj_set = getattr(obj, obj_set).all() page_obj = make_paginator(request, obj_set, obj_type=name.lower().replace(" ", "")) tables.append({"name": name, "page_obj": page_obj, "table": tablefy(page_obj)}) return render( request, template, dict( {"obj": obj, "obj_table": tablefy((obj,)), "obj_type": obj_type, "tables": tables}.items() + kwargs.items() ), )
def cy_view(request, template, pk=None, obj_type=None): """List, create, update view in one for a flatter heirarchy. """ # Infer obj_type from URL, saves trouble of having to specify # kwargs everywhere in the dispatchers. obj_type = obj_type or request.path.split('/')[2] Klass, FormKlass = get_klasses(obj_type) obj = get_object_or_404(Klass, pk=pk) if pk else None form = None if request.method == 'POST': object_table = None page_obj = None form = FormKlass(request.POST, instance=obj) if form.is_valid(): try: if perm(request, ACTION_CREATE, obj=obj, obj_class=Klass): obj = form.save() if Klass.__name__ == 'Ctnr': request = ctnr_update_session(request, obj) if (hasattr(obj, 'ctnr_set') and not obj.ctnr_set.exists()): obj.ctnr_set.add(request.session['ctnr']) object_table = tablefy([obj], request=request) return HttpResponse( json.dumps({'row': object_table})) except (ValidationError, ValueError) as e: if form.errors is None: form.errors = ErrorDict() form.errors.update(e.message_dict) return HttpResponse(json.dumps({'errors': form.errors})) except DatabaseError as e: # DatabaseError(number, description) if form.errors is None: form.errors = ErrorDict() form.errors.setdefault('__all__', []).append(e.args[1]) return HttpResponse(json.dumps({'errors': form.errors})) else: return HttpResponse(json.dumps({'errors': form.errors})) elif request.method == 'GET': object_list = _filter(request, Klass) form = FormKlass(instance=obj) page_obj = make_paginator(request, do_sort(request, object_list), 50) object_table = tablefy(page_obj, request=request) if isinstance(form, UsabilityFormMixin): form.make_usable(request) return cy_render(request, template, { 'form': form, 'obj': obj, 'page_obj': page_obj, 'object_table': object_table, 'obj_type': obj_type, 'pretty_obj_type': Klass.pretty_type, 'pk': pk, })
def cy_view(request, template, pk=None, obj_type=None): """List, create, update view in one for a flatter heirarchy. """ # Infer obj_type from URL, saves trouble of having to specify # kwargs everywhere in the dispatchers. obj_type = obj_type or request.path.split('/')[2] Klass, FormKlass = get_klasses(obj_type) obj = get_object_or_404(Klass, pk=pk) if pk else None form = None if request.method == 'POST': object_table = None page_obj = None form = FormKlass(request.POST, instance=obj) if form.is_valid(): try: if perm(request, ACTION_CREATE, obj=obj, obj_class=Klass): obj = form.save() if Klass.__name__ == 'Ctnr': request = ctnr_update_session(request, obj) if (hasattr(obj, 'ctnr_set') and not obj.ctnr_set.exists()): obj.ctnr_set.add(request.session['ctnr']) object_table = tablefy([obj], request=request) return HttpResponse(json.dumps({'row': object_table})) except (ValidationError, ValueError) as e: if form.errors is None: form.errors = ErrorDict() form.errors.update(e.message_dict) return HttpResponse(json.dumps({'errors': form.errors})) except DatabaseError as e: # DatabaseError(number, description) if form.errors is None: form.errors = ErrorDict() form.errors.setdefault('__all__', []).append(e.args[1]) return HttpResponse(json.dumps({'errors': form.errors})) else: return HttpResponse(json.dumps({'errors': form.errors})) elif request.method == 'GET': object_list = _filter(request, Klass) form = FormKlass(instance=obj) page_obj = make_paginator(request, do_sort(request, object_list), 50) object_table = tablefy(page_obj, request=request) if isinstance(form, UsabilityFormMixin): form.make_usable(request) return cy_render( request, template, { 'form': form, 'obj': obj, 'page_obj': page_obj, 'object_table': object_table, 'obj_type': obj_type, 'pretty_obj_type': Klass.pretty_type, 'pk': pk, })
def workgroup_detail(request, workgroup_pk): workgroup = get_object_or_404(Workgroup, pk=workgroup_pk) attrs = workgroup.workgroupkeyvalue_set.all() static_hosts_paginator = make_paginator( request, workgroup.staticinterface_set.all(), record_type='static') dynamic_hosts_paginator = make_paginator( request, workgroup.dynamicinterface_set.all(), record_type='dynamic') return render( request, 'workgroup/workgroup_detail.html', { 'object': workgroup, 'workgroup_table': tablefy((workgroup, )), 'dynamic_hosts_page_obj': dynamic_hosts_paginator, 'dynamic_hosts_table': tablefy(dynamic_hosts_paginator), 'static_hosts_page_obj': static_hosts_paginator, 'static_hosts_table': tablefy(static_hosts_paginator), 'attrs_table': tablefy(attrs), })
def cy_detail(request, Klass, template, obj_sets, pk=None, obj=None, **kwargs): """Show bunches of related tables. obj_sets -- string of foreign key attribute of the obj OR queryset relating to the obj Pass in either pk or already retrieved obj. """ # Get object if needed. obj_type = request.path.split('/')[2] if not obj and pk: obj = get_object_or_404(Klass, pk=pk) elif not obj and pk: raise Exception("pk or obj required.") # Build related tables and paginators. tables = [] for name, obj_set in obj_sets.items(): if isinstance(obj_set, str): obj_set = getattr(obj, obj_set).all() page_obj = make_paginator(request, obj_set, obj_type=name.lower().replace(' ', '')) if obj_type == 'user': table = tablefy(page_obj, request=request, update=False, related_object=obj) else: table = tablefy(page_obj, request=request, related_object=obj) tables.append({'name': name, 'page_obj': page_obj, 'table': table}) if obj_type == 'user': table = tablefy((obj, ), request=request, update=False, detail_view=True) else: table = tablefy((obj, ), request=request, detail_view=True) return cy_render( request, template, dict({ 'obj': obj, 'obj_table': table, 'obj_type': obj_type, 'pretty_obj_type': (django_pretty_type(obj_type) or get_klasses(obj_type)[0].pretty_type), 'tables': tables }.items() + kwargs.items()))
def cydns_view(request, pk=None): """List, create, update view in one for a flatter heirarchy. """ # Infer obj_type from URL, saves trouble of having to specify # kwargs everywhere in the dispatchers. obj_type = request.path.split('/')[2] # Get the record form. Klass, FormKlass, FQDNFormKlass = get_klasses(obj_type) # Get the object if updating. record = get_object_or_404(Klass, pk=pk) if pk else None form = FQDNFormKlass(instance=record) if request.method == 'POST': qd, domain, errors = _fqdn_to_domain(request.POST.copy()) # Validate form. if errors: print errors fqdn_form = FQDNFormKlass(request.POST) fqdn_form._errors = ErrorDict() fqdn_form._errors['__all__'] = ErrorList(errors) return render(request, 'cydns/cydns_view.html', { 'form': fqdn_form, 'obj_type': obj_type, 'pk': pk, 'obj': record }) else: form = FormKlass(qd, instance=record) try: if perm(request, cy.ACTION_CREATE, obj=record, obj_class=Klass): record = form.save() # If domain, add to current ctnr. if obj_type == 'domain': request.session['ctnr'].domains.add(record) return redirect(record.get_list_url()) except (ValidationError, ValueError): form = _revert(domain, request.POST, form, FQDNFormKlass) object_list = _filter(request, Klass) page_obj = make_paginator( request, do_sort(request, object_list), 50) return render(request, 'cydns/cydns_view.html', { 'form': form, 'obj': record, 'page_obj': page_obj, 'object_table': tablefy(page_obj, views=True), 'obj_type': obj_type, 'pk': pk, })
def cydns_view(request, pk=None): """List, create, update view in one for a flatter heirarchy. """ # Infer obj_type from URL, saves trouble of having to specify # kwargs everywhere in the dispatchers. obj_type = request.path.split('/')[2] # Get the record form. Klass, FormKlass, FQDNFormKlass = get_klasses(obj_type) # Get the object if updating. record = get_object_or_404(Klass, pk=pk) if pk else None form = FQDNFormKlass(instance=record) if request.method == 'POST': qd, domain, errors = _fqdn_to_domain(request.POST.copy()) # Validate form. if errors: print errors fqdn_form = FQDNFormKlass(request.POST) fqdn_form._errors = ErrorDict() fqdn_form._errors['__all__'] = ErrorList(errors) return render(request, 'cydns/cydns_view.html', { 'form': fqdn_form, 'obj_type': obj_type, 'pk': pk, 'obj': record }) else: form = FormKlass(qd, instance=record) try: if perm(request, cy.ACTION_CREATE, obj=record, obj_class=Klass): record = form.save() # If domain, add to current ctnr. if obj_type == 'domain': request.session['ctnr'].domains.add(record) return redirect(record.get_list_url()) except (ValidationError, ValueError): form = _revert(domain, request.POST, form, FQDNFormKlass) object_list = _filter(request, Klass) page_obj = make_paginator(request, do_sort(request, object_list), 50) return render( request, 'cydns/cydns_view.html', { 'form': form, 'obj': record, 'page_obj': page_obj, 'object_table': tablefy(page_obj, views=True), 'obj_type': obj_type, 'pk': pk, })
def cy_detail(request, Klass, template, obj_sets, pk=None, obj=None, **kwargs): """Show bunches of related tables. obj_sets -- string of foreign key attribute of the obj OR queryset relating to the obj Pass in either pk or already retrieved obj. """ # Get object if needed. obj_type = request.path.split('/')[2] if not obj and pk: obj = get_object_or_404(Klass, pk=pk) elif not obj and pk: raise Exception("pk or obj required.") # Build related tables and paginators. tables = [] for name, obj_set in obj_sets.items(): if isinstance(obj_set, str): obj_set = getattr(obj, obj_set).all() page_obj = make_paginator( request, obj_set, obj_type=name.lower().replace(' ', '')) if obj_type == 'user': table = tablefy(page_obj, request=request, update=False, related_object=obj) else: table = tablefy(page_obj, request=request, related_object=obj) tables.append({ 'name': name, 'page_obj': page_obj, 'table': table }) if obj_type == 'user': table = tablefy((obj,), request=request, update=False, detail_view=True) else: table = tablefy((obj,), request=request, detail_view=True) return cy_render(request, template, dict({ 'obj': obj, 'obj_table': table, 'obj_type': obj_type, 'pretty_obj_type': (django_pretty_type(obj_type) or get_klasses(obj_type)[0].pretty_type), 'tables': tables }.items() + kwargs.items()))
def cy_view(request, get_klasses_fn, template, pk=None, obj_type=None): """List, create, update view in one for a flatter heirarchy. """ # Infer obj_type from URL, saves trouble of having to specify obj_type = obj_type or request.path.split('/')[2] Klass, FormKlass, FQDNFormKlass = get_klasses_fn(obj_type) obj = get_object_or_404(Klass, pk=pk) if pk else None form = FormKlass(instance=obj) if request.method == 'POST': form = FormKlass(request.POST, instance=obj) if form.is_valid(): try: if perm(request, cy.ACTION_CREATE, obj=obj, obj_class=Klass): obj = form.save() return redirect( request.META.get('HTTP_REFERER', obj.get_list_url())) except (ValidationError, ValueError) as e: if form._errors is None: form._errors = ErrorDict() form._errors["__all__"] = ErrorList(e.messages) return render(request, template, { 'form': form, 'obj': obj, 'obj_type': obj_type, 'pk': pk, }) elif request.method == 'GET': form = FormKlass(initial=qd_to_py_dict(request.GET)) object_list = _filter(request, Klass) page_obj = make_paginator(request, do_sort(request, object_list), 50) return render( request, template, { 'form': form, 'obj': obj, 'page_obj': page_obj, 'object_table': tablefy(page_obj), 'obj_type': obj_type, 'pk': pk, })
def cy_view(request, get_klasses_fn, template, pk=None, obj_type=None): """List, create, update view in one for a flatter heirarchy. """ # Infer obj_type from URL, saves trouble of having to specify obj_type = obj_type or request.path.split("/")[2] Klass, FormKlass, FQDNFormKlass = get_klasses_fn(obj_type) obj = get_object_or_404(Klass, pk=pk) if pk else None form = FormKlass(instance=obj) if request.method == "POST": form = FormKlass(request.POST, instance=obj) if form.is_valid(): try: if perm(request, cy.ACTION_CREATE, obj=obj, obj_class=Klass): obj = form.save() return redirect(request.META.get("HTTP_REFERER", obj.get_list_url())) except (ValidationError, ValueError) as e: if form._errors is None: form._errors = ErrorDict() form._errors["__all__"] = ErrorList(e.messages) return render(request, template, {"form": form, "obj": obj, "obj_type": obj_type, "pk": pk}) elif request.method == "GET": form = FormKlass(initial=qd_to_py_dict(request.GET)) object_list = _filter(request, Klass) page_obj = make_paginator(request, do_sort(request, object_list), 50) return render( request, template, { "form": form, "obj": obj, "page_obj": page_obj, "object_table": tablefy(page_obj), "obj_type": obj_type, "pk": pk, }, )
if record_type == 'domain': request.session['ctnr'].domains.add(record) return redirect(record.get_list_url()) except ValidationError as e: error = True else: error = True if error: # Revert domain if not valid. prune_tree(domain) return_form = FQDNFormKlass(orig_qd) return_form._errors = form._errors form = return_form object_list = make_paginator(request, Klass.objects.all(), 50) return render(request, 'cydns/cydns_record_view.html', { 'form': form, 'obj': record, 'object_list': object_list, 'object_table': tablefy(object_list), 'domains': domains, 'record_type': record_type, 'pk': pk, }) def cydns_get_record(request): """ Update view called asynchronously from the list_create view
if record_type == 'domain': request.session['ctnr'].domains.add(record) return redirect(record.get_list_url()) except ValidationError as e: error = True else: error = True if error: # Revert domain if not valid. prune_tree(domain) return_form = FQDNFormKlass(orig_qd) return_form._errors = form._errors form = return_form object_list = make_paginator(request, Klass.objects.all(), 50) return render( request, 'cydns/cydns_record_view.html', { 'form': form, 'obj': record, 'object_list': object_list, 'object_table': tablefy(object_list), 'domains': domains, 'record_type': record_type, 'pk': pk, }) def cydns_get_record(request): """
except (ValidationError, ValueError), e: if hasattr(e, 'messages'): e = e.messages if not form._errors: form._errors = ErrorDict() form._errors['__all__'] = ErrorList(e) if is_ajax_form(request): return HttpResponse(json.dumps({'errors': form.errors})) elif request.method == 'GET': form = FormKlass(instance=obj) object_list = _filter(request, Klass) page_obj = make_paginator(request, do_sort(request, object_list), 50) if issubclass(type(form), UsabilityFormMixin): form.make_usable(request) return render(request, 'cydns/cydns_view.html', { 'form': form, 'obj': obj, 'obj_type': obj_type, 'object_table': tablefy(page_obj, request=request), 'page_obj': page_obj, 'pretty_obj_type': Klass.pretty_type, 'pk': pk, })
except (ValidationError, ValueError), e: if hasattr(e, 'messages'): e = e.messages if not form._errors: form._errors = ErrorDict() form._errors['__all__'] = ErrorList(e) if is_ajax_form(request): return HttpResponse(json.dumps({'errors': form.errors})) elif request.method == 'GET': form = FormKlass(instance=obj) object_list = _filter(request, Klass) page_obj = make_paginator(request, do_sort(request, object_list), 50) if issubclass(type(form), UsabilityFormMixin): form.make_usable(request) return cy_render( request, 'cydns/cydns_view.html', { 'form': form, 'obj': obj, 'obj_type': obj_type, 'object_table': tablefy(page_obj, request=request), 'page_obj': page_obj, 'pretty_obj_type': Klass.pretty_type, 'pk': pk, })