irie 0.0.35__py3-none-any.whl → 0.0.36__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of irie might be problematic. Click here for more details.
- irie/apps/context_processors.py +8 -0
- irie/apps/inventory/admin.py +4 -1
- irie/apps/inventory/forms.py +24 -1
- irie/apps/inventory/migrations/0004_datum_sensorgroup_sensor.py +43 -0
- irie/apps/inventory/models.py +40 -17
- irie/apps/inventory/urls.py +4 -2
- irie/apps/inventory/views.py +47 -1
- irie/apps/templates/includes/sidebar.html +29 -10
- irie/apps/templates/inventory/asset-profile.html +8 -0
- irie/apps/templates/inventory/asset-sensors.html +50 -0
- irie/apps/templates/inventory/sensor-upload.html +119 -0
- irie/core/settings.py +1 -0
- irie/init/data/nbi_definitions.json +1 -0
- irie/init/getNBIData.py +12 -0
- irie/init/management/commands/init_assets.py +11 -7
- irie/init/management/commands/init_cesmd.py +11 -8
- {irie-0.0.35.dist-info → irie-0.0.36.dist-info}/METADATA +1 -1
- {irie-0.0.35.dist-info → irie-0.0.36.dist-info}/RECORD +21 -17
- {irie-0.0.35.dist-info → irie-0.0.36.dist-info}/WHEEL +0 -0
- {irie-0.0.35.dist-info → irie-0.0.36.dist-info}/entry_points.txt +0 -0
- {irie-0.0.35.dist-info → irie-0.0.36.dist-info}/top_level.txt +0 -0
irie/apps/context_processors.py
CHANGED
|
@@ -3,3 +3,11 @@ from django.conf import settings
|
|
|
3
3
|
|
|
4
4
|
def cfg_assets_root(request):
|
|
5
5
|
return {"ASSETS_ROOT": settings.ASSETS_ROOT}
|
|
6
|
+
|
|
7
|
+
def irie_apps(request):
|
|
8
|
+
return {
|
|
9
|
+
'irie_apps': settings.IRIE_APPS,
|
|
10
|
+
'irie_app_name': request.resolver_match.app_name,
|
|
11
|
+
'namespace': request.resolver_match.namespace,
|
|
12
|
+
'irie_url_name': request.resolver_match.url_name
|
|
13
|
+
}
|
irie/apps/inventory/admin.py
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
#
|
|
5
5
|
#===----------------------------------------------------------------------===#
|
|
6
6
|
from django.contrib import admin
|
|
7
|
-
from .models import Asset, Corridor
|
|
7
|
+
from .models import Asset, Corridor, SensorGroup, Sensor, Datum
|
|
8
8
|
|
|
9
9
|
admin.site.register(Corridor)
|
|
10
10
|
admin.site.register(Asset)
|
|
11
|
+
admin.site.register(SensorGroup)
|
|
12
|
+
admin.site.register(Sensor)
|
|
13
|
+
admin.site.register(Datum)
|
irie/apps/inventory/forms.py
CHANGED
|
@@ -4,9 +4,32 @@
|
|
|
4
4
|
#
|
|
5
5
|
#===----------------------------------------------------------------------===#
|
|
6
6
|
from django import forms
|
|
7
|
-
from
|
|
7
|
+
from django.forms import formset_factory
|
|
8
|
+
from irie.apps.inventory.models import Asset, SensorGroup, Sensor
|
|
8
9
|
|
|
9
10
|
class AssetForm(forms.ModelForm):
|
|
10
11
|
class Meta:
|
|
11
12
|
model = Asset
|
|
12
13
|
fields = '__all__'
|
|
14
|
+
|
|
15
|
+
class SensorGroupForm(forms.ModelForm):
|
|
16
|
+
class Meta:
|
|
17
|
+
model = SensorGroup
|
|
18
|
+
fields = ['name', 'datum']
|
|
19
|
+
|
|
20
|
+
class SensorForm(forms.ModelForm):
|
|
21
|
+
class Meta:
|
|
22
|
+
model = Sensor
|
|
23
|
+
fields = ['x', 'y', 'z', 'dx', 'dy', 'dz']
|
|
24
|
+
labels = {
|
|
25
|
+
'x': 'x',
|
|
26
|
+
'y': 'y',
|
|
27
|
+
'z': 'z',
|
|
28
|
+
'dx': 'dx',
|
|
29
|
+
'dy': 'dy',
|
|
30
|
+
'dz': 'dz',
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# Create a formset for multiple sensors
|
|
35
|
+
SensorFormSet = formset_factory(SensorForm, extra=3) # Default to 3 empty sensor forms
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Generated by Django 5.1.2 on 2025-02-24 00:30
|
|
2
|
+
|
|
3
|
+
import django.db.models.deletion
|
|
4
|
+
from django.db import migrations, models
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
('irie_apps_inventory', '0003_asset_notes'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.CreateModel(
|
|
15
|
+
name='Datum',
|
|
16
|
+
fields=[
|
|
17
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
18
|
+
('name', models.CharField(max_length=100)),
|
|
19
|
+
],
|
|
20
|
+
),
|
|
21
|
+
migrations.CreateModel(
|
|
22
|
+
name='SensorGroup',
|
|
23
|
+
fields=[
|
|
24
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
25
|
+
('name', models.CharField(max_length=100)),
|
|
26
|
+
('asset', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='irie_apps_inventory.asset')),
|
|
27
|
+
('datum', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='irie_apps_inventory.datum')),
|
|
28
|
+
],
|
|
29
|
+
),
|
|
30
|
+
migrations.CreateModel(
|
|
31
|
+
name='Sensor',
|
|
32
|
+
fields=[
|
|
33
|
+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
34
|
+
('x', models.FloatField()),
|
|
35
|
+
('y', models.FloatField()),
|
|
36
|
+
('z', models.FloatField()),
|
|
37
|
+
('dx', models.FloatField()),
|
|
38
|
+
('dy', models.FloatField()),
|
|
39
|
+
('dz', models.FloatField()),
|
|
40
|
+
('group', models.ForeignKey(on_delete=django.db.models.deletion.RESTRICT, to='irie_apps_inventory.sensorgroup')),
|
|
41
|
+
],
|
|
42
|
+
),
|
|
43
|
+
]
|
irie/apps/inventory/models.py
CHANGED
|
@@ -22,23 +22,6 @@ class Corridor(models.Model):
|
|
|
22
22
|
return f"{self.name} ({self.assets.count()})"
|
|
23
23
|
|
|
24
24
|
|
|
25
|
-
class _Sensor: # (models.Model):
|
|
26
|
-
class Status:
|
|
27
|
-
active: bool
|
|
28
|
-
|
|
29
|
-
status = None
|
|
30
|
-
|
|
31
|
-
class Station: # (models.Model):
|
|
32
|
-
sensors = None
|
|
33
|
-
assets = None
|
|
34
|
-
network = None
|
|
35
|
-
events = None
|
|
36
|
-
|
|
37
|
-
class Vulnerability: # (models.Model):
|
|
38
|
-
type = None
|
|
39
|
-
asset = None
|
|
40
|
-
notes = models.CharField(max_length=1024, blank=True, null=True)
|
|
41
|
-
|
|
42
25
|
class Asset(models.Model):
|
|
43
26
|
id = models.BigAutoField(primary_key=True)
|
|
44
27
|
cesmd = models.CharField(max_length=7, blank=True, null=True)
|
|
@@ -112,3 +95,43 @@ class Asset(models.Model):
|
|
|
112
95
|
class Meta:
|
|
113
96
|
ordering = ["-id"]
|
|
114
97
|
|
|
98
|
+
|
|
99
|
+
class Vulnerability: # (models.Model):
|
|
100
|
+
type = None
|
|
101
|
+
asset = None
|
|
102
|
+
notes = models.CharField(max_length=1024, blank=True, null=True)
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class Datum(models.Model):
|
|
106
|
+
name = models.CharField(max_length=100)
|
|
107
|
+
def __str__(self):
|
|
108
|
+
return f"{self.name}"
|
|
109
|
+
|
|
110
|
+
class SensorGroup(models.Model):
|
|
111
|
+
"""
|
|
112
|
+
"""
|
|
113
|
+
name = models.CharField(max_length=100)
|
|
114
|
+
# sensors; access with .sensor_set.all()
|
|
115
|
+
asset = models.ForeignKey(Asset, on_delete=models.RESTRICT)
|
|
116
|
+
datum = models.ForeignKey(Datum, on_delete=models.RESTRICT)
|
|
117
|
+
# network = models.CharField(max_length=100)
|
|
118
|
+
# events = None
|
|
119
|
+
def __str__(self):
|
|
120
|
+
return f"{self.name} - {self.datum}"
|
|
121
|
+
|
|
122
|
+
class Sensor(models.Model):
|
|
123
|
+
# class Status:
|
|
124
|
+
# active: bool
|
|
125
|
+
|
|
126
|
+
x = models.FloatField()
|
|
127
|
+
y = models.FloatField()
|
|
128
|
+
z = models.FloatField()
|
|
129
|
+
|
|
130
|
+
dx = models.FloatField()
|
|
131
|
+
dy = models.FloatField()
|
|
132
|
+
dz = models.FloatField()
|
|
133
|
+
|
|
134
|
+
group = models.ForeignKey(SensorGroup, related_name="sensors", on_delete=models.RESTRICT)
|
|
135
|
+
|
|
136
|
+
def __str__(self):
|
|
137
|
+
return f"Sensor {self.id} ({self.group.name})"
|
irie/apps/inventory/urls.py
CHANGED
|
@@ -23,6 +23,8 @@ urlpatterns = [
|
|
|
23
23
|
"^evaluations/(?P<event>[0-9 A-Z-]*)/(?P<cesmd>[0-9 A-Z-]*)/.*", views.asset_event_summary,
|
|
24
24
|
name="asset_event_summary"
|
|
25
25
|
),
|
|
26
|
-
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/evaluations/$",
|
|
27
|
-
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/$",
|
|
26
|
+
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/evaluations/$", views.asset_evals, name="asset_evals"),
|
|
27
|
+
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/$", views.asset_profile, name="asset_profile"),
|
|
28
|
+
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/sensors/$", views.asset_sensors, name="asset_sensors"),
|
|
29
|
+
re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/sensor_upload", views.sensor_upload, name="sensor_upload"),
|
|
28
30
|
]
|
irie/apps/inventory/views.py
CHANGED
|
@@ -17,10 +17,13 @@ from django.core.paginator import Paginator
|
|
|
17
17
|
from django.template import loader
|
|
18
18
|
from django.http import HttpResponse
|
|
19
19
|
from django.contrib.auth.decorators import login_required
|
|
20
|
+
from django.shortcuts import render, redirect, get_object_or_404
|
|
21
|
+
from django.forms import formset_factory
|
|
20
22
|
|
|
21
23
|
from irie.apps.events.models import EventRecord
|
|
22
24
|
from irie.apps.site.view_utils import raise404
|
|
23
|
-
from irie.apps.inventory.models import Asset
|
|
25
|
+
from irie.apps.inventory.models import Asset, SensorGroup, Sensor
|
|
26
|
+
from irie.apps.inventory.forms import SensorGroupForm, SensorForm, SensorFormSet
|
|
24
27
|
from .filters import AssetFilter
|
|
25
28
|
# Predictors
|
|
26
29
|
from irie.apps.prediction.runners.hazus import hazus_fragility
|
|
@@ -339,6 +342,49 @@ def _make_tables(asset):
|
|
|
339
342
|
return tables
|
|
340
343
|
|
|
341
344
|
|
|
345
|
+
@login_required(login_url="/login/")
|
|
346
|
+
def asset_sensors(request, calid):
|
|
347
|
+
asset = Asset.objects.get(calid=calid)
|
|
348
|
+
context = {
|
|
349
|
+
"asset": asset,
|
|
350
|
+
"groups": SensorGroup.objects.filter(asset=asset)
|
|
351
|
+
}
|
|
352
|
+
html_template = loader.get_template("inventory/asset-sensors.html")
|
|
353
|
+
return HttpResponse(html_template.render(context, request))
|
|
354
|
+
|
|
355
|
+
@login_required(login_url="/login/")
|
|
356
|
+
def sensor_upload(request, calid):
|
|
357
|
+
asset = get_object_or_404(Asset, calid=calid) # Fetch the asset using calid
|
|
358
|
+
SensorFormSet = formset_factory(SensorForm, extra=1, can_delete=False)
|
|
359
|
+
|
|
360
|
+
if request.method == "POST":
|
|
361
|
+
group_form = SensorGroupForm(request.POST)
|
|
362
|
+
formset = SensorFormSet(request.POST)
|
|
363
|
+
|
|
364
|
+
if group_form.is_valid() and formset.is_valid():
|
|
365
|
+
sensor_group = group_form.save(commit=False)
|
|
366
|
+
sensor_group.asset = asset # Assign the asset
|
|
367
|
+
sensor_group.save()
|
|
368
|
+
|
|
369
|
+
for form in formset:
|
|
370
|
+
if form.cleaned_data and not form.cleaned_data.get('DELETE', False):
|
|
371
|
+
sensor = form.save(commit=False)
|
|
372
|
+
sensor.group = sensor_group
|
|
373
|
+
sensor.save()
|
|
374
|
+
|
|
375
|
+
return redirect('asset_sensors', calid=calid) # Redirect after successful submission
|
|
376
|
+
|
|
377
|
+
else:
|
|
378
|
+
group_form = SensorGroupForm()
|
|
379
|
+
formset = SensorFormSet()
|
|
380
|
+
|
|
381
|
+
return render(request, "inventory/sensor-upload.html", {
|
|
382
|
+
"group_form": group_form,
|
|
383
|
+
"formset": formset,
|
|
384
|
+
"asset": asset # Pass asset to template if needed
|
|
385
|
+
})
|
|
386
|
+
|
|
387
|
+
|
|
342
388
|
def _filter_asset_table(request):
|
|
343
389
|
# Copy the GET parameters and remove the 'page' parameter
|
|
344
390
|
page_query = request.GET.copy()
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
<li class="nav-item {% if 'events' in segment %} active {% endif %}">
|
|
66
66
|
<span
|
|
67
67
|
class="nav-link collapsed d-flex justify-content-between align-items-center"
|
|
68
|
-
data-bs-toggle="collapse" data-bs-target="#submenu-
|
|
68
|
+
data-bs-toggle="collapse" data-bs-target="#submenu-events">
|
|
69
69
|
<span>
|
|
70
70
|
<span class="sidebar-icon">
|
|
71
71
|
<svg class="icon icon-xs me-2" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M5 4a3 3 0 00-3 3v6a3 3 0 003 3h10a3 3 0 003-3V7a3 3 0 00-3-3H5zm-1 9v-1h5v2H5a1 1 0 01-1-1zm7 1h4a1 1 0 001-1v-1h-5v2zm0-4h5V8h-5v2zM9 8H4v2h5V8z" clip-rule="evenodd"></path></svg>
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
</span>
|
|
79
79
|
</span>
|
|
80
80
|
<div class="multi-level collapse {% if 'events' in segment %} show {% endif %}"
|
|
81
|
-
role="list" id="submenu-
|
|
81
|
+
role="list" id="submenu-events" aria-expanded="false">
|
|
82
82
|
<ul class="flex-column nav">
|
|
83
83
|
<li class="nav-item {% if 'cgs' in segment %} active {% endif %}">
|
|
84
84
|
<a class="nav-link" href="{% url 'event_table' %}">
|
|
@@ -99,15 +99,34 @@
|
|
|
99
99
|
</a>
|
|
100
100
|
</li>
|
|
101
101
|
|
|
102
|
-
<li class="nav-item {% if '
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
102
|
+
<li class="nav-item {% if 'applications' in segment %} active {% endif %}">
|
|
103
|
+
<span
|
|
104
|
+
class="nav-link collapsed d-flex justify-content-between align-items-center"
|
|
105
|
+
data-bs-toggle="collapse" data-bs-target="#submenu-apps">
|
|
106
|
+
<span>
|
|
107
|
+
<span class="sidebar-icon">
|
|
108
|
+
<svg class="icon icon-xs me-2" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M5 4a3 3 0 00-3 3v6a3 3 0 003 3h10a3 3 0 003-3V7a3 3 0 00-3-3H5zm-1 9v-1h5v2H5a1 1 0 01-1-1zm7 1h4a1 1 0 001-1v-1h-5v2zm0-4h5V8h-5v2zM9 8H4v2h5V8z" clip-rule="evenodd"></path></svg>
|
|
109
|
+
</span>
|
|
110
|
+
<span title="Listing of processed events"
|
|
111
|
+
class="sidebar-text">Applications</span>
|
|
112
|
+
</span>
|
|
113
|
+
<span class="link-arrow">
|
|
114
|
+
<svg class="icon icon-sm" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" clip-rule="evenodd"></path></svg>
|
|
115
|
+
</span>
|
|
116
|
+
</span>
|
|
117
|
+
<div class="multi-level collapse {% if app.url in irie_url_name %} show {% endif %}"
|
|
118
|
+
role="list" id="submenu-apps" aria-expanded="false">
|
|
119
|
+
<ul class="flex-column nav">
|
|
120
|
+
{% for app in irie_apps %}
|
|
121
|
+
<li class="nav-item {% if app.url in irie_url_name %} active {% endif %}">
|
|
122
|
+
<a class="nav-link" href="{% url app.url %}">
|
|
123
|
+
<span class="sidebar-text">{{ app.name }}</span>
|
|
124
|
+
</a>
|
|
125
|
+
</li>
|
|
126
|
+
{% endfor %}
|
|
127
|
+
</ul>
|
|
128
|
+
</div>
|
|
109
129
|
</li>
|
|
110
|
-
|
|
111
130
|
<li role="separator" class="dropdown-divider mt-4 mb-3 border-gray-700"></li>
|
|
112
131
|
|
|
113
132
|
|
|
@@ -135,6 +135,14 @@
|
|
|
135
135
|
xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"></path></svg>
|
|
136
136
|
Predictors
|
|
137
137
|
</a>
|
|
138
|
+
<a role="button"
|
|
139
|
+
href="{% url 'asset_sensors' calid=asset.calid %}"
|
|
140
|
+
class="btn btn-sm btn-outline-primary d-inline-flex align-items-center">
|
|
141
|
+
<svg class="icon icon-xs me-2" fill="none"
|
|
142
|
+
stroke="currentColor" viewBox="0 0 24 24"
|
|
143
|
+
xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6"></path></svg>
|
|
144
|
+
Sensors
|
|
145
|
+
</a>
|
|
138
146
|
</div>
|
|
139
147
|
</div>
|
|
140
148
|
{% if True %}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
===----------------------------------------------------------------------===#
|
|
3
|
+
|
|
4
|
+
STAIRLab -- STructural Artificial Intelligence Laboratory
|
|
5
|
+
|
|
6
|
+
===----------------------------------------------------------------------===#
|
|
7
|
+
|
|
8
|
+
Claudio Perez, Summer 2023
|
|
9
|
+
Chrystal Chern, Spring 2025
|
|
10
|
+
|
|
11
|
+
-->
|
|
12
|
+
|
|
13
|
+
{% extends "layouts/base.html" %}
|
|
14
|
+
{% block title %} {{ asset.calid }} Sensors {% endblock %}
|
|
15
|
+
|
|
16
|
+
{% block content %}
|
|
17
|
+
<h1><code>{{ asset.calid }}</code> Sensors</h1>
|
|
18
|
+
<div class="py-4 align-right">
|
|
19
|
+
<a role="button" class="button btn btn-outline-white btn-gray-600 text-white"
|
|
20
|
+
href="{% url 'asset_profile' calid=asset.calid %}" class="me-1">Back to Structure</a>
|
|
21
|
+
<a role="button" class="button btn btn-outline-white btn-gray-600 text-white"
|
|
22
|
+
href="{% url 'sensor_upload' calid=asset.calid %}" class="me-1">Add SensorGroup</a>
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
<div class="col-10">
|
|
27
|
+
{% for group in groups %}
|
|
28
|
+
<div class="card">
|
|
29
|
+
<div class="card-header">
|
|
30
|
+
{{group.name}}
|
|
31
|
+
</div>
|
|
32
|
+
<div class="card-body">
|
|
33
|
+
<table>
|
|
34
|
+
{% for sensor in group.sensors.all %}
|
|
35
|
+
<tr>
|
|
36
|
+
<td>{{ sensor }} </td><td>{{sensor.x}}</td><td>{{sensor.y}}</td><td>{{sensor.z}}</td>
|
|
37
|
+
</tr>
|
|
38
|
+
{% endfor %}
|
|
39
|
+
</table>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
{% endfor %}
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
{% endblock %}
|
|
46
|
+
|
|
47
|
+
{% block javascripts %}
|
|
48
|
+
|
|
49
|
+
{% endblock %}
|
|
50
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
===----------------------------------------------------------------------===#
|
|
3
|
+
|
|
4
|
+
STAIRLab -- STructural Artificial Intelligence Laboratory
|
|
5
|
+
|
|
6
|
+
===----------------------------------------------------------------------===#
|
|
7
|
+
|
|
8
|
+
Chrystal Chern, Spring 2025
|
|
9
|
+
|
|
10
|
+
-->
|
|
11
|
+
{% extends "layouts/base.html" %}
|
|
12
|
+
{% block title %} Add Sensor Group to {{ asset.calid }} {% endblock %}
|
|
13
|
+
|
|
14
|
+
{% block content %}
|
|
15
|
+
|
|
16
|
+
<h1>Add Sensor Group to <code>{{ asset.calid }}</code></h1>
|
|
17
|
+
|
|
18
|
+
<form method="post">
|
|
19
|
+
{% csrf_token %}
|
|
20
|
+
|
|
21
|
+
<fieldset>
|
|
22
|
+
<legend>Sensor Group</legend>
|
|
23
|
+
{{ group_form.as_p }}
|
|
24
|
+
</fieldset>
|
|
25
|
+
|
|
26
|
+
<fieldset>
|
|
27
|
+
<legend>Sensors</legend>
|
|
28
|
+
{{ formset.management_form }}
|
|
29
|
+
<div id="formset-container" class="container">
|
|
30
|
+
{% for form in formset %}
|
|
31
|
+
<div class="sensor-form">
|
|
32
|
+
<div class="row"><div class="col-md-6 d-flex align-items-center mb-3">
|
|
33
|
+
<div class="input-group">
|
|
34
|
+
<span class="input-group-text col-md-2">{{ form.x.label }}</span>
|
|
35
|
+
<input id="{{form.x.html_name}}" type="number" name="{{form.x.html_name}}" class="form-control col-md-4"></input>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="input-group">
|
|
38
|
+
<span class="input-group-text col-md-2">{{ form.y.label }}</span>
|
|
39
|
+
<input id="{{form.y.html_name}}" type="number" name="{{form.y.html_name}}" class="form-control col-md-4"></input>
|
|
40
|
+
</div>
|
|
41
|
+
<div class="input-group">
|
|
42
|
+
<span class="input-group-text col-md-2">{{ form.z.label }}</span>
|
|
43
|
+
<input id="{{form.z.html_name}}" type="number" name="{{form.z.html_name}}" class="form-control col-md-4"></input>
|
|
44
|
+
</div>
|
|
45
|
+
</div></div>
|
|
46
|
+
<div class="row"><div class="col-md-4 d-flex align-items-center mb-3">
|
|
47
|
+
<div class="form-group">
|
|
48
|
+
{{ form.dx.label }}: {{ form.dx }}
|
|
49
|
+
</div>
|
|
50
|
+
<div class="form-group">
|
|
51
|
+
{{ form.dy.label }}: {{ form.dy }}
|
|
52
|
+
</div>
|
|
53
|
+
<div class="form-group">
|
|
54
|
+
{{ form.dz.label }}: {{ form.dz }}
|
|
55
|
+
</div>
|
|
56
|
+
</div></div>
|
|
57
|
+
|
|
58
|
+
<button class="remove-form btn btn-danger btn-sm ml-2">Remove</button>
|
|
59
|
+
</div>
|
|
60
|
+
{% endfor %}
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<button id="add-form" class="btn btn-sm button btn-outline-white btn-gray-600 text-white">Add Sensor</button>
|
|
64
|
+
</fieldset>
|
|
65
|
+
|
|
66
|
+
<button type="submit" class="btn btn-sm button btn-success btn-outline-white ">Submit</button>
|
|
67
|
+
</form>
|
|
68
|
+
{%endblock content %}
|
|
69
|
+
{% block javascripts %}
|
|
70
|
+
|
|
71
|
+
<script>
|
|
72
|
+
document.addEventListener("DOMContentLoaded", () => {
|
|
73
|
+
const formsetContainer = document.getElementById("formset-container");
|
|
74
|
+
const addButton = document.getElementById("add-form");
|
|
75
|
+
const totalForms = document.getElementById("id_form-TOTAL_FORMS");
|
|
76
|
+
|
|
77
|
+
function updateRemoveButtons() {
|
|
78
|
+
let forms = document.querySelectorAll(".sensor-form");
|
|
79
|
+
|
|
80
|
+
forms.forEach((form, index) => {
|
|
81
|
+
let removeButton = form.querySelector(".remove-form");
|
|
82
|
+
if (forms.length > 1)
|
|
83
|
+
removeButton.style.display = "inline-block";
|
|
84
|
+
else
|
|
85
|
+
removeButton.style.display = "none";
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
addButton.addEventListener("click", (e) => {
|
|
90
|
+
e.preventDefault();
|
|
91
|
+
let formNum = parseInt(totalForms.value);
|
|
92
|
+
let newForm = document.querySelector(".sensor-form").cloneNode(true);
|
|
93
|
+
|
|
94
|
+
// Update form attributes
|
|
95
|
+
newForm.innerHTML = newForm.innerHTML.replace(/form-(\d+)-/g, `form-${formNum}-`);
|
|
96
|
+
formsetContainer.appendChild(newForm);
|
|
97
|
+
|
|
98
|
+
// Increment the management form count
|
|
99
|
+
totalForms.value = formNum + 1;
|
|
100
|
+
|
|
101
|
+
updateRemoveButtons();
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
formsetContainer.addEventListener("click", (e) => {
|
|
105
|
+
if (e.target.classList.contains("remove-form")) {
|
|
106
|
+
e.preventDefault();
|
|
107
|
+
if (document.querySelectorAll(".sensor-form").length > 1) {
|
|
108
|
+
e.target.closest(".sensor-form").remove();
|
|
109
|
+
totalForms.value = document.querySelectorAll(".sensor-form").length;
|
|
110
|
+
updateRemoveButtons();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
// Ensure the correct remove button state on load
|
|
116
|
+
updateRemoveButtons();
|
|
117
|
+
});
|
|
118
|
+
</script>
|
|
119
|
+
{% endblock javascripts %}
|
irie/core/settings.py
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"1": "State Name", "2": "Highway Agency District", "3": "County Name", "4": "Place Code", "5A": "Record Type", "5B": "Route Signing Prefix Code", "5C": "Designated Level of Service Code", "5D": "Route Number", "5E": "Directional Suffix Code", "6A": "Features Intersected", "7": "Facility Carried By Structure", "8": "Structure Number", "9": "Location", "10": "Inventory Route - Minimum Vertical Clearance", "11": "Mile Point", "12": "Base Highway Network", "13A": "LRS Inventory Route", "13B": "Subroute Number", "16": "Latitude", "17": "Longitude", "19": "Bypass or Detour Length", "20": "Toll Status", "21": "Maintenance Responsibility", "22": "Owner Agency", "26": "Functional Class Of Inventory Route", "27": "Year Built", "28A": "Lanes On the Structure", "28B": "Lanes Under the Structure", "29": "Average Daily Traffic", "30": "Year of Average Daily Traffic", "31": "Design Load Descriptor", "32": "Approach Roadway Width", "33": "Bridge Median Code", "34": "Skew Angle", "35": "Structure Flared", "36A": "Bridge Railings", "36B": "Transitions", "36C": "Approach Guardrail", "36D": "Bridge Guardrail Ends", "37": "Historical Significance Code", "38": "Navigation Control Code", "39": "Navigation Vertical Clearance", "40": "Navigation Horizontal Clearance", "41": "Structure Operational Status Code", "42A": "Type of Service on Bridge Code", "42B": "Type Of Service Under Bridge Code", "43A": "Main Span Material", "43B": "Main Span Design", "44A": "Approach Spans Material", "44B": "Approach Spans Design", "45": "Number of Spans in Main Unit", "46": "Number of Approach Spans", "47": "Inventory Route Total Horizontal Clearance", "48": "Length of Maximum Span", "49": "Structure Length", "50A": "Left Curb/Sidewalk Width", "50B": "Right Curb/Sidewalk Width", "51": "Bridge Roadway Width Curb to Curb", "52": "Deck Width - Out to Out", "53": "Minimum Vertical Clearance Over Bridge Roadway", "54A": "Minimum Vertical Underclearance Reference Feature", "54B": "Minimum Vertical Underclearance", "55A": "Minimum Lateral Underclearance Reference Feature", "55B": "Minimum Lateral Underclearance on Right", "56": "Minimum Lateral Underclearance on Left", "58": "Deck Condition Rating", "59": "Superstructure Condition Rating", "60": "Substructure Condition Rating", "61": "Channel and Channel Protection Condition Rating", "62": "Culverts Condition Rating", "63": "Operating Rating Method Code", "64": "Operating Rating", "65": "Inventory Rating Method Code", "66": "Inventory Rating", "67": "Structural Evaluation Appraisal", "68": "Deck Geometry Appraisal", "69": "Underclearance Appraisal Vertical and Horizontal", "70": "Bridge Posting Code", "71": "Waterway Adequacy Appraisal", "72": "Approach Alignment Appraisal", "75A": "Type of Work Proposed", "75B": "Work Done By", "76": "Length of Structure Improvement", "90": "Inspection Date", "91": "Designated Inspection Frequency", "92A": "Fracture Critical Details", "92B": "Underwater Inspection", "92C": "Other Special Inspection", "93A": "Fracture Critical Detail Date", "93B": "Underwater Inspection Date", "93C": "Other Special Inspection Date", "94": "Bridge Improvement Cost", "95": "Roadway Improvement Cost", "96": "Total Project Cost", "97": "Year of Improvement Cost Estimate", "98A": "Neighboring State Name", "98B": "Neighboring State Percent Responsibility", "99": "Border Bridge Structure Number", "100": "STRAHNET Highway Designation", "101": "Parallel Structure Designation Code", "102": "Direction of Traffic Code", "103": "Temporary Structure Designation Code", "104": "Inventory Route NHS Code", "105": "Federal Lands Highways Code", "106": "Year Reconstructed", "107": "Deck Structure Type Code", "108A": "Wearing Surface Type Code", "108B": "Membrane Type Code", "108C": "Deck Protection Code", "109": "Average Daily Truck Traffic (Percent ADT)", "110": "Designated National Truck Network Code", "111": "Pier Abutment Protection Code", "112": "NBIS Minimum Bridge Length", "113": "Scour Critical Bridge Value", "114": "Future Average Daily Traffic", "115": "Year of Future Average Daily Traffic", "116": "Minimum Vertical Clearance - Lift Bridge", "Computed": "Average Daily Truck Traffic (Volume)", "CAT29": "Deck Area", "CAT10": "Bridge Condition", "CAT23": "Condition Code", "null": "City (InfoBridge Place Code-Name)"}
|
irie/init/getNBIData.py
CHANGED
|
@@ -12,6 +12,18 @@
|
|
|
12
12
|
#
|
|
13
13
|
# Claudio M. Perez
|
|
14
14
|
#
|
|
15
|
+
# TODO:
|
|
16
|
+
#
|
|
17
|
+
# - Add option for "SELECTED_TAB": "NBETab",
|
|
18
|
+
#
|
|
19
|
+
# - Perhaps add something like:
|
|
20
|
+
# --filter-calid calids.txt
|
|
21
|
+
# This will be useful for testing, eg, (chrystal's first version)
|
|
22
|
+
# python getNBIData.py yearly.json --filter-calid <(echo "33 0214L")
|
|
23
|
+
#
|
|
24
|
+
# or
|
|
25
|
+
# python getNBIData.py | python getNBIData.py /dev/stdin <(echo "33 0214L")
|
|
26
|
+
#
|
|
15
27
|
import sys
|
|
16
28
|
import json
|
|
17
29
|
import requests
|
|
@@ -98,10 +98,14 @@ def load_assets(NBI_DATA):
|
|
|
98
98
|
|
|
99
99
|
# 1. Collect routes of interest
|
|
100
100
|
ROUTES = set()
|
|
101
|
-
for
|
|
102
|
-
if "calid" not in bridge:
|
|
101
|
+
for calid in CESMD: #BRIDGES.values():
|
|
102
|
+
# if "calid" not in bridge:
|
|
103
|
+
try:
|
|
104
|
+
calid = Asset.objects.get(calid=calid).calid
|
|
105
|
+
except:
|
|
103
106
|
continue
|
|
104
|
-
|
|
107
|
+
|
|
108
|
+
calid = calid.split(" ")[0].replace("-", " ")
|
|
105
109
|
nbi = get_nbi(calid, missing_ok=True)
|
|
106
110
|
if nbi is not None:
|
|
107
111
|
ROUTES.add(get_route(nbi))
|
|
@@ -112,7 +116,7 @@ def load_assets(NBI_DATA):
|
|
|
112
116
|
for item in NBI_DATA:
|
|
113
117
|
calid = item.replace(" ", "-")
|
|
114
118
|
nbi = get_nbi(item)
|
|
115
|
-
config = find_bridge(BRIDGES, calid)
|
|
119
|
+
config = None # find_bridge(BRIDGES, calid)
|
|
116
120
|
try:
|
|
117
121
|
if skip(nbi, ROUTES) or item == "33 0726L":
|
|
118
122
|
continue
|
|
@@ -143,9 +147,9 @@ def load_assets(NBI_DATA):
|
|
|
143
147
|
|
|
144
148
|
count += 1
|
|
145
149
|
|
|
146
|
-
if config:
|
|
147
|
-
|
|
148
|
-
|
|
150
|
+
# if config:
|
|
151
|
+
# asset.bridge_sensors = json.dumps(config["accelerometers"]["bridge_channels"])
|
|
152
|
+
# asset.ground_sensors = json.dumps(config["accelerometers"]["ground_channels"])
|
|
149
153
|
|
|
150
154
|
asset.save()
|
|
151
155
|
|
|
@@ -13,18 +13,21 @@ with open(DATA/"cgs_data.json") as f:
|
|
|
13
13
|
|
|
14
14
|
class Command(BaseCommand):
|
|
15
15
|
def handle(self, *args, **kwargs):
|
|
16
|
-
with open(DATA/"cgs-stations.json") as f:
|
|
17
|
-
|
|
16
|
+
# with open(DATA/"cgs-stations.json") as f:
|
|
17
|
+
# stations = json.load(f)
|
|
18
18
|
|
|
19
19
|
count = 0
|
|
20
20
|
try:
|
|
21
|
-
for
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
for calid, (cesmd, route, name) in CESMD.items():
|
|
22
|
+
try:
|
|
23
|
+
asset = Asset.objects.get(calid=calid)
|
|
24
|
+
except Asset.DoesNotExist:
|
|
25
|
+
asset = Asset()
|
|
26
|
+
asset.is_complete = False
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
asset.cesmd =
|
|
27
|
-
asset.
|
|
28
|
+
asset.name = name
|
|
29
|
+
asset.cesmd = cesmd
|
|
30
|
+
asset.calid = calid
|
|
28
31
|
asset.cgs_data = CGS_DATA.get(cesmd, {})
|
|
29
32
|
asset.save()
|
|
30
33
|
print(asset)
|
|
@@ -2,7 +2,7 @@ irie/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
2
2
|
irie/__main__.py,sha256=JTbP1tFc8z2e_wXuurYT9MBe3pLt9UwY_HHnuEZvI2c,501
|
|
3
3
|
irie/apps/__init__.py,sha256=0HD7vRzfFqSPsnJF15Hts06RR-MBlJcUMHaipYEkYYk,229
|
|
4
4
|
irie/apps/config.py,sha256=VJW1NKjouIMBejJDbMYqmIUzZsnORQk02tuYO7bxo4s,399
|
|
5
|
-
irie/apps/context_processors.py,sha256=
|
|
5
|
+
irie/apps/context_processors.py,sha256=iBloyvMODcI86mQFnW0OS_rDEMSy8zNW3f_O1OQzQ2o,375
|
|
6
6
|
irie/apps/sitemaps.py,sha256=yYjh_IXH2wBcIaSBG9-3BA8H_ijgkP0BWEFJAPpIoWc,572
|
|
7
7
|
irie/apps/admin_dash/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
8
8
|
irie/apps/admin_dash/admin.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -57,22 +57,23 @@ irie/apps/events/migrations/0003_hazardevent.py,sha256=TEaMSJz16BpDXeMXo4jwD6LAL
|
|
|
57
57
|
irie/apps/events/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
58
|
irie/apps/inventory/CESMD.py,sha256=cLtuBhSK14M1VwirCs-oeSOoB4CFFYcTnh38egQqPYg,2549
|
|
59
59
|
irie/apps/inventory/__init__.py,sha256=wkkNngGxgYcCM745-rlvP6ynrI0b0QN3aWmLWDsR8zU,230
|
|
60
|
-
irie/apps/inventory/admin.py,sha256=
|
|
60
|
+
irie/apps/inventory/admin.py,sha256=e_W8ls_ARLLf8rn3oJd-YkPdTGMIrcN-mRrxk2BcY3c,472
|
|
61
61
|
irie/apps/inventory/apps.py,sha256=bZ6qYIwPMG4_4IeLfg9N4WuZAEgEVj84oOswV-7_MAI,424
|
|
62
62
|
irie/apps/inventory/calid.py,sha256=3L8MbPIGOE3kzDnqeyY055pRBiF2O2l0cmpuDbTsdTg,3014
|
|
63
63
|
irie/apps/inventory/fields.py,sha256=J3nTImPsuCeiOWBizSL4tnuKs36sPfXALNTKEZY-wVg,79
|
|
64
64
|
irie/apps/inventory/filters.py,sha256=8ge94J5OlGhLRIo6EtBYVe2c9QxW7YCBLxJzfoFHzSg,2185
|
|
65
|
-
irie/apps/inventory/forms.py,sha256=
|
|
66
|
-
irie/apps/inventory/models.py,sha256=
|
|
65
|
+
irie/apps/inventory/forms.py,sha256=0caWKxq7cU_z7XM2jZLqsGNDL01IlltWvFCCi9a0Wzc,1005
|
|
66
|
+
irie/apps/inventory/models.py,sha256=WQaRQR4S9Qca00nHH8a-ZsYHEd7uupBUgNIe0H3ss2c,4638
|
|
67
67
|
irie/apps/inventory/sitemaps.py,sha256=Nha1MTsIH_ad7JyoxwonPytp7MNuEhDNszkEUOmlN0o,826
|
|
68
68
|
irie/apps/inventory/tables.py,sha256=vZdPOcbN1ibuWXqLwbBUoQw9iavwa1GJ5fd83k8bu7Y,27874
|
|
69
69
|
irie/apps/inventory/traffic.py,sha256=B3PHqn2Pm4AEdUZ_tuA16fuFruo2rm5waMBwLQyF-9g,4490337
|
|
70
|
-
irie/apps/inventory/urls.py,sha256=
|
|
71
|
-
irie/apps/inventory/views.py,sha256=
|
|
70
|
+
irie/apps/inventory/urls.py,sha256=bH63Y2jk-DzDDTiFdCDb5YLXFvq3sRyJrMAz0z_niKs,1476
|
|
71
|
+
irie/apps/inventory/views.py,sha256=vlNzf_vClNekT6n4SPjpmNSMxMrTPAPTeltGY8JJjgw,19178
|
|
72
72
|
irie/apps/inventory/archive/arcGIS.py,sha256=vcfsy1be4edOXD1Z3rkUnq9QmCTol7dypdF816Q3B_w,34893
|
|
73
73
|
irie/apps/inventory/migrations/0001_initial.py,sha256=PwTHv4Q3gqWFha--8Zp9kUOh-cYalB14jXj7RVJUVnw,1786
|
|
74
74
|
irie/apps/inventory/migrations/0002_alter_asset_bridge_sensors_and_more.py,sha256=rPzWHkjg-ZCorVA_gv6MVb5F6LTLHcwlPwhBR1PxVr0,842
|
|
75
75
|
irie/apps/inventory/migrations/0003_asset_notes.py,sha256=N3p8PdRlwlED7z5gPAVVcDVsAjSLx-e0D4bx5eEwGlQ,436
|
|
76
|
+
irie/apps/inventory/migrations/0004_datum_sensorgroup_sensor.py,sha256=Jk_GdHN33ymWM6As1K95WC5JPdMg4bLNdWunVw6vEm4,1712
|
|
76
77
|
irie/apps/inventory/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
78
|
irie/apps/inventory/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
78
79
|
irie/apps/inventory/templatetags/get.py,sha256=ZVjFYv1uhjhcOQ8I5ukz7DuR6TXnbYuijPWKkgxacOM,134
|
|
@@ -388,16 +389,18 @@ irie/apps/templates/includes/navigation.html,sha256=iUblmqRGBT0GRCsvOUKy6a1O1buq
|
|
|
388
389
|
irie/apps/templates/includes/paginate.js,sha256=dAaL4uFQzEIbm61c_USEHlQLFkKc2ndJdR3bGzELtNc,3991
|
|
389
390
|
irie/apps/templates/includes/scripts.html,sha256=1Up6xJJSTpdLTJp0tDAa3JubevvSlicOE4_j1vEOkek,1190
|
|
390
391
|
irie/apps/templates/includes/settings-box.html,sha256=_YubYOyAJ8IldTgVlXP2wLLXpKpInp8hJ88FN6i6rmw,2488
|
|
391
|
-
irie/apps/templates/includes/sidebar.html,sha256=
|
|
392
|
+
irie/apps/templates/includes/sidebar.html,sha256=m2TahYwFnysqcLkK4ANYZhUf8xGVId_tiJFBKrQD4Cw,12386
|
|
392
393
|
irie/apps/templates/inventory/asset-evals.html,sha256=KzbdJJ7ildMpfO4IQDuXqGBcPzUTlYpJ_Y3Wg4payVc,2700
|
|
393
394
|
irie/apps/templates/inventory/asset-event-summary.html,sha256=r_Zl74thZlhUZiJYStycAhLFrq5DJ_YXJnmNG4yUHj0,50935
|
|
394
|
-
irie/apps/templates/inventory/asset-profile.html,sha256=
|
|
395
|
+
irie/apps/templates/inventory/asset-profile.html,sha256=_4xm-1OojZkSVtYSzYjAnD9Glvgcnpwpq4zCR0f0DGM,14104
|
|
396
|
+
irie/apps/templates/inventory/asset-sensors.html,sha256=ydAp4kPOiCitjd0wrUNjekcsvMS9bbW0VH-2BxGtxxo,1382
|
|
395
397
|
irie/apps/templates/inventory/asset-table.html,sha256=Ak_N_QDUgWzyffBBidJ8H0wLR3zX3wNHQm6MnZYbruQ,12589
|
|
396
398
|
irie/apps/templates/inventory/bridge-dashboard.html,sha256=67zrDlih3LOi9xFVwPVZZkgRT3DO-lE_qRL7q8Uz9GY,45472
|
|
397
399
|
irie/apps/templates/inventory/bridge.html,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
398
400
|
irie/apps/templates/inventory/dashboard.html,sha256=_qhFiPP6xN-UzZj5NuM5e9NxsgDHJkQ89oXN1cBwhj0,7505
|
|
399
401
|
irie/apps/templates/inventory/preamble.tex,sha256=TmRhIWg2-Pxj_e2OBctANRZPwU8RWMT3EZJFSa3R8HY,3547
|
|
400
402
|
irie/apps/templates/inventory/report.tex,sha256=A1XKpwknlBrAZjFzzxVIDwypjXteqzoCQiuo1tQANfw,45228
|
|
403
|
+
irie/apps/templates/inventory/sensor-upload.html,sha256=v-FOU9nyQUx5OgRCluaoYV1rmo9T0dMZscFSxH6hBKw,4769
|
|
401
404
|
irie/apps/templates/layouts/base-fullscreen.html,sha256=rDKXBySGTF65SUYc7YkrdbVqFFT_6a9HEvUcOQCetTg,2513
|
|
402
405
|
irie/apps/templates/layouts/base.html,sha256=phiHZX_CjuOhmkJgqyMAGTPdwm0qqrJCKZZwKLGTtQY,2387
|
|
403
406
|
irie/apps/templates/layouts/json-form.html,sha256=cT6Pd2168Z3p8RODS7SulUC79LnuzSs0EVLVxkGOXAo,1333
|
|
@@ -438,7 +441,7 @@ irie/apps/templates/site/transactions.html,sha256=-heynHR8PTt_C4P3IWmYG_VE1aGH68
|
|
|
438
441
|
irie/apps/templates/site/unused-dashboard-cards.html,sha256=DDNWrnIf4o0wj06WYH8YitTfemzARRcVafZ2iNFdJZM,14715
|
|
439
442
|
irie/core/__init__.py,sha256=wkkNngGxgYcCM745-rlvP6ynrI0b0QN3aWmLWDsR8zU,230
|
|
440
443
|
irie/core/asgi.py,sha256=3lVQKFRA4bznM2mWu5Cv24a5H9pfb6YU07q-I_TN0DM,395
|
|
441
|
-
irie/core/settings.py,sha256=
|
|
444
|
+
irie/core/settings.py,sha256=NQioOh_sdXa-_KsxsZaut5cDBh58kqR3laaUT_B11fE,6574
|
|
442
445
|
irie/core/urls.py,sha256=5_35Rh6LtnE_5TrHgsIZtVJeWpNXWwvqRfawYEWZCeE,1968
|
|
443
446
|
irie/core/wsgi.py,sha256=8dxK789vOoRWm0IatEhNqMgZhov9TlspjM6hOUbjg24,395
|
|
444
447
|
irie/init/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -447,22 +450,23 @@ irie/init/bridges.py,sha256=OBBKnLx2lmMKDfeR0C8CBSbnpnzO0lfokBypD2nEFcM,74198
|
|
|
447
450
|
irie/init/calid.py,sha256=Nmmv5e4rX-6_Uoo7FGRdU23p1NHKOWzPgUGoIulJMGk,8267
|
|
448
451
|
irie/init/getCGSData.py,sha256=iZG3Ab1Y_rhiliKCPNy0MZrKBsfEe6ShgSFz2ttvTUU,2916
|
|
449
452
|
irie/init/getCGSevents.py,sha256=4dBkFFJQrUs6gfl1Nj-_R2UOZj0B_T017a6tC7fUHOw,421
|
|
450
|
-
irie/init/getNBIData.py,sha256=
|
|
453
|
+
irie/init/getNBIData.py,sha256=WuconVGj-DyiOCFHWCYSt7PEVsVzFf_3XHjzWKuUWjg,8292
|
|
451
454
|
irie/init/hayward.zip,sha256=WECOnYLP_3EeKHQzdxm17MHTncF2QdgXI28Vm6Iopt0,124675
|
|
452
455
|
irie/init/data/cgs-stations.json,sha256=h-KKF-u31j_OQnQZQlmFzDjqgi0AcsPNzohn7bCNq0Q,105563
|
|
453
456
|
irie/init/data/cgs_data.json,sha256=l2lADALMXVLKY6jn-rvEZjYWcZjGHLk22ZudocdR81Q,27752
|
|
454
457
|
irie/init/data/nbi_codes-california.json,sha256=UPFbBzxY2NshREecsP4evCA8vdvXFRvG4rYT4_KHmQs,2398694
|
|
455
458
|
irie/init/data/nbi_data-california.json,sha256=nyslZbMf30WrtdyqCpMvxd-NNxNzFHtZX_TDWRZFob0,8534365
|
|
459
|
+
irie/init/data/nbi_definitions.json,sha256=NS3yNP1i1E_JXfGW_I_xOoNRsfeljDA5BZ_1h0Cu_1I,4301
|
|
456
460
|
irie/init/data/nbi/04.tar,sha256=ubRgxWBshe0cNKxftbEVyFeh1HcUmFarVL2BBHo9Tyk,1884160
|
|
457
461
|
irie/init/data/networks/soga_corridors.json,sha256=AQOUaKGNWkQxQKLfqphE9Qb_-NRmjN9IwK59SGjutxE,45496
|
|
458
|
-
irie/init/management/commands/init_assets.py,sha256=
|
|
459
|
-
irie/init/management/commands/init_cesmd.py,sha256=
|
|
462
|
+
irie/init/management/commands/init_assets.py,sha256=CGbB7eLlctfusbHal3v1LOs1y02ugJITrqhK7qE4XSs,5894
|
|
463
|
+
irie/init/management/commands/init_cesmd.py,sha256=IPuKYtrQEDb8C-TyUKpjbdjlLUrUkATW5dmtqEd7SVQ,1183
|
|
460
464
|
irie/init/management/commands/init_corridors.py,sha256=EzLk0HUiFxlco-2u0rypewOc9mAo_raqXC2_UCG8a_w,1241
|
|
461
465
|
irie/init/management/commands/init_predictors.py,sha256=jdD7rd8l2qxuUuR5GOYuHXp-ZQkAK477TefksBMdlOw,2362
|
|
462
466
|
irie/rest/__main__.py,sha256=6Nf_-Rr9zGmMyp_wqCFDO7ls9QPnPd9UyUgN17rIGYw,3680
|
|
463
467
|
irie/usgs/__main__.py,sha256=HiSvPn5IW5IqRiCk1qRRq5dCy3-7iISw7v1P_w2rLrk,5049
|
|
464
|
-
irie-0.0.
|
|
465
|
-
irie-0.0.
|
|
466
|
-
irie-0.0.
|
|
467
|
-
irie-0.0.
|
|
468
|
-
irie-0.0.
|
|
468
|
+
irie-0.0.36.dist-info/METADATA,sha256=prWBuMtqwIbh_eTlkxOyMcr30NG93g29Dc-Bf0K0TvQ,3207
|
|
469
|
+
irie-0.0.36.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
470
|
+
irie-0.0.36.dist-info/entry_points.txt,sha256=A_3h9wPBGfxGQ78_MGa-nO6Z0foxOYeAnIE47jxEztg,44
|
|
471
|
+
irie-0.0.36.dist-info/top_level.txt,sha256=zVCxi5E2nkISZPzKq8VEhWe_dGuPcefLYV1tYqQdwlY,5
|
|
472
|
+
irie-0.0.36.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|