irie 0.0.34__tar.gz → 0.0.36__tar.gz

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.

Files changed (479) hide show
  1. {irie-0.0.34 → irie-0.0.36}/PKG-INFO +1 -1
  2. {irie-0.0.34 → irie-0.0.36}/pyproject.toml +1 -1
  3. irie-0.0.36/src/irie/apps/context_processors.py +13 -0
  4. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/admin.py +4 -1
  5. irie-0.0.36/src/irie/apps/inventory/forms.py +35 -0
  6. irie-0.0.36/src/irie/apps/inventory/migrations/0004_datum_sensorgroup_sensor.py +43 -0
  7. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/models.py +40 -17
  8. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/urls.py +4 -2
  9. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/views.py +47 -1
  10. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/sidebar.html +29 -10
  11. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/asset-profile.html +8 -0
  12. irie-0.0.36/src/irie/apps/templates/inventory/asset-sensors.html +50 -0
  13. irie-0.0.36/src/irie/apps/templates/inventory/sensor-upload.html +119 -0
  14. {irie-0.0.34 → irie-0.0.36}/src/irie/core/settings.py +1 -0
  15. irie-0.0.36/src/irie/init/data/nbi_definitions.json +1 -0
  16. {irie-0.0.34 → irie-0.0.36}/src/irie/init/getNBIData.py +12 -0
  17. {irie-0.0.34 → irie-0.0.36}/src/irie/init/management/commands/init_assets.py +13 -7
  18. {irie-0.0.34 → irie-0.0.36}/src/irie/init/management/commands/init_cesmd.py +11 -8
  19. {irie-0.0.34 → irie-0.0.36}/src/irie.egg-info/PKG-INFO +1 -1
  20. {irie-0.0.34 → irie-0.0.36}/src/irie.egg-info/SOURCES.txt +4 -0
  21. irie-0.0.34/src/irie/apps/context_processors.py +0 -5
  22. irie-0.0.34/src/irie/apps/inventory/forms.py +0 -12
  23. {irie-0.0.34 → irie-0.0.36}/README.md +0 -0
  24. {irie-0.0.34 → irie-0.0.36}/setup.cfg +0 -0
  25. {irie-0.0.34 → irie-0.0.36}/src/irie/__init__.py +0 -0
  26. {irie-0.0.34 → irie-0.0.36}/src/irie/__main__.py +0 -0
  27. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/__init__.py +0 -0
  28. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/__init__.py +0 -0
  29. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/admin.py +0 -0
  30. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/apps.py +0 -0
  31. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/forms.py +0 -0
  32. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/models.py +0 -0
  33. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/templatetags/__init__.py +0 -0
  34. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/templatetags/admin_material.py +0 -0
  35. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/templatetags/replace_value.py +0 -0
  36. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/urls.py +0 -0
  37. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/utils.py +0 -0
  38. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/admin_dash/views.py +0 -0
  39. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/__init__.py +0 -0
  40. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/admin.py +0 -0
  41. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/config.py +0 -0
  42. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/forms.py +0 -0
  43. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/migrations/__init__.py +0 -0
  44. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/models.py +0 -0
  45. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/tests.py +0 -0
  46. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/urls.py +0 -0
  47. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/authentication/views.py +0 -0
  48. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/config.py +0 -0
  49. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/__init__.py +0 -0
  50. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/apps.py +0 -0
  51. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/documents.py +0 -0
  52. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/migrations/__init__.py +0 -0
  53. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/tests.py +0 -0
  54. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/urls.py +0 -0
  55. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/documents/views.py +0 -0
  56. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/__init__.py +0 -0
  57. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/admin.py +0 -0
  58. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/apps.py +0 -0
  59. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/daemon.py +0 -0
  60. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/identification.py +0 -0
  61. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/migrations/0001_initial.py +0 -0
  62. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/migrations/0002_evaluation_status.py +0 -0
  63. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/migrations/__init__.py +0 -0
  64. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/models.py +0 -0
  65. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/urls.py +0 -0
  66. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/evaluation/views.py +0 -0
  67. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/__init__.py +0 -0
  68. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/admin.py +0 -0
  69. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/apps.py +0 -0
  70. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/migrations/0001_initial.py +0 -0
  71. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/migrations/0002_rename_event_eventrecord.py +0 -0
  72. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/migrations/0003_hazardevent.py +0 -0
  73. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/migrations/__init__.py +0 -0
  74. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/models.py +0 -0
  75. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/tests.py +0 -0
  76. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/tests_events.py +0 -0
  77. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/urls.py +0 -0
  78. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/views.py +0 -0
  79. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/events/views_events.py +0 -0
  80. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/CESMD.py +0 -0
  81. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/__init__.py +0 -0
  82. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/apps.py +0 -0
  83. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/archive/arcGIS.py +0 -0
  84. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/calid.py +0 -0
  85. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/fields.py +0 -0
  86. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/filters.py +0 -0
  87. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/migrations/0001_initial.py +0 -0
  88. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/migrations/0002_alter_asset_bridge_sensors_and_more.py +0 -0
  89. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/migrations/0003_asset_notes.py +0 -0
  90. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/migrations/__init__.py +0 -0
  91. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/sitemaps.py +0 -0
  92. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/tables.py +0 -0
  93. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/templatetags/__init__.py +0 -0
  94. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/templatetags/get.py +0 -0
  95. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/templatetags/nbi.py +0 -0
  96. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/inventory/traffic.py +0 -0
  97. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/management/__init__.py +0 -0
  98. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/management/commands/__init__.py +0 -0
  99. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/__init__.py +0 -0
  100. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/apps.py +0 -0
  101. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/forms.py +0 -0
  102. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/migrations/__init__.py +0 -0
  103. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/models.py +0 -0
  104. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/networks.py +0 -0
  105. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/tests.py +0 -0
  106. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/urls.py +0 -0
  107. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/networks/views.py +0 -0
  108. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/__init__.py +0 -0
  109. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/admin.py +0 -0
  110. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/apps.py +0 -0
  111. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/forms.py +0 -0
  112. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/metrics.py +0 -0
  113. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/migrations/0001_initial.py +0 -0
  114. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/migrations/0002_alter_predictormodel_protocol.py +0 -0
  115. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/migrations/0003_alter_predictormodel_protocol.py +0 -0
  116. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/migrations/__init__.py +0 -0
  117. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/models.py +0 -0
  118. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/predictor.py +0 -0
  119. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/__init__.py +0 -0
  120. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/hazus.py +0 -0
  121. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/__init__.py +0 -0
  122. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/metrics.py +0 -0
  123. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/__init__.py +0 -0
  124. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/hwd_analysis.schema.json +0 -0
  125. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/hwd_analysis_default.json +0 -0
  126. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/hwd_conf.schema.json +0 -0
  127. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/hwd_conf_default.json +0 -0
  128. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/hwd_results.schema.json +0 -0
  129. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/schemas/hwd_results_default.json +0 -0
  130. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/utilities.py +0 -0
  131. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/xmlutils.py +0 -0
  132. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/opensees/zipped.py +0 -0
  133. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/runners/ssid.py +0 -0
  134. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/templatetags/__init__.py +0 -0
  135. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/templatetags/predictor.py +0 -0
  136. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/urls.py +0 -0
  137. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/views.py +0 -0
  138. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/prediction/views_api.py +0 -0
  139. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/__init__.py +0 -0
  140. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/admin.py +0 -0
  141. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/config.py +0 -0
  142. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/migrations/__init__.py +0 -0
  143. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/models.py +0 -0
  144. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/templatetags/__init__.py +0 -0
  145. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/templatetags/indexing.py +0 -0
  146. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/tests.py +0 -0
  147. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/urls.py +0 -0
  148. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/view_sdof.py +0 -0
  149. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/view_utils.py +0 -0
  150. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/site/views.py +0 -0
  151. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/sitemaps.py +0 -0
  152. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/content_images/brace/mdof.svg +0 -0
  153. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/content_images/brace/opensees.jpg +0 -0
  154. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/content_images/brace/sdof.svg +0 -0
  155. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/content_images/brace/sees.png +0 -0
  156. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/css/brace.css +0 -0
  157. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/css/brace.css.map +0 -0
  158. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/css/brace.min.css +0 -0
  159. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/css/uPlot.min.css +0 -0
  160. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/brace2-no_text.png +0 -0
  161. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/brand/dark.svg +0 -0
  162. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/brand/light.svg +0 -0
  163. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/colStrains.svg +0 -0
  164. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/colStrains_big.png +0 -0
  165. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/colStrains_small.png +0 -0
  166. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/colStrains_svg_optimizer.svg +0 -0
  167. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/colStrains_svg_optimizer.xml +0 -0
  168. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/drift.svg +0 -0
  169. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/earthquake-hazard.png +0 -0
  170. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/android-chrome-192x192.png +0 -0
  171. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/android-chrome-512x512.png +0 -0
  172. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/apple-touch-icon.png +0 -0
  173. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/browserconfig.xml +0 -0
  174. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/favicon-16x16.png +0 -0
  175. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/favicon-32x32.png +0 -0
  176. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/favicon.ico +0 -0
  177. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/manifest.json +0 -0
  178. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/mstile-150x150.png +0 -0
  179. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/safari-pinned-tab.svg +0 -0
  180. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/favicon/site.webmanifest +0 -0
  181. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/icons/github.svg +0 -0
  182. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/icons/google-tag-manager.svg +0 -0
  183. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/icons/google_analytics.svg +0 -0
  184. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/illustrations/404.svg +0 -0
  185. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/illustrations/500.svg +0 -0
  186. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/illustrations/bs5-illustrations.svg +0 -0
  187. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/illustrations/signin.svg +0 -0
  188. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/marker.svg +0 -0
  189. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/metric.png +0 -0
  190. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/painter.png +0 -0
  191. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/paypal-logo.svg +0 -0
  192. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/peer-black.svg +0 -0
  193. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/peer-light.svg +0 -0
  194. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/predictors.png +0 -0
  195. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/profile-cover.jpg +0 -0
  196. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/soga-logo.jpeg +0 -0
  197. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/img/twin.png +0 -0
  198. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll01336.svg +0 -0
  199. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll01336_1.svg +0 -0
  200. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll13705.svg +0 -0
  201. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll13795.svg +0 -0
  202. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll14406.svg +0 -0
  203. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll23631.svg +0 -0
  204. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll23631_1.svg +0 -0
  205. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll24694.svg +0 -0
  206. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll24704.svg +0 -0
  207. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll24706.svg +0 -0
  208. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll24775.svg +0 -0
  209. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll33742.svg +0 -0
  210. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll47315.svg +0 -0
  211. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll54730.svg +0 -0
  212. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58600-2.svg +0 -0
  213. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58600-3.svg +0 -0
  214. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58600-4.svg +0 -0
  215. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58600.svg +0 -0
  216. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58601-2.svg +0 -0
  217. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58601-3.svg +0 -0
  218. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58601-4.svg +0 -0
  219. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58601.svg +0 -0
  220. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-2.svg +0 -0
  221. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-3.svg +0 -0
  222. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-4.svg +0 -0
  223. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-5.svg +0 -0
  224. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-6.svg +0 -0
  225. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-7.svg +0 -0
  226. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632-8.svg +0 -0
  227. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58632.svg +0 -0
  228. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58658-2.svg +0 -0
  229. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58658-3.svg +0 -0
  230. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58658.svg +0 -0
  231. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58658_1.svg +0 -0
  232. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58658_2.svg +0 -0
  233. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58658_3.svg +0 -0
  234. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58700-1.svg +0 -0
  235. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58700-3.svg +0 -0
  236. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58700-4.svg +0 -0
  237. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll58700.svg +0 -0
  238. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68184.svg +0 -0
  239. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-2.svg +0 -0
  240. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-3.svg +0 -0
  241. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-4.svg +0 -0
  242. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-5.svg +0 -0
  243. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-6.svg +0 -0
  244. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-7.svg +0 -0
  245. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185-8.svg +0 -0
  246. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68185.svg +0 -0
  247. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68682-2.svg +0 -0
  248. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68682-3.svg +0 -0
  249. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68682-4.svg +0 -0
  250. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68682-5.svg +0 -0
  251. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll68682.svg +0 -0
  252. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll79421.svg +0 -0
  253. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89324.svg +0 -0
  254. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89324_2.svg +0 -0
  255. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89686.svg +0 -0
  256. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89708-2.svg +0 -0
  257. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89708.svg +0 -0
  258. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89735.svg +0 -0
  259. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89736.svg +0 -0
  260. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/inventory/ll89973.svg +0 -0
  261. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/787.545aecf5.chunk.js +0 -0
  262. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/brace.js +0 -0
  263. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/d3.v4.min.js +0 -0
  264. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/events_api.js +0 -0
  265. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/events_page.js +0 -0
  266. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/fmkFunctions.js +0 -0
  267. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/jsonview.bundle.js +0 -0
  268. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/login_page.js +0 -0
  269. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/main.1c459f17.js +0 -0
  270. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/js/uPlot.iife.min.js +0 -0
  271. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/cjs/popper-base.js +0 -0
  272. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/cjs/popper-base.js.flow +0 -0
  273. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/cjs/popper-lite.js +0 -0
  274. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/cjs/popper-lite.js.flow +0 -0
  275. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/cjs/popper.js +0 -0
  276. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/cjs/popper.js.flow +0 -0
  277. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/createPopper.js +0 -0
  278. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/contains.js +0 -0
  279. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getBoundingClientRect.js +0 -0
  280. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getClippingRect.js +0 -0
  281. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getCompositeRect.js +0 -0
  282. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getComputedStyle.js +0 -0
  283. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getDocumentElement.js +0 -0
  284. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getDocumentRect.js +0 -0
  285. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getHTMLElementScroll.js +0 -0
  286. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getLayoutRect.js +0 -0
  287. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getNodeName.js +0 -0
  288. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getNodeScroll.js +0 -0
  289. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getOffsetParent.js +0 -0
  290. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getParentNode.js +0 -0
  291. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getScrollParent.js +0 -0
  292. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getViewportRect.js +0 -0
  293. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getWindow.js +0 -0
  294. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getWindowScroll.js +0 -0
  295. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/getWindowScrollBarX.js +0 -0
  296. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/instanceOf.js +0 -0
  297. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/isScrollParent.js +0 -0
  298. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/isTableElement.js +0 -0
  299. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/dom-utils/listScrollParents.js +0 -0
  300. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/enums.js +0 -0
  301. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/index.js +0 -0
  302. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/applyStyles.js +0 -0
  303. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/arrow.js +0 -0
  304. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/computeStyles.js +0 -0
  305. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/eventListeners.js +0 -0
  306. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/flip.js +0 -0
  307. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/hide.js +0 -0
  308. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/index.js +0 -0
  309. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/offset.js +0 -0
  310. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/popperOffsets.js +0 -0
  311. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/modifiers/preventOverflow.js +0 -0
  312. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/popper-base.js +0 -0
  313. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/popper-lite.js +0 -0
  314. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/popper.js +0 -0
  315. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/types.js +0 -0
  316. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/computeAutoPlacement.js +0 -0
  317. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/computeOffsets.js +0 -0
  318. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/debounce.js +0 -0
  319. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/detectOverflow.js +0 -0
  320. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/expandToHashMap.js +0 -0
  321. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/format.js +0 -0
  322. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getAltAxis.js +0 -0
  323. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getAltLen.js +0 -0
  324. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getBasePlacement.js +0 -0
  325. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getFreshSideObject.js +0 -0
  326. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getMainAxisFromPlacement.js +0 -0
  327. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getOppositePlacement.js +0 -0
  328. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getOppositeVariationPlacement.js +0 -0
  329. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/getVariation.js +0 -0
  330. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/math.js +0 -0
  331. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/mergeByName.js +0 -0
  332. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/mergePaddingObject.js +0 -0
  333. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/orderModifiers.js +0 -0
  334. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/rectToClientRect.js +0 -0
  335. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/uniqueBy.js +0 -0
  336. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/validateModifiers.js +0 -0
  337. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/esm/utils/within.js +0 -0
  338. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/umd/popper-base.min.js +0 -0
  339. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/umd/popper-base.min.js.flow +0 -0
  340. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/umd/popper-lite.min.js +0 -0
  341. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/umd/popper-lite.min.js.flow +0 -0
  342. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/umd/popper.min.js +0 -0
  343. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/@popperjs/core/dist/umd/popper.min.js.flow +0 -0
  344. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap-grid.min.css +0 -0
  345. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap-grid.rtl.min.css +0 -0
  346. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap-reboot.min.css +0 -0
  347. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap-reboot.rtl.min.css +0 -0
  348. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap-utilities.min.css +0 -0
  349. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap-utilities.rtl.min.css +0 -0
  350. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap.min.css +0 -0
  351. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/css/bootstrap.rtl.min.css +0 -0
  352. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/js/bootstrap.bundle.min.js +0 -0
  353. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/js/bootstrap.esm.min.js +0 -0
  354. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/bootstrap/dist/js/bootstrap.min.js +0 -0
  355. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.css +0 -0
  356. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/chartist-plugin-tooltips/dist/chartist-plugin-tooltip.min.js +0 -0
  357. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/notyf/notyf.es.js +0 -0
  358. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/notyf/notyf.min.css +0 -0
  359. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/notyf/notyf.min.js +0 -0
  360. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/notyf/notyf.umd.js +0 -0
  361. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/nouislider/distribute/nouislider.min.css +0 -0
  362. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/nouislider/distribute/nouislider.min.js +0 -0
  363. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/nouislider/distribute/nouislider.min.mjs +0 -0
  364. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/nouislider/distribute/nouislider.mjs +0 -0
  365. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/onscreen/dist/index.js +0 -0
  366. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/onscreen/dist/on-screen.es6.js +0 -0
  367. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/onscreen/dist/on-screen.umd.min.js +0 -0
  368. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/simplebar/dist/simplebar-core.esm.js +0 -0
  369. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/simplebar/dist/simplebar.esm.js +0 -0
  370. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/simplebar/dist/simplebar.min.css +0 -0
  371. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/simplebar/dist/simplebar.min.js +0 -0
  372. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/simplebar/dist/simplebar.umd.js +0 -0
  373. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/smooth-scroll/dist/smooth-scroll.min.js +0 -0
  374. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/smooth-scroll/dist/smooth-scroll.polyfills.min.js +0 -0
  375. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/sweetalert2/dist/sweetalert2.all.min.js +0 -0
  376. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/sweetalert2/dist/sweetalert2.min.css +0 -0
  377. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/sweetalert2/dist/sweetalert2.min.js +0 -0
  378. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/jquery.waypoints.min.js +0 -0
  379. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/noframework.waypoints.min.js +0 -0
  380. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/shortcuts/infinite.min.js +0 -0
  381. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/shortcuts/inview.min.js +0 -0
  382. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/shortcuts/sticky.min.js +0 -0
  383. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/waypoints.debug.js +0 -0
  384. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/lib/zepto.waypoints.min.js +0 -0
  385. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/licenses.txt +0 -0
  386. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/assets/vendor/waypoints/testem.json +0 -0
  387. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/favicon.ico +0 -0
  388. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/static/sitemap.xml +0 -0
  389. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/accounts/login.html +0 -0
  390. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/accounts/register.html +0 -0
  391. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/admin/base_site.html +0 -0
  392. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/admin/color_theme_toggle.html +0 -0
  393. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/bridges/InteractiveTwin-CE58658.html +0 -0
  394. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/css/admin-extra.css +0 -0
  395. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/documents/documents.html +0 -0
  396. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/events/EarthquakeResponse.html +0 -0
  397. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/events/event-table.html +0 -0
  398. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/events/events.html +0 -0
  399. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/events/login.html +0 -0
  400. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/events/react_and_bootstrap.html +0 -0
  401. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/home/asset.html +0 -0
  402. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/asset-event-table.html +0 -0
  403. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/footer.html +0 -0
  404. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/modal-report.html +0 -0
  405. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/navigation.html +0 -0
  406. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/paginate.js +0 -0
  407. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/scripts.html +0 -0
  408. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/includes/settings-box.html +0 -0
  409. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/asset-evals.html +0 -0
  410. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/asset-event-summary.html +0 -0
  411. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/asset-table.html +0 -0
  412. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/bridge-dashboard.html +0 -0
  413. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/bridge.html +0 -0
  414. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/dashboard.html +0 -0
  415. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/preamble.tex +0 -0
  416. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/inventory/report.tex +0 -0
  417. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/layouts/base-fullscreen.html +0 -0
  418. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/layouts/base.html +0 -0
  419. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/layouts/json-form.html +0 -0
  420. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/networks/corridor_table.html +0 -0
  421. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/networks/networks.html +0 -0
  422. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/networks/networks.js +0 -0
  423. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/networks/styled_inputs.html +0 -0
  424. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/asset-predictors.html +0 -0
  425. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/form-submission.html +0 -0
  426. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/hazus/event.html +0 -0
  427. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/hazus/history.html +0 -0
  428. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/hazus/history.js +0 -0
  429. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/new-runner.html +0 -0
  430. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/predictor-profile.html +0 -0
  431. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/prediction/predictor-upload.html +0 -0
  432. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/about.html +0 -0
  433. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/asset_map.html +0 -0
  434. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/components-forms.html +0 -0
  435. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/index.html +0 -0
  436. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/json-form.html +0 -0
  437. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-403.html +0 -0
  438. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-404-sidebar.html +0 -0
  439. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-404.html +0 -0
  440. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-500.html +0 -0
  441. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-forgot-password.html +0 -0
  442. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-lock.html +0 -0
  443. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-reset-password.html +0 -0
  444. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-sign-in.html +0 -0
  445. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/page-sign-up.html +0 -0
  446. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/qr-0001.html +0 -0
  447. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/qr-0002.html +0 -0
  448. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/qr-0003.html +0 -0
  449. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/qr-0004.html +0 -0
  450. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/robots.txt +0 -0
  451. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/settings.html +0 -0
  452. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/tables-bootstrap-tables.html +0 -0
  453. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/transactions.html +0 -0
  454. {irie-0.0.34 → irie-0.0.36}/src/irie/apps/templates/site/unused-dashboard-cards.html +0 -0
  455. {irie-0.0.34 → irie-0.0.36}/src/irie/core/__init__.py +0 -0
  456. {irie-0.0.34 → irie-0.0.36}/src/irie/core/asgi.py +0 -0
  457. {irie-0.0.34 → irie-0.0.36}/src/irie/core/urls.py +0 -0
  458. {irie-0.0.34 → irie-0.0.36}/src/irie/core/wsgi.py +0 -0
  459. {irie-0.0.34 → irie-0.0.36}/src/irie/init/__init__.py +0 -0
  460. {irie-0.0.34 → irie-0.0.36}/src/irie/init/__main__.py +0 -0
  461. {irie-0.0.34 → irie-0.0.36}/src/irie/init/bridges.py +0 -0
  462. {irie-0.0.34 → irie-0.0.36}/src/irie/init/calid.py +0 -0
  463. {irie-0.0.34 → irie-0.0.36}/src/irie/init/data/cgs-stations.json +0 -0
  464. {irie-0.0.34 → irie-0.0.36}/src/irie/init/data/cgs_data.json +0 -0
  465. {irie-0.0.34 → irie-0.0.36}/src/irie/init/data/nbi/04.tar +0 -0
  466. {irie-0.0.34 → irie-0.0.36}/src/irie/init/data/nbi_codes-california.json +0 -0
  467. {irie-0.0.34 → irie-0.0.36}/src/irie/init/data/nbi_data-california.json +0 -0
  468. {irie-0.0.34 → irie-0.0.36}/src/irie/init/data/networks/soga_corridors.json +0 -0
  469. {irie-0.0.34 → irie-0.0.36}/src/irie/init/getCGSData.py +0 -0
  470. {irie-0.0.34 → irie-0.0.36}/src/irie/init/getCGSevents.py +0 -0
  471. {irie-0.0.34 → irie-0.0.36}/src/irie/init/hayward.zip +0 -0
  472. {irie-0.0.34 → irie-0.0.36}/src/irie/init/management/commands/init_corridors.py +0 -0
  473. {irie-0.0.34 → irie-0.0.36}/src/irie/init/management/commands/init_predictors.py +0 -0
  474. {irie-0.0.34 → irie-0.0.36}/src/irie/rest/__main__.py +0 -0
  475. {irie-0.0.34 → irie-0.0.36}/src/irie/usgs/__main__.py +0 -0
  476. {irie-0.0.34 → irie-0.0.36}/src/irie.egg-info/dependency_links.txt +0 -0
  477. {irie-0.0.34 → irie-0.0.36}/src/irie.egg-info/entry_points.txt +0 -0
  478. {irie-0.0.34 → irie-0.0.36}/src/irie.egg-info/requires.txt +0 -0
  479. {irie-0.0.34 → irie-0.0.36}/src/irie.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: irie
3
- Version: 0.0.34
3
+ Version: 0.0.36
4
4
  Summary: An infrastructure resilience engine
5
5
  Author-email: "Claudio M. Perez" <50180406+claudioperez@users.noreply.github.com>
6
6
  Project-URL: Repository, https://github.com/STAIRLab
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "irie"
3
- version = "0.0.34"
3
+ version = "0.0.36"
4
4
  authors = [
5
5
  {name="Claudio M. Perez", email="50180406+claudioperez@users.noreply.github.com"}
6
6
  ]
@@ -0,0 +1,13 @@
1
+ from django.conf import settings
2
+
3
+
4
+ def cfg_assets_root(request):
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
+ }
@@ -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)
@@ -0,0 +1,35 @@
1
+ #===----------------------------------------------------------------------===#
2
+ #
3
+ # STAIRLab -- STructural Artificial Intelligence Laboratory
4
+ #
5
+ #===----------------------------------------------------------------------===#
6
+ from django import forms
7
+ from django.forms import formset_factory
8
+ from irie.apps.inventory.models import Asset, SensorGroup, Sensor
9
+
10
+ class AssetForm(forms.ModelForm):
11
+ class Meta:
12
+ model = Asset
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
+ ]
@@ -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})"
@@ -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/$", views.asset_evals, name="asset_evals"),
27
- re_path("^inventory/(?P<calid>[0-9 A-Z-]*)/$", views.asset_profile, name="asset_profile"),
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
  ]
@@ -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-app">
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-app" aria-expanded="false">
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 'networks' in segment %} active {% endif %}">
103
- <a href="{% url 'networks' %}" class="nav-link">
104
- <span class="sidebar-icon">
105
- <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>
106
- </span>
107
- <span class="sidebar-text">Networks</span>
108
- </a>
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 %}
@@ -100,6 +100,7 @@ TEMPLATES = [
100
100
  "django.contrib.auth.context_processors.auth",
101
101
  "django.contrib.messages.context_processors.messages",
102
102
  "apps.context_processors.cfg_assets_root",
103
+ "irie.apps.context_processors.irie_apps",
103
104
  ],
104
105
  },
105
106
  },
@@ -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)"}
@@ -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
@@ -52,7 +52,7 @@ def load_assets(NBI_DATA):
52
52
 
53
53
  def find_bridge(bridges, calid):
54
54
  for bridge in bridges.values():
55
- if bridge["calid"].split(" ")[0] == calid:
55
+ if "calid" in bridge and bridge["calid"].split(" ")[0] == calid:
56
56
  return bridge
57
57
  return {}
58
58
 
@@ -98,8 +98,14 @@ def load_assets(NBI_DATA):
98
98
 
99
99
  # 1. Collect routes of interest
100
100
  ROUTES = set()
101
- for bridge in BRIDGES.values():
102
- calid = bridge["calid"].split(" ")[0].replace("-", " ")
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:
106
+ continue
107
+
108
+ calid = calid.split(" ")[0].replace("-", " ")
103
109
  nbi = get_nbi(calid, missing_ok=True)
104
110
  if nbi is not None:
105
111
  ROUTES.add(get_route(nbi))
@@ -110,7 +116,7 @@ def load_assets(NBI_DATA):
110
116
  for item in NBI_DATA:
111
117
  calid = item.replace(" ", "-")
112
118
  nbi = get_nbi(item)
113
- config = find_bridge(BRIDGES, calid)
119
+ config = None # find_bridge(BRIDGES, calid)
114
120
  try:
115
121
  if skip(nbi, ROUTES) or item == "33 0726L":
116
122
  continue
@@ -141,9 +147,9 @@ def load_assets(NBI_DATA):
141
147
 
142
148
  count += 1
143
149
 
144
- if config:
145
- asset.bridge_sensors = json.dumps(config["accelerometers"]["bridge_channels"])
146
- asset.ground_sensors = json.dumps(config["accelerometers"]["ground_channels"])
150
+ # if config:
151
+ # asset.bridge_sensors = json.dumps(config["accelerometers"]["bridge_channels"])
152
+ # asset.ground_sensors = json.dumps(config["accelerometers"]["ground_channels"])
147
153
 
148
154
  asset.save()
149
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
- stations = json.load(f)
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 asset in Asset.objects.all():
22
- if asset.calid not in CESMD:
23
- continue
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
- cesmd = CESMD[asset.calid][0]
26
- asset.cesmd = CESMD[asset.calid][0]
27
- asset.name = CESMD[asset.calid][2]
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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: irie
3
- Version: 0.0.34
3
+ Version: 0.0.36
4
4
  Summary: An infrastructure resilience engine
5
5
  Author-email: "Claudio M. Perez" <50180406+claudioperez@users.noreply.github.com>
6
6
  Project-URL: Repository, https://github.com/STAIRLab