browsergym-workarena 0.2.0__py3-none-any.whl → 0.3.0__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.
Files changed (91) hide show
  1. browsergym/workarena/__init__.py +13 -1
  2. browsergym/workarena/api/category.py +74 -0
  3. browsergym/workarena/api/change_request.py +87 -0
  4. browsergym/workarena/api/computer_asset.py +90 -0
  5. browsergym/workarena/api/cost_center.py +19 -0
  6. browsergym/workarena/api/expense_line.py +89 -0
  7. browsergym/workarena/api/incident.py +45 -0
  8. browsergym/workarena/api/knowledge.py +29 -0
  9. browsergym/workarena/api/problem.py +90 -0
  10. browsergym/workarena/api/report.py +183 -0
  11. browsergym/workarena/api/requested_items.py +63 -0
  12. browsergym/workarena/api/user.py +11 -8
  13. browsergym/workarena/api/utils.py +47 -3
  14. browsergym/workarena/config.py +21 -1
  15. browsergym/workarena/data_files/setup_files/forms/expected_incident_form_fields.json +1 -1
  16. browsergym/workarena/data_files/setup_files/forms/expected_request_item_form_fields.json +1 -0
  17. browsergym/workarena/data_files/setup_files/knowledge/protocols.json +46 -0
  18. browsergym/workarena/data_files/setup_files/knowledge/test.html +1 -0
  19. browsergym/workarena/data_files/setup_files/lists/expected_asset_list_columns.json +2 -24
  20. browsergym/workarena/data_files/setup_files/lists/expected_change_request_list_columns.json +4 -40
  21. browsergym/workarena/data_files/setup_files/lists/expected_expense_line_list_columns.json +12 -0
  22. browsergym/workarena/data_files/setup_files/lists/expected_hardware_list_columns.json +1 -42
  23. browsergym/workarena/data_files/setup_files/lists/expected_incident_list_columns.json +2 -18
  24. browsergym/workarena/data_files/setup_files/lists/expected_problem_list_columns.json +12 -0
  25. browsergym/workarena/data_files/setup_files/lists/expected_requested_items_list_columns.json +12 -0
  26. browsergym/workarena/data_files/setup_files/lists/expected_service_catalog_list_columns.json +2 -19
  27. browsergym/workarena/data_files/setup_files/lists/expected_user_list_columns.json +3 -50
  28. browsergym/workarena/data_files/task_configs/all_menu.json +95 -95
  29. browsergym/workarena/data_files/task_configs/dashboard_retrieval_minmax_task.json +1 -1
  30. browsergym/workarena/data_files/task_configs/dashboard_retrieval_value_task.json +1 -1
  31. browsergym/workarena/data_files/task_configs/filter_service_catalog_item_list_task.json +7986 -7982
  32. browsergym/workarena/data_files/task_configs/impersonation_users.json +3 -3
  33. browsergym/workarena/data_files/task_configs/report_retrieval_minmax_task.json +1 -1
  34. browsergym/workarena/data_files/task_configs/report_retrieval_value_task.json +1 -1
  35. browsergym/workarena/human_eval/console.js +176 -0
  36. browsergym/workarena/human_eval/tool.py +366 -0
  37. browsergym/workarena/install.py +81 -20
  38. browsergym/workarena/tasks/base.py +55 -20
  39. browsergym/workarena/tasks/comp_building_block.py +4 -0
  40. browsergym/workarena/tasks/compositional/__init__.py +76 -0
  41. browsergym/workarena/tasks/compositional/base.py +364 -0
  42. browsergym/workarena/tasks/compositional/dash_do_base.py +1366 -0
  43. browsergym/workarena/tasks/compositional/dash_do_catalog.py +1127 -0
  44. browsergym/workarena/tasks/compositional/dash_do_catalog_infeasible.py +2047 -0
  45. browsergym/workarena/tasks/compositional/dash_do_create_incident.py +403 -0
  46. browsergym/workarena/tasks/compositional/dash_do_create_incident_infeasible.py +278 -0
  47. browsergym/workarena/tasks/compositional/dash_do_create_problem.py +336 -0
  48. browsergym/workarena/tasks/compositional/dash_do_create_problem_infeasible.py +235 -0
  49. browsergym/workarena/tasks/compositional/dash_do_filter.py +1600 -0
  50. browsergym/workarena/tasks/compositional/dash_do_request_item.py +1315 -0
  51. browsergym/workarena/tasks/compositional/dash_do_request_item_infeasible.py +693 -0
  52. browsergym/workarena/tasks/compositional/delete_record.py +341 -0
  53. browsergym/workarena/tasks/compositional/edit_knowledge_base.py +457 -0
  54. browsergym/workarena/tasks/compositional/expense_management.py +598 -0
  55. browsergym/workarena/tasks/compositional/filter_and_do.py +139 -0
  56. browsergym/workarena/tasks/compositional/find_and_order_item.py +345 -0
  57. browsergym/workarena/tasks/compositional/manage_change_request_schedule.py +1417 -0
  58. browsergym/workarena/tasks/compositional/mark_duplicate_problems.py +499 -0
  59. browsergym/workarena/tasks/compositional/maximize_investment_return.py +1763 -0
  60. browsergym/workarena/tasks/compositional/navigate_and_do.py +1151 -0
  61. browsergym/workarena/tasks/compositional/navigate_and_do_infeasible.py +2100 -0
  62. browsergym/workarena/tasks/compositional/offboard_user.py +207 -0
  63. browsergym/workarena/tasks/compositional/onboard_user.py +226 -0
  64. browsergym/workarena/tasks/compositional/update_task.py +145 -0
  65. browsergym/workarena/tasks/compositional/utils/curriculum.py +215 -0
  66. browsergym/workarena/tasks/compositional/utils/infeasible_configs.py +151 -0
  67. browsergym/workarena/tasks/compositional/utils/knapsack.py +192 -0
  68. browsergym/workarena/tasks/compositional/warranty_check.py +227 -0
  69. browsergym/workarena/tasks/compositional/work_assignment.py +804 -0
  70. browsergym/workarena/tasks/compositional/workload_balancing.py +396 -0
  71. browsergym/workarena/tasks/dashboard.py +188 -8
  72. browsergym/workarena/tasks/form.py +1024 -232
  73. browsergym/workarena/tasks/knowledge.py +216 -25
  74. browsergym/workarena/tasks/list.py +519 -102
  75. browsergym/workarena/tasks/mark_duplicate_problem.py +171 -0
  76. browsergym/workarena/tasks/navigation.py +55 -13
  77. browsergym/workarena/tasks/scripts/extract_all_menu_items.py +9 -2
  78. browsergym/workarena/tasks/scripts/generate_dashboard_configs.py +6 -5
  79. browsergym/workarena/tasks/scripts/service_catalog.py +2 -1
  80. browsergym/workarena/tasks/scripts/validate.py +8 -2
  81. browsergym/workarena/tasks/send_chat_message.py +90 -0
  82. browsergym/workarena/tasks/service_catalog.py +94 -26
  83. browsergym/workarena/tasks/utils/form.py +1 -4
  84. browsergym/workarena/tasks/utils/private_tasks.py +63 -0
  85. browsergym/workarena/tasks/utils/utils.py +13 -0
  86. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/METADATA +27 -20
  87. browsergym_workarena-0.3.0.dist-info/RECORD +138 -0
  88. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/entry_points.txt +1 -0
  89. browsergym_workarena-0.2.0.dist-info/RECORD +0 -85
  90. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/WHEEL +0 -0
  91. {browsergym_workarena-0.2.0.dist-info → browsergym_workarena-0.3.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,1315 @@
1
+ import random
2
+ from playwright.sync_api._generated import Page
3
+ from typing import Tuple
4
+
5
+ from .dash_do_base import DashboardRetrieveIncidentAndDoTask, DashDoFinalTask
6
+
7
+ from ..base import AbstractServiceNowTask
8
+ from ..dashboard import ReportMinMaxRetrievalTask, ReportMeanMedianModeRetrievalTask
9
+
10
+ from ...api.utils import table_api_call, db_delete_from_table
11
+ from ...instance import SNowInstance
12
+
13
+ from browsergym.workarena.tasks.navigation import AllMenuTask
14
+ from browsergym.workarena.tasks.form import CreateItemRequestTask
15
+
16
+
17
+ class DashboardRetrieveIncidentAndRequestItemTask(DashboardRetrieveIncidentAndDoTask):
18
+ def __init__(
19
+ self,
20
+ instance: SNowInstance = None,
21
+ seed: int = None,
22
+ fixed_config: list[AbstractServiceNowTask] = None,
23
+ level: int = 2,
24
+ item: str = None,
25
+ question: str = None,
26
+ dashboard_class: AbstractServiceNowTask = None,
27
+ ) -> None:
28
+ """
29
+ Retrieve the best performing agent and request an item for them.
30
+ Attributes:
31
+ -----------
32
+ task_description: str
33
+ The start of the task description to be completed.
34
+ short_description: str
35
+ A short description of the task to be completed. ""Order an item for the best performing employee from the list"
36
+ """
37
+ super().__init__(
38
+ instance=instance,
39
+ seed=seed,
40
+ fixed_config=fixed_config,
41
+ level=level,
42
+ question=question,
43
+ dashboard_class=dashboard_class,
44
+ )
45
+ if not item:
46
+ raise Exception("No item passed to assign")
47
+ self.item = item
48
+ self.attribute_name = "assigned_to" # Return full name
49
+ self.filter_than = "greater"
50
+ self.prefix = "DRI"
51
+
52
+ def set_compositional_task(self) -> None:
53
+ # The unique name for the user is created once the task is instantiated
54
+ requested_items = table_api_call(
55
+ instance=self.instance,
56
+ table="sc_req_item",
57
+ method="GET",
58
+ )["result"]
59
+ current_requested_items_numbers = [
60
+ requested_item["number"] for requested_item in requested_items
61
+ ]
62
+
63
+ agent_full_names, agent_value_sysids = self.get_agent_values(
64
+ self.attribute_name, self.filter_than
65
+ )
66
+ self.agent_value_sysids = agent_value_sysids
67
+
68
+ requested_item_numbers = []
69
+
70
+ for _ in range(len(agent_full_names)):
71
+ requested_item_number = "RITM" + str(random.randint(1000000, 9999999))
72
+ while (
73
+ requested_item_number in current_requested_items_numbers
74
+ or requested_item_number in requested_item_numbers
75
+ ):
76
+ requested_item_number = "RITM" + str(random.randint(1000000, 9999999))
77
+ requested_item_numbers.append(requested_item_number)
78
+
79
+ self.requested_item_numbers = requested_item_numbers
80
+
81
+ create_item_request_subtasks = []
82
+
83
+ for agent_full_name, requested_item_number in zip(agent_full_names, requested_item_numbers):
84
+ request_item_config = {
85
+ "fields": {
86
+ "number": "Number",
87
+ "cat_item": "Item",
88
+ "requested_for": "Requested for",
89
+ "quantity": "Quantity",
90
+ },
91
+ "task_fields": ["number", "cat_item", "requested_for", "quantity"],
92
+ "template_record": {
93
+ "number": requested_item_number,
94
+ "cat_item": self.item,
95
+ "requested_for": agent_full_name,
96
+ "quantity": "1",
97
+ },
98
+ }
99
+
100
+ create_item_request_subtask = [
101
+ # Navigate to the item request list
102
+ AllMenuTask(
103
+ instance=self.instance,
104
+ fixed_config={
105
+ "application": "Open Records",
106
+ "module": "Open Records > Items",
107
+ "url": "/now/nav/ui/classic/params/target/sc_req_item_list.do",
108
+ },
109
+ is_validated=False,
110
+ used_in_level_2=True,
111
+ ),
112
+ # Create an item request
113
+ CreateItemRequestTask(
114
+ instance=self.instance,
115
+ fixed_config=request_item_config,
116
+ is_validated=False,
117
+ used_in_level_2=True,
118
+ check_record_created=False,
119
+ ),
120
+ ]
121
+ create_item_request_subtasks += create_item_request_subtask
122
+
123
+ self.compositional_task = create_item_request_subtasks
124
+
125
+ def setup_goal(self, page: Page) -> tuple[str, dict]:
126
+ self.create_report()
127
+ self.set_compositional_task()
128
+ config = self.fixed_config if self.fixed_config else self._get_config()
129
+ requested_item_numbers_string = ", ".join(self.requested_item_numbers)
130
+
131
+ if self.level == 3:
132
+ self.task_description = (
133
+ self.task_description
134
+ + f"\t - Please retrieve the '{self.description_mapping[self.question]}' value of the number of incidents assigned across agents. Retrieve agents that have greater than or equal number of incidents assigned to them compared to this value.\n"
135
+ + f"\t For example, if you were asked to find the 'mean' or 'average' for a case where there are 4 agents assigned 1,2,3,2 incidents respectively, the mean would be 2. The list of agents required for solving the following task would be all the agents that have greater than or equal to 2 assigned incidents.\n\n"
136
+ + f"\t - Task: For each agent that fits the above criteria, create an 'item request' with the following information (only fill these fields and the 'request item number' from below) and 'request it' for them using the 'Requested for' field: \n"
137
+ + f"\t\t Item: {self.item}, Quantity: 1, Requested for: <agent name>.\n"
138
+ + f"\t Importantly, you should override the default request item numbers in the form and instead use one request item number from the following list for each item request you create: {requested_item_numbers_string}.\n\n"
139
+ + f"Note that you will create as many item requests as there are agents matching the above criteria.\n"
140
+ + f"\t For example, consider the above case and say you have 3 agents with greater than or equal to 2 incidents assigned to them in the chart. You will be creating '3' item requests here, one for each agent. \n\n"
141
+ )
142
+
143
+ goal, info = super().setup_goal(page=page, config=config)
144
+
145
+ if self.level == 2:
146
+ goal = (
147
+ self.short_description
148
+ + f"\n1. Navigate to the Reports > View/Run page. \n"
149
+ + f"\n2. Given the title of the report, search for it on this page. The report shows the number of 'incidents' assigned to an 'agent'.\n"
150
+ + f"\n3. Find the agents with a number of incidents assigned greater than or equal to the {self.description_mapping[self.question]} of the number of assigned incidents across agents. For example, if you were asked to find the 'mean' or 'average' for a case where there are 4 agents assigned 1,2,3,2 incidents respectively, the mean would be 2. The list of agents required for solving the following task would be all the agents that have greater than or equal to 2 assigned incidents.\n"
151
+ + f"\n4. Navigate to Open Records > Items. \n"
152
+ + f"\n5. You have to create new 'item requests' from this page for all the agents based on the above criteria. Only fill the following fields when creating a new item request:- Item: {self.item}, Quantity: 1 and 'request' them for each agent using the 'Requested For' field.\n\n"
153
+ + f"Importantly, you should override the default request item numbers in the form and instead use one request item number from the following list for each item request you create: {requested_item_numbers_string}.\n"
154
+ + f"Note that you will create as many item requests as there are agents matching the above criteria.\n"
155
+ + "For example, consider the above case and say you have 3 agents with greater than or equal to 2 incidents assigned to them in the chart. You will be creating '3' item requests here, one for each agent. \n"
156
+ )
157
+
158
+ return goal, info
159
+
160
+ def validate(self, page: Page, chat_messages: list[str]) -> Tuple[float, bool, str, dict]:
161
+ for requested_item_number in self.requested_item_numbers:
162
+ created_request_item_response = table_api_call(
163
+ instance=self.instance,
164
+ table="sc_req_item",
165
+ params={
166
+ "sysparm_query": f"number={requested_item_number}",
167
+ "sysparm_fields": "requested_for,cat_item,quantity",
168
+ },
169
+ method="GET",
170
+ )["result"]
171
+ if len(created_request_item_response) == 0:
172
+ return (
173
+ 0,
174
+ False,
175
+ "",
176
+ {"message": f"No request item created with number {requested_item_number}."},
177
+ )
178
+ elif len(created_request_item_response) > 1:
179
+ return (
180
+ 0,
181
+ False,
182
+ "",
183
+ {
184
+ "message": f"Multiple request items created with number {requested_item_number}."
185
+ },
186
+ )
187
+ created_request_item_response = created_request_item_response[0]
188
+ if (
189
+ created_request_item_response["requested_for"]["value"]
190
+ not in self.agent_value_sysids
191
+ ):
192
+ return (
193
+ 0,
194
+ False,
195
+ "",
196
+ {
197
+ "message": f"Request item {requested_item_number} created for a random agent."
198
+ },
199
+ )
200
+ if str(created_request_item_response["quantity"]) != "1":
201
+ return (
202
+ 0,
203
+ False,
204
+ "",
205
+ {
206
+ "message": f"Request item {requested_item_number} requested incorrect number of items."
207
+ },
208
+ )
209
+ cat_item = created_request_item_response["cat_item"]
210
+ if not cat_item:
211
+ return (
212
+ 0,
213
+ False,
214
+ "",
215
+ {"message": f"Request item {requested_item_number} did not request an item."},
216
+ )
217
+ cat_item_response = table_api_call(
218
+ instance=self.instance,
219
+ table="sc_cat_item",
220
+ params={
221
+ "sysparm_query": f"sys_id={cat_item['value']}",
222
+ "sysparm_fields": "sys_name",
223
+ },
224
+ method="GET",
225
+ )["result"]
226
+ if len(cat_item_response) == 0:
227
+ return (
228
+ 0,
229
+ False,
230
+ "",
231
+ {"message": f"Request item {requested_item_number} did not request an item."},
232
+ )
233
+
234
+ if cat_item_response[0]["sys_name"] != self.item:
235
+ return (
236
+ 0,
237
+ False,
238
+ "",
239
+ {
240
+ "message": f"Request item {requested_item_number} requested an incorrect item."
241
+ },
242
+ )
243
+
244
+ for agent_sysid in self.agent_value_sysids:
245
+ created_request_item_response = table_api_call(
246
+ instance=self.instance,
247
+ table="sc_req_item",
248
+ params={
249
+ "sysparm_query": f"requested_for={agent_sysid}",
250
+ "sysparm_fields": "requested_for",
251
+ },
252
+ method="GET",
253
+ )["result"]
254
+ if len(created_request_item_response) == 0:
255
+ return (
256
+ 0,
257
+ False,
258
+ "",
259
+ {
260
+ "message": f"No request created for agent {self.agents[agent_sysid]['user_name']}."
261
+ },
262
+ )
263
+ elif len(created_request_item_response) > 1:
264
+ return (
265
+ 0,
266
+ False,
267
+ "",
268
+ {
269
+ "message": f"Multiple requests created for agent {self.agents[agent_sysid]['user_name']}."
270
+ },
271
+ )
272
+ reward, done, message, info = super().validate(page, chat_messages)
273
+ return reward, done, message, info
274
+
275
+ def teardown(self) -> None:
276
+ for requested_item_number in self.requested_item_numbers:
277
+ created_item_request_response = table_api_call(
278
+ instance=self.instance,
279
+ table="sc_req_item",
280
+ params={
281
+ "sysparm_query": f"number={requested_item_number}",
282
+ },
283
+ method="GET",
284
+ )["result"]
285
+ if len(created_item_request_response) > 1:
286
+ raise Exception("Multiple request items created")
287
+ if len(created_item_request_response) == 1:
288
+ created_item_request_sysid = created_item_request_response[0]["sys_id"]
289
+ db_delete_from_table(
290
+ instance=self.instance,
291
+ table="sc_req_item",
292
+ sys_id=created_item_request_sysid,
293
+ )
294
+ return super().teardown()
295
+
296
+
297
+ class DashboardRetrieveIncidentAndMaxRequestAppleWatchTask(
298
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
299
+ ):
300
+ def __init__(
301
+ self,
302
+ instance: SNowInstance = None,
303
+ seed: int = None,
304
+ fixed_config: list[AbstractServiceNowTask] = None,
305
+ level: int = 2,
306
+ ) -> None:
307
+ """
308
+ Retrieve the best performing agent and request an apple watch for them.
309
+ """
310
+ super().__init__(
311
+ instance=instance,
312
+ seed=seed,
313
+ fixed_config=fixed_config,
314
+ level=level,
315
+ item="Apple Watch",
316
+ question="max",
317
+ dashboard_class=ReportMinMaxRetrievalTask,
318
+ )
319
+
320
+
321
+ class DashboardRetrieveIncidentAndMeanRequestAppleWatchTask(
322
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
323
+ ):
324
+ def __init__(
325
+ self,
326
+ instance: SNowInstance = None,
327
+ seed: int = None,
328
+ fixed_config: list[AbstractServiceNowTask] = None,
329
+ level: int = 2,
330
+ ) -> None:
331
+ """
332
+ Retrieve the best performing agent and request an apple watch for them.
333
+ """
334
+ super().__init__(
335
+ instance=instance,
336
+ seed=seed,
337
+ fixed_config=fixed_config,
338
+ level=level,
339
+ item="Apple Watch",
340
+ question="mean",
341
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
342
+ )
343
+
344
+
345
+ class DashboardRetrieveIncidentAndMedianRequestAppleWatchTask(
346
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
347
+ ):
348
+ def __init__(
349
+ self,
350
+ instance: SNowInstance = None,
351
+ seed: int = None,
352
+ fixed_config: list[AbstractServiceNowTask] = None,
353
+ level: int = 2,
354
+ ) -> None:
355
+ """
356
+ Retrieve the best performing agent and request an apple watch for them.
357
+ """
358
+ super().__init__(
359
+ instance=instance,
360
+ seed=seed,
361
+ fixed_config=fixed_config,
362
+ level=level,
363
+ item="Apple Watch",
364
+ question="median",
365
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
366
+ )
367
+
368
+
369
+ class DashboardRetrieveIncidentAndModeRequestAppleWatchTask(
370
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
371
+ ):
372
+ def __init__(
373
+ self,
374
+ instance: SNowInstance = None,
375
+ seed: int = None,
376
+ fixed_config: list[AbstractServiceNowTask] = None,
377
+ level: int = 2,
378
+ ) -> None:
379
+ """
380
+ Retrieve the best performing agent and request an apple watch for them.
381
+ """
382
+ super().__init__(
383
+ instance=instance,
384
+ seed=seed,
385
+ fixed_config=fixed_config,
386
+ level=level,
387
+ item="Apple Watch",
388
+ question="mode",
389
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
390
+ )
391
+
392
+
393
+ class DashboardRetrieveIncidentAndMaxRequestAppleWatch2Task(
394
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
395
+ ):
396
+ def __init__(
397
+ self,
398
+ instance: SNowInstance = None,
399
+ seed: int = None,
400
+ fixed_config: list[AbstractServiceNowTask] = None,
401
+ level: int = 2,
402
+ ) -> None:
403
+ """
404
+ Retrieve the best performing agent and request an Apple Watch Series 2 for them.
405
+ """
406
+ super().__init__(
407
+ instance=instance,
408
+ seed=seed,
409
+ fixed_config=fixed_config,
410
+ level=level,
411
+ item="Apple Watch Series 2",
412
+ question="max",
413
+ dashboard_class=ReportMinMaxRetrievalTask,
414
+ )
415
+
416
+
417
+ class DashboardRetrieveIncidentAndMeanRequestAppleWatch2Task(
418
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
419
+ ):
420
+ def __init__(
421
+ self,
422
+ instance: SNowInstance = None,
423
+ seed: int = None,
424
+ fixed_config: list[AbstractServiceNowTask] = None,
425
+ level: int = 2,
426
+ ) -> None:
427
+ """
428
+ Retrieve the best performing agent and request an Apple Watch Series 2 for them.
429
+ """
430
+ super().__init__(
431
+ instance=instance,
432
+ seed=seed,
433
+ fixed_config=fixed_config,
434
+ level=level,
435
+ item="Apple Watch Series 2",
436
+ question="mean",
437
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
438
+ )
439
+
440
+
441
+ class DashboardRetrieveIncidentAndMedianRequestAppleWatch2Task(
442
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
443
+ ):
444
+ def __init__(
445
+ self,
446
+ instance: SNowInstance = None,
447
+ seed: int = None,
448
+ fixed_config: list[AbstractServiceNowTask] = None,
449
+ level: int = 2,
450
+ ) -> None:
451
+ """
452
+ Retrieve the best performing agent and request an Apple Watch Series 2 for them.
453
+ """
454
+ super().__init__(
455
+ instance=instance,
456
+ seed=seed,
457
+ fixed_config=fixed_config,
458
+ level=level,
459
+ item="Apple Watch Series 2",
460
+ question="median",
461
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
462
+ )
463
+
464
+
465
+ class DashboardRetrieveIncidentAndModeRequestAppleWatch2Task(
466
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
467
+ ):
468
+ def __init__(
469
+ self,
470
+ instance: SNowInstance = None,
471
+ seed: int = None,
472
+ fixed_config: list[AbstractServiceNowTask] = None,
473
+ level: int = 2,
474
+ ) -> None:
475
+ """
476
+ Retrieve the best performing agent and request an Apple Watch Series 2 for them.
477
+ """
478
+ super().__init__(
479
+ instance=instance,
480
+ seed=seed,
481
+ fixed_config=fixed_config,
482
+ level=level,
483
+ item="Apple Watch Series 2",
484
+ question="mode",
485
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
486
+ )
487
+
488
+
489
+ class DashboardRetrieveIncidentAndMaxRequestAppleIpad3Task(
490
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
491
+ ):
492
+ def __init__(
493
+ self,
494
+ instance: SNowInstance = None,
495
+ seed: int = None,
496
+ fixed_config: list[AbstractServiceNowTask] = None,
497
+ level: int = 2,
498
+ ) -> None:
499
+ """
500
+ Retrieve the best performing agent and request an Apple iPad 3 for them.
501
+ """
502
+ super().__init__(
503
+ instance=instance,
504
+ seed=seed,
505
+ fixed_config=fixed_config,
506
+ level=level,
507
+ item="Apple iPad 3",
508
+ question="max",
509
+ dashboard_class=ReportMinMaxRetrievalTask,
510
+ )
511
+
512
+
513
+ class DashboardRetrieveIncidentAndMeanRequestAppleIpad3Task(
514
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
515
+ ):
516
+ def __init__(
517
+ self,
518
+ instance: SNowInstance = None,
519
+ seed: int = None,
520
+ fixed_config: list[AbstractServiceNowTask] = None,
521
+ level: int = 2,
522
+ ) -> None:
523
+ """
524
+ Retrieve the best performing agent and request an Apple iPad 3 for them.
525
+ """
526
+ super().__init__(
527
+ instance=instance,
528
+ seed=seed,
529
+ fixed_config=fixed_config,
530
+ level=level,
531
+ item="Apple iPad 3",
532
+ question="mean",
533
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
534
+ )
535
+
536
+
537
+ class DashboardRetrieveIncidentAndMedianRequestAppleIpad3Task(
538
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
539
+ ):
540
+ def __init__(
541
+ self,
542
+ instance: SNowInstance = None,
543
+ seed: int = None,
544
+ fixed_config: list[AbstractServiceNowTask] = None,
545
+ level: int = 2,
546
+ ) -> None:
547
+ """
548
+ Retrieve the best performing agent and request an Apple iPad 3 for them.
549
+ """
550
+ super().__init__(
551
+ instance=instance,
552
+ seed=seed,
553
+ fixed_config=fixed_config,
554
+ level=level,
555
+ item="Apple iPad 3",
556
+ question="median",
557
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
558
+ )
559
+
560
+
561
+ class DashboardRetrieveIncidentAndModeRequestAppleIpad3Task(
562
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
563
+ ):
564
+ def __init__(
565
+ self,
566
+ instance: SNowInstance = None,
567
+ seed: int = None,
568
+ fixed_config: list[AbstractServiceNowTask] = None,
569
+ level: int = 2,
570
+ ) -> None:
571
+ """
572
+ Retrieve the best performing agent and request an Apple iPad 3 for them.
573
+ """
574
+ super().__init__(
575
+ instance=instance,
576
+ seed=seed,
577
+ fixed_config=fixed_config,
578
+ level=level,
579
+ item="Apple iPad 3",
580
+ question="mode",
581
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
582
+ )
583
+
584
+
585
+ class DashboardRetrieveIncidentAndMaxRequestAppleIphone13proTask(
586
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
587
+ ):
588
+ def __init__(
589
+ self,
590
+ instance: SNowInstance = None,
591
+ seed: int = None,
592
+ fixed_config: list[AbstractServiceNowTask] = None,
593
+ level: int = 2,
594
+ ) -> None:
595
+ """
596
+ Retrieve the best performing agent and request an Apple iPhone 13 pro for them.
597
+ """
598
+ super().__init__(
599
+ instance=instance,
600
+ seed=seed,
601
+ fixed_config=fixed_config,
602
+ level=level,
603
+ item="Apple iPhone 13 pro",
604
+ question="max",
605
+ dashboard_class=ReportMinMaxRetrievalTask,
606
+ )
607
+
608
+
609
+ class DashboardRetrieveIncidentAndMeanRequestAppleIphone13proTask(
610
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
611
+ ):
612
+ def __init__(
613
+ self,
614
+ instance: SNowInstance = None,
615
+ seed: int = None,
616
+ fixed_config: list[AbstractServiceNowTask] = None,
617
+ level: int = 2,
618
+ ) -> None:
619
+ """
620
+ Retrieve the best performing agent and request an Apple iPhone 13 pro for them.
621
+ """
622
+ super().__init__(
623
+ instance=instance,
624
+ seed=seed,
625
+ fixed_config=fixed_config,
626
+ level=level,
627
+ item="Apple iPhone 13 pro",
628
+ question="mean",
629
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
630
+ )
631
+
632
+
633
+ class DashboardRetrieveIncidentAndMedianRequestAppleIphone13proTask(
634
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
635
+ ):
636
+ def __init__(
637
+ self,
638
+ instance: SNowInstance = None,
639
+ seed: int = None,
640
+ fixed_config: list[AbstractServiceNowTask] = None,
641
+ level: int = 2,
642
+ ) -> None:
643
+ """
644
+ Retrieve the best performing agent and request an Apple iPhone 13 pro for them.
645
+ """
646
+ super().__init__(
647
+ instance=instance,
648
+ seed=seed,
649
+ fixed_config=fixed_config,
650
+ level=level,
651
+ item="Apple iPhone 13 pro",
652
+ question="median",
653
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
654
+ )
655
+
656
+
657
+ class DashboardRetrieveIncidentAndModeRequestAppleIphone13proTask(
658
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
659
+ ):
660
+ def __init__(
661
+ self,
662
+ instance: SNowInstance = None,
663
+ seed: int = None,
664
+ fixed_config: list[AbstractServiceNowTask] = None,
665
+ level: int = 2,
666
+ ) -> None:
667
+ """
668
+ Retrieve the best performing agent and request an Apple iPhone 13 pro for them.
669
+ """
670
+ super().__init__(
671
+ instance=instance,
672
+ seed=seed,
673
+ fixed_config=fixed_config,
674
+ level=level,
675
+ item="Apple iPhone 13 pro",
676
+ question="mode",
677
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
678
+ )
679
+
680
+
681
+ class DashboardRetrieveIncidentAndMaxRequestAppleIphone13Task(
682
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
683
+ ):
684
+ def __init__(
685
+ self,
686
+ instance: SNowInstance = None,
687
+ seed: int = None,
688
+ fixed_config: list[AbstractServiceNowTask] = None,
689
+ level: int = 2,
690
+ ) -> None:
691
+ """
692
+ Retrieve the best performing agent and request an Apple iPhone 13 for them.
693
+ """
694
+ super().__init__(
695
+ instance=instance,
696
+ seed=seed,
697
+ fixed_config=fixed_config,
698
+ level=level,
699
+ item="Apple iPhone 13",
700
+ question="max",
701
+ dashboard_class=ReportMinMaxRetrievalTask,
702
+ )
703
+
704
+
705
+ class DashboardRetrieveIncidentAndMeanRequestAppleIphone13Task(
706
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
707
+ ):
708
+ def __init__(
709
+ self,
710
+ instance: SNowInstance = None,
711
+ seed: int = None,
712
+ fixed_config: list[AbstractServiceNowTask] = None,
713
+ level: int = 2,
714
+ ) -> None:
715
+ """
716
+ Retrieve the best performing agent and request an Apple iPhone 13 for them.
717
+ """
718
+ super().__init__(
719
+ instance=instance,
720
+ seed=seed,
721
+ fixed_config=fixed_config,
722
+ level=level,
723
+ item="Apple iPhone 13",
724
+ question="mean",
725
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
726
+ )
727
+
728
+
729
+ class DashboardRetrieveIncidentAndMedianRequestAppleIphone13Task(
730
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
731
+ ):
732
+ def __init__(
733
+ self,
734
+ instance: SNowInstance = None,
735
+ seed: int = None,
736
+ fixed_config: list[AbstractServiceNowTask] = None,
737
+ level: int = 2,
738
+ ) -> None:
739
+ """
740
+ Retrieve the best performing agent and request an Apple iPhone 13 for them.
741
+ """
742
+ super().__init__(
743
+ instance=instance,
744
+ seed=seed,
745
+ fixed_config=fixed_config,
746
+ level=level,
747
+ item="Apple iPhone 13",
748
+ question="median",
749
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
750
+ )
751
+
752
+
753
+ class DashboardRetrieveIncidentAndModeRequestAppleIphone13Task(
754
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
755
+ ):
756
+ def __init__(
757
+ self,
758
+ instance: SNowInstance = None,
759
+ seed: int = None,
760
+ fixed_config: list[AbstractServiceNowTask] = None,
761
+ level: int = 2,
762
+ ) -> None:
763
+ """
764
+ Retrieve the best performing agent and request an Apple iPhone 13 for them.
765
+ """
766
+ super().__init__(
767
+ instance=instance,
768
+ seed=seed,
769
+ fixed_config=fixed_config,
770
+ level=level,
771
+ item="Apple iPhone 13",
772
+ question="mode",
773
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
774
+ )
775
+
776
+
777
+ class DashboardRetrieveIncidentAndMaxRequestGalaxyNote20Task(
778
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
779
+ ):
780
+ def __init__(
781
+ self,
782
+ instance: SNowInstance = None,
783
+ seed: int = None,
784
+ fixed_config: list[AbstractServiceNowTask] = None,
785
+ level: int = 2,
786
+ ) -> None:
787
+ """
788
+ Retrieve the best performing agent and request a Galaxy Note 20 for them.
789
+ """
790
+ super().__init__(
791
+ instance=instance,
792
+ seed=seed,
793
+ fixed_config=fixed_config,
794
+ level=level,
795
+ item="Galaxy Note 20",
796
+ question="max",
797
+ dashboard_class=ReportMinMaxRetrievalTask,
798
+ )
799
+
800
+
801
+ class DashboardRetrieveIncidentAndMeanRequestGalaxyNote20Task(
802
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
803
+ ):
804
+ def __init__(
805
+ self,
806
+ instance: SNowInstance = None,
807
+ seed: int = None,
808
+ fixed_config: list[AbstractServiceNowTask] = None,
809
+ level: int = 2,
810
+ ) -> None:
811
+ """
812
+ Retrieve the best performing agent and request a Galaxy Note 20 for them.
813
+ """
814
+ super().__init__(
815
+ instance=instance,
816
+ seed=seed,
817
+ fixed_config=fixed_config,
818
+ level=level,
819
+ item="Galaxy Note 20",
820
+ question="mean",
821
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
822
+ )
823
+
824
+
825
+ class DashboardRetrieveIncidentAndMedianRequestGalaxyNote20Task(
826
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
827
+ ):
828
+ def __init__(
829
+ self,
830
+ instance: SNowInstance = None,
831
+ seed: int = None,
832
+ fixed_config: list[AbstractServiceNowTask] = None,
833
+ level: int = 2,
834
+ ) -> None:
835
+ """
836
+ Retrieve the best performing agent and request a Galaxy Note 20 for them.
837
+ """
838
+ super().__init__(
839
+ instance=instance,
840
+ seed=seed,
841
+ fixed_config=fixed_config,
842
+ level=level,
843
+ item="Galaxy Note 20",
844
+ question="median",
845
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
846
+ )
847
+
848
+
849
+ class DashboardRetrieveIncidentAndModeRequestGalaxyNote20Task(
850
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
851
+ ):
852
+ def __init__(
853
+ self,
854
+ instance: SNowInstance = None,
855
+ seed: int = None,
856
+ fixed_config: list[AbstractServiceNowTask] = None,
857
+ level: int = 2,
858
+ ) -> None:
859
+ """
860
+ Retrieve the best performing agent and request a Galaxy Note 20 for them.
861
+ """
862
+ super().__init__(
863
+ instance=instance,
864
+ seed=seed,
865
+ fixed_config=fixed_config,
866
+ level=level,
867
+ item="Galaxy Note 20",
868
+ question="mode",
869
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
870
+ )
871
+
872
+
873
+ class DashboardRetrieveIncidentAndMaxRequestGoogleNexus7Task(
874
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
875
+ ):
876
+ def __init__(
877
+ self,
878
+ instance: SNowInstance = None,
879
+ seed: int = None,
880
+ fixed_config: list[AbstractServiceNowTask] = None,
881
+ level: int = 2,
882
+ ) -> None:
883
+ """
884
+ Retrieve the best performing agent and request a Google Nexus 7 for them.
885
+ """
886
+ super().__init__(
887
+ instance=instance,
888
+ seed=seed,
889
+ fixed_config=fixed_config,
890
+ level=level,
891
+ item="Google Nexus 7",
892
+ question="max",
893
+ dashboard_class=ReportMinMaxRetrievalTask,
894
+ )
895
+
896
+
897
+ class DashboardRetrieveIncidentAndMeanRequestGoogleNexus7Task(
898
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
899
+ ):
900
+ def __init__(
901
+ self,
902
+ instance: SNowInstance = None,
903
+ seed: int = None,
904
+ fixed_config: list[AbstractServiceNowTask] = None,
905
+ level: int = 2,
906
+ ) -> None:
907
+ """
908
+ Retrieve the best performing agent and request a Google Nexus 7 for them.
909
+ """
910
+ super().__init__(
911
+ instance=instance,
912
+ seed=seed,
913
+ fixed_config=fixed_config,
914
+ level=level,
915
+ item="Google Nexus 7",
916
+ question="mean",
917
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
918
+ )
919
+
920
+
921
+ class DashboardRetrieveIncidentAndMedianRequestGoogleNexus7Task(
922
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
923
+ ):
924
+ def __init__(
925
+ self,
926
+ instance: SNowInstance = None,
927
+ seed: int = None,
928
+ fixed_config: list[AbstractServiceNowTask] = None,
929
+ level: int = 2,
930
+ ) -> None:
931
+ """
932
+ Retrieve the best performing agent and request a Google Nexus 7 for them.
933
+ """
934
+ super().__init__(
935
+ instance=instance,
936
+ seed=seed,
937
+ fixed_config=fixed_config,
938
+ level=level,
939
+ item="Google Nexus 7",
940
+ question="median",
941
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
942
+ )
943
+
944
+
945
+ class DashboardRetrieveIncidentAndModeRequestGoogleNexus7Task(
946
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
947
+ ):
948
+ def __init__(
949
+ self,
950
+ instance: SNowInstance = None,
951
+ seed: int = None,
952
+ fixed_config: list[AbstractServiceNowTask] = None,
953
+ level: int = 2,
954
+ ) -> None:
955
+ """
956
+ Retrieve the best performing agent and request a Google Nexus 7 for them.
957
+ """
958
+ super().__init__(
959
+ instance=instance,
960
+ seed=seed,
961
+ fixed_config=fixed_config,
962
+ level=level,
963
+ item="Google Nexus 7",
964
+ question="mode",
965
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
966
+ )
967
+
968
+
969
+ class DashboardRetrieveIncidentAndMaxRequestMicrosoftSurfacePro3Task(
970
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
971
+ ):
972
+ def __init__(
973
+ self,
974
+ instance: SNowInstance = None,
975
+ seed: int = None,
976
+ fixed_config: list[AbstractServiceNowTask] = None,
977
+ level: int = 2,
978
+ ) -> None:
979
+ """
980
+ Retrieve the best performing agent and request a Microsoft Surface Pro 3 for them.
981
+ """
982
+ super().__init__(
983
+ instance=instance,
984
+ seed=seed,
985
+ fixed_config=fixed_config,
986
+ level=level,
987
+ item="Microsoft Surface Pro 3",
988
+ question="max",
989
+ dashboard_class=ReportMinMaxRetrievalTask,
990
+ )
991
+
992
+
993
+ class DashboardRetrieveIncidentAndMeanRequestMicrosoftSurfacePro3Task(
994
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
995
+ ):
996
+ def __init__(
997
+ self,
998
+ instance: SNowInstance = None,
999
+ seed: int = None,
1000
+ fixed_config: list[AbstractServiceNowTask] = None,
1001
+ level: int = 2,
1002
+ ) -> None:
1003
+ """
1004
+ Retrieve the best performing agent and request a Microsoft Surface Pro 3 for them.
1005
+ """
1006
+ super().__init__(
1007
+ instance=instance,
1008
+ seed=seed,
1009
+ fixed_config=fixed_config,
1010
+ level=level,
1011
+ item="Microsoft Surface Pro 3",
1012
+ question="mean",
1013
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1014
+ )
1015
+
1016
+
1017
+ class DashboardRetrieveIncidentAndMedianRequestMicrosoftSurfacePro3Task(
1018
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1019
+ ):
1020
+ def __init__(
1021
+ self,
1022
+ instance: SNowInstance = None,
1023
+ seed: int = None,
1024
+ fixed_config: list[AbstractServiceNowTask] = None,
1025
+ level: int = 2,
1026
+ ) -> None:
1027
+ """
1028
+ Retrieve the best performing agent and request a Microsoft Surface Pro 3 for them.
1029
+ """
1030
+ super().__init__(
1031
+ instance=instance,
1032
+ seed=seed,
1033
+ fixed_config=fixed_config,
1034
+ level=level,
1035
+ item="Microsoft Surface Pro 3",
1036
+ question="median",
1037
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1038
+ )
1039
+
1040
+
1041
+ class DashboardRetrieveIncidentAndModeRequestMicrosoftSurfacePro3Task(
1042
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1043
+ ):
1044
+ def __init__(
1045
+ self,
1046
+ instance: SNowInstance = None,
1047
+ seed: int = None,
1048
+ fixed_config: list[AbstractServiceNowTask] = None,
1049
+ level: int = 2,
1050
+ ) -> None:
1051
+ """
1052
+ Retrieve the best performing agent and request a Microsoft Surface Pro 3 for them.
1053
+ """
1054
+ super().__init__(
1055
+ instance=instance,
1056
+ seed=seed,
1057
+ fixed_config=fixed_config,
1058
+ level=level,
1059
+ item="Microsoft Surface Pro 3",
1060
+ question="mode",
1061
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1062
+ )
1063
+
1064
+
1065
+ class DashboardRetrieveIncidentAndMaxRequestPixel4aTask(
1066
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1067
+ ):
1068
+ def __init__(
1069
+ self,
1070
+ instance: SNowInstance = None,
1071
+ seed: int = None,
1072
+ fixed_config: list[AbstractServiceNowTask] = None,
1073
+ level: int = 2,
1074
+ ) -> None:
1075
+ """
1076
+ Retrieve the best performing agent and request an Pixel 4a for them.
1077
+ """
1078
+ super().__init__(
1079
+ instance=instance,
1080
+ seed=seed,
1081
+ fixed_config=fixed_config,
1082
+ level=level,
1083
+ item="Pixel 4a",
1084
+ question="max",
1085
+ dashboard_class=ReportMinMaxRetrievalTask,
1086
+ )
1087
+
1088
+
1089
+ class DashboardRetrieveIncidentAndMeanRequestPixel4aTask(
1090
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1091
+ ):
1092
+ def __init__(
1093
+ self,
1094
+ instance: SNowInstance = None,
1095
+ seed: int = None,
1096
+ fixed_config: list[AbstractServiceNowTask] = None,
1097
+ level: int = 2,
1098
+ ) -> None:
1099
+ """
1100
+ Retrieve the best performing agent and request an Pixel 4a for them.
1101
+ """
1102
+ super().__init__(
1103
+ instance=instance,
1104
+ seed=seed,
1105
+ fixed_config=fixed_config,
1106
+ level=level,
1107
+ item="Pixel 4a",
1108
+ question="mean",
1109
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1110
+ )
1111
+
1112
+
1113
+ class DashboardRetrieveIncidentAndMedianRequestPixel4aTask(
1114
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1115
+ ):
1116
+ def __init__(
1117
+ self,
1118
+ instance: SNowInstance = None,
1119
+ seed: int = None,
1120
+ fixed_config: list[AbstractServiceNowTask] = None,
1121
+ level: int = 2,
1122
+ ) -> None:
1123
+ """
1124
+ Retrieve the best performing agent and request an Pixel 4a for them.
1125
+ """
1126
+ super().__init__(
1127
+ instance=instance,
1128
+ seed=seed,
1129
+ fixed_config=fixed_config,
1130
+ level=level,
1131
+ item="Pixel 4a",
1132
+ question="median",
1133
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1134
+ )
1135
+
1136
+
1137
+ class DashboardRetrieveIncidentAndModeRequestPixel4aTask(
1138
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1139
+ ):
1140
+ def __init__(
1141
+ self,
1142
+ instance: SNowInstance = None,
1143
+ seed: int = None,
1144
+ fixed_config: list[AbstractServiceNowTask] = None,
1145
+ level: int = 2,
1146
+ ) -> None:
1147
+ """
1148
+ Retrieve the best performing agent and request an Pixel 4a for them.
1149
+ """
1150
+ super().__init__(
1151
+ instance=instance,
1152
+ seed=seed,
1153
+ fixed_config=fixed_config,
1154
+ level=level,
1155
+ item="Pixel 4a",
1156
+ question="mode",
1157
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1158
+ )
1159
+
1160
+
1161
+ class DashboardRetrieveIncidentAndMaxRequestWindowsSurfacePro4Task(
1162
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1163
+ ):
1164
+ def __init__(
1165
+ self,
1166
+ instance: SNowInstance = None,
1167
+ seed: int = None,
1168
+ fixed_config: list[AbstractServiceNowTask] = None,
1169
+ level: int = 2,
1170
+ ) -> None:
1171
+ """
1172
+ Retrieve the best performing agent and request a Windows Surface Pro 4 for them.
1173
+ """
1174
+ super().__init__(
1175
+ instance=instance,
1176
+ seed=seed,
1177
+ fixed_config=fixed_config,
1178
+ level=level,
1179
+ item="Windows Surface Pro 4",
1180
+ question="max",
1181
+ dashboard_class=ReportMinMaxRetrievalTask,
1182
+ )
1183
+
1184
+
1185
+ class DashboardRetrieveIncidentAndMeanRequestWindowsSurfacePro4Task(
1186
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1187
+ ):
1188
+ def __init__(
1189
+ self,
1190
+ instance: SNowInstance = None,
1191
+ seed: int = None,
1192
+ fixed_config: list[AbstractServiceNowTask] = None,
1193
+ level: int = 2,
1194
+ ) -> None:
1195
+ """
1196
+ Retrieve the best performing agent and request a Windows Surface Pro 4 for them.
1197
+ """
1198
+ super().__init__(
1199
+ instance=instance,
1200
+ seed=seed,
1201
+ fixed_config=fixed_config,
1202
+ level=level,
1203
+ item="Windows Surface Pro 4",
1204
+ question="mean",
1205
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1206
+ )
1207
+
1208
+
1209
+ class DashboardRetrieveIncidentAndMedianRequestWindowsSurfacePro4Task(
1210
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1211
+ ):
1212
+ def __init__(
1213
+ self,
1214
+ instance: SNowInstance = None,
1215
+ seed: int = None,
1216
+ fixed_config: list[AbstractServiceNowTask] = None,
1217
+ level: int = 2,
1218
+ ) -> None:
1219
+ """
1220
+ Retrieve the best performing agent and request a Windows Surface Pro 4 for them.
1221
+ """
1222
+ super().__init__(
1223
+ instance=instance,
1224
+ seed=seed,
1225
+ fixed_config=fixed_config,
1226
+ level=level,
1227
+ item="Windows Surface Pro 4",
1228
+ question="median",
1229
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1230
+ )
1231
+
1232
+
1233
+ class DashboardRetrieveIncidentAndModeRequestWindowsSurfacePro4Task(
1234
+ DashboardRetrieveIncidentAndRequestItemTask, DashDoFinalTask
1235
+ ):
1236
+ def __init__(
1237
+ self,
1238
+ instance: SNowInstance = None,
1239
+ seed: int = None,
1240
+ fixed_config: list[AbstractServiceNowTask] = None,
1241
+ level: int = 2,
1242
+ ) -> None:
1243
+ """
1244
+ Retrieve the best performing agent and request a Windows Surface Pro 4 for them.
1245
+ """
1246
+ super().__init__(
1247
+ instance=instance,
1248
+ seed=seed,
1249
+ fixed_config=fixed_config,
1250
+ level=level,
1251
+ item="Windows Surface Pro 4",
1252
+ question="mode",
1253
+ dashboard_class=ReportMeanMedianModeRetrievalTask,
1254
+ )
1255
+
1256
+
1257
+ local_vars = locals().copy()
1258
+
1259
+ __TASKS__ = [
1260
+ var
1261
+ for var in local_vars.values()
1262
+ if isinstance(var, type) and issubclass(var, DashDoFinalTask) and var is not DashDoFinalTask
1263
+ ]
1264
+
1265
+
1266
+ DASH_AND_REQUEST = [
1267
+ DashboardRetrieveIncidentAndMaxRequestAppleWatchTask,
1268
+ DashboardRetrieveIncidentAndMaxRequestAppleWatch2Task,
1269
+ DashboardRetrieveIncidentAndMaxRequestAppleIpad3Task,
1270
+ DashboardRetrieveIncidentAndMaxRequestAppleIphone13proTask,
1271
+ DashboardRetrieveIncidentAndMaxRequestAppleIphone13Task,
1272
+ DashboardRetrieveIncidentAndMaxRequestGalaxyNote20Task,
1273
+ DashboardRetrieveIncidentAndMaxRequestGoogleNexus7Task,
1274
+ DashboardRetrieveIncidentAndMaxRequestMicrosoftSurfacePro3Task,
1275
+ DashboardRetrieveIncidentAndMaxRequestPixel4aTask,
1276
+ DashboardRetrieveIncidentAndMaxRequestWindowsSurfacePro4Task,
1277
+ ]
1278
+ DASH_COMPUTE_MEAN_AND_REQUEST = [
1279
+ DashboardRetrieveIncidentAndMeanRequestAppleWatchTask,
1280
+ DashboardRetrieveIncidentAndMeanRequestAppleWatch2Task,
1281
+ DashboardRetrieveIncidentAndMeanRequestAppleIpad3Task,
1282
+ DashboardRetrieveIncidentAndMeanRequestAppleIphone13proTask,
1283
+ DashboardRetrieveIncidentAndMeanRequestAppleIphone13Task,
1284
+ DashboardRetrieveIncidentAndMeanRequestGalaxyNote20Task,
1285
+ DashboardRetrieveIncidentAndMeanRequestGoogleNexus7Task,
1286
+ DashboardRetrieveIncidentAndMeanRequestMicrosoftSurfacePro3Task,
1287
+ DashboardRetrieveIncidentAndMeanRequestPixel4aTask,
1288
+ DashboardRetrieveIncidentAndMeanRequestWindowsSurfacePro4Task,
1289
+ ]
1290
+
1291
+ DASH_COMPUTE_MEDIAN_AND_REQUEST = [
1292
+ DashboardRetrieveIncidentAndMedianRequestAppleWatchTask,
1293
+ DashboardRetrieveIncidentAndMedianRequestAppleWatch2Task,
1294
+ DashboardRetrieveIncidentAndMedianRequestAppleIpad3Task,
1295
+ DashboardRetrieveIncidentAndMedianRequestAppleIphone13proTask,
1296
+ DashboardRetrieveIncidentAndMedianRequestAppleIphone13Task,
1297
+ DashboardRetrieveIncidentAndMedianRequestGalaxyNote20Task,
1298
+ DashboardRetrieveIncidentAndMedianRequestGoogleNexus7Task,
1299
+ DashboardRetrieveIncidentAndMedianRequestMicrosoftSurfacePro3Task,
1300
+ DashboardRetrieveIncidentAndMedianRequestPixel4aTask,
1301
+ DashboardRetrieveIncidentAndMedianRequestWindowsSurfacePro4Task,
1302
+ ]
1303
+
1304
+ DASH_COMPUTE_MODE_AND_REQUEST = [
1305
+ DashboardRetrieveIncidentAndModeRequestAppleWatchTask,
1306
+ DashboardRetrieveIncidentAndModeRequestAppleWatch2Task,
1307
+ DashboardRetrieveIncidentAndModeRequestAppleIpad3Task,
1308
+ DashboardRetrieveIncidentAndModeRequestAppleIphone13proTask,
1309
+ DashboardRetrieveIncidentAndModeRequestAppleIphone13Task,
1310
+ DashboardRetrieveIncidentAndModeRequestGalaxyNote20Task,
1311
+ DashboardRetrieveIncidentAndModeRequestGoogleNexus7Task,
1312
+ DashboardRetrieveIncidentAndModeRequestMicrosoftSurfacePro3Task,
1313
+ DashboardRetrieveIncidentAndModeRequestPixel4aTask,
1314
+ DashboardRetrieveIncidentAndModeRequestWindowsSurfacePro4Task,
1315
+ ]