firefighter-incident 0.0.4__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 CHANGED
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.0.4'
21
- __version_tuple__ = version_tuple = (0, 0, 4)
20
+ __version__ = version = '0.0.5'
21
+ __version_tuple__ = version_tuple = (0, 0, 5)
@@ -28,7 +28,7 @@ class CloseIncidentForm(forms.Form):
28
28
  )
29
29
  component = GroupedModelChoiceField(
30
30
  choices_groupby="group",
31
- label="Component",
31
+ label="Issue category",
32
32
  queryset=Component.objects.all()
33
33
  .select_related("group")
34
34
  .order_by(
@@ -54,7 +54,7 @@ class CreateIncidentForm(CreateIncidentFormBase):
54
54
 
55
55
  component = GroupedModelChoiceField(
56
56
  choices_groupby="group",
57
- label="Component",
57
+ label="Issue category",
58
58
  queryset=(
59
59
  Component.objects.all()
60
60
  .select_related("group")
@@ -26,7 +26,7 @@ class UpdateStatusForm(forms.Form):
26
26
  )
27
27
  component = GroupedModelChoiceField(
28
28
  choices_groupby="group",
29
- label="Component",
29
+ label="Issue category",
30
30
  queryset=Component.objects.all()
31
31
  .select_related("group")
32
32
  .order_by(
@@ -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="Component",
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="Component Information" id="component-information" %}
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 %}
@@ -59,5 +59,5 @@ class ComponentsViewList(SingleTableMixin, FilterView):
59
59
  "metrics_period",
60
60
  "group",
61
61
  ]
62
- context["page_title"] = "Components List"
62
+ context["page_title"] = "Issue categories list"
63
63
  return context
@@ -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 components.",
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(
@@ -60,7 +60,7 @@ class CreateIncidentFormSlack(CreateIncidentForm):
60
60
  },
61
61
  "component": {
62
62
  "input": {
63
- "placeholder": "Select affected component",
63
+ "placeholder": "Select affected issue category",
64
64
  },
65
65
  },
66
66
  }
@@ -53,7 +53,7 @@ class UpdateStatusFormSlack(UpdateStatusForm):
53
53
  },
54
54
  "component": {
55
55
  "input": {
56
- "placeholder": "Select affected component",
56
+ "placeholder": "Select affected issue category",
57
57
  }
58
58
  },
59
59
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: firefighter-incident
3
- Version: 0.0.4
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=EY1c6JeG6uVHQoQcoxYAagjmJgQQxJk7iQ23gAoevU4,511
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=wn7NsQBe2SnHoVZG3mwhZfdo-z3cEFMhbHo9ZEAtBBw,935
141
- firefighter/incidents/forms/create_incident.py,sha256=uTjzEU8Qb7CQZUyNeKGovI0N5xIbrtxzUeF7tfId9es,2734
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
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=1eJPRySAArirzOa4LFWlLgS0nLJPOZ6O7HoEpH2cARA,1029
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
@@ -154,13 +154,15 @@ firefighter/incidents/migrations/0006_update_group_names.py,sha256=RHWre_VrnBmlo
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
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
157
159
  firefighter/incidents/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
160
  firefighter/incidents/models/__init__.py,sha256=dCNP-zRYNNDOZB3JDDWp7vCl084Jh6RgDT_iP57RkOY,862
159
161
  firefighter/incidents/models/component.py,sha256=7GyXKNFk1MZns6RUGLpkNw5u6He7H9N1LexzXbG4sBM,7445
160
162
  firefighter/incidents/models/environment.py,sha256=51txwua3dCrWZ1iSG3ZA8rbDn9c00pyMAZujl9gwE5c,827
161
163
  firefighter/incidents/models/group.py,sha256=MscG3IY5AdyJbmq8h4mMqEvLwmnJLor9rkd6CIycKho,685
162
164
  firefighter/incidents/models/impact.py,sha256=KyIDFdAAdlNfX0aUF8mOY1ZjSqKNeefjPU-VLDGN5zs,4715
163
- firefighter/incidents/models/incident.py,sha256=mQRCqw5O6IRg_Jj5hCbFg9Rsf5GX1DsHaiIU1-1ZKkU,26124
165
+ firefighter/incidents/models/incident.py,sha256=aQUAboXmHH9DO1Nq6AbB4w17dPQqn5iMTwT2r4TeJrA,26129
164
166
  firefighter/incidents/models/incident_cost.py,sha256=juwOfJKRaNQpOHkRUCHShDDba0FU98YjRPkU4I0ofAU,1346
165
167
  firefighter/incidents/models/incident_cost_type.py,sha256=wm8diry_VySJzIjC9M3Yavv2tYbvJgpN9UDb2gFRuH4,845
166
168
  firefighter/incidents/models/incident_membership.py,sha256=vvvBvYPxNlM98KdF81cMrDif8_Wl5TqqNkmf_z9lZO8,1745
@@ -219,7 +221,7 @@ firefighter/incidents/templates/layouts/partials/status_pill.html,sha256=D9V8bnO
219
221
  firefighter/incidents/templates/layouts/partials/table.html,sha256=eZE4kh0nQwGik6qc7A0O_jHyZcg32uzHc1pkjJRt6hw,1567
220
222
  firefighter/incidents/templates/layouts/partials/user_card.html,sha256=LgYHSpqC0BAhVENMSmLpow8jlPnh5uRvHzooJlJna6w,802
221
223
  firefighter/incidents/templates/layouts/partials/user_tooltip.html,sha256=KkVPpoODXIzrm6iItTg5RQphBGruQw4dFdOgAuGRt1E,562
222
- firefighter/incidents/templates/pages/component_detail.html,sha256=vf0WveYRT0Qao6HgpJZPuro6VPlpkQ3c8I3u6SiNcSQ,5272
224
+ firefighter/incidents/templates/pages/component_detail.html,sha256=WLO9zg8zDCUtINOHK9xP5dKd5WaB8UWT6JNjLjYSQKs,5277
223
225
  firefighter/incidents/templates/pages/component_list.html,sha256=Dq7Fo-J-S7fM3v1ByiwAh8XH_f5LSpzXOKiujjRoVAY,1715
224
226
  firefighter/incidents/templates/pages/dashboard.html,sha256=jGfTCTdyLt3fWtX66HVG1bNgpffV4J7jagVgksCGsSE,1743
225
227
  firefighter/incidents/templates/pages/docs_metrics.html,sha256=q10CCPwjujuj9_h7Mj4-NgP6BMt4TJ6Z3D20W9qZbaQ,3744
@@ -240,7 +242,7 @@ firefighter/incidents/views/reports.py,sha256=4h9z1QIhnDkzEyqvi-GI_j9Oem2igvqTk0
240
242
  firefighter/incidents/views/views.py,sha256=MPcrqtvA0_xoGX8Bw6v-uMBp6RiJY0-_HTQ-en-zJ8Q,10487
241
243
  firefighter/incidents/views/components/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
242
244
  firefighter/incidents/views/components/details.py,sha256=4pBCAS2gLYAm4CwTJ5mkw43dq8BkGknsAwrQgeMF21Q,942
243
- firefighter/incidents/views/components/list.py,sha256=NR_gf13DLBebK0aAzJuofVVQgzTRc5qgLGrwgjJ-rcc,2124
245
+ firefighter/incidents/views/components/list.py,sha256=B4XRnNG2tcehKuTT4wznPcI93lkLxRyRNEXSOsFFiVo,2130
244
246
  firefighter/incidents/views/docs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
245
247
  firefighter/incidents/views/docs/metrics.py,sha256=n2-chgxTokOqCx-W5YZRHK3pYmzvz0b_RF6s1de2Fcw,1713
246
248
  firefighter/incidents/views/docs/role_types.py,sha256=88dGBAL7NMC24lyqLDN0jGnh5-ILRI5afL2Wig7LrFs,1122
@@ -336,7 +338,7 @@ firefighter/slack/models/incident_channel.py,sha256=MKzrGPDEz7CcumrnbWZBcKAHoScy
336
338
  firefighter/slack/models/message.py,sha256=E1MQoZJz4MsgCeqgP94_jtSrz2RYuWdoys8tz4Tfboc,4727
337
339
  firefighter/slack/models/sos.py,sha256=Sji-7DxgsrLs7vFRJKPw7nmYyo2tIjNwoTcmdCmzEvA,1418
338
340
  firefighter/slack/models/user.py,sha256=744fulTB00UQzsZwxf8CiQNMfEKmYY6y37x6zm6g14I,17218
339
- firefighter/slack/models/user_group.py,sha256=cUxC39bYtzpGyr_ZHKD0LjZQLWLKmOU8arx9jzVB2V4,7098
341
+ firefighter/slack/models/user_group.py,sha256=NyqtC0C_Vur2xZ6t7T7d7Z30WZ8EEovczJ0uYZVDC7o,7104
340
342
  firefighter/slack/signals/__init__.py,sha256=dqMf2x-PVKgmwzH2d9uHuQ8hZ4fbu74eRd4Ij2_dNSg,186
341
343
  firefighter/slack/signals/create_incident_conversation.py,sha256=uybiqCgPlWYq2AA2FKNkEmqhDYxDy-h0ebT-RBVpx9I,4965
342
344
  firefighter/slack/signals/get_users.py,sha256=_xPsZFgcxd87Vuhv6FttttrxnIb0z65-It8H3FZlHOM,2271
@@ -383,7 +385,7 @@ firefighter/slack/views/modals/status.py,sha256=C8-eJRtquSeaHe568SC7yCFef1k14m2_
383
385
  firefighter/slack/views/modals/trigger_oncall.py,sha256=h_LAD5X5rjMFWiDYTEp5VB9OaF7sTvKZhNaW3KQkw5M,5065
384
386
  firefighter/slack/views/modals/update.py,sha256=OF9sf-Z6IiviNmjN28MQNYiUbJ5tha0MdHUQyPpVFiY,2150
385
387
  firefighter/slack/views/modals/update_roles.py,sha256=De3Gv67MZQHyNdonX3S99F5MtKF_Rj3y71gdWibxBaM,2419
386
- firefighter/slack/views/modals/update_status.py,sha256=b1eAzD2_BfAbSirciQQ2jsmyZFQaOQ7gRHSlcKVazjw,4467
388
+ firefighter/slack/views/modals/update_status.py,sha256=ao9ZPCw9tgxdbyLGXsXRLL-LRB1_bxaoaa1ORoh0-nA,4472
387
389
  firefighter/slack/views/modals/base_modal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
388
390
  firefighter/slack/views/modals/base_modal/base.py,sha256=7mvOxZTtegSmitSMnDvu8BK0qLUXoudUsda6CaLjdkY,12479
389
391
  firefighter/slack/views/modals/base_modal/base_mixins.py,sha256=Xl1koQsPpHO_kKIiuSSJHJnIBmytDXseI1KcAZQZC3M,230
@@ -396,7 +398,7 @@ firefighter/slack/views/modals/opening/select_impact.py,sha256=P38gsWJ2UmHG9quns
396
398
  firefighter/slack/views/modals/opening/set_details.py,sha256=i6zQM2FYz3Z6s5AZH7lXgB2e8yjS0rDwgfMBZaiOqIw,5791
397
399
  firefighter/slack/views/modals/opening/types.py,sha256=ETpp0DAz5OMI5h7iv62Of7yJCbI-Q4-3kKSS6msPQeY,563
398
400
  firefighter/slack/views/modals/opening/details/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
399
- firefighter/slack/views/modals/opening/details/critical.py,sha256=xFSt4Cl8250toM7sr3WrZSp6xIFYuEnROgMtshK-xkk,2849
401
+ firefighter/slack/views/modals/opening/details/critical.py,sha256=-APRvkjopLwLPv3qPGTZfgS0d1bpb8NM0OXppRdUK94,2854
400
402
  firefighter_fixtures/incidents/components.json,sha256=qVVG201I4V-9f4Z3ZB0n9C4yZOJ8Qkz9v9MNAlqT8L8,21229
401
403
  firefighter_fixtures/incidents/environments.json,sha256=5H_F08x7moMKz-H6OIUVaJGtmyKEESXLlG5cfXX0IA4,1039
402
404
  firefighter_fixtures/incidents/groups.json,sha256=mwrpUk9tvZa0RnT1T0aec_nnMsVZhR2GXS7pmrAK0y8,2555
@@ -418,7 +420,7 @@ firefighter_tests/test_firefighter/test_logging.py,sha256=4HUH73vLDwmOCpMiXwDasM
418
420
  firefighter_tests/test_firefighter/test_urls.py,sha256=UMGx4oW98RoL0ceePkIIKEVjbHdFECvQuGNXYAJForQ,4839
419
421
  firefighter_tests/test_incidents/test_incident_urls.py,sha256=vQy9f1ewJK3N9cjVQDBnLaZjhtiBv5TzoRiGUdV3u5E,3769
420
422
  firefighter_tests/test_incidents/test_forms/test_form_select_impact.py,sha256=hcDqy3zXJ-klC0tYGWogxrDLDsaD5i4xNSejY0wBbHE,3210
421
- firefighter_tests/test_incidents/test_forms/test_form_utils.py,sha256=Xa2ePIjrJBq4LATPOZhfhszZJdAOGONxtDuxik1dLJw,2289
423
+ firefighter_tests/test_incidents/test_forms/test_form_utils.py,sha256=24ATxxAjkLlz7cj_jIQZvuQvtrfieeh4oaIM90yQrlc,2299
422
424
  firefighter_tests/test_incidents/test_forms/test_update_key_events.py,sha256=rHRGRU9iFXDdMr_kK3pMB7gyeZuMf7Dyq8bRZkddBC4,1644
423
425
  firefighter_tests/test_incidents/test_models/test_incident_model.py,sha256=Kl2dQ0P3qruAaQP5M8WRYJiff-4SpmxpFYHYmA9Xv3k,879
424
426
  firefighter_tests/test_incidents/test_models/test_migrations/test_incident_migrations.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -433,13 +435,13 @@ firefighter_tests/test_slack/test_slack_utils.py,sha256=9PLobMNXh3xDyFuwzcQFpKJh
433
435
  firefighter_tests/test_slack/test_models/test_conversations.py,sha256=t3ttmgwiu7c-N55iU3XZPmrkEhvkTzJoXszJncy4Bts,793
434
436
  firefighter_tests/test_slack/test_models/test_incident_channel.py,sha256=qWoGe9iadmK6-R8usWvjH87AHRkvhG_dHQeC3kHeJrs,17487
435
437
  firefighter_tests/test_slack/test_models/test_slack_user.py,sha256=uzur-Rf03I5dpUTO4ZI6O1arBUrAorg1Zvgshf8M-J4,7000
436
- firefighter_tests/test_slack/views/modals/test_close.py,sha256=se-5qUm6GB9yUq7UAKPys2urlJ_bFKApNlBnbwGY4tU,42884
438
+ firefighter_tests/test_slack/views/modals/test_close.py,sha256=kcwGwonjIiniGb5f78ZwlKjuvYB-xat-SrbouV9VCEc,42894
437
439
  firefighter_tests/test_slack/views/modals/test_open.py,sha256=Iatphd7vnrEMrv8ysKxDVDAuZNEsVXBksIEpIaDHQss,4100
438
440
  firefighter_tests/test_slack/views/modals/test_send_sos.py,sha256=_rE6jD-gOzcGyhlY0R9GzlGtPx65oOOguJYdENgxtLc,1289
439
441
  firefighter_tests/test_slack/views/modals/test_status.py,sha256=oQzPfwdg2tkbo9nfkO1GfS3WydxqSC6vy1AZjZDKT30,2226
440
- firefighter_tests/test_slack/views/modals/test_update_status.py,sha256=7wphJod5boKL6_rspZOfsURW2pbQ-2VYIoD-jBCzd84,39370
441
- firefighter_incident-0.0.4.dist-info/METADATA,sha256=l_OYHGRoHOxXFJbjcgN6kc1PjV8rJdyKPdQN1y-vZj0,5487
442
- firefighter_incident-0.0.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
443
- firefighter_incident-0.0.4.dist-info/entry_points.txt,sha256=c13meJbv7YNmYz7MipMOQwzQ5IeFOPXUBYAJ44XMQsM,61
444
- firefighter_incident-0.0.4.dist-info/licenses/LICENSE,sha256=krRiGp-a9-1nH1bWpBEdxyTKLhjLmn6DMVVoIb0zF90,1087
445
- firefighter_incident-0.0.4.dist-info/RECORD,,
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="Component 1", group=group, order=1),
32
- Component.objects.create(name="Component 2", group=group, order=2),
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": "Component", "emoji": True},
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 component",
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": "Component", "emoji": True},
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 component",
262
+ "text": "Select affected issue category",
263
263
  "emoji": True,
264
264
  },
265
265
  "initial_option": {