firefighter-incident 0.0.6__tar.gz → 0.0.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/PKG-INFO +1 -1
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/_version.py +2 -2
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/select_impact.py +4 -4
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/menus.py +1 -1
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0008_impact_level.py +54 -22
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0012_alter_impactlevel.py +2 -2
- firefighter_incident-0.0.7/firefighter/incidents/migrations/0015_update_impact_level.py +136 -0
- firefighter_incident-0.0.7/firefighter/incidents/migrations/0016_update_business_incidents_and_level.py +84 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/impact.py +8 -4
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/component_list.html +1 -1
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/open.py +6 -1
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/select_impact.py +35 -4
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_forms/test_form_select_impact.py +3 -3
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/pyproject.toml +2 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/.gitignore +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/LICENSE +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/README.md +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/authentication.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/0001_initial.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/0002_alter_apitokenproxy_options.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/0003_alter_apitokenproxy_options.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/models.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/permissions.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/renderer.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/serializers.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/_base.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/components.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/environments.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/groups.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/incident_cost_types.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/incident_costs.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/incidents.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/api/views/severities.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/avatar/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/avatar/avatar.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/avatar/avatar.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/card/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/card/card.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/card/card.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/export_button/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/export_button/export_button.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/export_button/export_button.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form/form.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form/form.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form_field/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form_field/form_field.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/form_field/form_field.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/messages/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/messages/messages.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/messages/messages.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/modal/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/modal/modal.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/components/modal/modal.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/client.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sort_postmortems.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sort_runbooks.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sync_postmortems.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/management/commands/sync_runbooks.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/migrations/0001_initial_oss.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/models.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/serializers.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/service.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/signals/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/signals/incident_updated.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tables.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/archive_postmortems.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sort_runbooks.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sync_pages_content.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sync_postmortems.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/tasks/sync_runbooks.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/templates/oncall_team.xml +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/templates/pages/runbook_list.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/api.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/postmortem/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/postmortem/postmortem_detail.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/runbook/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/confluence/views/runbook/runbook_list.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/asgi.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/celery_client.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/fields_forms_widgets.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/filters.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/formats/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/formats/en/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/formats/en/formats.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/http_client.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/management/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/management/commands/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/management/commands/task.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/middleware.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/api.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/caches.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/celery.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/common.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/confluence.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/jira_app.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/logging.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/pagerduty.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/raid.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/components/slack.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/environments/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/environments/dev.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/environments/prod.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/settings_builder.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/settings/settings_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/sso.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/tables_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/admin/base.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/admin/login.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/admin/send_message_conversation.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/templates/robots.txt +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/views.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/firefighter/wsgi.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/enums.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/factories.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/close_incident.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/create_incident.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/edit.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/update_key_events.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/update_roles.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/update_status.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/forms/utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0001_initial_oss.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0002_alter_severity_name_alter_user_password_featureteam.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0003_delete_featureteam.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0004_incidentupdate_environment.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0005_enable_from_p1_to_p5_priority.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0006_update_group_names.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0007_update_component_name.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0009_update_sla.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0010_update_components.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0011_update_incidents.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0013_add_missing_component.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/0014_update_components_slack_groups.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/component.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/environment.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/group.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_cost.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_cost_type.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_membership.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_role_type.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/incident_update.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/metric_type.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/milestone_type.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/priority.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/severity.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/user.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/signals.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/incident.css +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/main.css +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/main.min.css +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/css/tailwind.css +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/android-chrome-192x192.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/android-chrome-512x512.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/apple-touch-icon.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/favicon-16x16.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/favicon-32x32.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/favicon.ico +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/favicon/site.webmanifest +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/gameday.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/logo-firefighter.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p1.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p2.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p3.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p4.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/img/p5.png +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/js/main.js +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/static/js/main.min.js +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/tables.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/tasks/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/tasks/updateoncall.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/errors/base.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/filter.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/table/priority_column.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/table/status_column.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/table.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/widgets/form_container.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/widgets/grouped_checkbox_nested.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/incidents/widgets/input_option.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/index.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/created_at_help.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/environment_pill.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/footer.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/header.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_card.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_metrics.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_timeline.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/incident_update_key_events_view_modal.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/partial_table_list_paginated.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/priority_icon.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/priority_pill.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/status_pill.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/table.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/user_card.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/partials/user_tooltip.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/layouts/view_filters.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/component_detail.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/dashboard.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/docs_metrics.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_create.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_detail.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_list.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_role_types_detail.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_role_types_list.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_statistics.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_statistics_partial.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/incident_update_key_events_form.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/templates/pages/user_detail.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/components/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/components/details.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/components/list.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/date_filter.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/date_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/docs/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/docs/metrics.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/docs/role_types.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/errors.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/reports.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/users/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/users/details.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/views/views.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/client.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/migrations/0001_initial_oss.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/models.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/tasks/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/tasks/sync_users_jira.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/types.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/jira_app/utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/logging/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/logging/custom_json_formatter.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/logging/pretty_formatter.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/client.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/forms/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/forms/create_pagerduty_incident.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/migrations/0001_initial_oss.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/models.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/service.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/signals/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/signals/get_invites_from_pagerduty.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/signals/incident_channel_done_oncall.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/fetch_oncall.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/fetch_services.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/fetch_users.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/tasks/trigger_oncall.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/pages/oncall_list.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/pages/oncall_trigger.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/templates/partials/trigger_oncall_form_view_modal.html +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/views/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/views/oncall_list.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/pagerduty/views/oncall_trigger.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/client.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/forms.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/messages.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/migrations/0001_initial_oss.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/migrations/0002_featureteam_remove_qualifierrotation_jira_user_and_more.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/models.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/resources.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/serializers.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/service.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/signals/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/signals/incident_created.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/signals/incident_updated.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/tasks/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/types.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/views/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/raid/views/open_normal.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/admin.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/apps.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/factories.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/forms/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/forms/sos_form.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/management/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/management/commands/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/management/commands/generate_manifest.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/messages/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/messages/base.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/messages/slack_messages.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0001_initial_oss.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0002_usergroup_tag.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0003_alter_usergroup_tag.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/0004_alter_usergroup_components.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/migrations/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/conversation.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/incident_channel.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/message.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/sos.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/user.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/models/user_group.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/rules.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/create_incident_conversation.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/get_users.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/handle_incident_channel_done.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/incident_closed.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/incident_updated.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/postmortem_created.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/signals/roles_reminders.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/slack_app.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/slack_incident_context.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/slack_templating.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/fetch_conversations_members.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/reminder_postmortem.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/send_message.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/send_reminders.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/sync_users.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/update_usergroups_members.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/tasks/update_users.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/actions_and_shortcuts.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_archive.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_id_changed.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_rename.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_shared.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_unarchive.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/channel_unshared.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/commands.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/home.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/member_joined_channel.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/member_left_channel.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/message.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/message_deleted.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/events/reaction_added.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/base.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/base_mixins.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/form_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/mixins.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/base_modal/modal_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/close.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/downgrade_workflow.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/edit.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/key_event_message.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/check_current_incidents.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/details/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/details/critical.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/set_details.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/opening/types.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/postmortem.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/select.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/send_sos.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/status.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/trigger_oncall.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/update.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/update_roles.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/update_status.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/views.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/components.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/environments.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/groups.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/impact_level.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/impact_type.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/incident_role_type.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/metric_type.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/milestone_type.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/priorities.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/incidents/severities.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_fixtures/raid/area.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/__init__.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/conftest.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_api/test_api_landbot.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_api/test_api_urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_confluence/test_confluence_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_firefighter/test_firefighter_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_firefighter/test_logging.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_firefighter/test_urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_forms/test_form_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_forms/test_update_key_events.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_incident_urls.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_models/test_incident_model.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_models/test_migrations/test_incident_migrations.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_utils/test_date_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_views/test_incident_detail_view.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_incidents/test_views/test_index_view.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_raid/test_raid_client_users.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_raid/test_raid_transitions.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_raid/test_raid_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/conftest.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_models/test_conversations.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_models/test_incident_channel.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_models/test_slack_user.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/test_slack_utils.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_close.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_open.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_send_sos.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_status.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter_tests/test_slack/views/modals/test_update_status.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/gunicorn.conf.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/main.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/manage.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/package-lock.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/package.json +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/scripts/gen_credits.py +0 -0
- {firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/scripts/hatch_build.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: firefighter-incident
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.7
|
|
4
4
|
Summary: Incident Management tool made for Slack using Django
|
|
5
5
|
Project-URL: Repository, https://github.com/ManoManoTech/firefighter-incident
|
|
6
6
|
Project-URL: Documentation, https://manomanotech.github.io/firefighter-incident/latest/
|
|
@@ -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.
|
|
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
|
|
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.
|
|
62
|
-
return LevelChoices.
|
|
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:
|
|
@@ -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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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":
|
|
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="
|
|
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="
|
|
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="
|
|
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
|
+
]
|
{firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/incidents/models/impact.py
RENAMED
|
@@ -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,
|
|
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="
|
|
83
|
+
value = models.CharField(choices=LevelChoices.choices, max_length=2, default="NO")
|
|
84
84
|
order = models.PositiveSmallIntegerField(default=10)
|
|
85
|
-
|
|
85
|
+
description = models.TextField(
|
|
86
|
+
blank=True,
|
|
87
|
+
null=True,
|
|
88
|
+
help_text="Detailed multi-line description for this impact level.",
|
|
89
|
+
)
|
|
86
90
|
class Meta(TypedModelMeta):
|
|
87
91
|
constraints = [
|
|
88
92
|
models.UniqueConstraint(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% extends '../layouts/view_filters.html' %}
|
|
2
2
|
|
|
3
3
|
{% block page_title %}
|
|
4
|
-
|
|
4
|
+
Issue category list <div role="status" class="hx-progress htmx-indicator inline">
|
|
5
5
|
<svg class="inline mr-2 w-6 h-6 text-gray-200 animate-spin dark:text-gray-600 fill-primary" viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
6
6
|
<path d="M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z" fill="currentColor"/>
|
|
7
7
|
<path d="M93.9676 39.0409C96.393 38.4038 97.8624 35.9116 97.0079 33.5539C95.2932 28.8227 92.871 24.3692 89.8167 20.348C85.8452 15.1192 80.8826 10.7238 75.2124 7.41289C69.5422 4.10194 63.2754 1.94025 56.7698 1.05124C51.7666 0.367541 46.6976 0.446843 41.7345 1.27873C39.2613 1.69328 37.813 4.19778 38.4501 6.62326C39.0873 9.04874 41.5694 10.4717 44.0505 10.1071C47.8511 9.54855 51.7191 9.52689 55.5402 10.0491C60.8642 10.7766 65.9928 12.5457 70.6331 15.2552C75.2735 17.9648 79.3347 21.5619 82.5849 25.841C84.9175 28.9121 86.7997 32.2913 88.1811 35.8758C89.083 38.2158 91.5421 39.6781 93.9676 39.0409Z" fill="currentFill"/>
|
{firefighter_incident-0.0.6 → firefighter_incident-0.0.7}/firefighter/slack/views/modals/open.py
RENAMED
|
@@ -153,7 +153,12 @@ class OpenModal(SlackModal):
|
|
|
153
153
|
def get_intro_blocks() -> list[Block]:
|
|
154
154
|
blocks: list[Block] = [
|
|
155
155
|
SectionBlock(
|
|
156
|
-
|
|
156
|
+
text=(
|
|
157
|
+
"Hello and thanks for reporting a new incident! :beetle:\n\n"
|
|
158
|
+
"Please report as much information as you can!\n\n"
|
|
159
|
+
"More information about the incident process in this "
|
|
160
|
+
"<https://manomano.atlassian.net/wiki/spaces/TC/pages/3928261283/IMPACT+-+Incident+Management+Platform|documentation>."
|
|
161
|
+
)
|
|
157
162
|
)
|
|
158
163
|
]
|
|
159
164
|
|
|
@@ -8,7 +8,9 @@ from typing import TYPE_CHECKING, Any, Never, cast
|
|
|
8
8
|
from django import forms
|
|
9
9
|
from django.conf import settings
|
|
10
10
|
from django.db.models import Model, QuerySet
|
|
11
|
+
from slack_sdk.models.blocks.basic_components import MarkdownTextObject
|
|
11
12
|
from slack_sdk.models.blocks.blocks import (
|
|
13
|
+
ContextBlock,
|
|
12
14
|
DividerBlock,
|
|
13
15
|
SectionBlock,
|
|
14
16
|
)
|
|
@@ -16,6 +18,7 @@ from slack_sdk.models.views import View
|
|
|
16
18
|
|
|
17
19
|
from firefighter.firefighter.utils import get_in
|
|
18
20
|
from firefighter.incidents.forms.select_impact import SelectImpactForm
|
|
21
|
+
from firefighter.incidents.models.impact import ImpactType
|
|
19
22
|
from firefighter.incidents.models.priority import Priority
|
|
20
23
|
from firefighter.slack.slack_app import SlackApp
|
|
21
24
|
from firefighter.slack.views.modals import modal_open
|
|
@@ -85,13 +88,14 @@ class SelectImpactModal(
|
|
|
85
88
|
initial_form_values_impact[field_name] = None # type: ignore
|
|
86
89
|
blocks = [
|
|
87
90
|
SectionBlock(
|
|
88
|
-
text=f"{SLACK_APP_EMOJI} Define the
|
|
91
|
+
text=f"{SLACK_APP_EMOJI} Define the impact(s) to find the incident priority (<https://manomano.atlassian.net/wiki/spaces/TC/pages/4024500413/Priority+levels|documentation>):"
|
|
89
92
|
),
|
|
90
93
|
*self.get_form_class()(initial=initial_form_values_impact).slack_blocks(
|
|
91
94
|
"section_accessory"
|
|
92
95
|
),
|
|
93
96
|
]
|
|
94
97
|
priority_data = open_incident_context.get("priority")
|
|
98
|
+
|
|
95
99
|
if open_incident_context and priority_data:
|
|
96
100
|
if not isinstance(priority_data, Priority):
|
|
97
101
|
priority = Priority.objects.get(pk=priority_data)
|
|
@@ -101,11 +105,24 @@ class SelectImpactModal(
|
|
|
101
105
|
err_msg = f"Invalid priority data: {priority_data}" # type: ignore[unreachable]
|
|
102
106
|
raise TypeError(err_msg)
|
|
103
107
|
process = ":slack: Slack :jira_new: Jira ticket" if open_incident_context.get("response_type") == "critical" else ":jira_new: Jira ticket"
|
|
108
|
+
|
|
109
|
+
impact_descriptions = self.extract_descriptions(open_incident_context)
|
|
110
|
+
|
|
104
111
|
blocks.extend((
|
|
105
112
|
DividerBlock(),
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
113
|
+
ContextBlock(
|
|
114
|
+
elements=[
|
|
115
|
+
MarkdownTextObject(
|
|
116
|
+
text=(
|
|
117
|
+
f":dart: Selected priority: *{priority} - {priority.description}*\n"
|
|
118
|
+
f"⏱️ SLA: {priority.sla}\n"
|
|
119
|
+
f":gear: Process: {process}\n"
|
|
120
|
+
f":pushpin: Selected impacts:\n"
|
|
121
|
+
f"{impact_descriptions}\n"
|
|
122
|
+
)
|
|
123
|
+
)
|
|
124
|
+
]
|
|
125
|
+
)
|
|
109
126
|
))
|
|
110
127
|
|
|
111
128
|
return View(
|
|
@@ -117,6 +134,20 @@ class SelectImpactModal(
|
|
|
117
134
|
submit="Save impacts",
|
|
118
135
|
)
|
|
119
136
|
|
|
137
|
+
def extract_descriptions(self, open_incident_context: OpeningData) -> str:
|
|
138
|
+
impact_form_data = open_incident_context.get("impact_form_data", {})
|
|
139
|
+
impact_descriptions = ""
|
|
140
|
+
if impact_form_data:
|
|
141
|
+
for value in impact_form_data.values():
|
|
142
|
+
if value.name != "NO" and value.description:
|
|
143
|
+
if hasattr(value, "impact_type_id") and value.impact_type_id:
|
|
144
|
+
impact_type = ImpactType.objects.get(pk=value.impact_type_id)
|
|
145
|
+
if impact_type:
|
|
146
|
+
impact_descriptions += f"\u00A0\u00A0 :exclamation: {impact_type} - {value}\n"
|
|
147
|
+
for line in str(value.description).splitlines():
|
|
148
|
+
impact_descriptions += f"\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0 • {line}\n"
|
|
149
|
+
return impact_descriptions
|
|
150
|
+
|
|
120
151
|
def handle_modal_fn( # type: ignore
|
|
121
152
|
self,
|
|
122
153
|
ack: Ack,
|