firefighter-incident 0.0.6__tar.gz → 0.0.7__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.
Files changed (453) hide show
  1. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/PKG-INFO +1 -1
  2. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/_version.py +2 -2
  3. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/select_impact.py +4 -4
  4. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/menus.py +1 -1
  5. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0008_impact_level.py +54 -22
  6. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0012_alter_impactlevel.py +2 -2
  7. firefighter_incident-0.0.7/firefighter/incidents/migrations/0015_update_impact_level.py +136 -0
  8. firefighter_incident-0.0.7/firefighter/incidents/migrations/0016_update_business_incidents_and_level.py +84 -0
  9. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/impact.py +8 -4
  10. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/component_list.html +1 -1
  11. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/open.py +6 -1
  12. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/select_impact.py +35 -4
  13. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_forms/test_form_select_impact.py +3 -3
  14. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/pyproject.toml +2 -0
  15. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/.gitignore +0 -0
  16. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/LICENSE +0 -0
  17. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/README.md +0 -0
  18. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/__init__.py +0 -0
  19. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/__init__.py +0 -0
  20. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/admin.py +0 -0
  21. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/apps.py +0 -0
  22. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/authentication.py +0 -0
  23. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/0001_initial.py +0 -0
  24. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/0002_alter_apitokenproxy_options.py +0 -0
  25. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/0003_alter_apitokenproxy_options.py +0 -0
  26. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/__init__.py +0 -0
  27. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/models.py +0 -0
  28. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/permissions.py +0 -0
  29. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/renderer.py +0 -0
  30. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/serializers.py +0 -0
  31. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/urls.py +0 -0
  32. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/__init__.py +0 -0
  33. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/_base.py +0 -0
  34. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/components.py +0 -0
  35. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/environments.py +0 -0
  36. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/groups.py +0 -0
  37. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/incident_cost_types.py +0 -0
  38. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/incident_costs.py +0 -0
  39. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/incidents.py +0 -0
  40. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/severities.py +0 -0
  41. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/__init__.py +0 -0
  42. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/avatar/__init__.py +0 -0
  43. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/avatar/avatar.html +0 -0
  44. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/avatar/avatar.py +0 -0
  45. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/card/__init__.py +0 -0
  46. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/card/card.html +0 -0
  47. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/card/card.py +0 -0
  48. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/export_button/__init__.py +0 -0
  49. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/export_button/export_button.html +0 -0
  50. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/export_button/export_button.py +0 -0
  51. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form/__init__.py +0 -0
  52. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form/form.html +0 -0
  53. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form/form.py +0 -0
  54. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form_field/__init__.py +0 -0
  55. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form_field/form_field.html +0 -0
  56. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form_field/form_field.py +0 -0
  57. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/messages/__init__.py +0 -0
  58. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/messages/messages.html +0 -0
  59. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/messages/messages.py +0 -0
  60. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/modal/__init__.py +0 -0
  61. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/modal/modal.html +0 -0
  62. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/modal/modal.py +0 -0
  63. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/__init__.py +0 -0
  64. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/admin.py +0 -0
  65. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/apps.py +0 -0
  66. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/client.py +0 -0
  67. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/__init__.py +0 -0
  68. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/__init__.py +0 -0
  69. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sort_postmortems.py +0 -0
  70. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sort_runbooks.py +0 -0
  71. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sync_postmortems.py +0 -0
  72. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sync_runbooks.py +0 -0
  73. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/migrations/0001_initial_oss.py +0 -0
  74. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/migrations/__init__.py +0 -0
  75. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/models.py +0 -0
  76. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/serializers.py +0 -0
  77. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/service.py +0 -0
  78. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/signals/__init__.py +0 -0
  79. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/signals/incident_updated.py +0 -0
  80. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tables.py +0 -0
  81. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/__init__.py +0 -0
  82. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/archive_postmortems.py +0 -0
  83. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sort_runbooks.py +0 -0
  84. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sync_pages_content.py +0 -0
  85. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sync_postmortems.py +0 -0
  86. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sync_runbooks.py +0 -0
  87. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/templates/oncall_team.xml +0 -0
  88. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/templates/pages/runbook_list.html +0 -0
  89. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/urls.py +0 -0
  90. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/utils.py +0 -0
  91. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/__init__.py +0 -0
  92. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/api.py +0 -0
  93. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/postmortem/__init__.py +0 -0
  94. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/postmortem/postmortem_detail.py +0 -0
  95. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/runbook/__init__.py +0 -0
  96. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/runbook/runbook_list.py +0 -0
  97. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/__init__.py +0 -0
  98. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/admin.py +0 -0
  99. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/apps.py +0 -0
  100. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/asgi.py +0 -0
  101. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/celery_client.py +0 -0
  102. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/fields_forms_widgets.py +0 -0
  103. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/filters.py +0 -0
  104. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/formats/__init__.py +0 -0
  105. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/formats/en/__init__.py +0 -0
  106. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/formats/en/formats.py +0 -0
  107. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/http_client.py +0 -0
  108. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/management/__init__.py +0 -0
  109. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/management/commands/__init__.py +0 -0
  110. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/management/commands/task.py +0 -0
  111. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/middleware.py +0 -0
  112. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/__init__.py +0 -0
  113. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/__init__.py +0 -0
  114. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/api.py +0 -0
  115. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/caches.py +0 -0
  116. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/celery.py +0 -0
  117. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/common.py +0 -0
  118. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/confluence.py +0 -0
  119. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/jira_app.py +0 -0
  120. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/logging.py +0 -0
  121. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/pagerduty.py +0 -0
  122. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/raid.py +0 -0
  123. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/slack.py +0 -0
  124. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/environments/__init__.py +0 -0
  125. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/environments/dev.py +0 -0
  126. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/environments/prod.py +0 -0
  127. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/settings_builder.py +0 -0
  128. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/settings_utils.py +0 -0
  129. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/sso.py +0 -0
  130. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/tables_utils.py +0 -0
  131. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/admin/base.html +0 -0
  132. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/admin/login.html +0 -0
  133. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/admin/send_message_conversation.html +0 -0
  134. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/robots.txt +0 -0
  135. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/urls.py +0 -0
  136. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/utils.py +0 -0
  137. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/views.py +0 -0
  138. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/wsgi.py +0 -0
  139. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/__init__.py +0 -0
  140. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/admin.py +0 -0
  141. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/apps.py +0 -0
  142. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/enums.py +0 -0
  143. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/factories.py +0 -0
  144. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/__init__.py +0 -0
  145. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/close_incident.py +0 -0
  146. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/create_incident.py +0 -0
  147. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/edit.py +0 -0
  148. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/update_key_events.py +0 -0
  149. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/update_roles.py +0 -0
  150. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/update_status.py +0 -0
  151. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/utils.py +0 -0
  152. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0001_initial_oss.py +0 -0
  153. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0002_alter_severity_name_alter_user_password_featureteam.py +0 -0
  154. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0003_delete_featureteam.py +0 -0
  155. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0004_incidentupdate_environment.py +0 -0
  156. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0005_enable_from_p1_to_p5_priority.py +0 -0
  157. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0006_update_group_names.py +0 -0
  158. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0007_update_component_name.py +0 -0
  159. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0009_update_sla.py +0 -0
  160. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0010_update_components.py +0 -0
  161. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0011_update_incidents.py +0 -0
  162. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0013_add_missing_component.py +0 -0
  163. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0014_update_components_slack_groups.py +0 -0
  164. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/__init__.py +0 -0
  165. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/__init__.py +0 -0
  166. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/component.py +0 -0
  167. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/environment.py +0 -0
  168. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/group.py +0 -0
  169. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident.py +0 -0
  170. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_cost.py +0 -0
  171. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_cost_type.py +0 -0
  172. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_membership.py +0 -0
  173. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_role_type.py +0 -0
  174. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_update.py +0 -0
  175. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/metric_type.py +0 -0
  176. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/milestone_type.py +0 -0
  177. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/priority.py +0 -0
  178. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/severity.py +0 -0
  179. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/user.py +0 -0
  180. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/signals.py +0 -0
  181. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/incident.css +0 -0
  182. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/main.css +0 -0
  183. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/main.min.css +0 -0
  184. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/tailwind.css +0 -0
  185. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/android-chrome-192x192.png +0 -0
  186. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/android-chrome-512x512.png +0 -0
  187. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/apple-touch-icon.png +0 -0
  188. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/favicon-16x16.png +0 -0
  189. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/favicon-32x32.png +0 -0
  190. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/favicon.ico +0 -0
  191. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/site.webmanifest +0 -0
  192. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/gameday.png +0 -0
  193. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/logo-firefighter.png +0 -0
  194. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p1.png +0 -0
  195. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p2.png +0 -0
  196. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p3.png +0 -0
  197. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p4.png +0 -0
  198. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p5.png +0 -0
  199. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/js/main.js +0 -0
  200. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/js/main.min.js +0 -0
  201. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/tables.py +0 -0
  202. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/tasks/__init__.py +0 -0
  203. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/tasks/updateoncall.py +0 -0
  204. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/errors/base.html +0 -0
  205. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/filter.html +0 -0
  206. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/table/priority_column.html +0 -0
  207. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/table/status_column.html +0 -0
  208. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/table.html +0 -0
  209. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/widgets/form_container.html +0 -0
  210. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/widgets/grouped_checkbox_nested.html +0 -0
  211. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/widgets/input_option.html +0 -0
  212. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/index.html +0 -0
  213. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/created_at_help.html +0 -0
  214. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/environment_pill.html +0 -0
  215. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/footer.html +0 -0
  216. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/header.html +0 -0
  217. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_card.html +0 -0
  218. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_metrics.html +0 -0
  219. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_timeline.html +0 -0
  220. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view.html +0 -0
  221. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view_modal.html +0 -0
  222. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/partial_table_list_paginated.html +0 -0
  223. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/priority_icon.html +0 -0
  224. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/priority_pill.html +0 -0
  225. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/status_pill.html +0 -0
  226. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/table.html +0 -0
  227. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/user_card.html +0 -0
  228. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/user_tooltip.html +0 -0
  229. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/view_filters.html +0 -0
  230. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/component_detail.html +0 -0
  231. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/dashboard.html +0 -0
  232. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/docs_metrics.html +0 -0
  233. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_create.html +0 -0
  234. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_detail.html +0 -0
  235. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_list.html +0 -0
  236. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_role_types_detail.html +0 -0
  237. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_role_types_list.html +0 -0
  238. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_statistics.html +0 -0
  239. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_statistics_partial.html +0 -0
  240. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_update_key_events_form.html +0 -0
  241. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/user_detail.html +0 -0
  242. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/urls.py +0 -0
  243. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/__init__.py +0 -0
  244. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/components/__init__.py +0 -0
  245. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/components/details.py +0 -0
  246. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/components/list.py +0 -0
  247. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/date_filter.py +0 -0
  248. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/date_utils.py +0 -0
  249. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/docs/__init__.py +0 -0
  250. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/docs/metrics.py +0 -0
  251. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/docs/role_types.py +0 -0
  252. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/errors.py +0 -0
  253. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/reports.py +0 -0
  254. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/users/__init__.py +0 -0
  255. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/users/details.py +0 -0
  256. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/views.py +0 -0
  257. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/__init__.py +0 -0
  258. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/admin.py +0 -0
  259. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/apps.py +0 -0
  260. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/client.py +0 -0
  261. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/migrations/0001_initial_oss.py +0 -0
  262. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/migrations/__init__.py +0 -0
  263. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/models.py +0 -0
  264. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/tasks/__init__.py +0 -0
  265. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/tasks/sync_users_jira.py +0 -0
  266. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/types.py +0 -0
  267. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/utils.py +0 -0
  268. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/logging/__init__.py +0 -0
  269. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/logging/custom_json_formatter.py +0 -0
  270. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/logging/pretty_formatter.py +0 -0
  271. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/__init__.py +0 -0
  272. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/admin.py +0 -0
  273. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/apps.py +0 -0
  274. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/client.py +0 -0
  275. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/forms/__init__.py +0 -0
  276. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/forms/create_pagerduty_incident.py +0 -0
  277. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/migrations/0001_initial_oss.py +0 -0
  278. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/migrations/__init__.py +0 -0
  279. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/models.py +0 -0
  280. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/service.py +0 -0
  281. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/signals/__init__.py +0 -0
  282. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/signals/get_invites_from_pagerduty.py +0 -0
  283. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/signals/incident_channel_done_oncall.py +0 -0
  284. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/__init__.py +0 -0
  285. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/fetch_oncall.py +0 -0
  286. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/fetch_services.py +0 -0
  287. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/fetch_users.py +0 -0
  288. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/trigger_oncall.py +0 -0
  289. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/pages/oncall_list.html +0 -0
  290. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/pages/oncall_trigger.html +0 -0
  291. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view.html +0 -0
  292. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view_modal.html +0 -0
  293. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/urls.py +0 -0
  294. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/views/__init__.py +0 -0
  295. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/views/oncall_list.py +0 -0
  296. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/views/oncall_trigger.py +0 -0
  297. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/__init__.py +0 -0
  298. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/admin.py +0 -0
  299. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/apps.py +0 -0
  300. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/client.py +0 -0
  301. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/forms.py +0 -0
  302. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/messages.py +0 -0
  303. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/migrations/0001_initial_oss.py +0 -0
  304. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/migrations/0002_featureteam_remove_qualifierrotation_jira_user_and_more.py +0 -0
  305. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/migrations/__init__.py +0 -0
  306. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/models.py +0 -0
  307. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/resources.py +0 -0
  308. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/serializers.py +0 -0
  309. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/service.py +0 -0
  310. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/signals/__init__.py +0 -0
  311. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/signals/incident_created.py +0 -0
  312. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/signals/incident_updated.py +0 -0
  313. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/tasks/__init__.py +0 -0
  314. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/types.py +0 -0
  315. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/urls.py +0 -0
  316. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/utils.py +0 -0
  317. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/views/__init__.py +0 -0
  318. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/views/open_normal.py +0 -0
  319. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/__init__.py +0 -0
  320. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/admin.py +0 -0
  321. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/apps.py +0 -0
  322. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/factories.py +0 -0
  323. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/forms/__init__.py +0 -0
  324. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/forms/sos_form.py +0 -0
  325. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/management/__init__.py +0 -0
  326. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/management/commands/__init__.py +0 -0
  327. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/management/commands/generate_manifest.py +0 -0
  328. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/messages/__init__.py +0 -0
  329. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/messages/base.py +0 -0
  330. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/messages/slack_messages.py +0 -0
  331. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0001_initial_oss.py +0 -0
  332. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0002_usergroup_tag.py +0 -0
  333. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0003_alter_usergroup_tag.py +0 -0
  334. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0004_alter_usergroup_components.py +0 -0
  335. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/__init__.py +0 -0
  336. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/__init__.py +0 -0
  337. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/conversation.py +0 -0
  338. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/incident_channel.py +0 -0
  339. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/message.py +0 -0
  340. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/sos.py +0 -0
  341. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/user.py +0 -0
  342. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/user_group.py +0 -0
  343. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/rules.py +0 -0
  344. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/__init__.py +0 -0
  345. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/create_incident_conversation.py +0 -0
  346. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/get_users.py +0 -0
  347. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/handle_incident_channel_done.py +0 -0
  348. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/incident_closed.py +0 -0
  349. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/incident_updated.py +0 -0
  350. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/postmortem_created.py +0 -0
  351. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/roles_reminders.py +0 -0
  352. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/slack_app.py +0 -0
  353. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/slack_incident_context.py +0 -0
  354. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/slack_templating.py +0 -0
  355. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/__init__.py +0 -0
  356. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/fetch_conversations_members.py +0 -0
  357. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/reminder_postmortem.py +0 -0
  358. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/send_message.py +0 -0
  359. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/send_reminders.py +0 -0
  360. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/sync_users.py +0 -0
  361. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/update_usergroups_members.py +0 -0
  362. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/update_users.py +0 -0
  363. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/urls.py +0 -0
  364. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/utils.py +0 -0
  365. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/__init__.py +0 -0
  366. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/__init__.py +0 -0
  367. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/actions_and_shortcuts.py +0 -0
  368. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_archive.py +0 -0
  369. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_id_changed.py +0 -0
  370. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_rename.py +0 -0
  371. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_shared.py +0 -0
  372. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_unarchive.py +0 -0
  373. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_unshared.py +0 -0
  374. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/commands.py +0 -0
  375. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/home.py +0 -0
  376. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/member_joined_channel.py +0 -0
  377. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/member_left_channel.py +0 -0
  378. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/message.py +0 -0
  379. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/message_deleted.py +0 -0
  380. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/reaction_added.py +0 -0
  381. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/__init__.py +0 -0
  382. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/__init__.py +0 -0
  383. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/base.py +0 -0
  384. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/base_mixins.py +0 -0
  385. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/form_utils.py +0 -0
  386. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/mixins.py +0 -0
  387. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/modal_utils.py +0 -0
  388. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/close.py +0 -0
  389. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/downgrade_workflow.py +0 -0
  390. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/edit.py +0 -0
  391. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/key_event_message.py +0 -0
  392. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/__init__.py +0 -0
  393. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/check_current_incidents.py +0 -0
  394. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/details/__init__.py +0 -0
  395. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/details/critical.py +0 -0
  396. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/set_details.py +0 -0
  397. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/types.py +0 -0
  398. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/postmortem.py +0 -0
  399. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/select.py +0 -0
  400. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/send_sos.py +0 -0
  401. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/status.py +0 -0
  402. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/trigger_oncall.py +0 -0
  403. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/update.py +0 -0
  404. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/update_roles.py +0 -0
  405. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/update_status.py +0 -0
  406. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/views.py +0 -0
  407. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/components.json +0 -0
  408. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/environments.json +0 -0
  409. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/groups.json +0 -0
  410. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/impact_level.json +0 -0
  411. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/impact_type.json +0 -0
  412. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/incident_role_type.json +0 -0
  413. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/metric_type.json +0 -0
  414. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/milestone_type.json +0 -0
  415. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/priorities.json +0 -0
  416. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/severities.json +0 -0
  417. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/raid/area.json +0 -0
  418. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/__init__.py +0 -0
  419. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/conftest.py +0 -0
  420. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_api/test_api_landbot.py +0 -0
  421. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_api/test_api_urls.py +0 -0
  422. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_confluence/test_confluence_utils.py +0 -0
  423. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_firefighter/test_firefighter_utils.py +0 -0
  424. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_firefighter/test_logging.py +0 -0
  425. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_firefighter/test_urls.py +0 -0
  426. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_forms/test_form_utils.py +0 -0
  427. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_forms/test_update_key_events.py +0 -0
  428. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_incident_urls.py +0 -0
  429. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_models/test_incident_model.py +0 -0
  430. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_models/test_migrations/test_incident_migrations.py +0 -0
  431. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_utils/test_date_utils.py +0 -0
  432. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_views/test_incident_detail_view.py +0 -0
  433. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_views/test_index_view.py +0 -0
  434. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_raid/test_raid_client_users.py +0 -0
  435. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_raid/test_raid_transitions.py +0 -0
  436. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_raid/test_raid_utils.py +0 -0
  437. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/conftest.py +0 -0
  438. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_models/test_conversations.py +0 -0
  439. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_models/test_incident_channel.py +0 -0
  440. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_models/test_slack_user.py +0 -0
  441. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_slack_utils.py +0 -0
  442. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_close.py +0 -0
  443. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_open.py +0 -0
  444. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_send_sos.py +0 -0
  445. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_status.py +0 -0
  446. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_update_status.py +0 -0
  447. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/gunicorn.conf.py +0 -0
  448. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/main.py +0 -0
  449. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/manage.py +0 -0
  450. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/package-lock.json +0 -0
  451. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/package.json +0 -0
  452. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/scripts/gen_credits.py +0 -0
  453. {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/scripts/hatch_build.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firefighter-incident
3
- Version: 0.0.6
3
+ Version: 0.0.7
4
4
  Summary: Incident Management tool made for Slack using Django
5
5
  Project-URL: Repository, https://github.com/ManoManoTech/firefighter-incident
6
6
  Project-URL: Documentation, https://manomanotech.github.io/firefighter-incident/latest/
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.0.6'
21
- __version_tuple__ = version_tuple = (0, 0, 6)
20
+ __version__ = version = '0.0.7'
21
+ __version_tuple__ = version_tuple = (0, 0, 7)
@@ -45,21 +45,21 @@ class SelectImpactForm(forms.Form):
45
45
  label=impact_type.emoji + " " + impact_type.name,
46
46
  queryset=impact_type.levels.all().order_by("-order"),
47
47
  help_text=impact_type.help_text,
48
- initial=impact_type.levels.get(value=LevelChoices.LOWEST.value),
48
+ initial=impact_type.levels.get(value=LevelChoices.NONE.value),
49
49
  )
50
50
  self.fields[field_name].label_from_instance = ( # type: ignore[attr-defined]
51
51
  lambda obj: obj.emoji + " " + obj.name
52
52
  )
53
53
 
54
54
  def suggest_priority_from_impact(self) -> int:
55
- """Suggest a priority from 1 (highest) to 4 (lowest) based on the impact choices."""
55
+ """Suggest a priority from 1 (highest) to 5 (lowest) based on the impact choices."""
56
56
  if self.is_valid():
57
57
  impact: dict[str, ImpactLevel] = self.cleaned_data
58
58
 
59
59
  impact_values = [impact_type.value for impact_type in impact.values()]
60
60
  priorities = [level.priority for level in LevelChoices if level in impact_values]
61
- return min(priorities) if priorities else LevelChoices.LOWEST.priority
62
- return LevelChoices.LOWEST.priority
61
+ return min(priorities) if priorities else LevelChoices.NONE.priority
62
+ return LevelChoices.NONE.priority
63
63
 
64
64
  @property
65
65
  def business_impact_new(self) -> str | None:
@@ -50,7 +50,7 @@ def setup_navbar_menu() -> None:
50
50
  reverse("incidents:incident-statistics"),
51
51
  ),
52
52
  MenuItem(
53
- "Components",
53
+ "Issue categories",
54
54
  reverse("incidents:component-list"),
55
55
  ),
56
56
  ]
@@ -53,6 +53,7 @@ def update_impact_levels(apps, schema_editor):
53
53
  "MD": "▶️",
54
54
  "LO": "🔽",
55
55
  "LT": "⏬",
56
+ "NO": "",
56
57
  }
57
58
 
58
59
  updates = [
@@ -61,105 +62,105 @@ def update_impact_levels(apps, schema_editor):
61
62
  "old_value": "HI",
62
63
  "new_name": None,
63
64
  "new_value": "HT",
64
- "new_order": 20,
65
+ "new_order": 5,
65
66
  },
66
67
  {
67
68
  "old_name": "Some customers have issues",
68
69
  "old_value": "MD",
69
70
  "new_name": "Some customers with major issues",
70
71
  "new_value": "HI",
71
- "new_order": 15,
72
+ "new_order": 4,
72
73
  },
73
74
  {
74
75
  "old_name": "Few customers with minor issues",
75
76
  "old_value": "LO",
76
77
  "new_name": "Some customers with significant issues",
77
78
  "new_value": "MD",
78
- "new_order": 10,
79
+ "new_order": 3,
79
80
  },
80
81
  {
81
82
  "old_name": "No impact on customers",
82
83
  "old_value": "N/A",
83
84
  "new_name": None,
84
85
  "new_value": "LT",
85
- "new_order": 0,
86
+ "new_order": 1,
86
87
  },
87
88
  {
88
89
  "old_name": "Key services inaccessible for most",
89
90
  "old_value": "HI",
90
91
  "new_name": "Critical issues for many sellers",
91
92
  "new_value": "HT",
92
- "new_order": 20,
93
+ "new_order": 5,
93
94
  },
94
95
  {
95
96
  "old_name": "Some sellers have significant issues",
96
97
  "old_value": "MD",
97
98
  "new_name": "Some sellers with major issues",
98
99
  "new_value": "HI",
99
- "new_order": 15,
100
+ "new_order": 4,
100
101
  },
101
102
  {
102
103
  "old_name": "Few sellers with minor issues",
103
104
  "old_value": "LO",
104
105
  "new_name": "Some sellers with significant issues",
105
106
  "new_value": "MD",
106
- "new_order": 10,
107
+ "new_order": 3,
107
108
  },
108
109
  {
109
110
  "old_name": "No impact on sellers",
110
111
  "old_value": "N/A",
111
112
  "new_name": None,
112
113
  "new_value": "LT",
113
- "new_order": 0,
114
+ "new_order": 1,
114
115
  },
115
116
  {
116
117
  "old_name": "Significant issues for some employees",
117
118
  "old_value": "MD",
118
119
  "new_name": "Major issues for internal users",
119
120
  "new_value": "LO",
120
- "new_order": 10,
121
+ "new_order": 2,
121
122
  },
122
123
  {
123
124
  "old_name": "Critical internal tools down",
124
125
  "old_value": "HI",
125
126
  "new_name": "Critical issues for internal users",
126
127
  "new_value": "MD",
127
- "new_order": 15,
128
+ "new_order": 3,
128
129
  },
129
130
  {
130
131
  "old_name": "No impact on employees",
131
132
  "old_value": "N/A",
132
133
  "new_name": "Minor issues for internal users",
133
134
  "new_value": "LT",
134
- "new_order": 0,
135
+ "new_order": 1,
135
136
  },
136
137
  {
137
138
  "old_name": "Whole business or revenue at risk",
138
139
  "old_value": "HI",
139
140
  "new_name": "Critical business impact",
140
141
  "new_value": "HT",
141
- "new_order": 20,
142
+ "new_order": 5,
142
143
  },
143
144
  {
144
145
  "old_name": "Significant business or revenue loss",
145
146
  "old_value": "MD",
146
147
  "new_name": "Major business impact",
147
148
  "new_value": "HI",
148
- "new_order": 15,
149
+ "new_order": 4,
149
150
  },
150
151
  {
151
152
  "old_name": "Minor impact on business or revenue",
152
153
  "old_value": "LO",
153
154
  "new_name": "Significant business impact",
154
155
  "new_value": "MD",
155
- "new_order": 10,
156
+ "new_order": 3,
156
157
  },
157
158
  {
158
159
  "old_name": "No impact on business or revenue",
159
160
  "old_value": "N/A",
160
161
  "new_name": None,
161
162
  "new_value": "LT",
162
- "new_order": 0,
163
+ "new_order": 1,
163
164
  },
164
165
  ]
165
166
 
@@ -192,38 +193,69 @@ def add_impact_levels(apps, schema_editor):
192
193
 
193
194
  "name": "Some customers with minor issues",
194
195
  "value": LevelChoices.LOW.value,
195
- "order": 5,
196
+ "order": 2,
196
197
  "impact_type_id": 3,
197
198
  "emoji": LevelChoices.LOW.emoji
198
199
  },
199
200
  {
200
201
  "name": "Some sellers with minor issues",
201
202
  "value": LevelChoices.LOW.value,
202
- "order": 5,
203
+ "order": 2,
203
204
  "impact_type_id": 2,
204
205
  "emoji": LevelChoices.LOW.emoji
205
206
  },
206
207
  {
207
208
  "name": "Minor business impact",
208
209
  "value": LevelChoices.LOW.value,
209
- "order": 5,
210
+ "order": 2,
210
211
  "impact_type_id": 1,
211
212
  "emoji": LevelChoices.LOW.emoji
212
213
  },
214
+ {
215
+
216
+ "name": "N/A",
217
+ "value": LevelChoices.NONE.value,
218
+ "order": 0,
219
+ "impact_type_id": 1,
220
+ "emoji": LevelChoices.NONE.emoji
221
+ },
222
+ {
223
+
224
+ "name": "N/A",
225
+ "value": LevelChoices.NONE.value,
226
+ "order": 0,
227
+ "impact_type_id": 2,
228
+ "emoji": LevelChoices.NONE.emoji
229
+ },
230
+ {
231
+
232
+ "name": "N/A",
233
+ "value": LevelChoices.NONE.value,
234
+ "order": 0,
235
+ "impact_type_id": 3,
236
+ "emoji": LevelChoices.NONE.emoji
237
+ },
238
+ {
239
+
240
+ "name": "N/A",
241
+ "value": LevelChoices.NONE.value,
242
+ "order": 0,
243
+ "impact_type_id": 4,
244
+ "emoji": LevelChoices.NONE.emoji
245
+ },
213
246
  ]
214
247
 
215
248
  for add in adds:
216
249
  name = add["name"]
217
250
  try:
218
- impact_level = ImpactLevel.objects.filter(name=name).first()
219
-
220
251
  impact_type_id = add["impact_type_id"]
252
+ impact_level = ImpactLevel.objects.filter(name=name, impact_type_id=impact_type_id).first()
221
253
  impact_type = ImpactType.objects.filter(id=impact_type_id).first()
222
254
  if not impact_type:
223
255
  logger.error(f"There is no impact type id:'{impact_type_id}'.")
224
256
  continue
225
257
  if impact_level:
226
- logger.error(f"There is already an impact level with name:'{name}'.")
258
+ logger.error(f"There is already an impact level with name:'{name}' and type:'{impact_type_id}'.")
227
259
  continue
228
260
  new_impact_level = ImpactLevel(
229
261
  name=name,
@@ -249,7 +281,7 @@ class Migration(migrations.Migration):
249
281
  migrations.AlterField(
250
282
  model_name="impactlevel",
251
283
  name="emoji",
252
- field=models.CharField(default="", max_length=5),
284
+ field=models.CharField(default="", max_length=5),
253
285
  ),
254
286
  migrations.RemoveConstraint(
255
287
  model_name="impactlevel",
@@ -30,13 +30,13 @@ class Migration(migrations.Migration):
30
30
  ("LT", "Lowest"),
31
31
  ("NO", "N/A"),
32
32
  ],
33
- default="LT",
33
+ default="NO",
34
34
  max_length=2,
35
35
  ),
36
36
  ),
37
37
  migrations.AlterField(
38
38
  model_name="impacttype",
39
39
  name="emoji",
40
- field=models.CharField(default="", max_length=5),
40
+ field=models.CharField(default="", max_length=5),
41
41
  ),
42
42
  ]
@@ -0,0 +1,136 @@
1
+ # Generated by Django 4.2.7 on 2023-12-04 11:09
2
+
3
+
4
+ import logging
5
+
6
+ from django.db import migrations, models
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+ # Mapping for updating ImpactLevel names based on value and impact_type
11
+ IMPACT_LEVEL_NAME_MAPPING = {
12
+ # Format: (value, impact_type): (new_name, description)
13
+ ("LT", "business_impact"): (
14
+ "Business Lowest Not measurable",
15
+ "Lowest business impact, not measurable."
16
+ ),
17
+ ("LO", "business_impact"): (
18
+ "Business Lower Not measurable",
19
+ "Lower business impact, not measurable."
20
+ ),
21
+ ("MD", "business_impact"): (
22
+ "Uncertain Business Impact",
23
+ "Uncertain business value daily loss."
24
+ ),
25
+ ("HI", "business_impact"): (
26
+ "Major Business Impact (<5% BV daily loss)",
27
+ "Major business impact, less than 5% business value daily loss."
28
+ ),
29
+ ("HT", "business_impact"): (
30
+ "Critical Business Impact (>5% BV daily loss)",
31
+ "Critical business impact, more than 5% business value daily loss."
32
+ ),
33
+ ("NO", "business_impact"): (
34
+ "No impact on business.",
35
+ ""
36
+ ),
37
+ ("LT", "customers_impact"): (
38
+ "Cosmetic issues for few customers",
39
+ "Minor functional affecting few users / cosmetic issues."
40
+ ),
41
+ ("LO", "customers_impact"): (
42
+ "Minor functional issues for many customers",
43
+ "Minor functional issues affecting many customers."
44
+ ),
45
+ ("MD", "customers_impact"): (
46
+ "Major functional issues for many customers",
47
+ "Many customer with major functional issues (no affecting BV)."
48
+ ),
49
+ ("HI", "customers_impact"): (
50
+ "Some customers have major issues",
51
+ "Purchase flow experience with major experience issues impacting <5% of customers.\nAccess to product not working affecting <5% of customers/errors\nMarketplace unstable <30% errors."
52
+ ),
53
+ ("HT", "customers_impact"): (
54
+ "Critical issue for many customers",
55
+ "Purchase flow experience with major experience issues impacting >5% of customers.\nAccess to product not working affecting >5% of customers/errors\nMarketplace unstable >30% errors."
56
+ ),
57
+ ("NO", "customers_impact"): (
58
+ "No impact for customers.",
59
+ ""
60
+ ),
61
+ ("LT", "sellers_impact"): (
62
+ "Cosmetic issues for few sellers",
63
+ "Minor cosmetic issues affecting few sellers."
64
+ ),
65
+ ("LO", "sellers_impact"): (
66
+ "Minor functional issues for many sellers",
67
+ "Minor functional issues affecting many sellers."
68
+ ),
69
+ ("MD", "sellers_impact"): (
70
+ "Major functional issues for many sellers",
71
+ "Many sellers with major functional issues (no affecting fulfillment / catalog availability / order).\nIssues affecting commercial operations (e.g. wrong pricing on inventory / offers / etc) of big part of our inventory (e.g. big / important sellers)."
72
+ ),
73
+ ("HI", "sellers_impact"): (
74
+ "Some sellers have major issues",
75
+ "Toolbox access hindered affecting <20% of sellers.\nImpossibility of publishing / modifying catalogue affecting <20% of sellers."
76
+ ),
77
+ ("HT", "sellers_impact"): (
78
+ "Critical issue for many sellers",
79
+ "Toolbox access hindered affecting >20% of sellers.\nImpossibility of publishing / modifying catalogue affecting >20% of sellers."
80
+ ),
81
+ ("NO", "sellers_impact"): (
82
+ "No impact for sellers.",
83
+ ""
84
+ ),
85
+ ("LT", "employees_impact"): (
86
+ "Degraded service for MM workers or partners but not blocked",
87
+ "Service is degraded for MM workers or partners, but they are not blocked."
88
+ ),
89
+ ("LO", "employees_impact"): (
90
+ "Few MM workers or partners affected systematically or blocked",
91
+ "A few MM workers or partners are systematically affected or blocked."
92
+ ),
93
+ ("MD", "employees_impact"): (
94
+ "Full departments blocked on their work.",
95
+ "Entire departments are blocked in their work."
96
+ ),
97
+ ("NO", "employees_impact"): (
98
+ "No impact for employee.",
99
+ ""
100
+ ),
101
+ }
102
+
103
+
104
+ def update_impact_level_names(apps, _schema_editor):
105
+ ImpactLevel = apps.get_model("incidents", "ImpactLevel")
106
+ ImpactType = apps.get_model("incidents", "ImpactType")
107
+ for (value, impact_type_value), (new_name, description) in IMPACT_LEVEL_NAME_MAPPING.items():
108
+ try:
109
+ impact_type = ImpactType.objects.filter(value=impact_type_value).first()
110
+ if not impact_type:
111
+ logger.warning(f"ImpactType '{impact_type}' does not exist. Skipping update for value '{value}' and impact_type '{impact_type_value}'.")
112
+ continue
113
+
114
+ impact_level = ImpactLevel.objects.get(value=value, impact_type=impact_type.id)
115
+ impact_level.name = new_name
116
+ impact_level.description = description
117
+ impact_level.save()
118
+ logger.info(f"Updated ImpactLevel ({value}, {impact_type}) to name '{new_name}'")
119
+ except ImpactLevel.DoesNotExist:
120
+ logger.warning(f"ImpactLevel with value '{value}' and impact_type '{impact_type}' does not exist.")
121
+
122
+
123
+ class Migration(migrations.Migration):
124
+
125
+ dependencies = [
126
+ ("incidents", "0014_update_components_slack_groups"),
127
+ ]
128
+
129
+ operations = [
130
+ migrations.AddField(
131
+ model_name="impactlevel",
132
+ name="description",
133
+ field=models.TextField(null=True, blank=True),
134
+ ),
135
+ migrations.RunPython(update_impact_level_names),
136
+ ]
@@ -0,0 +1,84 @@
1
+ # Generated by Django 4.2.7 on 2023-12-04 11:09
2
+
3
+
4
+ import logging
5
+
6
+ from django.db import migrations
7
+
8
+ logger = logging.getLogger(__name__)
9
+
10
+
11
+ def update_incidents(apps, _schema_editor):
12
+ ImpactLevel = apps.get_model("incidents", "ImpactLevel")
13
+ ImpactType = apps.get_model("incidents", "ImpactType")
14
+ Incident = apps.get_model("incidents", "Incident")
15
+
16
+ business_impact_type = ImpactType.objects.filter(value="business_impact").first()
17
+ if not business_impact_type:
18
+ logger.error("ImpactType 'business_impact' does not exist. Skipping incident update.")
19
+ return
20
+
21
+ md_impact_level = ImpactLevel.objects.filter(value="MD", impact_type=business_impact_type.id).first()
22
+ if not md_impact_level:
23
+ logger.error("ImpactLevel 'MD' for business_impact does not exist. Skipping incident update.")
24
+ return
25
+
26
+ for level_value in ["LT", "LO"]:
27
+ old_impact_level = ImpactLevel.objects.filter(value=level_value, impact_type=business_impact_type.id).first()
28
+ if not old_impact_level:
29
+ logger.error(f"ImpactLevel '{level_value}' for business_impact does not exist. Skipping.")
30
+ continue
31
+
32
+ # Find incidents that have the old impact level through the impacts relationship
33
+ incidents_with_old_level = Incident.objects.filter(impacts=old_impact_level.id)
34
+ updated_count = 0
35
+
36
+ for incident in incidents_with_old_level:
37
+ # Remove the old impact level and add the new one if not already present
38
+ incident.impacts.remove(old_impact_level)
39
+ if not incident.impacts.filter(id=md_impact_level.id).exists():
40
+ incident.impacts.add(md_impact_level)
41
+ updated_count += 1
42
+
43
+ logger.info(f"Updated {updated_count} incidents from impact_level '{level_value}' to 'MD' for business_impact.")
44
+
45
+
46
+ def remove_old_impact_levels(apps, _schema_editor):
47
+ ImpactLevel = apps.get_model("incidents", "ImpactLevel")
48
+ ImpactType = apps.get_model("incidents", "ImpactType")
49
+ Impact = apps.get_model("incidents", "Impact")
50
+
51
+ business_impact_type = ImpactType.objects.filter(value="business_impact").first()
52
+ if not business_impact_type:
53
+ logger.error("ImpactType 'business_impact' does not exist. Skipping impact level removal.")
54
+ return
55
+
56
+ md_impact_level = ImpactLevel.objects.filter(value="MD", impact_type=business_impact_type.id).first()
57
+ if not md_impact_level:
58
+ logger.error("ImpactLevel 'MD' for business_impact does not exist. Cannot update Impact objects.")
59
+ return
60
+
61
+ for level_value in ["LT", "LO"]:
62
+ impact_level = ImpactLevel.objects.filter(value=level_value, impact_type=business_impact_type.id).first()
63
+ if impact_level:
64
+ # Update all Impact objects that reference this impact level
65
+ impacts_to_update = Impact.objects.filter(impact_level=impact_level)
66
+ updated_count = impacts_to_update.update(impact_level=md_impact_level)
67
+ logger.info(f"Updated {updated_count} Impact objects from '{level_value}' to 'MD' for business_impact.")
68
+
69
+ # Now safe to delete the impact level
70
+ impact_level.delete()
71
+ logger.info(f"Removed ImpactLevel '{level_value}' for business_impact.")
72
+ else:
73
+ logger.error(f"ImpactLevel '{level_value}' for business_impact not found.")
74
+
75
+
76
+ class Migration(migrations.Migration):
77
+
78
+ dependencies = [
79
+ ("incidents", "0015_update_impact_level"),
80
+ ]
81
+ operations = [
82
+ migrations.RunPython(update_incidents),
83
+ migrations.RunPython(remove_old_impact_levels),
84
+ ]
@@ -50,12 +50,12 @@ class LevelChoices(models.TextChoices):
50
50
  self.LOWEST: 5,
51
51
  self.NONE: 6,
52
52
  }
53
- return priority_mapping.get(self, 5) # type: ignore [call-overload]
53
+ return priority_mapping.get(self, 6) # type: ignore [call-overload]
54
54
 
55
55
  @property
56
56
  def emoji(self) -> str:
57
57
  """Send emoji un function of priority."""
58
- none_emoji = ""
58
+ none_emoji = ""
59
59
  emoji_mapping = {
60
60
  self.HIGHEST: "⏫",
61
61
  self.HIGH: "🔼",
@@ -80,9 +80,13 @@ class ImpactLevel(models.Model):
80
80
  default="",
81
81
  help_text="Description for the impact level for this impact type.",
82
82
  )
83
- value = models.CharField(choices=LevelChoices.choices, max_length=2, default="LT")
83
+ value = models.CharField(choices=LevelChoices.choices, max_length=2, default="NO")
84
84
  order = models.PositiveSmallIntegerField(default=10)
85
-
85
+ description = models.TextField(
86
+ blank=True,
87
+ null=True,
88
+ help_text="Detailed multi-line description for this impact level.",
89
+ )
86
90
  class Meta(TypedModelMeta):
87
91
  constraints = [
88
92
  models.UniqueConstraint(
@@ -1,7 +1,7 @@
1
1
  {% extends '../layouts/view_filters.html' %}
2
2
 
3
3
  {% block page_title %}
4
- Components List <div role="status" class="hx-progress htmx-indicator inline">
4
+ Issue category list <div role="status" class="hx-progress htmx-indicator inline">
5
5
  <svg class="inline mr-2 w-6 h-6 text-gray-200 animate-spin dark:text-gray-600 fill-primary" viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
6
6
  <path d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z" fill="currentColor"/>
7
7
  <path d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z" fill="currentFill"/>
@@ -153,7 +153,12 @@ class OpenModal(SlackModal):
153
153
  def get_intro_blocks() -> list[Block]:
154
154
  blocks: list[Block] = [
155
155
  SectionBlock(
156
- text="Hello and thanks for reporting a new incident! :beetle:\n\nPlease report as much information as you can!"
156
+ text=(
157
+ "Hello and thanks for reporting a new incident! :beetle:\n\n"
158
+ "Please report as much information as you can!\n\n"
159
+ "More information about the incident process in this "
160
+ "<https://manomano.atlassian.net/wiki/spaces/TC/pages/3928261283/IMPACT+-+Incident+Management+Platform|documentation>."
161
+ )
157
162
  )
158
163
  ]
159
164
 
@@ -8,7 +8,9 @@ from typing import TYPE_CHECKING, Any, Never, cast
8
8
  from django import forms
9
9
  from django.conf import settings
10
10
  from django.db.models import Model, QuerySet
11
+ from slack_sdk.models.blocks.basic_components import MarkdownTextObject
11
12
  from slack_sdk.models.blocks.blocks import (
13
+ ContextBlock,
12
14
  DividerBlock,
13
15
  SectionBlock,
14
16
  )
@@ -16,6 +18,7 @@ from slack_sdk.models.views import View
16
18
 
17
19
  from firefighter.firefighter.utils import get_in
18
20
  from firefighter.incidents.forms.select_impact import SelectImpactForm
21
+ from firefighter.incidents.models.impact import ImpactType
19
22
  from firefighter.incidents.models.priority import Priority
20
23
  from firefighter.slack.slack_app import SlackApp
21
24
  from firefighter.slack.views.modals import modal_open
@@ -85,13 +88,14 @@ class SelectImpactModal(
85
88
  initial_form_values_impact[field_name] = None # type: ignore
86
89
  blocks = [
87
90
  SectionBlock(
88
- text=f"{SLACK_APP_EMOJI} Define the following impact to find the incident's priority:"
91
+ text=f"{SLACK_APP_EMOJI} Define the impact(s) to find the incident priority (<https://manomano.atlassian.net/wiki/spaces/TC/pages/4024500413/Priority+levels|documentation>):"
89
92
  ),
90
93
  *self.get_form_class()(initial=initial_form_values_impact).slack_blocks(
91
94
  "section_accessory"
92
95
  ),
93
96
  ]
94
97
  priority_data = open_incident_context.get("priority")
98
+
95
99
  if open_incident_context and priority_data:
96
100
  if not isinstance(priority_data, Priority):
97
101
  priority = Priority.objects.get(pk=priority_data)
@@ -101,11 +105,24 @@ class SelectImpactModal(
101
105
  err_msg = f"Invalid priority data: {priority_data}" # type: ignore[unreachable]
102
106
  raise TypeError(err_msg)
103
107
  process = ":slack: Slack :jira_new: Jira ticket" if open_incident_context.get("response_type") == "critical" else ":jira_new: Jira ticket"
108
+
109
+ impact_descriptions = self.extract_descriptions(open_incident_context)
110
+
104
111
  blocks.extend((
105
112
  DividerBlock(),
106
- SectionBlock(
107
- text=f"💡 Selected priority: {priority} - {priority.description}\n⏱️ SLA: {priority.sla}\n{process}"
108
- ),
113
+ ContextBlock(
114
+ elements=[
115
+ MarkdownTextObject(
116
+ text=(
117
+ f":dart: Selected priority: *{priority} - {priority.description}*\n"
118
+ f"⏱️ SLA: {priority.sla}\n"
119
+ f":gear: Process: {process}\n"
120
+ f":pushpin: Selected impacts:\n"
121
+ f"{impact_descriptions}\n"
122
+ )
123
+ )
124
+ ]
125
+ )
109
126
  ))
110
127
 
111
128
  return View(
@@ -117,6 +134,20 @@ class SelectImpactModal(
117
134
  submit="Save impacts",
118
135
  )
119
136
 
137
+ def extract_descriptions(self, open_incident_context: OpeningData) -> str:
138
+ impact_form_data = open_incident_context.get("impact_form_data", {})
139
+ impact_descriptions = ""
140
+ if impact_form_data:
141
+ for value in impact_form_data.values():
142
+ if value.name != "NO" and value.description:
143
+ if hasattr(value, "impact_type_id") and value.impact_type_id:
144
+ impact_type = ImpactType.objects.get(pk=value.impact_type_id)
145
+ if impact_type:
146
+ impact_descriptions += f"\u00A0\u00A0 :exclamation: {impact_type} - {value}\n"
147
+ for line in str(value.description).splitlines():
148
+ impact_descriptions += f"\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0 • {line}\n"
149
+ return impact_descriptions
150
+
120
151
  def handle_modal_fn( # type: ignore
121
152
  self,
122
153
  ack: Ack,