firefighter-incident 0.0.3__py3-none-any.whl → 0.0.5__py3-none-any.whl
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/_version.py +2 -2
- firefighter/incidents/forms/close_incident.py +1 -1
- firefighter/incidents/forms/create_incident.py +1 -1
- firefighter/incidents/forms/select_impact.py +1 -1
- firefighter/incidents/forms/update_status.py +1 -1
- firefighter/incidents/migrations/0009_update_sla.py +30 -0
- firefighter/incidents/migrations/0010_update_components.py +102 -0
- firefighter/incidents/migrations/0011_update_incidents.py +87 -0
- firefighter/incidents/models/incident.py +1 -1
- firefighter/incidents/templates/pages/component_detail.html +1 -1
- firefighter/incidents/views/components/list.py +1 -1
- firefighter/raid/client.py +2 -2
- firefighter/slack/models/user_group.py +1 -1
- firefighter/slack/views/modals/opening/details/critical.py +1 -1
- firefighter/slack/views/modals/opening/select_impact.py +3 -2
- firefighter/slack/views/modals/update_status.py +1 -1
- {firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/METADATA +1 -1
- {firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/RECORD +24 -21
- firefighter_tests/test_incidents/test_forms/test_form_utils.py +2 -2
- firefighter_tests/test_slack/views/modals/test_close.py +2 -2
- firefighter_tests/test_slack/views/modals/test_update_status.py +2 -2
- {firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/WHEEL +0 -0
- {firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/entry_points.txt +0 -0
- {firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/licenses/LICENSE +0 -0
firefighter/_version.py
CHANGED
|
@@ -63,7 +63,7 @@ class SelectImpactForm(forms.Form):
|
|
|
63
63
|
|
|
64
64
|
@property
|
|
65
65
|
def business_impact_new(self) -> str | None:
|
|
66
|
-
"""Get business impact. Will return N/A, Low, Medium or
|
|
66
|
+
"""Get business impact. Will return N/A, Lowest, Low, Medium, High or Highest."""
|
|
67
67
|
impact_value = ""
|
|
68
68
|
if self.is_valid():
|
|
69
69
|
impact: dict[str, ImpactLevel] = self.cleaned_data
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from django.db import migrations
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
def update_priority_settings(apps, schema_editor):
|
|
5
|
+
Priority = apps.get_model("incidents", "Priority")
|
|
6
|
+
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),
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
for name, (sla, enabled_create, enabled_update) in priorities_to_update.items():
|
|
15
|
+
Priority.objects.filter(name=name).update(
|
|
16
|
+
sla=sla,
|
|
17
|
+
enabled_create=enabled_create,
|
|
18
|
+
enabled_update=enabled_update,
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class Migration(migrations.Migration):
|
|
23
|
+
|
|
24
|
+
dependencies = [
|
|
25
|
+
("incidents", "0008_impact_level"),
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
operations = [
|
|
29
|
+
migrations.RunPython(update_priority_settings),
|
|
30
|
+
]
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
|
|
2
|
+
import logging
|
|
3
|
+
|
|
4
|
+
from django.db import migrations
|
|
5
|
+
|
|
6
|
+
logger = logging.getLogger(__name__)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def get_component_mappings() -> list:
|
|
10
|
+
"""
|
|
11
|
+
Returns a list of tuples for updating existing component names and their attributes.
|
|
12
|
+
|
|
13
|
+
Each tuple contains:
|
|
14
|
+
- old_name (str): The current name of the component.
|
|
15
|
+
- new_name (str): The new name to assign to the component.
|
|
16
|
+
- slack_channel (str): The associated Slack channel for the component.
|
|
17
|
+
- group_name (str): The name of the group to which the component belongs.
|
|
18
|
+
|
|
19
|
+
Returns:
|
|
20
|
+
list: A list of tuples, each representing the details for a component update.
|
|
21
|
+
"""
|
|
22
|
+
return [
|
|
23
|
+
# Marketplace
|
|
24
|
+
("Product Discovery", "Navigation & Product discovery", "impact-nav-product-discovery", "Marketplace"),
|
|
25
|
+
("User & Purchase", "Cart & funnel", "impact-cart-funnel", "Marketplace"),
|
|
26
|
+
("Customer Management", "Customer login & signup", "impact-customer-login-signup", "Marketplace"),
|
|
27
|
+
("Performance", "Web performance", "impact-web-performance", "Marketplace"),
|
|
28
|
+
# Catalog
|
|
29
|
+
("Product Information", "Product Management", "impact-product-management", "Catalog"),
|
|
30
|
+
("Taxonomy", "Product Structure", "impact-product-structure", "Catalog"),
|
|
31
|
+
("Publication on website", "Catalog Exposition", "impact-catalog-exposition", "Catalog"),
|
|
32
|
+
# Payment Operations
|
|
33
|
+
("Payment", "Payment", "impact-payment", "Payment Operations"),
|
|
34
|
+
# Operations
|
|
35
|
+
("ManoFulfillment OPS", "MM Fulfillment", "impact-mm-fulfillment", "Operations"),
|
|
36
|
+
("Helpcenter", "Helpcenter after sales", "impact-helpcenter-after-sales", "Operations"),
|
|
37
|
+
# Finance
|
|
38
|
+
("Finance Operations", "Controlling", "impact-controlling", "Finance"),
|
|
39
|
+
# Platform
|
|
40
|
+
("Spinak", "Spinak", "impact-spinak", "Platform"),
|
|
41
|
+
("CDN", "CDN", "impact-cdn", "Platform"),
|
|
42
|
+
("Gitlab", "Gitlab", "impact-gitlab", "Platform"),
|
|
43
|
+
# Data
|
|
44
|
+
("data-platform", "Data Ingestion", "impact-data-ingestion", "Data"),
|
|
45
|
+
("data-specialist-offer", "Data Warehouse", "impact-data-warehouse", "Data"),
|
|
46
|
+
("data-wbr", "Data Analytics", "impact-data-analytics", "Data"),
|
|
47
|
+
# Security
|
|
48
|
+
("Security Misc", "Bot management & rate limiting & WAF", "impact-bot-management-rate-limiting-waf", "Security"),
|
|
49
|
+
("Attack", "Data leak", "impact-data-leak", "Security"),
|
|
50
|
+
("System Compromise", "Exploited vulnerability", "impact-exploited-vulnerability", "Security"),
|
|
51
|
+
("Personal Data Breach", "Stolen account(s) or IT materials", "impact-stolen-accounts-it-materials", "Security"),
|
|
52
|
+
]
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def update_component_names(apps, schema_editor):
|
|
56
|
+
Component = apps.get_model("incidents", "Component")
|
|
57
|
+
Group = apps.get_model("incidents", "Group")
|
|
58
|
+
component_mappings = get_component_mappings()
|
|
59
|
+
|
|
60
|
+
updated_count = 0
|
|
61
|
+
|
|
62
|
+
for old_name, new_name, _slack_channel, group_name in component_mappings:
|
|
63
|
+
try:
|
|
64
|
+
component = Component.objects.get(name=old_name)
|
|
65
|
+
logger.info(f"Updating: '{old_name}' to '{new_name}'")
|
|
66
|
+
component.name = new_name
|
|
67
|
+
|
|
68
|
+
group_instance = Group.objects.get(name=group_name)
|
|
69
|
+
component.group = group_instance
|
|
70
|
+
component.save()
|
|
71
|
+
updated_count += 1
|
|
72
|
+
except Exception:
|
|
73
|
+
logger.exception(f"Component '{old_name}' does not exist, cannot proceed with updates.")
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def revert_component_names(apps, schema_editor):
|
|
77
|
+
Component = apps.get_model("incidents", "Component")
|
|
78
|
+
reverse_mappings = {new_name: old_name for old_name, new_name, _, _ in get_component_mappings()}
|
|
79
|
+
|
|
80
|
+
updated_count = 0
|
|
81
|
+
|
|
82
|
+
for new_name, old_name in reverse_mappings.items():
|
|
83
|
+
|
|
84
|
+
try:
|
|
85
|
+
component = Component.objects.get(name=new_name)
|
|
86
|
+
logger.info(f"Restoring '{new_name}' back to '{old_name}'")
|
|
87
|
+
component.name = old_name
|
|
88
|
+
component.save()
|
|
89
|
+
updated_count += 1
|
|
90
|
+
except Exception:
|
|
91
|
+
logger.exception(f"Component '{new_name}' does not exist, skipping restoration.")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Migration(migrations.Migration):
|
|
95
|
+
|
|
96
|
+
dependencies = [
|
|
97
|
+
("incidents", "0009_update_sla"),
|
|
98
|
+
]
|
|
99
|
+
|
|
100
|
+
operations = [
|
|
101
|
+
migrations.RunPython(update_component_names, revert_component_names),
|
|
102
|
+
]
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, transaction
|
|
4
|
+
|
|
5
|
+
logger = logging.getLogger(__name__)
|
|
6
|
+
|
|
7
|
+
COMPONENT_MAPPING = {
|
|
8
|
+
"Internal Messaging": "Helpcenter after sales",
|
|
9
|
+
"Crisis Communication Room": "Other",
|
|
10
|
+
"data-visitors": "Data Ingestion",
|
|
11
|
+
"data-buyers": "Data Ingestion",
|
|
12
|
+
"Seller Order": "Seller Admin and Experience",
|
|
13
|
+
"Legacy": "Other",
|
|
14
|
+
"Authentification": "Customer login & signup",
|
|
15
|
+
"data-operations": "Data Ingestion",
|
|
16
|
+
"Test Incident": "Other",
|
|
17
|
+
"Legal": "Other",
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
# Global variable to store incidents with the previous component
|
|
21
|
+
# This will be used to restore the original component in case of rollback
|
|
22
|
+
INCIDENTS_BACKUP = {}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def forwards_func(apps, _schema_editor):
|
|
26
|
+
Incident = apps.get_model("incidents", "Incident")
|
|
27
|
+
Component = apps.get_model("incidents", "Component")
|
|
28
|
+
with transaction.atomic():
|
|
29
|
+
for old_component_name, new_component_name in COMPONENT_MAPPING.items():
|
|
30
|
+
old_component = Component.objects.filter(name=old_component_name).first()
|
|
31
|
+
if not old_component:
|
|
32
|
+
logger.error(f"Failed to find component {old_component_name}.")
|
|
33
|
+
continue
|
|
34
|
+
incidents = Incident.objects.filter(component=old_component)
|
|
35
|
+
ids = list(incidents.values_list("id", flat=True))
|
|
36
|
+
if ids:
|
|
37
|
+
INCIDENTS_BACKUP[old_component_name] = ids
|
|
38
|
+
new_component = Component.objects.filter(name=new_component_name).first()
|
|
39
|
+
if not new_component:
|
|
40
|
+
logger.error(f"Failed to find component {new_component_name}.")
|
|
41
|
+
continue
|
|
42
|
+
incidents.update(component=new_component)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def backwards_func(apps, _schema_editor):
|
|
46
|
+
Incident = apps.get_model("incidents", "Incident")
|
|
47
|
+
Component = apps.get_model("incidents", "Component")
|
|
48
|
+
with transaction.atomic():
|
|
49
|
+
for old_component_name, ids in INCIDENTS_BACKUP.items():
|
|
50
|
+
old_component = Component.objects.filter(name=old_component_name).first()
|
|
51
|
+
if not old_component:
|
|
52
|
+
logger.error(f"Failed to find component {old_component_name}.")
|
|
53
|
+
continue
|
|
54
|
+
Incident.objects.filter(id__in=ids).update(component=old_component)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def delete_old_components(apps, _schema_editor):
|
|
58
|
+
Component = apps.get_model("incidents", "Component")
|
|
59
|
+
try:
|
|
60
|
+
for old_name in COMPONENT_MAPPING:
|
|
61
|
+
Component.objects.filter(name=old_name).delete()
|
|
62
|
+
except Exception:
|
|
63
|
+
logger.exception(f"Failed to delete old components {old_name}.")
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def recreate_old_components(apps, _schema_editor):
|
|
67
|
+
Component = apps.get_model("incidents", "Component")
|
|
68
|
+
try:
|
|
69
|
+
for old_name in COMPONENT_MAPPING:
|
|
70
|
+
Component.objects.get_or_create(name=old_name)
|
|
71
|
+
except Exception:
|
|
72
|
+
logger.exception(f"Failed to recreate old components {old_name}.")
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class Migration(migrations.Migration):
|
|
76
|
+
|
|
77
|
+
dependencies = [
|
|
78
|
+
("incidents", "0010_update_components"),
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
operations = [
|
|
82
|
+
migrations.RunPython(forwards_func, backwards_func),
|
|
83
|
+
migrations.RunPython(
|
|
84
|
+
delete_old_components,
|
|
85
|
+
recreate_old_components,
|
|
86
|
+
),
|
|
87
|
+
]
|
|
@@ -667,7 +667,7 @@ class IncidentFilterSet(django_filters.FilterSet):
|
|
|
667
667
|
)
|
|
668
668
|
component = ModelMultipleChoiceFilter(
|
|
669
669
|
queryset=component_filter_choices_queryset,
|
|
670
|
-
label="
|
|
670
|
+
label="Issue category",
|
|
671
671
|
widget=GroupedCheckboxSelectMultiple,
|
|
672
672
|
)
|
|
673
673
|
created_at = FFDateRangeSingleFilter(field_name="created_at")
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
<div class="mt-8 max-w-3xl mx-auto grid grid-cols-1 gap-6 sm:px-6 lg:max-w-7xl lg:grid-flow-col-dense lg:grid-cols-12">
|
|
29
29
|
<div class="space-y-6 lg:col-start-1 lg:col-span-7">
|
|
30
|
-
{% component "card" card_title="
|
|
30
|
+
{% component "card" card_title="Issue category information" id="component-information" %}
|
|
31
31
|
{% fill "card_content" %}
|
|
32
32
|
<dl class="grid grid-cols-1 gap-x-4 gap-y-8 sm:grid-cols-2">
|
|
33
33
|
{% if component.description %}
|
firefighter/raid/client.py
CHANGED
|
@@ -88,8 +88,8 @@ class RaidJiraClient(JiraClient):
|
|
|
88
88
|
f"Suggested team to be routed: *{suggested_team_routing}*"
|
|
89
89
|
)
|
|
90
90
|
if business_impact and business_impact != "N/A":
|
|
91
|
-
if business_impact not in {"Low", "Medium", "High"}:
|
|
92
|
-
raise ValueError("Business impact must be Low, Medium or
|
|
91
|
+
if business_impact not in {"Lowest", "Low", "Medium", "High", "Highest"}:
|
|
92
|
+
raise ValueError("Business impact must be Lowest, Low, Medium, High or Highest")
|
|
93
93
|
extra_args["customfield_10936"] = {"value": business_impact}
|
|
94
94
|
if platform:
|
|
95
95
|
platform = platform.replace("platform-", "")
|
|
@@ -171,7 +171,7 @@ class UserGroup(models.Model):
|
|
|
171
171
|
Component,
|
|
172
172
|
related_name="usergroups",
|
|
173
173
|
blank=True,
|
|
174
|
-
help_text="Incident created with this usergroup automatically add the group members to these
|
|
174
|
+
help_text="Incident created with this usergroup automatically add the group members to these issue categories.",
|
|
175
175
|
)
|
|
176
176
|
|
|
177
177
|
tag = models.CharField(
|
|
@@ -100,10 +100,11 @@ class SelectImpactModal(
|
|
|
100
100
|
else:
|
|
101
101
|
err_msg = f"Invalid priority data: {priority_data}" # type: ignore[unreachable]
|
|
102
102
|
raise TypeError(err_msg)
|
|
103
|
+
process = ":slack: Slack :jira_new: Jira ticket" if open_incident_context.get("response_type") == "critical" else ":jira_new: Jira ticket"
|
|
103
104
|
blocks.extend((
|
|
104
105
|
DividerBlock(),
|
|
105
106
|
SectionBlock(
|
|
106
|
-
text=f"💡
|
|
107
|
+
text=f"💡 Selected priority: {priority} - {priority.description}\n⏱️ SLA: {priority.sla}\n{process}"
|
|
107
108
|
),
|
|
108
109
|
))
|
|
109
110
|
|
|
@@ -173,7 +174,7 @@ class SelectImpactModal(
|
|
|
173
174
|
def _calculate_proposed_incident_type(
|
|
174
175
|
suggested_priority_value: int,
|
|
175
176
|
) -> ResponseType:
|
|
176
|
-
return "critical" if suggested_priority_value <=
|
|
177
|
+
return "critical" if suggested_priority_value <= 3 else "normal"
|
|
177
178
|
|
|
178
179
|
@staticmethod
|
|
179
180
|
def _update_private_metadata(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: firefighter-incident
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.5
|
|
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/
|
|
@@ -6,7 +6,7 @@ gunicorn.conf.py,sha256=vHsTGjaKOr8FDMp6fTKYTX4AtokmPgYvvt5Mr0Q6APc,273
|
|
|
6
6
|
main.py,sha256=CsbprHoOYhjCLpTJmq9Z_aRYFoFgWxoz2pDLuwm8Eqg,1558
|
|
7
7
|
manage.py,sha256=5ivHGD13C6nJ8QvltKsJ9T9akA5he8da70HLWaEP3k8,689
|
|
8
8
|
firefighter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
|
-
firefighter/_version.py,sha256=
|
|
9
|
+
firefighter/_version.py,sha256=WcvKdm4etz9_Q5VW_LRgfCR0icS2PEtbz-C1JY6enCc,511
|
|
10
10
|
firefighter/api/__init__.py,sha256=JQW0Bv6xwGqy7ioxx3h6UGMzkkJ4DntDpbvV1Ncgi8k,136
|
|
11
11
|
firefighter/api/admin.py,sha256=x9Ysy-GiYjb0rynmFdS9g56e6n24fkN0ouGy5QD9Yrc,4629
|
|
12
12
|
firefighter/api/apps.py,sha256=P5uU1_gMrDfzurdMbfqw1Bnb2uNKKcMq17WBPg2sLhc,204
|
|
@@ -137,13 +137,13 @@ firefighter/incidents/signals.py,sha256=hUlPVVKSi9zuL4gz_Sa-HrDleYCASeMqKqA-kkHC
|
|
|
137
137
|
firefighter/incidents/tables.py,sha256=SH-ScSw7SkwbdiAIApHn1eYfOuj7CRy__jY9gDadenk,3324
|
|
138
138
|
firefighter/incidents/urls.py,sha256=4QJAIjmyE90_j8HLNExa4UpjM2CgasBOlx_r07ucjiM,2059
|
|
139
139
|
firefighter/incidents/forms/__init__.py,sha256=OU0r5eZc2A0UJNsL83n8AI5EvwUvg4Yx0GyPBI7R73M,111
|
|
140
|
-
firefighter/incidents/forms/close_incident.py,sha256=
|
|
141
|
-
firefighter/incidents/forms/create_incident.py,sha256=
|
|
140
|
+
firefighter/incidents/forms/close_incident.py,sha256=syT5Lpr_WXNFT3KGCe1oy-FzOqMt98S7YEzovdnp7To,940
|
|
141
|
+
firefighter/incidents/forms/create_incident.py,sha256=Wpp0qqUJQs5-5BXrS-P5-dGvM5zgr9XqaEEl6tpNZi4,2739
|
|
142
142
|
firefighter/incidents/forms/edit.py,sha256=2rQkiKak-vac-K3cIsqlGv4R5nhI7JLxw3DhFMXbWms,956
|
|
143
|
-
firefighter/incidents/forms/select_impact.py,sha256=
|
|
143
|
+
firefighter/incidents/forms/select_impact.py,sha256=twgvfvyT6TL4yzv1dx7H6IWrncfGTeMf2Qg6x0hTWjw,4637
|
|
144
144
|
firefighter/incidents/forms/update_key_events.py,sha256=1Xmnxe5OgZqLFS2HmMzQm3VGFPQipsdrLgKSwdh-fKc,4441
|
|
145
145
|
firefighter/incidents/forms/update_roles.py,sha256=Q26UPfwAj-8N23RNZLQkvmHGnS1_j_X5KQWjJmPjMKY,3635
|
|
146
|
-
firefighter/incidents/forms/update_status.py,sha256=
|
|
146
|
+
firefighter/incidents/forms/update_status.py,sha256=QCRKfDhSYZhVsJ6oofQxOXGMWMDRQEDnH29y8YnFn_Y,1034
|
|
147
147
|
firefighter/incidents/forms/utils.py,sha256=g2azRXQE4GwBNvq47z_Q51yKcGYSBzFyITTDkLlC_Gk,3651
|
|
148
148
|
firefighter/incidents/migrations/0001_initial_oss.py,sha256=OCrPbxf90h3NW9xolGGcsAryHKptD1TtKj5FucjBjg8,60311
|
|
149
149
|
firefighter/incidents/migrations/0002_alter_severity_name_alter_user_password_featureteam.py,sha256=YfIJhw_-Yqm8qrkbp01461bkcUr7v5Zy90oHjkY3bSA,1113
|
|
@@ -153,13 +153,16 @@ firefighter/incidents/migrations/0005_enable_from_p1_to_p5_priority.py,sha256=sB
|
|
|
153
153
|
firefighter/incidents/migrations/0006_update_group_names.py,sha256=RHWre_VrnBmloFaqfoKA3TQtF8J2k5w1vzTEfGW81SQ,3172
|
|
154
154
|
firefighter/incidents/migrations/0007_update_component_name.py,sha256=Al9k5Xx2_ea4u20MIp2blTErdv7jkGDYCLhGJ3P-gdw,6555
|
|
155
155
|
firefighter/incidents/migrations/0008_impact_level.py,sha256=ZPDTYbt3q0gSEjMC7Nhl7LND9g4J4Hu5n_BO44sKFuc,8852
|
|
156
|
+
firefighter/incidents/migrations/0009_update_sla.py,sha256=cLbDmOKrcQOa6lb1kMd-xPJC1w7iDJuEsDTKymEnUMw,849
|
|
157
|
+
firefighter/incidents/migrations/0010_update_components.py,sha256=IwAj3axIXM95DrQcAZ8NBe-3GgL4NPrZqyBMdVqA8Lo,4301
|
|
158
|
+
firefighter/incidents/migrations/0011_update_incidents.py,sha256=tV4MA5ZJcqiRPteOLxJNZuhj7q6ncWXjAklm_9IzLbo,3190
|
|
156
159
|
firefighter/incidents/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
157
160
|
firefighter/incidents/models/__init__.py,sha256=dCNP-zRYNNDOZB3JDDWp7vCl084Jh6RgDT_iP57RkOY,862
|
|
158
161
|
firefighter/incidents/models/component.py,sha256=7GyXKNFk1MZns6RUGLpkNw5u6He7H9N1LexzXbG4sBM,7445
|
|
159
162
|
firefighter/incidents/models/environment.py,sha256=51txwua3dCrWZ1iSG3ZA8rbDn9c00pyMAZujl9gwE5c,827
|
|
160
163
|
firefighter/incidents/models/group.py,sha256=MscG3IY5AdyJbmq8h4mMqEvLwmnJLor9rkd6CIycKho,685
|
|
161
164
|
firefighter/incidents/models/impact.py,sha256=KyIDFdAAdlNfX0aUF8mOY1ZjSqKNeefjPU-VLDGN5zs,4715
|
|
162
|
-
firefighter/incidents/models/incident.py,sha256=
|
|
165
|
+
firefighter/incidents/models/incident.py,sha256=aQUAboXmHH9DO1Nq6AbB4w17dPQqn5iMTwT2r4TeJrA,26129
|
|
163
166
|
firefighter/incidents/models/incident_cost.py,sha256=juwOfJKRaNQpOHkRUCHShDDba0FU98YjRPkU4I0ofAU,1346
|
|
164
167
|
firefighter/incidents/models/incident_cost_type.py,sha256=wm8diry_VySJzIjC9M3Yavv2tYbvJgpN9UDb2gFRuH4,845
|
|
165
168
|
firefighter/incidents/models/incident_membership.py,sha256=vvvBvYPxNlM98KdF81cMrDif8_Wl5TqqNkmf_z9lZO8,1745
|
|
@@ -218,7 +221,7 @@ firefighter/incidents/templates/layouts/partials/status_pill.html,sha256=D9V8bnO
|
|
|
218
221
|
firefighter/incidents/templates/layouts/partials/table.html,sha256=eZE4kh0nQwGik6qc7A0O_jHyZcg32uzHc1pkjJRt6hw,1567
|
|
219
222
|
firefighter/incidents/templates/layouts/partials/user_card.html,sha256=LgYHSpqC0BAhVENMSmLpow8jlPnh5uRvHzooJlJna6w,802
|
|
220
223
|
firefighter/incidents/templates/layouts/partials/user_tooltip.html,sha256=KkVPpoODXIzrm6iItTg5RQphBGruQw4dFdOgAuGRt1E,562
|
|
221
|
-
firefighter/incidents/templates/pages/component_detail.html,sha256=
|
|
224
|
+
firefighter/incidents/templates/pages/component_detail.html,sha256=WLO9zg8zDCUtINOHK9xP5dKd5WaB8UWT6JNjLjYSQKs,5277
|
|
222
225
|
firefighter/incidents/templates/pages/component_list.html,sha256=Dq7Fo-J-S7fM3v1ByiwAh8XH_f5LSpzXOKiujjRoVAY,1715
|
|
223
226
|
firefighter/incidents/templates/pages/dashboard.html,sha256=jGfTCTdyLt3fWtX66HVG1bNgpffV4J7jagVgksCGsSE,1743
|
|
224
227
|
firefighter/incidents/templates/pages/docs_metrics.html,sha256=q10CCPwjujuj9_h7Mj4-NgP6BMt4TJ6Z3D20W9qZbaQ,3744
|
|
@@ -239,7 +242,7 @@ firefighter/incidents/views/reports.py,sha256=4h9z1QIhnDkzEyqvi-GI_j9Oem2igvqTk0
|
|
|
239
242
|
firefighter/incidents/views/views.py,sha256=MPcrqtvA0_xoGX8Bw6v-uMBp6RiJY0-_HTQ-en-zJ8Q,10487
|
|
240
243
|
firefighter/incidents/views/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
241
244
|
firefighter/incidents/views/components/details.py,sha256=4pBCAS2gLYAm4CwTJ5mkw43dq8BkGknsAwrQgeMF21Q,942
|
|
242
|
-
firefighter/incidents/views/components/list.py,sha256=
|
|
245
|
+
firefighter/incidents/views/components/list.py,sha256=B4XRnNG2tcehKuTT4wznPcI93lkLxRyRNEXSOsFFiVo,2130
|
|
243
246
|
firefighter/incidents/views/docs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
244
247
|
firefighter/incidents/views/docs/metrics.py,sha256=n2-chgxTokOqCx-W5YZRHK3pYmzvz0b_RF6s1de2Fcw,1713
|
|
245
248
|
firefighter/incidents/views/docs/role_types.py,sha256=88dGBAL7NMC24lyqLDN0jGnh5-ILRI5afL2Wig7LrFs,1122
|
|
@@ -288,7 +291,7 @@ firefighter/pagerduty/views/oncall_trigger.py,sha256=LYHpWyEaR6O8NazmsTl5ydtw1XH
|
|
|
288
291
|
firefighter/raid/__init__.py,sha256=nMNmvHCSkyLQsdhTow7myMU62vXk1e755gUntVfFFlY,154
|
|
289
292
|
firefighter/raid/admin.py,sha256=YaqjJ7UcoEf_72kKVVN-O2Pp7_9lGuUdc-nHSQZYEYM,1405
|
|
290
293
|
firefighter/raid/apps.py,sha256=BUkaZSu45Ghdpx1XnE3DaFD4SC2SeUtSDZOTYynte5k,1655
|
|
291
|
-
firefighter/raid/client.py,sha256=
|
|
294
|
+
firefighter/raid/client.py,sha256=JCeuKO2j1EYRHEKWn89fl9vF7KjW5XQVsu9MYrVOi48,7993
|
|
292
295
|
firefighter/raid/forms.py,sha256=oJOPHYFtwlffuPgFi4lbbOCoKhwianrvafNicOmT_-c,15816
|
|
293
296
|
firefighter/raid/messages.py,sha256=e75kwi0hCe5ChwU4t-_6Q3Rcy22MLLdVSsYyjvG2SCM,5542
|
|
294
297
|
firefighter/raid/models.py,sha256=FNfPHvlF9h09LxL2a4zFPfc0raArmufywjzTdqGATms,2662
|
|
@@ -335,7 +338,7 @@ firefighter/slack/models/incident_channel.py,sha256=MKzrGPDEz7CcumrnbWZBcKAHoScy
|
|
|
335
338
|
firefighter/slack/models/message.py,sha256=E1MQoZJz4MsgCeqgP94_jtSrz2RYuWdoys8tz4Tfboc,4727
|
|
336
339
|
firefighter/slack/models/sos.py,sha256=Sji-7DxgsrLs7vFRJKPw7nmYyo2tIjNwoTcmdCmzEvA,1418
|
|
337
340
|
firefighter/slack/models/user.py,sha256=744fulTB00UQzsZwxf8CiQNMfEKmYY6y37x6zm6g14I,17218
|
|
338
|
-
firefighter/slack/models/user_group.py,sha256=
|
|
341
|
+
firefighter/slack/models/user_group.py,sha256=NyqtC0C_Vur2xZ6t7T7d7Z30WZ8EEovczJ0uYZVDC7o,7104
|
|
339
342
|
firefighter/slack/signals/__init__.py,sha256=dqMf2x-PVKgmwzH2d9uHuQ8hZ4fbu74eRd4Ij2_dNSg,186
|
|
340
343
|
firefighter/slack/signals/create_incident_conversation.py,sha256=uybiqCgPlWYq2AA2FKNkEmqhDYxDy-h0ebT-RBVpx9I,4965
|
|
341
344
|
firefighter/slack/signals/get_users.py,sha256=_xPsZFgcxd87Vuhv6FttttrxnIb0z65-It8H3FZlHOM,2271
|
|
@@ -382,7 +385,7 @@ firefighter/slack/views/modals/status.py,sha256=C8-eJRtquSeaHe568SC7yCFef1k14m2_
|
|
|
382
385
|
firefighter/slack/views/modals/trigger_oncall.py,sha256=h_LAD5X5rjMFWiDYTEp5VB9OaF7sTvKZhNaW3KQkw5M,5065
|
|
383
386
|
firefighter/slack/views/modals/update.py,sha256=OF9sf-Z6IiviNmjN28MQNYiUbJ5tha0MdHUQyPpVFiY,2150
|
|
384
387
|
firefighter/slack/views/modals/update_roles.py,sha256=De3Gv67MZQHyNdonX3S99F5MtKF_Rj3y71gdWibxBaM,2419
|
|
385
|
-
firefighter/slack/views/modals/update_status.py,sha256=
|
|
388
|
+
firefighter/slack/views/modals/update_status.py,sha256=ao9ZPCw9tgxdbyLGXsXRLL-LRB1_bxaoaa1ORoh0-nA,4472
|
|
386
389
|
firefighter/slack/views/modals/base_modal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
387
390
|
firefighter/slack/views/modals/base_modal/base.py,sha256=7mvOxZTtegSmitSMnDvu8BK0qLUXoudUsda6CaLjdkY,12479
|
|
388
391
|
firefighter/slack/views/modals/base_modal/base_mixins.py,sha256=Xl1koQsPpHO_kKIiuSSJHJnIBmytDXseI1KcAZQZC3M,230
|
|
@@ -391,11 +394,11 @@ firefighter/slack/views/modals/base_modal/mixins.py,sha256=c7WYs0aXKXVktEMNSZ8IU
|
|
|
391
394
|
firefighter/slack/views/modals/base_modal/modal_utils.py,sha256=1uHTlLxxeXUQttH3bHaehJwCuI6a-h04s-GzdnVA4sI,2459
|
|
392
395
|
firefighter/slack/views/modals/opening/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
393
396
|
firefighter/slack/views/modals/opening/check_current_incidents.py,sha256=28GN0SXP7rVPa55arX1aI98k45w9568GCRDA73eCHEM,2535
|
|
394
|
-
firefighter/slack/views/modals/opening/select_impact.py,sha256=
|
|
397
|
+
firefighter/slack/views/modals/opening/select_impact.py,sha256=P38gsWJ2UmHG9qunsrO9cl1qwZdGU572SYiafh8QLUU,8168
|
|
395
398
|
firefighter/slack/views/modals/opening/set_details.py,sha256=i6zQM2FYz3Z6s5AZH7lXgB2e8yjS0rDwgfMBZaiOqIw,5791
|
|
396
399
|
firefighter/slack/views/modals/opening/types.py,sha256=ETpp0DAz5OMI5h7iv62Of7yJCbI-Q4-3kKSS6msPQeY,563
|
|
397
400
|
firefighter/slack/views/modals/opening/details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
398
|
-
firefighter/slack/views/modals/opening/details/critical.py,sha256
|
|
401
|
+
firefighter/slack/views/modals/opening/details/critical.py,sha256=-APRvkjopLwLPv3qPGTZfgS0d1bpb8NM0OXppRdUK94,2854
|
|
399
402
|
firefighter_fixtures/incidents/components.json,sha256=qVVG201I4V-9f4Z3ZB0n9C4yZOJ8Qkz9v9MNAlqT8L8,21229
|
|
400
403
|
firefighter_fixtures/incidents/environments.json,sha256=5H_F08x7moMKz-H6OIUVaJGtmyKEESXLlG5cfXX0IA4,1039
|
|
401
404
|
firefighter_fixtures/incidents/groups.json,sha256=mwrpUk9tvZa0RnT1T0aec_nnMsVZhR2GXS7pmrAK0y8,2555
|
|
@@ -417,7 +420,7 @@ firefighter_tests/test_firefighter/test_logging.py,sha256=4HUH73vLDwmOCpMiXwDasM
|
|
|
417
420
|
firefighter_tests/test_firefighter/test_urls.py,sha256=UMGx4oW98RoL0ceePkIIKEVjbHdFECvQuGNXYAJForQ,4839
|
|
418
421
|
firefighter_tests/test_incidents/test_incident_urls.py,sha256=vQy9f1ewJK3N9cjVQDBnLaZjhtiBv5TzoRiGUdV3u5E,3769
|
|
419
422
|
firefighter_tests/test_incidents/test_forms/test_form_select_impact.py,sha256=hcDqy3zXJ-klC0tYGWogxrDLDsaD5i4xNSejY0wBbHE,3210
|
|
420
|
-
firefighter_tests/test_incidents/test_forms/test_form_utils.py,sha256=
|
|
423
|
+
firefighter_tests/test_incidents/test_forms/test_form_utils.py,sha256=24ATxxAjkLlz7cj_jIQZvuQvtrfieeh4oaIM90yQrlc,2299
|
|
421
424
|
firefighter_tests/test_incidents/test_forms/test_update_key_events.py,sha256=rHRGRU9iFXDdMr_kK3pMB7gyeZuMf7Dyq8bRZkddBC4,1644
|
|
422
425
|
firefighter_tests/test_incidents/test_models/test_incident_model.py,sha256=Kl2dQ0P3qruAaQP5M8WRYJiff-4SpmxpFYHYmA9Xv3k,879
|
|
423
426
|
firefighter_tests/test_incidents/test_models/test_migrations/test_incident_migrations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -432,13 +435,13 @@ firefighter_tests/test_slack/test_slack_utils.py,sha256=9PLobMNXh3xDyFuwzcQFpKJh
|
|
|
432
435
|
firefighter_tests/test_slack/test_models/test_conversations.py,sha256=t3ttmgwiu7c-N55iU3XZPmrkEhvkTzJoXszJncy4Bts,793
|
|
433
436
|
firefighter_tests/test_slack/test_models/test_incident_channel.py,sha256=qWoGe9iadmK6-R8usWvjH87AHRkvhG_dHQeC3kHeJrs,17487
|
|
434
437
|
firefighter_tests/test_slack/test_models/test_slack_user.py,sha256=uzur-Rf03I5dpUTO4ZI6O1arBUrAorg1Zvgshf8M-J4,7000
|
|
435
|
-
firefighter_tests/test_slack/views/modals/test_close.py,sha256=
|
|
438
|
+
firefighter_tests/test_slack/views/modals/test_close.py,sha256=kcwGwonjIiniGb5f78ZwlKjuvYB-xat-SrbouV9VCEc,42894
|
|
436
439
|
firefighter_tests/test_slack/views/modals/test_open.py,sha256=Iatphd7vnrEMrv8ysKxDVDAuZNEsVXBksIEpIaDHQss,4100
|
|
437
440
|
firefighter_tests/test_slack/views/modals/test_send_sos.py,sha256=_rE6jD-gOzcGyhlY0R9GzlGtPx65oOOguJYdENgxtLc,1289
|
|
438
441
|
firefighter_tests/test_slack/views/modals/test_status.py,sha256=oQzPfwdg2tkbo9nfkO1GfS3WydxqSC6vy1AZjZDKT30,2226
|
|
439
|
-
firefighter_tests/test_slack/views/modals/test_update_status.py,sha256=
|
|
440
|
-
firefighter_incident-0.0.
|
|
441
|
-
firefighter_incident-0.0.
|
|
442
|
-
firefighter_incident-0.0.
|
|
443
|
-
firefighter_incident-0.0.
|
|
444
|
-
firefighter_incident-0.0.
|
|
442
|
+
firefighter_tests/test_slack/views/modals/test_update_status.py,sha256=Y8Oa_fraj1vtaGig9Y28_6tOWvMrRPS-wyg3rY-DHBk,39380
|
|
443
|
+
firefighter_incident-0.0.5.dist-info/METADATA,sha256=MrJmuQfWF1YiuJkIxwM4hJ5vmOnbW7YMg8ycN9fZZpM,5487
|
|
444
|
+
firefighter_incident-0.0.5.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
445
|
+
firefighter_incident-0.0.5.dist-info/entry_points.txt,sha256=c13meJbv7YNmYz7MipMOQwzQ5IeFOPXUBYAJ44XMQsM,61
|
|
446
|
+
firefighter_incident-0.0.5.dist-info/licenses/LICENSE,sha256=krRiGp-a9-1nH1bWpBEdxyTKLhjLmn6DMVVoIb0zF90,1087
|
|
447
|
+
firefighter_incident-0.0.5.dist-info/RECORD,,
|
|
@@ -28,8 +28,8 @@ def group() -> Group:
|
|
|
28
28
|
@pytest.fixture
|
|
29
29
|
def components(group: Group):
|
|
30
30
|
return [
|
|
31
|
-
Component.objects.create(name="
|
|
32
|
-
Component.objects.create(name="
|
|
31
|
+
Component.objects.create(name="Issue category 1", group=group, order=1),
|
|
32
|
+
Component.objects.create(name="Issue category 2", group=group, order=2),
|
|
33
33
|
]
|
|
34
34
|
|
|
35
35
|
|
|
@@ -221,7 +221,7 @@ valid_submission = {
|
|
|
221
221
|
{
|
|
222
222
|
"type": "input",
|
|
223
223
|
"block_id": "component",
|
|
224
|
-
"label": {"type": "plain_text", "text": "
|
|
224
|
+
"label": {"type": "plain_text", "text": "Issue category", "emoji": True},
|
|
225
225
|
"optional": False,
|
|
226
226
|
"dispatch_action": False,
|
|
227
227
|
"element": {
|
|
@@ -229,7 +229,7 @@ valid_submission = {
|
|
|
229
229
|
"action_id": "component",
|
|
230
230
|
"placeholder": {
|
|
231
231
|
"type": "plain_text",
|
|
232
|
-
"text": "Select affected
|
|
232
|
+
"text": "Select affected issue category",
|
|
233
233
|
"emoji": True,
|
|
234
234
|
},
|
|
235
235
|
"option_groups": [
|
|
@@ -251,7 +251,7 @@ valid_submission = {
|
|
|
251
251
|
{
|
|
252
252
|
"type": "input",
|
|
253
253
|
"block_id": "component",
|
|
254
|
-
"label": {"type": "plain_text", "text": "
|
|
254
|
+
"label": {"type": "plain_text", "text": "Issue category", "emoji": True},
|
|
255
255
|
"optional": False,
|
|
256
256
|
"dispatch_action": False,
|
|
257
257
|
"element": {
|
|
@@ -259,7 +259,7 @@ valid_submission = {
|
|
|
259
259
|
"action_id": "component",
|
|
260
260
|
"placeholder": {
|
|
261
261
|
"type": "plain_text",
|
|
262
|
-
"text": "Select affected
|
|
262
|
+
"text": "Select affected issue category",
|
|
263
263
|
"emoji": True,
|
|
264
264
|
},
|
|
265
265
|
"initial_option": {
|
|
File without changes
|
{firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{firefighter_incident-0.0.3.dist-info → firefighter_incident-0.0.5.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|