firefighter-incident 0.0.6__tar.gz → 0.0.8__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.8}/PKG-INFO +1 -1
  2. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/_version.py +2 -2
  3. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/avatar/avatar.py +2 -2
  4. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/card/card.py +2 -2
  5. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/export_button/export_button.py +2 -2
  6. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/form/form.py +2 -2
  7. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/form_field/form_field.py +2 -2
  8. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/messages/messages.py +2 -2
  9. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/modal/modal.py +2 -2
  10. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/select_impact.py +4 -4
  11. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/menus.py +1 -1
  12. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0008_impact_level.py +54 -22
  13. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0012_alter_impactlevel.py +2 -2
  14. firefighter_incident-0.0.8/firefighter/incidents/migrations/0015_update_impact_level.py +136 -0
  15. firefighter_incident-0.0.8/firefighter/incidents/migrations/0016_update_business_incidents_and_level.py +84 -0
  16. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/impact.py +8 -4
  17. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/component_list.html +1 -1
  18. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/open.py +6 -1
  19. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/select_impact.py +35 -4
  20. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_forms/test_form_select_impact.py +3 -3
  21. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/pyproject.toml +1 -0
  22. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/.gitignore +0 -0
  23. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/LICENSE +0 -0
  24. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/README.md +0 -0
  25. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/__init__.py +0 -0
  26. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/__init__.py +0 -0
  27. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/admin.py +0 -0
  28. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/apps.py +0 -0
  29. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/authentication.py +0 -0
  30. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/migrations/0001_initial.py +0 -0
  31. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/migrations/0002_alter_apitokenproxy_options.py +0 -0
  32. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/migrations/0003_alter_apitokenproxy_options.py +0 -0
  33. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/migrations/__init__.py +0 -0
  34. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/models.py +0 -0
  35. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/permissions.py +0 -0
  36. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/renderer.py +0 -0
  37. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/serializers.py +0 -0
  38. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/urls.py +0 -0
  39. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/__init__.py +0 -0
  40. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/_base.py +0 -0
  41. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/components.py +0 -0
  42. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/environments.py +0 -0
  43. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/groups.py +0 -0
  44. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/incident_cost_types.py +0 -0
  45. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/incident_costs.py +0 -0
  46. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/incidents.py +0 -0
  47. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/api/views/severities.py +0 -0
  48. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/__init__.py +0 -0
  49. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/avatar/__init__.py +0 -0
  50. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/avatar/avatar.html +0 -0
  51. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/card/__init__.py +0 -0
  52. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/card/card.html +0 -0
  53. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/export_button/__init__.py +0 -0
  54. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/export_button/export_button.html +0 -0
  55. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/form/__init__.py +0 -0
  56. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/form/form.html +0 -0
  57. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/form_field/__init__.py +0 -0
  58. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/form_field/form_field.html +0 -0
  59. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/messages/__init__.py +0 -0
  60. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/messages/messages.html +0 -0
  61. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/modal/__init__.py +0 -0
  62. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/components/modal/modal.html +0 -0
  63. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/__init__.py +0 -0
  64. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/admin.py +0 -0
  65. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/apps.py +0 -0
  66. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/client.py +0 -0
  67. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/management/__init__.py +0 -0
  68. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/management/commands/__init__.py +0 -0
  69. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/management/commands/sort_postmortems.py +0 -0
  70. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/management/commands/sort_runbooks.py +0 -0
  71. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/management/commands/sync_postmortems.py +0 -0
  72. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/management/commands/sync_runbooks.py +0 -0
  73. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/migrations/0001_initial_oss.py +0 -0
  74. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/migrations/__init__.py +0 -0
  75. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/models.py +0 -0
  76. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/serializers.py +0 -0
  77. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/service.py +0 -0
  78. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/signals/__init__.py +0 -0
  79. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/signals/incident_updated.py +0 -0
  80. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tables.py +0 -0
  81. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tasks/__init__.py +0 -0
  82. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tasks/archive_postmortems.py +0 -0
  83. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tasks/sort_runbooks.py +0 -0
  84. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tasks/sync_pages_content.py +0 -0
  85. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tasks/sync_postmortems.py +0 -0
  86. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/tasks/sync_runbooks.py +0 -0
  87. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/templates/oncall_team.xml +0 -0
  88. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/templates/pages/runbook_list.html +0 -0
  89. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/urls.py +0 -0
  90. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/utils.py +0 -0
  91. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/views/__init__.py +0 -0
  92. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/views/api.py +0 -0
  93. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/views/postmortem/__init__.py +0 -0
  94. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/views/postmortem/postmortem_detail.py +0 -0
  95. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/views/runbook/__init__.py +0 -0
  96. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/confluence/views/runbook/runbook_list.py +0 -0
  97. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/__init__.py +0 -0
  98. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/admin.py +0 -0
  99. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/apps.py +0 -0
  100. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/asgi.py +0 -0
  101. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/celery_client.py +0 -0
  102. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/fields_forms_widgets.py +0 -0
  103. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/filters.py +0 -0
  104. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/formats/__init__.py +0 -0
  105. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/formats/en/__init__.py +0 -0
  106. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/formats/en/formats.py +0 -0
  107. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/http_client.py +0 -0
  108. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/management/__init__.py +0 -0
  109. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/management/commands/__init__.py +0 -0
  110. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/management/commands/task.py +0 -0
  111. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/middleware.py +0 -0
  112. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/__init__.py +0 -0
  113. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/__init__.py +0 -0
  114. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/api.py +0 -0
  115. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/caches.py +0 -0
  116. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/celery.py +0 -0
  117. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/common.py +0 -0
  118. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/confluence.py +0 -0
  119. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/jira_app.py +0 -0
  120. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/logging.py +0 -0
  121. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/pagerduty.py +0 -0
  122. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/raid.py +0 -0
  123. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/components/slack.py +0 -0
  124. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/environments/__init__.py +0 -0
  125. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/environments/dev.py +0 -0
  126. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/environments/prod.py +0 -0
  127. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/settings_builder.py +0 -0
  128. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/settings/settings_utils.py +0 -0
  129. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/sso.py +0 -0
  130. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/tables_utils.py +0 -0
  131. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/templates/admin/base.html +0 -0
  132. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/templates/admin/login.html +0 -0
  133. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/templates/admin/send_message_conversation.html +0 -0
  134. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/templates/robots.txt +0 -0
  135. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/urls.py +0 -0
  136. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/utils.py +0 -0
  137. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/views.py +0 -0
  138. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/firefighter/wsgi.py +0 -0
  139. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/__init__.py +0 -0
  140. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/admin.py +0 -0
  141. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/apps.py +0 -0
  142. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/enums.py +0 -0
  143. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/factories.py +0 -0
  144. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/__init__.py +0 -0
  145. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/close_incident.py +0 -0
  146. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/create_incident.py +0 -0
  147. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/edit.py +0 -0
  148. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/update_key_events.py +0 -0
  149. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/update_roles.py +0 -0
  150. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/update_status.py +0 -0
  151. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/forms/utils.py +0 -0
  152. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0001_initial_oss.py +0 -0
  153. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0002_alter_severity_name_alter_user_password_featureteam.py +0 -0
  154. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0003_delete_featureteam.py +0 -0
  155. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0004_incidentupdate_environment.py +0 -0
  156. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0005_enable_from_p1_to_p5_priority.py +0 -0
  157. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0006_update_group_names.py +0 -0
  158. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0007_update_component_name.py +0 -0
  159. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0009_update_sla.py +0 -0
  160. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0010_update_components.py +0 -0
  161. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0011_update_incidents.py +0 -0
  162. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0013_add_missing_component.py +0 -0
  163. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/0014_update_components_slack_groups.py +0 -0
  164. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/migrations/__init__.py +0 -0
  165. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/__init__.py +0 -0
  166. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/component.py +0 -0
  167. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/environment.py +0 -0
  168. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/group.py +0 -0
  169. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/incident.py +0 -0
  170. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/incident_cost.py +0 -0
  171. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/incident_cost_type.py +0 -0
  172. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/incident_membership.py +0 -0
  173. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/incident_role_type.py +0 -0
  174. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/incident_update.py +0 -0
  175. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/metric_type.py +0 -0
  176. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/milestone_type.py +0 -0
  177. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/priority.py +0 -0
  178. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/severity.py +0 -0
  179. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/models/user.py +0 -0
  180. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/signals.py +0 -0
  181. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/css/incident.css +0 -0
  182. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/css/main.css +0 -0
  183. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/css/main.min.css +0 -0
  184. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/css/tailwind.css +0 -0
  185. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/android-chrome-192x192.png +0 -0
  186. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/android-chrome-512x512.png +0 -0
  187. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/apple-touch-icon.png +0 -0
  188. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/favicon-16x16.png +0 -0
  189. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/favicon-32x32.png +0 -0
  190. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/favicon.ico +0 -0
  191. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/favicon/site.webmanifest +0 -0
  192. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/gameday.png +0 -0
  193. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/logo-firefighter.png +0 -0
  194. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/p1.png +0 -0
  195. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/p2.png +0 -0
  196. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/p3.png +0 -0
  197. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/p4.png +0 -0
  198. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/img/p5.png +0 -0
  199. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/js/main.js +0 -0
  200. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/static/js/main.min.js +0 -0
  201. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/tables.py +0 -0
  202. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/tasks/__init__.py +0 -0
  203. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/tasks/updateoncall.py +0 -0
  204. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/errors/base.html +0 -0
  205. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/filter.html +0 -0
  206. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/table/priority_column.html +0 -0
  207. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/table/status_column.html +0 -0
  208. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/table.html +0 -0
  209. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/widgets/form_container.html +0 -0
  210. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/widgets/grouped_checkbox_nested.html +0 -0
  211. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/incidents/widgets/input_option.html +0 -0
  212. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/index.html +0 -0
  213. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/created_at_help.html +0 -0
  214. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/environment_pill.html +0 -0
  215. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/footer.html +0 -0
  216. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/header.html +0 -0
  217. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/incident_card.html +0 -0
  218. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/incident_metrics.html +0 -0
  219. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/incident_timeline.html +0 -0
  220. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view.html +0 -0
  221. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view_modal.html +0 -0
  222. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/partial_table_list_paginated.html +0 -0
  223. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/priority_icon.html +0 -0
  224. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/priority_pill.html +0 -0
  225. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/status_pill.html +0 -0
  226. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/table.html +0 -0
  227. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/user_card.html +0 -0
  228. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/partials/user_tooltip.html +0 -0
  229. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/layouts/view_filters.html +0 -0
  230. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/component_detail.html +0 -0
  231. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/dashboard.html +0 -0
  232. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/docs_metrics.html +0 -0
  233. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_create.html +0 -0
  234. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_detail.html +0 -0
  235. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_list.html +0 -0
  236. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_role_types_detail.html +0 -0
  237. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_role_types_list.html +0 -0
  238. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_statistics.html +0 -0
  239. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_statistics_partial.html +0 -0
  240. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/incident_update_key_events_form.html +0 -0
  241. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/templates/pages/user_detail.html +0 -0
  242. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/urls.py +0 -0
  243. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/__init__.py +0 -0
  244. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/components/__init__.py +0 -0
  245. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/components/details.py +0 -0
  246. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/components/list.py +0 -0
  247. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/date_filter.py +0 -0
  248. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/date_utils.py +0 -0
  249. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/docs/__init__.py +0 -0
  250. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/docs/metrics.py +0 -0
  251. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/docs/role_types.py +0 -0
  252. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/errors.py +0 -0
  253. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/reports.py +0 -0
  254. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/users/__init__.py +0 -0
  255. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/users/details.py +0 -0
  256. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/incidents/views/views.py +0 -0
  257. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/__init__.py +0 -0
  258. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/admin.py +0 -0
  259. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/apps.py +0 -0
  260. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/client.py +0 -0
  261. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/migrations/0001_initial_oss.py +0 -0
  262. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/migrations/__init__.py +0 -0
  263. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/models.py +0 -0
  264. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/tasks/__init__.py +0 -0
  265. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/tasks/sync_users_jira.py +0 -0
  266. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/types.py +0 -0
  267. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/jira_app/utils.py +0 -0
  268. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/logging/__init__.py +0 -0
  269. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/logging/custom_json_formatter.py +0 -0
  270. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/logging/pretty_formatter.py +0 -0
  271. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/__init__.py +0 -0
  272. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/admin.py +0 -0
  273. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/apps.py +0 -0
  274. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/client.py +0 -0
  275. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/forms/__init__.py +0 -0
  276. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/forms/create_pagerduty_incident.py +0 -0
  277. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/migrations/0001_initial_oss.py +0 -0
  278. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/migrations/__init__.py +0 -0
  279. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/models.py +0 -0
  280. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/service.py +0 -0
  281. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/signals/__init__.py +0 -0
  282. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/signals/get_invites_from_pagerduty.py +0 -0
  283. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/signals/incident_channel_done_oncall.py +0 -0
  284. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/tasks/__init__.py +0 -0
  285. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/tasks/fetch_oncall.py +0 -0
  286. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/tasks/fetch_services.py +0 -0
  287. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/tasks/fetch_users.py +0 -0
  288. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/tasks/trigger_oncall.py +0 -0
  289. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/templates/pages/oncall_list.html +0 -0
  290. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/templates/pages/oncall_trigger.html +0 -0
  291. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view.html +0 -0
  292. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view_modal.html +0 -0
  293. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/urls.py +0 -0
  294. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/views/__init__.py +0 -0
  295. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/views/oncall_list.py +0 -0
  296. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/pagerduty/views/oncall_trigger.py +0 -0
  297. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/__init__.py +0 -0
  298. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/admin.py +0 -0
  299. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/apps.py +0 -0
  300. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/client.py +0 -0
  301. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/forms.py +0 -0
  302. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/messages.py +0 -0
  303. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/migrations/0001_initial_oss.py +0 -0
  304. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/migrations/0002_featureteam_remove_qualifierrotation_jira_user_and_more.py +0 -0
  305. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/migrations/__init__.py +0 -0
  306. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/models.py +0 -0
  307. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/resources.py +0 -0
  308. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/serializers.py +0 -0
  309. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/service.py +0 -0
  310. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/signals/__init__.py +0 -0
  311. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/signals/incident_created.py +0 -0
  312. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/signals/incident_updated.py +0 -0
  313. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/tasks/__init__.py +0 -0
  314. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/types.py +0 -0
  315. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/urls.py +0 -0
  316. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/utils.py +0 -0
  317. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/views/__init__.py +0 -0
  318. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/raid/views/open_normal.py +0 -0
  319. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/__init__.py +0 -0
  320. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/admin.py +0 -0
  321. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/apps.py +0 -0
  322. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/factories.py +0 -0
  323. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/forms/__init__.py +0 -0
  324. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/forms/sos_form.py +0 -0
  325. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/management/__init__.py +0 -0
  326. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/management/commands/__init__.py +0 -0
  327. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/management/commands/generate_manifest.py +0 -0
  328. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/messages/__init__.py +0 -0
  329. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/messages/base.py +0 -0
  330. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/messages/slack_messages.py +0 -0
  331. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/migrations/0001_initial_oss.py +0 -0
  332. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/migrations/0002_usergroup_tag.py +0 -0
  333. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/migrations/0003_alter_usergroup_tag.py +0 -0
  334. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/migrations/0004_alter_usergroup_components.py +0 -0
  335. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/migrations/__init__.py +0 -0
  336. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/__init__.py +0 -0
  337. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/conversation.py +0 -0
  338. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/incident_channel.py +0 -0
  339. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/message.py +0 -0
  340. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/sos.py +0 -0
  341. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/user.py +0 -0
  342. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/models/user_group.py +0 -0
  343. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/rules.py +0 -0
  344. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/__init__.py +0 -0
  345. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/create_incident_conversation.py +0 -0
  346. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/get_users.py +0 -0
  347. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/handle_incident_channel_done.py +0 -0
  348. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/incident_closed.py +0 -0
  349. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/incident_updated.py +0 -0
  350. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/postmortem_created.py +0 -0
  351. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/signals/roles_reminders.py +0 -0
  352. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/slack_app.py +0 -0
  353. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/slack_incident_context.py +0 -0
  354. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/slack_templating.py +0 -0
  355. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/__init__.py +0 -0
  356. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/fetch_conversations_members.py +0 -0
  357. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/reminder_postmortem.py +0 -0
  358. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/send_message.py +0 -0
  359. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/send_reminders.py +0 -0
  360. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/sync_users.py +0 -0
  361. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/update_usergroups_members.py +0 -0
  362. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/tasks/update_users.py +0 -0
  363. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/urls.py +0 -0
  364. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/utils.py +0 -0
  365. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/__init__.py +0 -0
  366. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/__init__.py +0 -0
  367. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/actions_and_shortcuts.py +0 -0
  368. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/channel_archive.py +0 -0
  369. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/channel_id_changed.py +0 -0
  370. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/channel_rename.py +0 -0
  371. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/channel_shared.py +0 -0
  372. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/channel_unarchive.py +0 -0
  373. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/channel_unshared.py +0 -0
  374. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/commands.py +0 -0
  375. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/home.py +0 -0
  376. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/member_joined_channel.py +0 -0
  377. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/member_left_channel.py +0 -0
  378. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/message.py +0 -0
  379. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/message_deleted.py +0 -0
  380. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/events/reaction_added.py +0 -0
  381. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/__init__.py +0 -0
  382. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/base_modal/__init__.py +0 -0
  383. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/base_modal/base.py +0 -0
  384. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/base_modal/base_mixins.py +0 -0
  385. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/base_modal/form_utils.py +0 -0
  386. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/base_modal/mixins.py +0 -0
  387. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/base_modal/modal_utils.py +0 -0
  388. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/close.py +0 -0
  389. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/downgrade_workflow.py +0 -0
  390. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/edit.py +0 -0
  391. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/key_event_message.py +0 -0
  392. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/__init__.py +0 -0
  393. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/check_current_incidents.py +0 -0
  394. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/details/__init__.py +0 -0
  395. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/details/critical.py +0 -0
  396. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/set_details.py +0 -0
  397. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/opening/types.py +0 -0
  398. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/postmortem.py +0 -0
  399. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/select.py +0 -0
  400. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/send_sos.py +0 -0
  401. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/status.py +0 -0
  402. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/trigger_oncall.py +0 -0
  403. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/update.py +0 -0
  404. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/update_roles.py +0 -0
  405. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/modals/update_status.py +0 -0
  406. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter/slack/views/views.py +0 -0
  407. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/components.json +0 -0
  408. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/environments.json +0 -0
  409. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/groups.json +0 -0
  410. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/impact_level.json +0 -0
  411. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/impact_type.json +0 -0
  412. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/incident_role_type.json +0 -0
  413. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/metric_type.json +0 -0
  414. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/milestone_type.json +0 -0
  415. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/priorities.json +0 -0
  416. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/incidents/severities.json +0 -0
  417. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_fixtures/raid/area.json +0 -0
  418. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/__init__.py +0 -0
  419. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/conftest.py +0 -0
  420. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_api/test_api_landbot.py +0 -0
  421. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_api/test_api_urls.py +0 -0
  422. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_confluence/test_confluence_utils.py +0 -0
  423. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_firefighter/test_firefighter_utils.py +0 -0
  424. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_firefighter/test_logging.py +0 -0
  425. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_firefighter/test_urls.py +0 -0
  426. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_forms/test_form_utils.py +0 -0
  427. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_forms/test_update_key_events.py +0 -0
  428. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_incident_urls.py +0 -0
  429. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_models/test_incident_model.py +0 -0
  430. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_models/test_migrations/test_incident_migrations.py +0 -0
  431. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_utils/test_date_utils.py +0 -0
  432. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_views/test_incident_detail_view.py +0 -0
  433. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_incidents/test_views/test_index_view.py +0 -0
  434. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_raid/test_raid_client_users.py +0 -0
  435. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_raid/test_raid_transitions.py +0 -0
  436. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_raid/test_raid_utils.py +0 -0
  437. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/conftest.py +0 -0
  438. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/test_models/test_conversations.py +0 -0
  439. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/test_models/test_incident_channel.py +0 -0
  440. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/test_models/test_slack_user.py +0 -0
  441. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/test_slack_utils.py +0 -0
  442. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/views/modals/test_close.py +0 -0
  443. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/views/modals/test_open.py +0 -0
  444. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/views/modals/test_send_sos.py +0 -0
  445. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/views/modals/test_status.py +0 -0
  446. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/firefighter_tests/test_slack/views/modals/test_update_status.py +0 -0
  447. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/gunicorn.conf.py +0 -0
  448. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/main.py +0 -0
  449. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/manage.py +0 -0
  450. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/package-lock.json +0 -0
  451. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/package.json +0 -0
  452. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/scripts/gen_credits.py +0 -0
  453. {firefighter_incident-0.0.6 → firefighter_incident-0.0.8}/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.8
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.8'
21
+ __version_tuple__ = version_tuple = (0, 0, 8)
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  from typing import Any, NotRequired, Required, TypedDict
5
5
 
6
- from django_components import EmptyTuple, component
6
+ from django_components import component
7
7
 
8
8
  from firefighter.incidents.models.user import User
9
9
 
@@ -25,7 +25,7 @@ class Kwargs(TypedDict, total=False):
25
25
 
26
26
 
27
27
  @component.register("avatar")
28
- class Avatar(component.Component[EmptyTuple, Kwargs, Data, Any]): # type: ignore[type-var]
28
+ class Avatar(component.Component[tuple[()], Kwargs, Data, Any]): # type: ignore[type-var]
29
29
  template_name = "avatar/avatar.html"
30
30
 
31
31
  def get_context_data(self, user: User, **kwargs: Any) -> Data:
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  import logging
4
4
  from typing import Any, NotRequired, Required, TypedDict, Unpack
5
5
 
6
- from django_components import EmptyTuple, component
6
+ from django_components import component
7
7
 
8
8
  logger = logging.getLogger(__name__)
9
9
 
@@ -14,7 +14,7 @@ class Data(TypedDict, total=False):
14
14
 
15
15
 
16
16
  @component.register("card")
17
- class Card(component.Component[EmptyTuple, Data, Data, Any]): # type: ignore[type-var]
17
+ class Card(component.Component[tuple[()], Data, Data, Any]): # type: ignore[type-var]
18
18
  template_name = "card/card.html"
19
19
 
20
20
  def get_context_data(self, *args: Any, **kwargs: Unpack[Data]) -> Data:
@@ -4,7 +4,7 @@ from collections.abc import Mapping, Sequence
4
4
  from typing import Any, NotRequired, Required, TypedDict
5
5
 
6
6
  from django.urls import reverse
7
- from django_components import EmptyTuple, component
7
+ from django_components import component
8
8
 
9
9
 
10
10
  class _Format(TypedDict):
@@ -27,7 +27,7 @@ class Kwargs(TypedDict, total=False):
27
27
 
28
28
 
29
29
  @component.register("export_button")
30
- class ExportButton(component.Component[EmptyTuple, Kwargs, Data, Any]): # type: ignore[type-var]
30
+ class ExportButton(component.Component[tuple[()], Kwargs, Data, Any]): # type: ignore[type-var]
31
31
  template_name = "export_button/export_button.html"
32
32
 
33
33
  def get_context_data(
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import Any, NotRequired, TypedDict
5
5
 
6
6
  from django import forms
7
- from django_components import EmptyTuple, component
7
+ from django_components import component
8
8
  from django_components.slots import SlotContent
9
9
 
10
10
  logger = logging.getLogger(__name__)
@@ -19,7 +19,7 @@ class Data(TypedDict):
19
19
 
20
20
 
21
21
  @component.register("form")
22
- class Form(component.Component[EmptyTuple, Data, Data, Slots]): # type: ignore[type-var] # type: ignore[override]
22
+ class Form(component.Component[tuple[()], Data, Data, Slots]): # type: ignore[type-var] # type: ignore[override]
23
23
  template_name = "form/form.html"
24
24
 
25
25
  def get_context_data(self, form: forms.Form, **kwargs: Any) -> Data: # type: ignore[override]
@@ -8,7 +8,7 @@ from typing import (
8
8
  )
9
9
 
10
10
  from django import forms
11
- from django_components import EmptyTuple, component
11
+ from django_components import component
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
@@ -23,7 +23,7 @@ class Kwargs(TypedDict, total=True):
23
23
 
24
24
 
25
25
  @component.register("form_field")
26
- class FormField(component.Component[EmptyTuple, Kwargs, Data, Any]): # type: ignore[type-var]
26
+ class FormField(component.Component[tuple[()], Kwargs, Data, Any]): # type: ignore[type-var]
27
27
  template_name = "form_field/form_field.html"
28
28
 
29
29
  def get_context_data(
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import Any, TypedDict
5
5
 
6
6
  from django.contrib.messages.storage.base import BaseStorage
7
- from django_components import EmptyTuple, component
7
+ from django_components import component
8
8
 
9
9
  logger = logging.getLogger(__name__)
10
10
 
@@ -14,7 +14,7 @@ class Data(TypedDict):
14
14
 
15
15
 
16
16
  @component.register("messages")
17
- class Messages(component.Component[EmptyTuple, Data, Data, Any]): # type: ignore[type-var]
17
+ class Messages(component.Component[tuple[()], Data, Data, Any]): # type: ignore[type-var]
18
18
  template_name = "messages/messages.html"
19
19
 
20
20
  def get_context_data(self, messages: BaseStorage, **kwargs: Any) -> Data:
@@ -4,7 +4,7 @@ import logging
4
4
  from typing import Any, NotRequired, Required, TypedDict, Unpack
5
5
 
6
6
  from django.utils.safestring import SafeString
7
- from django_components import EmptyTuple, component
7
+ from django_components import component
8
8
  from django_components.slots import SlotFunc
9
9
 
10
10
  logger = logging.getLogger(__name__)
@@ -28,7 +28,7 @@ class Slots(TypedDict):
28
28
 
29
29
 
30
30
  @component.register("modal")
31
- class Modal(component.Component[EmptyTuple, Kwargs, Data, Any]): # type: ignore[type-var]
31
+ class Modal(component.Component[tuple[()], Kwargs, Data, Any]): # type: ignore[type-var]
32
32
  template_name = "modal/modal.html"
33
33
 
34
34
  def get_context_data(self, *args: Any, **kwargs: Unpack[Kwargs]) -> Data:
@@ -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(