irie 0.0.41__py3-none-any.whl → 0.0.42__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/inventory/filters.py +1 -1
- irie/apps/prediction/runners/hazus.py +33 -19
- irie/apps/static/assets/css/brace.css +0 -1
- irie/apps/static/assets/css/brace.css.map +1 -1
- irie/apps/static/assets/css/brace.min.css +1 -1
- irie/apps/static/assets/js/brace.js +2 -1
- irie/apps/templates/includes/scripts.html +10 -1
- irie/apps/templates/includes/sidebar.html +19 -11
- irie/apps/templates/layouts/base.html +1 -1
- irie/init/getNBIData2.py +304 -0
- irie/pull/nbi.py +304 -0
- {irie-0.0.41.dist-info → irie-0.0.42.dist-info}/METADATA +1 -1
- {irie-0.0.41.dist-info → irie-0.0.42.dist-info}/RECORD +16 -14
- {irie-0.0.41.dist-info → irie-0.0.42.dist-info}/WHEEL +0 -0
- {irie-0.0.41.dist-info → irie-0.0.42.dist-info}/entry_points.txt +0 -0
- {irie-0.0.41.dist-info → irie-0.0.42.dist-info}/top_level.txt +0 -0
|
@@ -91,7 +91,7 @@ document.addEventListener("DOMContentLoaded", function(event) {
|
|
|
91
91
|
el.style.color = 'url(' + el.getAttribute('data-color') + ')';
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
-
//Tooltips
|
|
94
|
+
// Tooltips
|
|
95
95
|
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
|
|
96
96
|
var tooltipList = tooltipTriggerList.map(
|
|
97
97
|
function (tooltipTriggerEl) {
|
|
@@ -681,6 +681,7 @@ window.addEventListener('resize', function(event) {
|
|
|
681
681
|
|
|
682
682
|
}
|
|
683
683
|
});
|
|
684
|
+
|
|
684
685
|
} else {
|
|
685
686
|
total.forEach(function(item, i) {
|
|
686
687
|
if (item.classList.contains('on-resize')) {
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
<!-- Core -->
|
|
3
3
|
<script src="{{ ASSETS_ROOT }}/vendor/@popperjs/core/dist/umd/popper.min.js"></script>
|
|
4
4
|
<script src="{{ ASSETS_ROOT }}/vendor/bootstrap/dist/js/bootstrap.min.js"></script>
|
|
5
|
+
<script>
|
|
6
|
+
var win = navigator.platform.indexOf('Win') > -1;
|
|
7
|
+
if (win && document.querySelector('#sidenav-scrollbar')) {
|
|
8
|
+
var options = {
|
|
9
|
+
damping: '0.5'
|
|
10
|
+
}
|
|
11
|
+
Scrollbar.init(document.querySelector('#sidenav-scrollbar'), options);
|
|
12
|
+
}
|
|
13
|
+
</script>
|
|
5
14
|
|
|
6
15
|
{% comment %}
|
|
7
16
|
<script src="{{ ASSETS_ROOT }}/vendor/onscreen/dist/on-screen.umd.min.js"></script>
|
|
@@ -18,7 +27,7 @@
|
|
|
18
27
|
<script src="{{ ASSETS_ROOT }}/vendor/notyf/notyf.min.js"></script>
|
|
19
28
|
|
|
20
29
|
<!-- Simplebar -->
|
|
21
|
-
<script src="{{ ASSETS_ROOT }}/vendor/simplebar/dist/simplebar.min.js"></script>
|
|
30
|
+
<!-- <script src="{{ ASSETS_ROOT }}/vendor/simplebar/dist/simplebar.min.js"></script> -->
|
|
22
31
|
|
|
23
32
|
<!-- Github buttons -->
|
|
24
33
|
<script async defer src="https://buttons.github.io/buttons.js"></script>
|
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
|
|
2
|
-
<nav class="navbar navbar-theme-
|
|
2
|
+
<nav class="navbar navbar-theme-secondary navbar-dark px-4 col-12 d-lg-none">
|
|
3
3
|
<a class="navbar-brand me-lg-5" href="/">
|
|
4
4
|
<img class="navbar-brand-light" src="{{ ASSETS_ROOT }}/img/brace2-no_text.png" alt="BRACE2 logo" />
|
|
5
5
|
</a>
|
|
6
6
|
<div class="d-flex align-items-center">
|
|
7
|
+
<a href="javascript:;" class="nav-link text-body p-0" id="iconNavbarSidenav">
|
|
8
|
+
<div class="sidenav-toggler-inner">
|
|
9
|
+
<i class="sidenav-toggler-line"></i>
|
|
10
|
+
<i class="sidenav-toggler-line"></i>
|
|
11
|
+
<i class="sidenav-toggler-line"></i>
|
|
12
|
+
</div>
|
|
13
|
+
</a>
|
|
7
14
|
<!-- <button class="navbar-toggler d-lg-none collapsed" type="button" -->
|
|
8
15
|
<button class="navbar-toggler collapsed" type="button"
|
|
9
16
|
data-bs-toggle="collapse"
|
|
@@ -15,16 +22,16 @@
|
|
|
15
22
|
</nav>
|
|
16
23
|
|
|
17
24
|
<!-- <nav id="sidebarMenu" class="sidebar d-lg-block bg-gray-800 text-white collapse" data-simplebar> -->
|
|
18
|
-
<aside id="
|
|
19
|
-
<div class="sidebar-inner px-4 pt-3">
|
|
25
|
+
<aside id="sidenav-main" style="z-index: 1;" class="sidebar navbar navbar-vertical navbar-expand-xs d-lg-block collapse bg-white ms-2 my-2 fixed-start">
|
|
26
|
+
<!-- <div class="sidebar-inner px-4 pt-3"> -->
|
|
27
|
+
<div class="collapse navbar-collapse sidebar-inner px-4 pt-3 w-auto" id="sidenav-collapse-main">
|
|
28
|
+
{% comment %}
|
|
20
29
|
<div class="user-card d-flex d-md-none align-items-center justify-content-between justify-content-md-center pb-4">
|
|
21
30
|
<div class="d-flex align-items-center">
|
|
22
|
-
{% comment %}
|
|
23
31
|
<div class="avatar-lg me-4">
|
|
24
32
|
<img src="{{ ASSETS_ROOT }}/img/team/profile-picture-3.jpg" class="card-img-top rounded-circle border-white"
|
|
25
33
|
alt="Profile picture">
|
|
26
34
|
</div>
|
|
27
|
-
{% endcomment %}
|
|
28
35
|
<div class="d-block">
|
|
29
36
|
<a href="/page-sign-in.html" class="btn btn-secondary btn-sm d-inline-flex align-items-center">
|
|
30
37
|
<svg class="icon icon-xxs me-1" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1"></path></svg>
|
|
@@ -40,9 +47,10 @@
|
|
|
40
47
|
</a>
|
|
41
48
|
</div>
|
|
42
49
|
</div>
|
|
43
|
-
|
|
50
|
+
{% endcomment %}
|
|
51
|
+
<ul class="nav navbar-nav flex-column pt-3 pt-md-0">
|
|
44
52
|
<li class="nav-item">
|
|
45
|
-
<a href="/" class="nav-link d-flex align-items-center">
|
|
53
|
+
<a href="/" class="nav-link d-flex align-items-center" data-bs-toggle="collapse">
|
|
46
54
|
<span class="sidebar-icon">
|
|
47
55
|
<img src="{{ ASSETS_ROOT }}/img/brace2-no_text.png" height="20" width="20" alt="BRACE2 Logo">
|
|
48
56
|
</span>
|
|
@@ -53,7 +61,7 @@
|
|
|
53
61
|
|
|
54
62
|
<li role="separator" class="dropdown-divider mt-2 mb-2 border-gray-700"></li>
|
|
55
63
|
|
|
56
|
-
<li class="nav-item {% if 'dashboard' in segment %} active {% endif %}">
|
|
64
|
+
<li class="nav-item {% if 'dashboard' in segment %} active {% endif %}" data-bs-toggle="collapse">
|
|
57
65
|
<a href="{% url 'dashboard' %}" class="nav-link">
|
|
58
66
|
<span class="sidebar-icon">
|
|
59
67
|
<svg class="icon icon-xs me-2" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M2 10a8 8 0 018-8v8h8a8 8 0 11-16 0z"></path><path d="M12 2.252A8.014 8.014 0 0117.748 8H12V2.252z"></path></svg>
|
|
@@ -62,9 +70,9 @@
|
|
|
62
70
|
</a>
|
|
63
71
|
</li>
|
|
64
72
|
|
|
65
|
-
<li class="nav-item {% if 'events' in segment %} active {% endif %}">
|
|
73
|
+
<li class="nav-item {% if 'events' in segment %} active {% endif %}" data-bs-toggle="collapse">
|
|
66
74
|
<span
|
|
67
|
-
class="nav-link
|
|
75
|
+
class="nav-link collapsed d-flex justify-content-between align-items-center"
|
|
68
76
|
data-bs-toggle="collapse" data-bs-target="#submenu-events">
|
|
69
77
|
<span>
|
|
70
78
|
<span class="sidebar-icon">
|
|
@@ -89,7 +97,7 @@
|
|
|
89
97
|
</div>
|
|
90
98
|
</li>
|
|
91
99
|
|
|
92
|
-
<li class="nav-item {% if 'assets' in segment %} active {% endif %}">
|
|
100
|
+
<li class="nav-item text-dark {% if 'assets' in segment %} active {% endif %}" data-bs-toggle="collapse">
|
|
93
101
|
<a href="{% url 'asset_table' %}" class="nav-link">
|
|
94
102
|
<span class="sidebar-icon">
|
|
95
103
|
<svg class="icon icon-xs me-2" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M4 4a2 2 0 00-2 2v1h16V6a2 2 0 00-2-2H4z"></path><path fill-rule="evenodd" d="M18 9H2v5a2 2 0 002 2h12a2 2 0 002-2V9zM4 13a1 1 0 011-1h1a1 1 0 110 2H5a1 1 0 01-1-1zm5-1a1 1 0 100 2h1a1 1 0 100-2H9z" clip-rule="evenodd"></path></svg>
|
irie/init/getNBIData2.py
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
#===----------------------------------------------------------------------===#
|
|
2
|
+
#
|
|
3
|
+
# STAIRLab -- STructural Artificial Intelligence Laboratory
|
|
4
|
+
#
|
|
5
|
+
#===----------------------------------------------------------------------===#
|
|
6
|
+
#
|
|
7
|
+
# First run without arguments to generate list of structure numbers and
|
|
8
|
+
# save to JSON. Then run with that JSON as argv[1] to pull inventory data.
|
|
9
|
+
#
|
|
10
|
+
# Adapted from:
|
|
11
|
+
# https://github.com/psychogeekir/ScrapeNBIBridgeInfo/raw/master/getNBIClimateData.py
|
|
12
|
+
#
|
|
13
|
+
# Claudio M. Perez
|
|
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
|
+
#
|
|
27
|
+
import sys
|
|
28
|
+
import json
|
|
29
|
+
import requests
|
|
30
|
+
from tqdm import tqdm
|
|
31
|
+
from pathlib import Path
|
|
32
|
+
|
|
33
|
+
NAME = Path(__file__).name
|
|
34
|
+
|
|
35
|
+
EXAMPLES= """"
|
|
36
|
+
Examples:
|
|
37
|
+
run to obtain structure numbers list:
|
|
38
|
+
$ {NAME}
|
|
39
|
+
run to obtain data from JSON list:
|
|
40
|
+
$ {NAME} [structure_numbers]
|
|
41
|
+
run filtering for given structure 33 0214L:
|
|
42
|
+
$ {NAME} [structure_numbers] --filter-calid "33 0214L"
|
|
43
|
+
run filtering for given structures:
|
|
44
|
+
$ {NAME} [structure_numbers] --filter-list [list]
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
HELP=f"""
|
|
48
|
+
|
|
49
|
+
usage: $ {NAME}
|
|
50
|
+
$ {NAME} --help
|
|
51
|
+
$ {NAME} [structure_numbers] [options]
|
|
52
|
+
|
|
53
|
+
Two-step process to obtain data from the National Bridge Inventory.
|
|
54
|
+
|
|
55
|
+
Positional Arguments:
|
|
56
|
+
|
|
57
|
+
Options:
|
|
58
|
+
-fc, --filter-calid filter for specific structure.
|
|
59
|
+
-fl, --filter-list filter for specified structures in txt file.
|
|
60
|
+
-h, --help print this message and exit.
|
|
61
|
+
|
|
62
|
+
{EXAMPLES}
|
|
63
|
+
"""
|
|
64
|
+
|
|
65
|
+
def getBridgeList(headers, start_page=1, totalpages=3, pagesize=10, totalbridges=24, page_nums=None, **kwds):
|
|
66
|
+
url = 'https://infobridge.fhwa.dot.gov/Data/GetAllBridges'
|
|
67
|
+
|
|
68
|
+
payload = {
|
|
69
|
+
"isShowBridgesApplied":True,
|
|
70
|
+
"gridParam": {
|
|
71
|
+
"isShowBridgesApplied":True, "IsFilterApplied":False, "SelectedFilters":None,
|
|
72
|
+
"SortOrder":"asc", "SortIndex": "STATE_CODE",
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
pages = []
|
|
77
|
+
def filter(row):
|
|
78
|
+
return int(row["STATE_CODE"]) > 0
|
|
79
|
+
|
|
80
|
+
if page_nums is None:
|
|
81
|
+
page_nums = range(start_page, totalpages + 1)
|
|
82
|
+
|
|
83
|
+
for pageno in page_nums:
|
|
84
|
+
try:
|
|
85
|
+
payload["gridParam"]["PageNumber"] = pageno
|
|
86
|
+
payload["gridParam"]["PageSize"] = pagesize
|
|
87
|
+
|
|
88
|
+
r = requests.post(url, headers=headers, data=json.dumps(payload))
|
|
89
|
+
|
|
90
|
+
if r.status_code == 200:
|
|
91
|
+
try:
|
|
92
|
+
resp = json.loads(eval(r.content.decode('utf-8'))) # [1:-1].replace("\\", ""))
|
|
93
|
+
except:
|
|
94
|
+
print(f"Failed to get page {pageno}", file=sys.stderr)
|
|
95
|
+
continue
|
|
96
|
+
|
|
97
|
+
bridges = [
|
|
98
|
+
{'BRIDGE_YEARLY_ID': row['BRIDGE_YEARLY_ID'],
|
|
99
|
+
'STRUCTURE_NUMBER': row['STRUCTURE_NUMBER'].strip()}
|
|
100
|
+
for row in resp["Results"]["rows"] # if filter(row)
|
|
101
|
+
]
|
|
102
|
+
pages.extend(bridges)
|
|
103
|
+
print(pageno, len(pages), len(bridges), resp["Results"]["rows"][-1]["STATE_NAME"], file=sys.stderr)
|
|
104
|
+
|
|
105
|
+
except KeyboardInterrupt:
|
|
106
|
+
break
|
|
107
|
+
|
|
108
|
+
return pages
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def getNBIData(headers, bridgeTable, years, tab="NBI",
|
|
112
|
+
keep_query=False):
|
|
113
|
+
|
|
114
|
+
url = 'https://infobridge.fhwa.dot.gov/Data/getBridgeInformation'
|
|
115
|
+
|
|
116
|
+
_headers = headers.copy()
|
|
117
|
+
# payload = {
|
|
118
|
+
# "requestModel": {
|
|
119
|
+
# "SELECTED_TAB": "OverviewTab",
|
|
120
|
+
# "SELECTED_YEAR_ID": None,
|
|
121
|
+
# "IS_NEW_RECORD": True,
|
|
122
|
+
# "IS_YEAR_SELECTED": False,
|
|
123
|
+
# "Is_Overview_Bridge_Selected": False,
|
|
124
|
+
# "SELECTED_YEAR": None,
|
|
125
|
+
# "CURRENT_YEARLY_ID": "25099893",
|
|
126
|
+
# "IS_NBI_TREE_SELECTED": False,
|
|
127
|
+
# "Folder_Name": None,
|
|
128
|
+
# "tabChange": False,
|
|
129
|
+
# "BRIDGE_YEARLY_ID": "25099893",
|
|
130
|
+
# "NEW_BRIDGE_ID": 58813,
|
|
131
|
+
# "SELECTED_NDE_TAB": "General"
|
|
132
|
+
# }
|
|
133
|
+
# }
|
|
134
|
+
|
|
135
|
+
payload = {
|
|
136
|
+
"requestModel":{
|
|
137
|
+
"SELECTED_TAB": f"{tab}Tab",
|
|
138
|
+
"SELECTED_YEAR_ID": None,
|
|
139
|
+
"IS_NEW_RECORD": False,
|
|
140
|
+
"IS_YEAR_SELECTED": False,
|
|
141
|
+
"Is_Overview_Bridge_Selected": False,
|
|
142
|
+
"NEW_BRIDGE_ID": 0,
|
|
143
|
+
"STRUCTURE_NUMBER": None,
|
|
144
|
+
"STATE_NAME": None,
|
|
145
|
+
"STATE_CODE": 0,
|
|
146
|
+
"IS_EXPERIMENTAL": False,
|
|
147
|
+
"SELECTED_NDE_TAB": "General",
|
|
148
|
+
#"MERRA_ID": 0,"IS_NBI_TREE_SELECTED": False,"Folder_Name": None,"tabChange": False,
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
referer = 'https://infobridge.fhwa.dot.gov/Data/BridgeDetail/'
|
|
154
|
+
data = {}
|
|
155
|
+
|
|
156
|
+
for i,bridge in enumerate(tqdm(bridgeTable)):
|
|
157
|
+
|
|
158
|
+
BRIDGE_YEARLY_ID = bridge['BRIDGE_YEARLY_ID']
|
|
159
|
+
STRUCTURE_NUMBER = bridge['STRUCTURE_NUMBER']
|
|
160
|
+
|
|
161
|
+
# data[STRUCTURE_NUMBER] = []
|
|
162
|
+
|
|
163
|
+
for year in years:
|
|
164
|
+
_headers['referer'] = referer + str(BRIDGE_YEARLY_ID)
|
|
165
|
+
|
|
166
|
+
payload["requestModel"].update({
|
|
167
|
+
"SELECTED_YEAR": year,
|
|
168
|
+
"CURRENT_YEARLY_ID": BRIDGE_YEARLY_ID,
|
|
169
|
+
"BRIDGE_YEARLY_ID": BRIDGE_YEARLY_ID,
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
r = requests.post(url, data=json.dumps(payload), headers=_headers)
|
|
173
|
+
|
|
174
|
+
if r.status_code == 200:
|
|
175
|
+
htmlcontent = r.content.decode('utf-8')
|
|
176
|
+
# print(data[STRUCTURE_NUMBER][0])
|
|
177
|
+
try:
|
|
178
|
+
data[STRUCTURE_NUMBER] = [{
|
|
179
|
+
k: (
|
|
180
|
+
v if k != "Results" else {
|
|
181
|
+
kk: vv for kk, vv in v.items() if (kk != "NBIDataQuery" or keep_query)
|
|
182
|
+
}
|
|
183
|
+
) for k, v in json.loads(htmlcontent).items()
|
|
184
|
+
}]
|
|
185
|
+
except Exception as e:
|
|
186
|
+
print(f">> Error: {e}", file=sys.stderr)
|
|
187
|
+
continue
|
|
188
|
+
|
|
189
|
+
else:
|
|
190
|
+
print(f">> Error ({year}) {r.status_code}: {r.content}", file=sys.stderr)
|
|
191
|
+
|
|
192
|
+
if i % 500 == 0:
|
|
193
|
+
with open(f"nbi_data-{i}.json", "w") as f:
|
|
194
|
+
json.dump(data, f, indent=2)
|
|
195
|
+
|
|
196
|
+
return data
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
if __name__ == '__main__':
|
|
200
|
+
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
|
|
201
|
+
request_verification_token = 'CfDJ8M6CuWz5hhxGnmUVXw2yDHQlfeNDzVoF03IbAJ0p3LdaDW7poklPvy74ykYda-qwcrtUXD4rnNzn583Ug7PWbR9IlomGzQh1OQIw_pa9d5TNwdN5p77SDfIfz3yq1nWPzxemEn_8bbh7TGGK9FIwcRY'
|
|
202
|
+
cookie = "_ga=GA1.1.478241025.1718907711; _ga_0623JYSC1Q=GS1.1.1718922743.2.0.1718922743.0.0.0; _ga_VW1SFWJKBB=GS1.1.1730789269.3.0.1730789272.0.0.0; _ga_CSLL4ZEK4L=GS1.1.1730789269.3.0.1730789272.0.0.0; _ga_NQ5ZN114SB=GS1.1.1730789269.3.0.1730789272.0.0.0; .AspNetCore.Session=CfDJ8M6CuWz5hhxGnmUVXw2yDHRQxNlIdqc8pBGKOJhMcHphMelhCyOQD7cnzYLVUWcsfCE8KOO8TNogarX5FbmvNQeSW1pTphWgR%2B6RLzPiUWuR4yPiDmb6rg82isfHqoEBhFoziXpFlU2o9pMgQICLsy7WbaeZbSgOl6FTg5Y0vLQ5; __RequestVerificationToken=CfDJ8M6CuWz5hhxGnmUVXw2yDHQXNjHWpjZ61I-CMSrl0yWsdWpCyt2QhUoeZ2L2aY0sqNpGy-wrD8ToMph6-wbfcRPpqORdlVci0ghxWu-3i4PCuWsiOkq90E1WupEYErSXnhsQVwHHGcD63WI7qyXZd7w; _ga_GNYE9X3V7H=GS1.1.1730825963.2.1.1730825988.0.0.0"
|
|
203
|
+
|
|
204
|
+
headers = {
|
|
205
|
+
'authority': 'infobridge.fhwa.dot.gov',
|
|
206
|
+
'origin': 'https://infobridge.fhwa.dot.gov',
|
|
207
|
+
'sec-fetch-site': 'same-origin',
|
|
208
|
+
'sec-fetch-mode': 'cors',
|
|
209
|
+
'accept-encoding': 'gzip, deflate, br',
|
|
210
|
+
'accept-language': 'en-US,en;q=0.9',
|
|
211
|
+
|
|
212
|
+
'__requestverificationtoken': request_verification_token,
|
|
213
|
+
'user-agent': user_agent,
|
|
214
|
+
'cookie': cookie
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if len(sys.argv) == 1:
|
|
218
|
+
|
|
219
|
+
headers.update({
|
|
220
|
+
'x-requested-with': 'XMLHttpRequest',
|
|
221
|
+
'content-type': 'application/json; charset=UTF-8',
|
|
222
|
+
'accept': 'application/json, text/javascript, */*; q=0.01',
|
|
223
|
+
'referer': 'https://infobridge.fhwa.dot.gov/Data',
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
bridgeTable = getBridgeList(headers, start_page=511, totalpages=808, pagesize=100)
|
|
227
|
+
print(json.dumps(bridgeTable, indent=2))
|
|
228
|
+
with open(f"nbi_codes-california-test.json","w") as f:
|
|
229
|
+
# with open(f"nbi_codes-california.json","w") as f:
|
|
230
|
+
json.dump(bridgeTable,f,indent=2)
|
|
231
|
+
sys.exit()
|
|
232
|
+
|
|
233
|
+
elif len(sys.argv) == 2:
|
|
234
|
+
headers.update({
|
|
235
|
+
'datatype': 'json',
|
|
236
|
+
'content-type': 'application/json; charset=UTF-8',
|
|
237
|
+
'accept': 'application/json, text/plain, */*'
|
|
238
|
+
})
|
|
239
|
+
bridgeTable = json.load(open(sys.argv[1]))
|
|
240
|
+
bridgeTable = [
|
|
241
|
+
i for i in bridgeTable
|
|
242
|
+
if " " in i["STRUCTURE_NUMBER"] and len(i["STRUCTURE_NUMBER"]) in {7, 8}
|
|
243
|
+
]
|
|
244
|
+
|
|
245
|
+
# calids = list(map(str.strip, open("init/calid.txt").readlines()))
|
|
246
|
+
# bridgeTable = [i for i in bridgeTable if i["STRUCTURE_NUMBER"] in calids]
|
|
247
|
+
|
|
248
|
+
nbi_data = getNBIData(headers, bridgeTable[:], years=(2024,)) #range(2020, 2024))
|
|
249
|
+
print(json.dumps(nbi_data, indent=2))
|
|
250
|
+
with open(f"nbi_data-california-test.json","w") as f:
|
|
251
|
+
# with open(f"nbi_data-california.json","w") as f:
|
|
252
|
+
json.dump(nbi_data,f,indent=2)
|
|
253
|
+
|
|
254
|
+
else:
|
|
255
|
+
arg1 = sys.argv[1]
|
|
256
|
+
args2 = iter(sys.argv[2:])
|
|
257
|
+
|
|
258
|
+
if arg1 in ["--help", "-h"]:
|
|
259
|
+
print(HELP)
|
|
260
|
+
sys.exit
|
|
261
|
+
else:
|
|
262
|
+
headers.update({
|
|
263
|
+
'datatype': 'json',
|
|
264
|
+
'content-type': 'application/json; charset=UTF-8',
|
|
265
|
+
'accept': 'application/json, text/plain, */*'
|
|
266
|
+
})
|
|
267
|
+
bridgeTable = json.load(open(sys.argv[1]))
|
|
268
|
+
for arg in args2:
|
|
269
|
+
if arg in ["--help", "-h"]:
|
|
270
|
+
print(HELP)
|
|
271
|
+
sys.exit
|
|
272
|
+
elif arg in ["--filter-calid", "-fc"]:
|
|
273
|
+
calid = next(args2)
|
|
274
|
+
bridgeTable = [
|
|
275
|
+
i for i in bridgeTable
|
|
276
|
+
if calid in i["STRUCTURE_NUMBER"]
|
|
277
|
+
]
|
|
278
|
+
file_ending = calid
|
|
279
|
+
elif arg in ["--filter-list", "-fl"]:
|
|
280
|
+
filename = next(args2)
|
|
281
|
+
with open(filename, 'r') as file:
|
|
282
|
+
# Check if this is dependent on a specific txt structure (currently 1 bridge/line)
|
|
283
|
+
calid = [line.strip() for line in file]
|
|
284
|
+
# print(calid)
|
|
285
|
+
bridgeTable = [
|
|
286
|
+
i for i in bridgeTable
|
|
287
|
+
if any(j in i["STRUCTURE_NUMBER"] for j in calid)
|
|
288
|
+
]
|
|
289
|
+
# print(bridgeTable)
|
|
290
|
+
file_ending = Path(filename).name
|
|
291
|
+
|
|
292
|
+
# calids = list(map(str.strip, open("init/calid.txt").readlines()))
|
|
293
|
+
# bridgeTable = [i for i in bridgeTable if i["STRUCTURE_NUMBER"] in calids]
|
|
294
|
+
|
|
295
|
+
nbi_data = getNBIData(headers, bridgeTable[:], years=(2024,)) #range(2020, 2024))
|
|
296
|
+
print(json.dumps(nbi_data, indent=2))
|
|
297
|
+
|
|
298
|
+
# TODO: remove this and replace with arg parsing
|
|
299
|
+
tab = ...
|
|
300
|
+
|
|
301
|
+
with open(f"{tab}_data-{file_ending}.json","w") as f:
|
|
302
|
+
# with open(f"nbi_data-california.json","w") as f:
|
|
303
|
+
json.dump(nbi_data,f,indent=2)
|
|
304
|
+
|