firefighter-incident 0.0.13__tar.gz → 0.0.14__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 (480) hide show
  1. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/PKG-INFO +2 -2
  2. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/README.md +1 -1
  3. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/_version.py +16 -3
  4. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/serializers.py +8 -8
  5. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/urls.py +8 -1
  6. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/_base.py +1 -1
  7. firefighter_incident-0.0.14/firefighter/api/views/components.py +10 -0
  8. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/incidents.py +9 -9
  9. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/raid.py +3 -0
  10. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/admin.py +24 -24
  11. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/factories.py +14 -5
  12. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/close_incident.py +4 -4
  13. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/create_incident.py +4 -4
  14. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/update_status.py +4 -4
  15. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/menus.py +2 -2
  16. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0005_enable_from_p1_to_p5_priority.py +7 -5
  17. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0009_update_sla.py +7 -5
  18. firefighter_incident-0.0.14/firefighter/incidents/migrations/0020_create_incident_category_model.py +64 -0
  19. firefighter_incident-0.0.14/firefighter/incidents/migrations/0021_copy_component_data_to_incident_category.py +57 -0
  20. firefighter_incident-0.0.14/firefighter/incidents/migrations/0022_add_incident_category_fields.py +34 -0
  21. firefighter_incident-0.0.14/firefighter/incidents/migrations/0023_populate_incident_category_references.py +57 -0
  22. firefighter_incident-0.0.14/firefighter/incidents/migrations/0024_remove_component_fields_and_model.py +26 -0
  23. firefighter_incident-0.0.14/firefighter/incidents/migrations/0025_make_incident_category_required.py +24 -0
  24. firefighter_incident-0.0.14/firefighter/incidents/migrations/0026_alter_incidentcategory_options_and_more.py +39 -0
  25. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/__init__.py +1 -1
  26. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/group.py +1 -1
  27. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/incident.py +15 -15
  28. firefighter_incident-0.0.13/firefighter/incidents/models/component.py → firefighter_incident-0.0.14/firefighter/incidents/models/incident_category.py +30 -29
  29. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/incident_update.py +3 -3
  30. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/tables.py +9 -9
  31. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/incident_card.html +1 -1
  32. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/incident_timeline.html +2 -2
  33. firefighter_incident-0.0.13/firefighter/incidents/templates/pages/component_detail.html → firefighter_incident-0.0.14/firefighter/incidents/templates/pages/incident_category_detail.html +13 -13
  34. firefighter_incident-0.0.13/firefighter/incidents/templates/pages/component_list.html → firefighter_incident-0.0.14/firefighter/incidents/templates/pages/incident_category_list.html +2 -2
  35. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_detail.html +3 -3
  36. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/urls.py +6 -6
  37. firefighter_incident-0.0.14/firefighter/incidents/views/components/details.py +33 -0
  38. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/components/list.py +9 -9
  39. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/reports.py +2 -2
  40. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/users/details.py +2 -2
  41. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/views.py +7 -7
  42. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/client.py +1 -1
  43. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/logging/custom_json_formatter.py +2 -1
  44. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/tasks/trigger_oncall.py +1 -1
  45. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/admin.py +0 -11
  46. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/client.py +3 -3
  47. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/forms.py +53 -19
  48. firefighter_incident-0.0.14/firefighter/raid/migrations/0003_delete_raidarea.py +16 -0
  49. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/models.py +2 -21
  50. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/serializers.py +5 -4
  51. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/service.py +29 -27
  52. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/signals/incident_created.py +4 -2
  53. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/utils.py +1 -1
  54. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/views/__init__.py +1 -1
  55. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/views/open_normal.py +2 -2
  56. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/admin.py +8 -8
  57. firefighter_incident-0.0.14/firefighter/slack/management/commands/switch_test_users.py +272 -0
  58. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/messages/slack_messages.py +5 -5
  59. firefighter_incident-0.0.14/firefighter/slack/migrations/0005_add_incident_categories_fields.py +33 -0
  60. firefighter_incident-0.0.14/firefighter/slack/migrations/0006_copy_components_to_incident_categories.py +57 -0
  61. firefighter_incident-0.0.14/firefighter/slack/migrations/0007_remove_components_fields.py +22 -0
  62. firefighter_incident-0.0.14/firefighter/slack/migrations/0008_alter_conversation_incident_categories_and_more.py +33 -0
  63. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/conversation.py +3 -3
  64. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/incident_channel.py +1 -1
  65. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/user.py +1 -1
  66. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/user_group.py +3 -3
  67. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/rules.py +1 -1
  68. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/get_users.py +2 -2
  69. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/incident_updated.py +1 -1
  70. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/utils.py +2 -2
  71. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/home.py +2 -2
  72. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/base_modal/form_utils.py +15 -0
  73. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/close.py +3 -3
  74. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/open.py +25 -1
  75. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/check_current_incidents.py +2 -2
  76. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/details/critical.py +1 -1
  77. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/select_impact.py +5 -2
  78. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/update_status.py +4 -4
  79. firefighter_incident-0.0.13/firefighter_fixtures/incidents/components.json → firefighter_incident-0.0.14/firefighter_fixtures/incidents/incident_categories.json +52 -52
  80. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/conftest.py +4 -5
  81. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_api/test_api_landbot.py +1 -1
  82. firefighter_incident-0.0.14/firefighter_tests/test_firefighter/test_sso.py +146 -0
  83. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_forms/test_form_utils.py +15 -15
  84. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_incident_urls.py +3 -3
  85. firefighter_incident-0.0.14/firefighter_tests/test_incidents/test_models/test_incident_category.py +165 -0
  86. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_models/test_incident_model.py +2 -2
  87. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_priority_mapping.py +267 -0
  88. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_raid_client.py +580 -0
  89. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_raid_forms.py +795 -0
  90. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_raid_models.py +185 -0
  91. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_raid_serializers.py +507 -0
  92. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_raid_service.py +442 -0
  93. firefighter_incident-0.0.14/firefighter_tests/test_raid/test_raid_views.py +196 -0
  94. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/views/modals/test_close.py +6 -6
  95. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/views/modals/test_update_status.py +4 -4
  96. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/pyproject.toml +4 -0
  97. firefighter_incident-0.0.13/firefighter/api/views/components.py +0 -10
  98. firefighter_incident-0.0.13/firefighter/incidents/views/components/details.py +0 -33
  99. firefighter_incident-0.0.13/firefighter_fixtures/raid/area.json +0 -1
  100. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/.gitignore +0 -0
  101. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/LICENSE +0 -0
  102. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/__init__.py +0 -0
  103. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/__init__.py +0 -0
  104. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/admin.py +0 -0
  105. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/apps.py +0 -0
  106. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/authentication.py +0 -0
  107. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/migrations/0001_initial.py +0 -0
  108. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/migrations/0002_alter_apitokenproxy_options.py +0 -0
  109. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/migrations/0003_alter_apitokenproxy_options.py +0 -0
  110. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/migrations/__init__.py +0 -0
  111. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/models.py +0 -0
  112. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/permissions.py +0 -0
  113. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/renderer.py +0 -0
  114. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/__init__.py +0 -0
  115. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/environments.py +0 -0
  116. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/groups.py +0 -0
  117. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/incident_cost_types.py +0 -0
  118. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/incident_costs.py +0 -0
  119. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/api/views/severities.py +0 -0
  120. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/__init__.py +0 -0
  121. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/avatar/__init__.py +0 -0
  122. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/avatar/avatar.html +0 -0
  123. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/avatar/avatar.py +0 -0
  124. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/card/__init__.py +0 -0
  125. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/card/card.html +0 -0
  126. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/card/card.py +0 -0
  127. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/export_button/__init__.py +0 -0
  128. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/export_button/export_button.html +0 -0
  129. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/export_button/export_button.py +0 -0
  130. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/form/__init__.py +0 -0
  131. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/form/form.html +0 -0
  132. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/form/form.py +0 -0
  133. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/form_field/__init__.py +0 -0
  134. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/form_field/form_field.html +0 -0
  135. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/form_field/form_field.py +0 -0
  136. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/messages/__init__.py +0 -0
  137. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/messages/messages.html +0 -0
  138. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/messages/messages.py +0 -0
  139. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/modal/__init__.py +0 -0
  140. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/modal/modal.html +0 -0
  141. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/components/modal/modal.py +0 -0
  142. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/__init__.py +0 -0
  143. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/admin.py +0 -0
  144. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/apps.py +0 -0
  145. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/client.py +0 -0
  146. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/management/__init__.py +0 -0
  147. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/management/commands/__init__.py +0 -0
  148. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/management/commands/sort_postmortems.py +0 -0
  149. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/management/commands/sort_runbooks.py +0 -0
  150. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/management/commands/sync_postmortems.py +0 -0
  151. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/management/commands/sync_runbooks.py +0 -0
  152. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/migrations/0001_initial_oss.py +0 -0
  153. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/migrations/__init__.py +0 -0
  154. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/models.py +0 -0
  155. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/serializers.py +0 -0
  156. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/service.py +0 -0
  157. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/signals/__init__.py +0 -0
  158. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/signals/incident_updated.py +0 -0
  159. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tables.py +0 -0
  160. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tasks/__init__.py +0 -0
  161. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tasks/archive_postmortems.py +0 -0
  162. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tasks/sort_runbooks.py +0 -0
  163. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tasks/sync_pages_content.py +0 -0
  164. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tasks/sync_postmortems.py +0 -0
  165. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/tasks/sync_runbooks.py +0 -0
  166. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/templates/oncall_team.xml +0 -0
  167. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/templates/pages/runbook_list.html +0 -0
  168. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/urls.py +0 -0
  169. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/utils.py +0 -0
  170. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/views/__init__.py +0 -0
  171. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/views/api.py +0 -0
  172. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/views/postmortem/__init__.py +0 -0
  173. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/views/postmortem/postmortem_detail.py +0 -0
  174. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/views/runbook/__init__.py +0 -0
  175. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/confluence/views/runbook/runbook_list.py +0 -0
  176. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/__init__.py +0 -0
  177. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/admin.py +0 -0
  178. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/apps.py +0 -0
  179. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/asgi.py +0 -0
  180. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/celery_client.py +0 -0
  181. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/fields_forms_widgets.py +0 -0
  182. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/filters.py +0 -0
  183. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/formats/__init__.py +0 -0
  184. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/formats/en/__init__.py +0 -0
  185. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/formats/en/formats.py +0 -0
  186. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/http_client.py +0 -0
  187. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/management/__init__.py +0 -0
  188. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/management/commands/__init__.py +0 -0
  189. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/management/commands/task.py +0 -0
  190. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/middleware.py +0 -0
  191. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/__init__.py +0 -0
  192. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/__init__.py +0 -0
  193. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/api.py +0 -0
  194. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/caches.py +0 -0
  195. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/celery.py +0 -0
  196. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/common.py +0 -0
  197. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/confluence.py +0 -0
  198. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/jira_app.py +0 -0
  199. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/logging.py +0 -0
  200. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/pagerduty.py +0 -0
  201. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/components/slack.py +0 -0
  202. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/environments/__init__.py +0 -0
  203. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/environments/dev.py +0 -0
  204. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/environments/prod.py +0 -0
  205. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/settings_builder.py +0 -0
  206. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/settings/settings_utils.py +0 -0
  207. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/sso.py +0 -0
  208. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/tables_utils.py +0 -0
  209. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/templates/admin/base.html +0 -0
  210. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/templates/admin/login.html +0 -0
  211. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/templates/admin/send_message_conversation.html +0 -0
  212. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/templates/robots.txt +0 -0
  213. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/urls.py +0 -0
  214. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/utils.py +0 -0
  215. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/views.py +0 -0
  216. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/firefighter/wsgi.py +0 -0
  217. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/__init__.py +0 -0
  218. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/apps.py +0 -0
  219. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/enums.py +0 -0
  220. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/__init__.py +0 -0
  221. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/edit.py +0 -0
  222. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/select_impact.py +0 -0
  223. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/update_key_events.py +0 -0
  224. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/update_roles.py +0 -0
  225. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/forms/utils.py +0 -0
  226. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0001_initial_oss.py +0 -0
  227. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0002_alter_severity_name_alter_user_password_featureteam.py +0 -0
  228. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0003_delete_featureteam.py +0 -0
  229. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0004_incidentupdate_environment.py +0 -0
  230. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0006_update_group_names.py +0 -0
  231. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0007_update_component_name.py +0 -0
  232. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0008_impact_level.py +0 -0
  233. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0010_update_components.py +0 -0
  234. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0011_update_incidents.py +0 -0
  235. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0012_alter_impactlevel.py +0 -0
  236. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0013_add_missing_component.py +0 -0
  237. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0014_update_components_slack_groups.py +0 -0
  238. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0015_update_impact_level.py +0 -0
  239. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0016_update_business_incidents_and_level.py +0 -0
  240. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0017_reorder_impact_types.py +0 -0
  241. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0018_update_impactlevel_names.py +0 -0
  242. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/0019_set_security_components_private.py +0 -0
  243. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/migrations/__init__.py +0 -0
  244. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/environment.py +0 -0
  245. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/impact.py +0 -0
  246. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/incident_cost.py +0 -0
  247. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/incident_cost_type.py +0 -0
  248. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/incident_membership.py +0 -0
  249. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/incident_role_type.py +0 -0
  250. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/metric_type.py +0 -0
  251. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/milestone_type.py +0 -0
  252. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/priority.py +0 -0
  253. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/severity.py +0 -0
  254. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/models/user.py +0 -0
  255. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/signals.py +0 -0
  256. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/css/incident.css +0 -0
  257. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/css/main.css +0 -0
  258. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/css/main.min.css +0 -0
  259. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/css/tailwind.css +0 -0
  260. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/android-chrome-192x192.png +0 -0
  261. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/android-chrome-512x512.png +0 -0
  262. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/apple-touch-icon.png +0 -0
  263. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/favicon-16x16.png +0 -0
  264. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/favicon-32x32.png +0 -0
  265. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/favicon.ico +0 -0
  266. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/favicon/site.webmanifest +0 -0
  267. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/gameday.png +0 -0
  268. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/logo-firefighter.png +0 -0
  269. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/p1.png +0 -0
  270. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/p2.png +0 -0
  271. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/p3.png +0 -0
  272. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/p4.png +0 -0
  273. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/img/p5.png +0 -0
  274. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/js/main.js +0 -0
  275. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/static/js/main.min.js +0 -0
  276. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/tasks/__init__.py +0 -0
  277. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/tasks/updateoncall.py +0 -0
  278. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/errors/base.html +0 -0
  279. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/filter.html +0 -0
  280. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/table/priority_column.html +0 -0
  281. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/table/status_column.html +0 -0
  282. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/table.html +0 -0
  283. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/widgets/form_container.html +0 -0
  284. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/widgets/grouped_checkbox_nested.html +0 -0
  285. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/incidents/widgets/input_option.html +0 -0
  286. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/index.html +0 -0
  287. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/created_at_help.html +0 -0
  288. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/environment_pill.html +0 -0
  289. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/footer.html +0 -0
  290. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/header.html +0 -0
  291. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/incident_metrics.html +0 -0
  292. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view.html +0 -0
  293. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view_modal.html +0 -0
  294. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/partial_table_list_paginated.html +0 -0
  295. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/priority_icon.html +0 -0
  296. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/priority_pill.html +0 -0
  297. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/status_pill.html +0 -0
  298. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/table.html +0 -0
  299. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/user_card.html +0 -0
  300. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/partials/user_tooltip.html +0 -0
  301. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/layouts/view_filters.html +0 -0
  302. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/dashboard.html +0 -0
  303. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/docs_metrics.html +0 -0
  304. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_create.html +0 -0
  305. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_list.html +0 -0
  306. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_role_types_detail.html +0 -0
  307. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_role_types_list.html +0 -0
  308. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_statistics.html +0 -0
  309. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_statistics_partial.html +0 -0
  310. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/incident_update_key_events_form.html +0 -0
  311. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/templates/pages/user_detail.html +0 -0
  312. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/__init__.py +0 -0
  313. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/components/__init__.py +0 -0
  314. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/date_filter.py +0 -0
  315. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/date_utils.py +0 -0
  316. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/docs/__init__.py +0 -0
  317. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/docs/metrics.py +0 -0
  318. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/docs/role_types.py +0 -0
  319. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/errors.py +0 -0
  320. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/incidents/views/users/__init__.py +0 -0
  321. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/__init__.py +0 -0
  322. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/admin.py +0 -0
  323. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/apps.py +0 -0
  324. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/migrations/0001_initial_oss.py +0 -0
  325. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/migrations/__init__.py +0 -0
  326. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/models.py +0 -0
  327. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/tasks/__init__.py +0 -0
  328. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/tasks/sync_users_jira.py +0 -0
  329. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/types.py +0 -0
  330. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/jira_app/utils.py +0 -0
  331. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/logging/__init__.py +0 -0
  332. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/logging/pretty_formatter.py +0 -0
  333. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/__init__.py +0 -0
  334. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/admin.py +0 -0
  335. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/apps.py +0 -0
  336. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/client.py +0 -0
  337. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/forms/__init__.py +0 -0
  338. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/forms/create_pagerduty_incident.py +0 -0
  339. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/migrations/0001_initial_oss.py +0 -0
  340. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/migrations/__init__.py +0 -0
  341. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/models.py +0 -0
  342. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/service.py +0 -0
  343. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/signals/__init__.py +0 -0
  344. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/signals/get_invites_from_pagerduty.py +0 -0
  345. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/signals/incident_channel_done_oncall.py +0 -0
  346. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/tasks/__init__.py +0 -0
  347. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/tasks/fetch_oncall.py +0 -0
  348. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/tasks/fetch_services.py +0 -0
  349. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/tasks/fetch_users.py +0 -0
  350. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/templates/pages/oncall_list.html +0 -0
  351. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/templates/pages/oncall_trigger.html +0 -0
  352. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view.html +0 -0
  353. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view_modal.html +0 -0
  354. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/urls.py +0 -0
  355. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/views/__init__.py +0 -0
  356. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/views/oncall_list.py +0 -0
  357. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/pagerduty/views/oncall_trigger.py +0 -0
  358. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/__init__.py +0 -0
  359. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/apps.py +0 -0
  360. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/messages.py +0 -0
  361. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/migrations/0001_initial_oss.py +0 -0
  362. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/migrations/0002_featureteam_remove_qualifierrotation_jira_user_and_more.py +0 -0
  363. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/migrations/__init__.py +0 -0
  364. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/resources.py +0 -0
  365. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/signals/__init__.py +0 -0
  366. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/signals/incident_updated.py +0 -0
  367. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/tasks/__init__.py +0 -0
  368. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/types.py +0 -0
  369. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/raid/urls.py +0 -0
  370. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/__init__.py +0 -0
  371. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/apps.py +0 -0
  372. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/factories.py +0 -0
  373. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/forms/__init__.py +0 -0
  374. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/forms/sos_form.py +0 -0
  375. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/management/__init__.py +0 -0
  376. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/management/commands/__init__.py +0 -0
  377. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/management/commands/generate_manifest.py +0 -0
  378. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/messages/__init__.py +0 -0
  379. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/messages/base.py +0 -0
  380. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/migrations/0001_initial_oss.py +0 -0
  381. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/migrations/0002_usergroup_tag.py +0 -0
  382. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/migrations/0003_alter_usergroup_tag.py +0 -0
  383. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/migrations/0004_alter_usergroup_components.py +0 -0
  384. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/migrations/__init__.py +0 -0
  385. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/__init__.py +0 -0
  386. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/message.py +0 -0
  387. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/models/sos.py +0 -0
  388. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/__init__.py +0 -0
  389. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/create_incident_conversation.py +0 -0
  390. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/handle_incident_channel_done.py +0 -0
  391. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/incident_closed.py +0 -0
  392. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/postmortem_created.py +0 -0
  393. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/signals/roles_reminders.py +0 -0
  394. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/slack_app.py +0 -0
  395. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/slack_incident_context.py +0 -0
  396. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/slack_templating.py +0 -0
  397. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/__init__.py +0 -0
  398. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/fetch_conversations_members.py +0 -0
  399. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/reminder_postmortem.py +0 -0
  400. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/send_message.py +0 -0
  401. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/send_reminders.py +0 -0
  402. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/sync_users.py +0 -0
  403. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/update_usergroups_members.py +0 -0
  404. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/tasks/update_users.py +0 -0
  405. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/urls.py +0 -0
  406. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/__init__.py +0 -0
  407. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/__init__.py +0 -0
  408. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/actions_and_shortcuts.py +0 -0
  409. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/channel_archive.py +0 -0
  410. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/channel_id_changed.py +0 -0
  411. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/channel_rename.py +0 -0
  412. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/channel_shared.py +0 -0
  413. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/channel_unarchive.py +0 -0
  414. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/channel_unshared.py +0 -0
  415. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/commands.py +0 -0
  416. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/member_joined_channel.py +0 -0
  417. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/member_left_channel.py +0 -0
  418. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/message.py +0 -0
  419. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/message_deleted.py +0 -0
  420. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/events/reaction_added.py +0 -0
  421. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/__init__.py +0 -0
  422. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/base_modal/__init__.py +0 -0
  423. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/base_modal/base.py +0 -0
  424. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/base_modal/base_mixins.py +0 -0
  425. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/base_modal/mixins.py +0 -0
  426. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/base_modal/modal_utils.py +0 -0
  427. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/downgrade_workflow.py +0 -0
  428. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/edit.py +0 -0
  429. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/key_event_message.py +0 -0
  430. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/__init__.py +0 -0
  431. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/details/__init__.py +0 -0
  432. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/set_details.py +0 -0
  433. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/opening/types.py +0 -0
  434. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/postmortem.py +0 -0
  435. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/select.py +0 -0
  436. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/send_sos.py +0 -0
  437. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/status.py +0 -0
  438. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/trigger_oncall.py +0 -0
  439. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/update.py +0 -0
  440. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/modals/update_roles.py +0 -0
  441. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter/slack/views/views.py +0 -0
  442. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/environments.json +0 -0
  443. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/groups.json +0 -0
  444. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/impact_level.json +0 -0
  445. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/impact_type.json +0 -0
  446. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/incident_role_type.json +0 -0
  447. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/metric_type.json +0 -0
  448. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/milestone_type.json +0 -0
  449. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/priorities.json +0 -0
  450. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_fixtures/incidents/severities.json +0 -0
  451. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/__init__.py +0 -0
  452. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_api/test_api_urls.py +0 -0
  453. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_confluence/test_confluence_utils.py +0 -0
  454. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_firefighter/test_firefighter_utils.py +0 -0
  455. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_firefighter/test_logging.py +0 -0
  456. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_firefighter/test_urls.py +0 -0
  457. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_forms/test_form_select_impact.py +0 -0
  458. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_forms/test_update_key_events.py +0 -0
  459. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_models/test_migrations/test_incident_migrations.py +0 -0
  460. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_utils/test_date_utils.py +0 -0
  461. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_views/test_incident_detail_view.py +0 -0
  462. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_incidents/test_views/test_index_view.py +0 -0
  463. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_raid/test_raid_client_users.py +0 -0
  464. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_raid/test_raid_transitions.py +0 -0
  465. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_raid/test_raid_utils.py +0 -0
  466. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/conftest.py +0 -0
  467. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/test_models/test_conversations.py +0 -0
  468. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/test_models/test_incident_channel.py +0 -0
  469. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/test_models/test_slack_user.py +0 -0
  470. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/test_slack_utils.py +0 -0
  471. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/views/modals/test_open.py +0 -0
  472. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/views/modals/test_send_sos.py +0 -0
  473. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/firefighter_tests/test_slack/views/modals/test_status.py +0 -0
  474. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/gunicorn.conf.py +0 -0
  475. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/main.py +0 -0
  476. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/manage.py +0 -0
  477. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/package-lock.json +0 -0
  478. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/package.json +0 -0
  479. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/scripts/gen_credits.py +0 -0
  480. {firefighter_incident-0.0.13 → firefighter_incident-0.0.14}/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.13
3
+ Version: 0.0.14
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/
@@ -85,7 +85,7 @@ Description-Content-Type: text/markdown
85
85
 
86
86
  FireFighter is ManoMano's in-house Incident Management Tool.
87
87
 
88
- It helps manage incidents, by automatically creating a Slack channel for communication, and much more.
88
+ It helps manage incidents, by automatically creating a Slack channel for communication, integrating with Jira (with P1-P5 priority mapping), and much more.
89
89
 
90
90
  ![Slack Bot Commands](docs/assets/screenshots/slack_bot_home.jpeg)
91
91
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  FireFighter is ManoMano's in-house Incident Management Tool.
6
6
 
7
- It helps manage incidents, by automatically creating a Slack channel for communication, and much more.
7
+ It helps manage incidents, by automatically creating a Slack channel for communication, integrating with Jira (with P1-P5 priority mapping), and much more.
8
8
 
9
9
  ![Slack Bot Commands](docs/assets/screenshots/slack_bot_home.jpeg)
10
10
 
@@ -1,7 +1,14 @@
1
1
  # file generated by setuptools-scm
2
2
  # don't change, don't track in version control
3
3
 
4
- __all__ = ["__version__", "__version_tuple__", "version", "version_tuple"]
4
+ __all__ = [
5
+ "__version__",
6
+ "__version_tuple__",
7
+ "version",
8
+ "version_tuple",
9
+ "__commit_id__",
10
+ "commit_id",
11
+ ]
5
12
 
6
13
  TYPE_CHECKING = False
7
14
  if TYPE_CHECKING:
@@ -9,13 +16,19 @@ if TYPE_CHECKING:
9
16
  from typing import Union
10
17
 
11
18
  VERSION_TUPLE = Tuple[Union[int, str], ...]
19
+ COMMIT_ID = Union[str, None]
12
20
  else:
13
21
  VERSION_TUPLE = object
22
+ COMMIT_ID = object
14
23
 
15
24
  version: str
16
25
  __version__: str
17
26
  __version_tuple__: VERSION_TUPLE
18
27
  version_tuple: VERSION_TUPLE
28
+ commit_id: COMMIT_ID
29
+ __commit_id__: COMMIT_ID
19
30
 
20
- __version__ = version = '0.0.13'
21
- __version_tuple__ = version_tuple = (0, 0, 13)
31
+ __version__ = version = '0.0.14'
32
+ __version_tuple__ = version_tuple = (0, 0, 14)
33
+
34
+ __commit_id__ = commit_id = None
@@ -15,10 +15,10 @@ from rest_framework.fields import empty
15
15
  from taggit.serializers import TaggitSerializer, TagListSerializerField
16
16
 
17
17
  from firefighter.firefighter.utils import get_in
18
- from firefighter.incidents.models.component import Component
19
18
  from firefighter.incidents.models.environment import Environment
20
19
  from firefighter.incidents.models.group import Group
21
20
  from firefighter.incidents.models.incident import Incident
21
+ from firefighter.incidents.models.incident_category import IncidentCategory
22
22
  from firefighter.incidents.models.incident_cost import IncidentCost
23
23
  from firefighter.incidents.models.incident_cost_type import IncidentCostType
24
24
  from firefighter.incidents.models.incident_membership import IncidentRole
@@ -157,11 +157,11 @@ class GroupSerializer(serializers.ModelSerializer[Group]):
157
157
  fields = "__all__"
158
158
 
159
159
 
160
- class ComponentSerializer(serializers.ModelSerializer[Component]):
160
+ class IncidentCategorySerializer(serializers.ModelSerializer[IncidentCategory]):
161
161
  group = GroupSerializer()
162
162
 
163
163
  class Meta:
164
- model = Component
164
+ model = IncidentCategory
165
165
  fields = "__all__"
166
166
 
167
167
 
@@ -210,9 +210,9 @@ class IncidentSerializer(TaggitSerializer, serializers.ModelSerializer[Incident]
210
210
  priority_id = serializers.PrimaryKeyRelatedField(
211
211
  source="priority", queryset=Priority.objects.all(), write_only=True
212
212
  )
213
- component = ComponentSerializer(read_only=True)
214
- component_id = serializers.PrimaryKeyRelatedField(
215
- source="component", queryset=Component.objects.all(), write_only=True
213
+ incident_category = IncidentCategorySerializer(read_only=True)
214
+ incident_category_id = serializers.PrimaryKeyRelatedField(
215
+ source="incident_category", queryset=IncidentCategory.objects.all(), write_only=True
216
216
  )
217
217
 
218
218
  status = serializers.SerializerMethodField()
@@ -274,14 +274,14 @@ class IncidentSerializer(TaggitSerializer, serializers.ModelSerializer[Incident]
274
274
  "description",
275
275
  "created_at",
276
276
  "environment",
277
- "component",
277
+ "incident_category",
278
278
  "priority",
279
279
  "status",
280
280
  "slack_channel_name",
281
281
  "status_page_url",
282
282
  "status",
283
283
  "environment_id",
284
- "component_id",
284
+ "incident_category_id",
285
285
  "priority_id",
286
286
  "created_by_email",
287
287
  "tags",
@@ -33,11 +33,18 @@ router.register(
33
33
  views.severities.PriorityViewSet,
34
34
  basename="priorities",
35
35
  )
36
+ # Legacy endpoint for backward compatibility
36
37
  router.register(
37
38
  r"components",
38
- views.components.ComponentViewSet,
39
+ views.components.IncidentCategoryViewSet,
39
40
  basename="components",
40
41
  )
42
+ # New preferred endpoint
43
+ router.register(
44
+ r"incident-categories",
45
+ views.components.IncidentCategoryViewSet,
46
+ basename="incident-categories",
47
+ )
41
48
  router.register(
42
49
  r"groups",
43
50
  views.groups.GroupViewSet,
@@ -20,7 +20,7 @@ T_co = TypeVar("T_co", bound=Model, covariant=True)
20
20
  examples=[
21
21
  OpenApiExample(
22
22
  name="Comma separated list of fields",
23
- value="id,name,component.name,component.group.name",
23
+ value="id,name,incident_category.name,incident_category.group.name",
24
24
  request_only=True,
25
25
  ),
26
26
  OpenApiExample(
@@ -0,0 +1,10 @@
1
+ from __future__ import annotations
2
+
3
+ from firefighter.api.serializers import IncidentCategorySerializer
4
+ from firefighter.api.views._base import ReadOnlyModelViewSet
5
+ from firefighter.incidents.models.incident_category import IncidentCategory
6
+
7
+
8
+ class IncidentCategoryViewSet(ReadOnlyModelViewSet[IncidentCategory]):
9
+ queryset = IncidentCategory.objects.all().select_related("group")
10
+ serializer_class = IncidentCategorySerializer
@@ -44,7 +44,7 @@ class ProcessAfterResponse(Response):
44
44
  examples=[
45
45
  OpenApiExample(
46
46
  name="Comma separated list of fields",
47
- value="id,name,component.name,component.group.name",
47
+ value="id,name,incident_category.name,incident_category.group.name",
48
48
  request_only=True,
49
49
  ),
50
50
  OpenApiExample(
@@ -73,8 +73,8 @@ class IncidentViewSet(
73
73
  Incident.objects.all()
74
74
  .select_related(
75
75
  "priority",
76
- "component__group",
77
- "component",
76
+ "incident_category__group",
77
+ "incident_category",
78
78
  "environment",
79
79
  "conversation",
80
80
  "created_by",
@@ -113,8 +113,8 @@ class IncidentViewSet(
113
113
  "priority.name",
114
114
  "title",
115
115
  "description",
116
- "component.name",
117
- "component.group.name",
116
+ "incident_category.name",
117
+ "incident_category.group.name",
118
118
  "created_at",
119
119
  "slack_channel_name",
120
120
  "status_page_url",
@@ -154,12 +154,12 @@ class IncidentViewSet(
154
154
  OpenApiExample(
155
155
  "Create an incident",
156
156
  summary="Create an incident",
157
- description="Create an incident, on INT, P4, with `Other` component and John Doe as creator. All fields are required. The email must be a valid email of a ManoMano employee, that has a Slack account or has already used FireFighter before.",
157
+ description="Create an incident, on INT, P4, with `Other` incident category and John Doe as creator. All fields are required. The email must be a valid email of a ManoMano employee, that has a Slack account or has already used FireFighter before.",
158
158
  value={
159
159
  "title": "Title of the incident, limited to 128 characters.",
160
160
  "description": "Longer description of the incident. No characters limit.",
161
161
  "environment_id": "1b960430-995b-47e1-beab-23dbe3dbccbf",
162
- "component_id": "390a993a-d273-4db8-b7d6-190ab294961a",
162
+ "incident_category_id": "390a993a-d273-4db8-b7d6-190ab294961a",
163
163
  "priority_id": "b814c9d2-48a8-4ac4-9c71-ff844e1b77f1",
164
164
  "created_by_email": "john.doe@mycompany.com",
165
165
  },
@@ -185,7 +185,7 @@ class IncidentViewSet(
185
185
  "order": 3,
186
186
  "default": False,
187
187
  },
188
- "component": {
188
+ "incident_category": {
189
189
  "id": "390a993a-d273-4db8-b7d6-190ab294961a",
190
190
  "name": "Other",
191
191
  "description": "",
@@ -241,7 +241,7 @@ class CreateIncidentViewSet(
241
241
  viewsets.GenericViewSet[Incident],
242
242
  ):
243
243
  queryset: QuerySet[Incident] = Incident.objects.all().select_related(
244
- "priority", "component__group", "component", "environment", "conversation"
244
+ "priority", "incident_category__group", "incident_category", "environment", "conversation"
245
245
  )
246
246
  serializer_class = IncidentSerializer
247
247
  filterset_class = IncidentFilterSet
@@ -20,3 +20,6 @@ if ENABLE_RAID:
20
20
 
21
21
  RAID_TOOLBOX_URL: str = config("RAID_TOOLBOX_URL")
22
22
  "Toolbox URL"
23
+
24
+ RAID_JIRA_INCIDENT_CATEGORY_FIELD: str = config("RAID_JIRA_INCIDENT_CATEGORY_FIELD", default="")
25
+ "Jira custom field ID for incident category (e.g. 'customfield_12345')"
@@ -19,10 +19,10 @@ from django.utils.translation import ngettext
19
19
  from slack_sdk.errors import SlackApiError
20
20
 
21
21
  from firefighter.incidents.models import (
22
- Component,
23
22
  Environment,
24
23
  Group,
25
24
  Incident,
25
+ IncidentCategory,
26
26
  IncidentUpdate,
27
27
  Severity,
28
28
  User,
@@ -63,7 +63,7 @@ logger = logging.getLogger(__name__)
63
63
 
64
64
  # Append inlines to these objects, from other modules
65
65
  user_inlines: list[type[InlineModelAdmin[Any, User]]] = []
66
- component_inlines: list[type[InlineModelAdmin[Any, Component]]] = []
66
+ incident_category_inlines: list[type[InlineModelAdmin[Any, IncidentCategory]]] = []
67
67
 
68
68
 
69
69
  class IncidentCostInline(admin.TabularInline[IncidentCost, Incident]):
@@ -97,9 +97,9 @@ class IncidentMembershipInline(admin.StackedInline[IncidentMembership, Incident]
97
97
  incident_inlines: MutableSequence[type[InlineModelAdmin[Any, Incident]]] = []
98
98
 
99
99
 
100
- @admin.register(Component)
101
- class ComponentAdmin(admin.ModelAdmin[Component]):
102
- model = Component
100
+ @admin.register(IncidentCategory)
101
+ class IncidentCategoryAdmin(admin.ModelAdmin[IncidentCategory]):
102
+ model = IncidentCategory
103
103
  list_display = ["name", "group", "order", "private", "deploy_warning"]
104
104
  list_editable = ["order", "group", "private"]
105
105
  list_display_links = ["name"]
@@ -111,7 +111,7 @@ class ComponentAdmin(admin.ModelAdmin[Component]):
111
111
  "created_at",
112
112
  "updated_at",
113
113
  ]
114
- inlines = component_inlines
114
+ inlines = incident_category_inlines
115
115
 
116
116
  fieldsets = (
117
117
  (
@@ -132,8 +132,8 @@ class ComponentAdmin(admin.ModelAdmin[Component]):
132
132
  )
133
133
 
134
134
 
135
- class ComponentInline(admin.StackedInline[Component, Component]):
136
- model = Component
135
+ class IncidentCategoryInline(admin.StackedInline[IncidentCategory, IncidentCategory]):
136
+ model = IncidentCategory
137
137
  fields = ["name", "order"]
138
138
 
139
139
 
@@ -218,7 +218,7 @@ class IncidentUpdateInline(admin.StackedInline[IncidentUpdate, Incident]):
218
218
  "_status",
219
219
  "priority",
220
220
  "message",
221
- "component",
221
+ "incident_category",
222
222
  "created_by",
223
223
  ]
224
224
  extra = 0
@@ -226,7 +226,7 @@ class IncidentUpdateInline(admin.StackedInline[IncidentUpdate, Incident]):
226
226
  "priority",
227
227
  "message",
228
228
  "_status",
229
- "component",
229
+ "incident_category",
230
230
  "created_by",
231
231
  "commander",
232
232
  "communication_lead",
@@ -239,11 +239,11 @@ class IncidentUpdateInline(admin.StackedInline[IncidentUpdate, Incident]):
239
239
  .get_queryset(request)
240
240
  .select_related(
241
241
  "priority",
242
- "component",
242
+ "incident_category",
243
243
  "incident",
244
244
  "incident__priority",
245
- "incident__component",
246
- "component__group",
245
+ "incident__incident_category",
246
+ "incident_category__group",
247
247
  "created_by",
248
248
  "commander",
249
249
  "communication_lead",
@@ -398,7 +398,7 @@ class IncidentAdmin(admin.ModelAdmin[Incident]):
398
398
  # Return None to display the change list page again.
399
399
 
400
400
  date_hierarchy = "created_at"
401
- autocomplete_fields = ["created_by", "component"]
401
+ autocomplete_fields = ["created_by", "incident_category"]
402
402
  actions: list[_ActionCallable[Any, Incident]] = [
403
403
  compute_metrics,
404
404
  compute_and_purge_metrics,
@@ -410,14 +410,14 @@ class IncidentAdmin(admin.ModelAdmin[Incident]):
410
410
  "short_description",
411
411
  "_status",
412
412
  "priority",
413
- "component",
413
+ "incident_category",
414
414
  "environment",
415
415
  "created_at",
416
416
  "updated_at",
417
417
  ]
418
418
 
419
419
  list_display_links = ["id", "title"]
420
- list_filter = ("_status", "priority", "component", "environment")
420
+ list_filter = ("_status", "priority", "incident_category", "environment")
421
421
  readonly_fields = (
422
422
  "created_at",
423
423
  "updated_at",
@@ -429,7 +429,7 @@ class IncidentAdmin(admin.ModelAdmin[Incident]):
429
429
 
430
430
  list_select_related = (
431
431
  "priority",
432
- "component__group",
432
+ "incident_category__group",
433
433
  "environment",
434
434
  )
435
435
  list_max_show_all = 1000
@@ -450,7 +450,7 @@ class IncidentAdmin(admin.ModelAdmin[Incident]):
450
450
  )
451
451
  },
452
452
  ),
453
- (_("Relations"), {"fields": ("priority", "component", "environment")}),
453
+ (_("Relations"), {"fields": ("priority", "incident_category", "environment")}),
454
454
  (
455
455
  _("User Roles"),
456
456
  {
@@ -506,10 +506,10 @@ class IncidentAdmin(admin.ModelAdmin[Incident]):
506
506
  def _get_select_related(self) -> list[str]:
507
507
  select_related = [
508
508
  "priority",
509
- "component__group",
509
+ "incident_category__group",
510
510
  "environment",
511
511
  "conversation",
512
- "component",
512
+ "incident_category",
513
513
  "created_by",
514
514
  ]
515
515
  if apps.apps.is_installed("firefighter.confluence"):
@@ -525,13 +525,13 @@ class IncidentUpdateAdmin(admin.ModelAdmin[IncidentUpdate]):
525
525
  "_status",
526
526
  "priority",
527
527
  "message",
528
- "component",
528
+ "incident_category",
529
529
  "created_by",
530
530
  ]
531
531
  list_display_links = ["_status"]
532
- list_filter = ("_status", "priority", "component", "event_type")
532
+ list_filter = ("_status", "priority", "incident_category", "event_type")
533
533
  readonly_fields = ("created_at", "updated_at", "incident")
534
- list_select_related = ("priority", "component", "incident", "created_by")
534
+ list_select_related = ("priority", "incident_category", "incident", "created_by")
535
535
  search_fields = ["description", "message"]
536
536
 
537
537
 
@@ -544,7 +544,7 @@ class GroupAdmin(admin.ModelAdmin[Group]):
544
544
  ]
545
545
  ordering = ["order"]
546
546
  list_display_links = ["name"]
547
- inlines = [ComponentInline]
547
+ inlines = [IncidentCategoryInline]
548
548
  search_fields = ["name"]
549
549
 
550
550
 
@@ -11,10 +11,10 @@ from factory.fuzzy import FuzzyChoice, FuzzyDateTime, FuzzyInteger
11
11
 
12
12
  from firefighter.incidents.enums import IncidentStatus
13
13
  from firefighter.incidents.models import (
14
- Component,
15
14
  Environment,
16
15
  Group,
17
16
  Incident,
17
+ IncidentCategory,
18
18
  Priority,
19
19
  User,
20
20
  )
@@ -38,7 +38,12 @@ class GroupFactory(DjangoModelFactory[Group]):
38
38
  order = FuzzyInteger(100, 1000) # type: ignore[no-untyped-call]
39
39
 
40
40
 
41
- class SeverityFactory(DjangoModelFactory[Priority]):
41
+ class PriorityFactory(DjangoModelFactory[Priority]):
42
+ """Factory for creating Priority instances in tests.
43
+
44
+ Creates Priority objects with random values. Use specific values in tests
45
+ when testing priority-specific behavior (e.g., P1-P5 JIRA mapping).
46
+ """
42
47
  class Meta:
43
48
  model = Priority
44
49
 
@@ -47,6 +52,10 @@ class SeverityFactory(DjangoModelFactory[Priority]):
47
52
  order = FuzzyInteger(100, 1000) # type: ignore[no-untyped-call]
48
53
 
49
54
 
55
+ # Legacy alias - will be removed when Severity model is removed
56
+ SeverityFactory = PriorityFactory
57
+
58
+
50
59
  class EnvironmentFactory(DjangoModelFactory[Environment]):
51
60
  class Meta:
52
61
  model = Environment
@@ -56,9 +65,9 @@ class EnvironmentFactory(DjangoModelFactory[Environment]):
56
65
  order = FuzzyInteger(100, 1000) # type: ignore[no-untyped-call]
57
66
 
58
67
 
59
- class ComponentFactory(DjangoModelFactory[Component]):
68
+ class IncidentCategoryFactory(DjangoModelFactory[IncidentCategory]):
60
69
  class Meta:
61
- model = Component
70
+ model = IncidentCategory
62
71
 
63
72
  name = Faker("text", max_nb_chars=30) # type: ignore[no-untyped-call]
64
73
  description = Faker("text", max_nb_chars=50) # type: ignore[no-untyped-call]
@@ -86,7 +95,7 @@ class IncidentFactory(DjangoModelFactory[Incident]):
86
95
  tzinfo=timezone.get_current_timezone(),
87
96
  )
88
97
  ) # type: ignore[no-untyped-call]
89
- component = Iterator(Component.objects.all()) # type: ignore[no-untyped-call]
98
+ incident_category = Iterator(IncidentCategory.objects.all()) # type: ignore[no-untyped-call]
90
99
  priority = Iterator(Priority.objects.all()) # type: ignore[no-untyped-call]
91
100
  environment = Iterator(Environment.objects.all()) # type: ignore[no-untyped-call]
92
101
 
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from django import forms
4
4
 
5
5
  from firefighter.incidents.forms.utils import GroupedModelChoiceField
6
- from firefighter.incidents.models import Component
6
+ from firefighter.incidents.models import IncidentCategory
7
7
 
8
8
 
9
9
  class CloseIncidentForm(forms.Form):
@@ -26,10 +26,10 @@ class CloseIncidentForm(forms.Form):
26
26
  max_length=1200,
27
27
  required=False,
28
28
  )
29
- component = GroupedModelChoiceField(
29
+ incident_category = GroupedModelChoiceField(
30
30
  choices_groupby="group",
31
- label="Issue category",
32
- queryset=Component.objects.all()
31
+ label="Incident category",
32
+ queryset=IncidentCategory.objects.all()
33
33
  .select_related("group")
34
34
  .order_by(
35
35
  "group__order",
@@ -6,7 +6,7 @@ from django import forms
6
6
 
7
7
  from firefighter.incidents.forms.select_impact import SelectImpactForm
8
8
  from firefighter.incidents.forms.utils import GroupedModelChoiceField
9
- from firefighter.incidents.models import Component, Environment, Priority
9
+ from firefighter.incidents.models import Environment, IncidentCategory, Priority
10
10
  from firefighter.incidents.models.incident import Incident
11
11
  from firefighter.incidents.signals import create_incident_conversation
12
12
 
@@ -52,11 +52,11 @@ class CreateIncidentForm(CreateIncidentFormBase):
52
52
  max_length=1200,
53
53
  )
54
54
 
55
- component = GroupedModelChoiceField(
55
+ incident_category = GroupedModelChoiceField(
56
56
  choices_groupby="group",
57
- label="Issue category",
57
+ label="Incident category",
58
58
  queryset=(
59
- Component.objects.all()
59
+ IncidentCategory.objects.all()
60
60
  .select_related("group")
61
61
  .order_by(
62
62
  "group__order",
@@ -4,7 +4,7 @@ from django import forms
4
4
 
5
5
  from firefighter.incidents.enums import IncidentStatus
6
6
  from firefighter.incidents.forms.utils import EnumChoiceField, GroupedModelChoiceField
7
- from firefighter.incidents.models import Component, Priority
7
+ from firefighter.incidents.models import IncidentCategory, Priority
8
8
 
9
9
 
10
10
  class UpdateStatusForm(forms.Form):
@@ -24,10 +24,10 @@ class UpdateStatusForm(forms.Form):
24
24
  label="Priority",
25
25
  queryset=Priority.objects.filter(enabled_update=True),
26
26
  )
27
- component = GroupedModelChoiceField(
27
+ incident_category = GroupedModelChoiceField(
28
28
  choices_groupby="group",
29
- label="Issue category",
30
- queryset=Component.objects.all()
29
+ label="Incident category",
30
+ queryset=IncidentCategory.objects.all()
31
31
  .select_related("group")
32
32
  .order_by(
33
33
  "group__order",
@@ -50,8 +50,8 @@ def setup_navbar_menu() -> None:
50
50
  reverse("incidents:incident-statistics"),
51
51
  ),
52
52
  MenuItem(
53
- "Issue categories",
54
- reverse("incidents:component-list"),
53
+ "Incident categories",
54
+ reverse("incidents:incident-category-list"),
55
55
  ),
56
56
  ]
57
57
  Menu.add_item(
@@ -1,14 +1,16 @@
1
+ from datetime import timedelta
2
+
1
3
  from django.db import migrations
2
4
 
3
5
 
4
6
  def update_priority_settings(apps, schema_editor):
5
7
  Priority = apps.get_model("incidents", "Priority")
6
8
  priorities_to_update = {
7
- "P1": ("01:00:00", True, True),
8
- "P2": ("04:00:00", True, True),
9
- "P3": ("1 day, 00:00:00", True, True),
10
- "P4": ("5 days, 00:00:00", True, True),
11
- "P5": ("10 days, 00:00:00", True, True),
9
+ "P1": (timedelta(hours=1), True, True),
10
+ "P2": (timedelta(hours=4), True, True),
11
+ "P3": (timedelta(days=1), True, True),
12
+ "P4": (timedelta(days=5), True, True),
13
+ "P5": (timedelta(days=10), True, True),
12
14
  }
13
15
 
14
16
  for name, (sla, enabled_create, enabled_update) in priorities_to_update.items():
@@ -1,14 +1,16 @@
1
+ from datetime import timedelta
2
+
1
3
  from django.db import migrations
2
4
 
3
5
 
4
6
  def update_priority_settings(apps, schema_editor):
5
7
  Priority = apps.get_model("incidents", "Priority")
6
8
  priorities_to_update = {
7
- "P1": ("02:00:00", True, True),
8
- "P2": ("04:00:00", True, True),
9
- "P3": ("1 day, 00:00:00", True, True),
10
- "P4": ("5 days, 00:00:00", True, True),
11
- "P5": ("10 days, 00:00:00", True, True),
9
+ "P1": (timedelta(hours=2), True, True),
10
+ "P2": (timedelta(hours=4), True, True),
11
+ "P3": (timedelta(days=1), True, True),
12
+ "P4": (timedelta(days=5), True, True),
13
+ "P5": (timedelta(days=10), True, True),
12
14
  }
13
15
 
14
16
  for name, (sla, enabled_create, enabled_update) in priorities_to_update.items():
@@ -0,0 +1,64 @@
1
+ # Generated manually on 2025-08-19 - Step 1: Create IncidentCategory model
2
+
3
+ import uuid
4
+
5
+ from django.db import migrations, models
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ("incidents", "0019_set_security_components_private"),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.CreateModel(
16
+ name="IncidentCategory",
17
+ fields=[
18
+ (
19
+ "id",
20
+ models.UUIDField(
21
+ default=uuid.uuid4,
22
+ editable=False,
23
+ primary_key=True,
24
+ serialize=False,
25
+ ),
26
+ ),
27
+ ("name", models.CharField(max_length=128)),
28
+ ("description", models.TextField(blank=True)),
29
+ (
30
+ "order",
31
+ models.IntegerField(
32
+ default=0,
33
+ help_text="Order of the incident category in the list. Should be unique per `Group`.",
34
+ ),
35
+ ),
36
+ (
37
+ "private",
38
+ models.BooleanField(
39
+ default=False,
40
+ help_text="If true, incident created with this incident category won't be communicated, and conversations will be made private. This is useful for sensitive incident categories. In the future, private incidents may be visible only to its members.",
41
+ ),
42
+ ),
43
+ (
44
+ "deploy_warning",
45
+ models.BooleanField(
46
+ default=True,
47
+ help_text="If true, a warning will be sent when creating an incident of high severity with this incident category.",
48
+ ),
49
+ ),
50
+ ("created_at", models.DateTimeField(auto_now_add=True)),
51
+ ("updated_at", models.DateTimeField(auto_now=True)),
52
+ (
53
+ "group",
54
+ models.ForeignKey(
55
+ on_delete=models.PROTECT,
56
+ to="incidents.group"
57
+ ),
58
+ ),
59
+ ],
60
+ options={
61
+ "ordering": ["order"],
62
+ },
63
+ ),
64
+ ]