mirror of
https://github.com/peeringdb/peeringdb.git
synced 2024-05-11 05:55:09 +00:00
Add attribute operational
to netixlan
#539
revert accidentally commited change to netixlan js finalize function
This commit is contained in:
@ -1527,6 +1527,8 @@ class TestJSON(unittest.TestCase):
|
||||
},
|
||||
)
|
||||
|
||||
assert r_data["operational"]
|
||||
|
||||
SHARED["netixlan_id"] = r_data.get("id")
|
||||
|
||||
self.assert_update(
|
||||
@ -2349,6 +2351,30 @@ class TestJSON(unittest.TestCase):
|
||||
|
||||
##########################################################################
|
||||
|
||||
def test_guest_005_list_filter_netixlan_operational(self):
|
||||
|
||||
# all netixlans are operational at this point,
|
||||
# filtering by operational=False should return empty list
|
||||
|
||||
data = self.db_guest.all("netixlan", operational=0)
|
||||
assert len(data) == 0
|
||||
|
||||
# set one netixlan to not operational
|
||||
|
||||
netixlan = NetworkIXLan.objects.first()
|
||||
netixlan.operational=False
|
||||
netixlan.save()
|
||||
|
||||
# assert that it is now returned in the operational=False
|
||||
# result
|
||||
|
||||
data = self.db_guest.all("netixlan", operational=0)
|
||||
assert len(data) == 1
|
||||
assert data[0]["id"] == netixlan.id
|
||||
|
||||
|
||||
##########################################################################
|
||||
|
||||
def test_guest_005_list_filter_netixlan_related_name(self):
|
||||
data = self.db_guest.all("netixlan", name=SHARED["ix_rw_ok"].name)
|
||||
self.assertEqual(len(data), 1)
|
||||
|
18
peeringdb_server/migrations/0034_net_operational.py
Normal file
18
peeringdb_server/migrations/0034_net_operational.py
Normal file
@ -0,0 +1,18 @@
|
||||
# Generated by Django 2.2.9 on 2020-04-10 07:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('peeringdb_server', '0033_fac_contacts'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='networkixlan',
|
||||
name='operational',
|
||||
field=models.BooleanField(default=True),
|
||||
),
|
||||
]
|
@ -1296,6 +1296,7 @@ class NetworkIXLanSerializer(ModelSerializer):
|
||||
"ipaddr4",
|
||||
"ipaddr6",
|
||||
"is_rs_peer",
|
||||
"operational",
|
||||
] + HandleRefSerializer.Meta.fields
|
||||
|
||||
related_fields = ["net", "ixlan"]
|
||||
|
@ -1325,6 +1325,9 @@ twentyc.editable.module.register(
|
||||
ixlnk.text(data.ix.name);
|
||||
row.find(".exchange").html(ixlnk);
|
||||
|
||||
if(data.operational)
|
||||
row.addClass("operational")
|
||||
|
||||
// if ixlan has a name, render it next to the exchange name
|
||||
if(data.ixlan.name)
|
||||
row.find(".exchange").append($('<span>').addClass('tiny suffix').text(data.ixlan.name));
|
||||
@ -1366,6 +1369,13 @@ twentyc.editable.module.register(
|
||||
|
||||
},
|
||||
|
||||
finalize_update_netixlan : function(rowId, row, data) {
|
||||
if(data.operational)
|
||||
row.addClass("operational")
|
||||
else
|
||||
row.removeClass("operational")
|
||||
},
|
||||
|
||||
|
||||
// FINALIZERS: NETFAC
|
||||
|
||||
|
@ -398,6 +398,23 @@ div.panel > .btn {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.editable-inline > div[data-edit-type] {
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.mode-edit .netixlan-extra {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.glyphicon-warning-sign {
|
||||
color: #b19400;
|
||||
vertical-align: text-top;
|
||||
}
|
||||
|
||||
.operational .not-operational {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* landing page: info */
|
||||
|
||||
div.landing_info {
|
||||
|
@ -42,11 +42,14 @@
|
||||
|
||||
{% for x in data.networks %}
|
||||
|
||||
<div class="row item">
|
||||
<div class="row item {% if x.operational %}operational{% endif %}">
|
||||
<div class="col-xs-5 col-sm-5 col-md-5">
|
||||
<div class="peer" data-sort-value="{{ x.network.name|lower }}" data-filter-value="{{ x.network.name }}">
|
||||
<a href="/{{ x.network|ref_tag }}/{{ x.network.id }}">{{ x.network.name }}</a>{% if x.ixlan.name %}<span class="tiny suffix">{{ x.ixlan.name }}</span>{% endif %}
|
||||
|
||||
<span class="glyphicon glyphicon-warning-sign not-operational" data-edit-toggled="view" data-toggle="tooltip" title="{% trans "Not operational" %}" aria-hidden="true"></span>
|
||||
</div>
|
||||
|
||||
<div class="asn" data-sort-value="{{ x.asn }}" data-filter-value="{{ x.asn }}">{{ x.asn }}</div>
|
||||
</div>
|
||||
<div class="col-xs-4 col-sm-4 col-md-4">
|
||||
|
@ -1,3 +1,4 @@
|
||||
{% load i18n %}
|
||||
<!-- TEMPLATES -->
|
||||
<div id="editable-templates">
|
||||
|
||||
@ -12,12 +13,27 @@
|
||||
data-filter-name="exchange_name"
|
||||
data-edit-name="exchange">
|
||||
</div>
|
||||
<div class="asn"
|
||||
data-edit-type="readonly"
|
||||
data-edit-name="asn"
|
||||
data-filter-name="asn"
|
||||
data-sort-name="asn">
|
||||
</div>
|
||||
|
||||
<span class="glyphicon glyphicon-warning-sign not-operational" data-edit-toggled="view" data-toggle="tooltip" title="{% trans "Not operational" %}" aria-hidden="true"></span>
|
||||
|
||||
<div class="editable-inline netixlan-extra">
|
||||
<div class="asn"
|
||||
data-edit-type="readonly"
|
||||
data-edit-name="asn"
|
||||
data-filter-name="asn"
|
||||
data-sort-name="asn">
|
||||
</div>
|
||||
<div
|
||||
data-edit-type="bool"
|
||||
data-edit-name="operational"
|
||||
data-edit-toggled="edit"
|
||||
data-sort-value="{{ x.operational }}"
|
||||
data-edit-value="{{ x.operational }}">
|
||||
</div>
|
||||
<span data-edit-toggled="edit">{% trans "Operational" %}</span>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="col-xs-5 col-sm-5 col-md-4">
|
||||
<div data-edit-type="string"
|
||||
|
@ -45,7 +45,7 @@
|
||||
|
||||
{% for x in data.exchanges %}
|
||||
|
||||
<div class="row item" data-edit-id="{{ x.id }}" data-edit-label="{% trans "Network - Exchange link" %}: {{ x.ixlan.ix.name }}">
|
||||
<div class="row item {% if x.operational %}operational{% endif %}" data-edit-id="{{ x.id }}" data-edit-label="{% trans "Network - Exchange link" %}: {{ x.ixlan.ix.name }}">
|
||||
<div class="editable payload">
|
||||
<div data-edit-name="net_id">{{ instance.id }}</div>
|
||||
<div data-edit-name="ixlan_id">{{ x.ixlan_id }}</div>
|
||||
@ -55,21 +55,35 @@
|
||||
<a class="btn-row-delete" data-edit-toggled="edit" data-edit-action="remove">×</a>
|
||||
{% endif %}
|
||||
<div class="exchange" data-sort-value="{{ x.ixlan.ix.name }}" data-filter-value="{{ x.ixlan.ix.name }}">
|
||||
<a href="/{{x.ixlan.ix|ref_tag}}/{{ x.ixlan.ix.id }}">{{ x.ixlan.ix.name }}</a>{% if x.ixlan.name %}<span class="tiny suffix">{{ x.ixlan.name }}</span>{% endif %}
|
||||
<a href="/{{x.ixlan.ix|ref_tag}}/{{ x.ixlan.ix.id }}">{{ x.ixlan.ix.name }}</a>
|
||||
</div>
|
||||
<div class="asn{% if permissions.can_write and x.asn != x.network.asn %} mark-value-error{% endif %}"
|
||||
{% if permissions.can_write and x.asn != x.network.asn %}
|
||||
data-toggle="tooltip"
|
||||
data-placement="left"
|
||||
title="{% trans "Entry needs to be moved to correct network" %}"
|
||||
{% endif %}
|
||||
data-edit-type="readonly"
|
||||
data-edit-name="asn"
|
||||
data-edit-value="{{ x.asn }}"
|
||||
data-sort-value="{{ x.asn }}"
|
||||
data-filter-value="{{ x.asn }}">
|
||||
{{ x.asn }}
|
||||
|
||||
<span class="glyphicon glyphicon-warning-sign not-operational" data-edit-toggled="view" data-toggle="tooltip" title="{% trans "Not operational" %}" aria-hidden="true"></span>
|
||||
|
||||
<div class="editable-inline netixlan-extra">
|
||||
<div class="asn{% if permissions.can_write and x.asn != x.network.asn %} mark-value-error{% endif %}"
|
||||
{% if permissions.can_write and x.asn != x.network.asn %}
|
||||
data-toggle="tooltip"
|
||||
data-placement="left"
|
||||
title="{% trans "Entry needs to be moved to correct network" %}"
|
||||
{% endif %}
|
||||
data-edit-type="readonly"
|
||||
data-edit-name="asn"
|
||||
data-edit-value="{{ x.asn }}"
|
||||
data-sort-value="{{ x.asn }}"
|
||||
data-filter-value="{{ x.asn }}">
|
||||
{{ x.asn }}
|
||||
</div>
|
||||
<div
|
||||
data-edit-type="bool"
|
||||
data-edit-name="operational"
|
||||
data-edit-toggled="edit"
|
||||
data-sort-value="{{ x.operational }}"
|
||||
data-edit-value="{{ x.operational }}">
|
||||
</div>
|
||||
<span data-edit-toggled="edit">{% trans "Operational" %}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="col-xs-5 col-sm-5 col-md-4">
|
||||
<div {% if permissions.can_write %}
|
||||
@ -106,6 +120,7 @@
|
||||
data-edit-value="{{ x.is_rs_peer }}">
|
||||
<img class="checkmark" src="{{ STATIC_URL }}checkmark{% if not x.is_rs_peer|as_bool %}-off{% endif %}.png" alt="RS PEER" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -171,6 +186,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row view_row">
|
||||
<div class="view_field col-xs-4 col-sm-5 col-md-4">Operational</div>
|
||||
<div class="view_value col-xs-8 col-sm-7 col-md-8">
|
||||
<div data-edit-type="bool"
|
||||
data-edit-name="operational"
|
||||
data-edit-value="true">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user