コード例 #1
0
ファイル: views.py プロジェクト: jwasinger/cyder
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
    })
コード例 #2
0
ファイル: views.py プロジェクト: alecdhuse/cyder
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),
    })
コード例 #3
0
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)
    })
コード例 #4
0
ファイル: views.py プロジェクト: ngokevin/chili
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()
        ),
    )
コード例 #5
0
ファイル: views.py プロジェクト: murrown/cyder
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,
    })
コード例 #6
0
ファイル: views.py プロジェクト: murrown/cyder
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,
        })
コード例 #7
0
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),
        })
コード例 #8
0
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()))
コード例 #9
0
ファイル: views.py プロジェクト: alecdhuse/cyder
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,
    })
コード例 #10
0
ファイル: views.py プロジェクト: jirwin/cyder
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,
        })
コード例 #11
0
ファイル: views.py プロジェクト: OSU-Net/cyder
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()))
コード例 #12
0
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,
        })
コード例 #13
0
ファイル: views.py プロジェクト: ngokevin/chili
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,
        },
    )
コード例 #14
0
ファイル: views.py プロジェクト: Ziaunys/chili
                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
コード例 #15
0
ファイル: views.py プロジェクト: Ziaunys/chili
                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):
    """
コード例 #16
0
ファイル: views.py プロジェクト: church29/cyder
        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,
    })

コード例 #17
0
ファイル: views.py プロジェクト: woakes070048/cyder
        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,
        })