peak-sdk 1.11.0__py3-none-any.whl → 1.13.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 (48) hide show
  1. peak/__init__.py +3 -2
  2. peak/_metadata.py +185 -1
  3. peak/_version.py +1 -1
  4. peak/callbacks.py +22 -2
  5. peak/cli/cli.py +2 -0
  6. peak/cli/helpers.py +2 -0
  7. peak/cli/metrics/__init__.py +21 -0
  8. peak/cli/metrics/metrics.py +707 -0
  9. peak/cli/press/apps/deployments.py +12 -6
  10. peak/cli/press/apps/specs.py +20 -0
  11. peak/cli/press/blocks/deployments.py +5 -6
  12. peak/cli/press/blocks/specs.py +2 -0
  13. peak/cli/press/deployments.py +49 -3
  14. peak/cli/resources/services.py +20 -5
  15. peak/handler.py +16 -7
  16. peak/metrics/__init__.py +26 -0
  17. peak/metrics/metrics.py +553 -0
  18. peak/output.py +9 -1
  19. peak/press/apps.py +100 -5
  20. peak/press/blocks.py +2 -0
  21. peak/press/deployments.py +35 -0
  22. peak/resources/__init__.py +10 -1
  23. peak/resources/services.py +5 -2
  24. peak/sample_yaml/metrics/create_collection.yaml +8 -0
  25. peak/sample_yaml/metrics/publish.yaml +6 -0
  26. peak/sample_yaml/metrics/query.yaml +25 -0
  27. peak/sample_yaml/press/apps/deployments/create_app_deployment.yaml +12 -0
  28. peak/sample_yaml/press/apps/deployments/create_app_deployment_revision.yaml +12 -0
  29. peak/sample_yaml/press/apps/specs/create_app_spec.yaml +63 -0
  30. peak/sample_yaml/press/apps/specs/create_app_spec_release.yaml +63 -0
  31. peak/sample_yaml/press/blocks/specs/service/api/create_block_spec.yaml +28 -28
  32. peak/sample_yaml/press/blocks/specs/service/api/create_block_spec_release.yaml +28 -28
  33. peak/sample_yaml/press/blocks/specs/service/webapp/create_block_spec.yaml +29 -28
  34. peak/sample_yaml/press/blocks/specs/service/webapp/create_block_spec_release.yaml +29 -28
  35. peak/sample_yaml/press/blocks/specs/workflow/create_block_spec.yaml +32 -32
  36. peak/sample_yaml/press/blocks/specs/workflow/create_block_spec_release.yaml +32 -32
  37. peak/sample_yaml/press/patch_parameters.yaml +9 -0
  38. peak/sample_yaml/resources/services/create_or_update_service.yaml +1 -0
  39. peak/sample_yaml/resources/services/create_service.yaml +1 -0
  40. peak/sample_yaml/resources/services/update_service.yaml +1 -0
  41. peak/sample_yaml/resources/webapps/create_or_update_webapp.yaml +1 -0
  42. peak/sample_yaml/resources/webapps/create_webapp.yaml +1 -0
  43. peak/sample_yaml/resources/webapps/update_webapp.yaml +1 -0
  44. {peak_sdk-1.11.0.dist-info → peak_sdk-1.13.0.dist-info}/METADATA +45 -7
  45. {peak_sdk-1.11.0.dist-info → peak_sdk-1.13.0.dist-info}/RECORD +48 -40
  46. {peak_sdk-1.11.0.dist-info → peak_sdk-1.13.0.dist-info}/LICENSE +0 -0
  47. {peak_sdk-1.11.0.dist-info → peak_sdk-1.13.0.dist-info}/WHEEL +0 -0
  48. {peak_sdk-1.11.0.dist-info → peak_sdk-1.13.0.dist-info}/entry_points.txt +0 -0
peak/press/apps.py CHANGED
@@ -147,6 +147,7 @@ class App(BaseClient):
147
147
  featured: Optional[bool] = None,
148
148
  scope: Optional[str] = None,
149
149
  tenants: Optional[List[str]] = None,
150
+ parameters: Optional[Dict[str, List[Dict[str, Any]]]] = None,
150
151
  ) -> Dict[str, str]:
151
152
  """Creates a new App spec.
152
153
 
@@ -166,6 +167,10 @@ class App(BaseClient):
166
167
  and `shared` allows specifying what set of tenants can access and use this spec.
167
168
  By default it is `private`.
168
169
  tenants (List[str] | None): Given a shared scope, specify what other tenants can discover and deploy this spec.
170
+ parameters (Optional[Dict[str, List[Dict[str, Any]]]]): A dictionary containing optional keys `build` and `run`. The structure of the dictionary is as follows:
171
+
172
+ - `build` (List[Dict[str, Any]], optional): A list of parameter objects, the values of which will be given and used at deployment time.
173
+ - `run` (List[Dict[str, Any]], optional): A list of parameter objects, the values of which will be given at deployment time and will be used at run time.
169
174
 
170
175
  Returns:
171
176
  Dict[str, str]: Id of the created app spec.
@@ -203,6 +208,37 @@ class App(BaseClient):
203
208
  }
204
209
  ]
205
210
  }
211
+ SCHEMA(Parameters):
212
+ The valid types for parameters are `boolean`, `string`, `string_array`, `number`, `number_array`, `object` and `object_array`.
213
+
214
+ .. code-block:: json
215
+
216
+ {
217
+ "build": [
218
+ {
219
+ "name": "string(required)",
220
+ "type": "string(required)",
221
+ "required": "boolean(required)",
222
+ "description": "string",
223
+ "defaultValue": "string(required)",
224
+ "title": "string",
225
+ "options": "list(str)",
226
+ "hideValue": "boolean",
227
+ }
228
+ ],
229
+ "run": [
230
+ {
231
+ "name": "string(required)",
232
+ "type": "string(required)",
233
+ "required": "boolean(required)",
234
+ "description": "string",
235
+ "defaultValue": "string(required)",
236
+ "title": "string",
237
+ "options": "list(str)",
238
+ "hideValue": "boolean",
239
+ }
240
+ ]
241
+ }
206
242
 
207
243
  Raises:
208
244
  BadRequestException: The given parameters are invalid.
@@ -218,6 +254,7 @@ class App(BaseClient):
218
254
  "spec": json.dumps(body),
219
255
  "featured": json.dumps(featured),
220
256
  "scope": scope,
257
+ "parameters": json.dumps(parameters),
221
258
  }
222
259
 
223
260
  if tenants:
@@ -319,7 +356,12 @@ class App(BaseClient):
319
356
  subdomain="press",
320
357
  )
321
358
 
322
- def create_spec_release(self, spec_id: str, body: Dict[str, Any]) -> Dict[str, str]:
359
+ def create_spec_release(
360
+ self,
361
+ spec_id: str,
362
+ body: Dict[str, Any],
363
+ parameters: Optional[Dict[str, List[Dict[str, Any]]]] = None,
364
+ ) -> Dict[str, str]:
323
365
  """Publish a new release to an existing App spec.
324
366
 
325
367
  Spec details (Block spec ID and Release version) needs to be added to the `config` key.
@@ -331,6 +373,10 @@ class App(BaseClient):
331
373
  Args:
332
374
  spec_id (str): Id of the spec in which new release will be created
333
375
  body (Dict[str, Any]): Dictionary containing updated release and config in the expected format.
376
+ parameters (Optional[Dict[str, List[Dict[str, Any]]]]): A dictionary containing optional keys `build` and `run`. The structure of the dictionary is as follows:
377
+
378
+ - `build` (List[Dict[str, Any]], optional): A list of parameter objects, the values of which will be given and used at deployment time.
379
+ - `run` (List[Dict[str, Any]], optional): A list of parameter objects, the values of which will be given at deployment time and will be used at run time.
334
380
 
335
381
  Returns:
336
382
  Dict[str, str]: Dictionary containing spec id and release version
@@ -354,6 +400,36 @@ class App(BaseClient):
354
400
  }
355
401
  }
356
402
 
403
+ SCHEMA(Parameters):
404
+ The valid types for parameters are `boolean`, `string`, `string_array`, `number`, `number_array`, `object` and `object_array`.
405
+
406
+ .. code-block:: json
407
+
408
+ {
409
+ "build": [
410
+ {
411
+ "defaultValue": "string(required)",
412
+ "description": "string",
413
+ "hideValue": "boolean",
414
+ "name": "string(required)",
415
+ "required": "boolean(required)",
416
+ "title": "string",
417
+ "type": "string(required)",
418
+ }
419
+ ],
420
+ "run": [
421
+ {
422
+ "defaultValue": "string(required)",
423
+ "description": "string",
424
+ "hideValue": "boolean",
425
+ "name": "string(required)",
426
+ "required": "boolean(required)",
427
+ "title": "string",
428
+ "type": "string(required)",
429
+ }
430
+ ]
431
+ }
432
+
357
433
  Raises:
358
434
  BadRequestException: The given parameters are invalid.
359
435
  UnauthorizedException: The credentials are invalid.
@@ -369,7 +445,10 @@ class App(BaseClient):
369
445
  endpoint,
370
446
  method,
371
447
  content_type=ContentType.APPLICATION_JSON,
372
- body=body,
448
+ body={
449
+ **body,
450
+ "parameters": parameters,
451
+ },
373
452
  subdomain="press",
374
453
  )
375
454
 
@@ -517,7 +596,7 @@ class App(BaseClient):
517
596
  subdomain="press",
518
597
  )
519
598
 
520
- def create_deployment(self, body: Dict[str, str]) -> Dict[str, str]:
599
+ def create_deployment(self, body: Dict[str, Any]) -> Dict[str, str]:
521
600
  """Creates a new deployment from App spec.
522
601
 
523
602
  Uses the latest spec release if release version is not provided.
@@ -548,6 +627,14 @@ class App(BaseClient):
548
627
  ],
549
628
  "title": "string"
550
629
  },
630
+ "appParameters": {
631
+ "build": {
632
+ "param_name": "param_value (string | number | boolean | array)"
633
+ },
634
+ "run": {
635
+ "param_name": "param_value (string | number | boolean | array)"
636
+ }
637
+ },
551
638
  "parameters": {
552
639
  "spec_name": {
553
640
  "build": {
@@ -772,7 +859,7 @@ class App(BaseClient):
772
859
  subdomain="press",
773
860
  )
774
861
 
775
- def create_deployment_revision(self, deployment_id: str, body: Dict[str, str]) -> Dict[str, str]:
862
+ def create_deployment_revision(self, deployment_id: str, body: Dict[str, Any]) -> Dict[str, str]:
776
863
  """Creates a new Revision of a Deployment, from a selected App Spec Release.
777
864
 
778
865
  Publish a new revision of an App Deployment. The payload must specify the release version of the parent spec that you wish to use (if one is not provided, the latest available will be used),
@@ -798,6 +885,14 @@ class App(BaseClient):
798
885
  "revision": {
799
886
  "notes": "string",
800
887
  },
888
+ "appParameters": {
889
+ "build": {
890
+ "param_name": "param_value (string | number | boolean | array)"
891
+ },
892
+ "run": {
893
+ "param_name": "param_value (string | number | boolean | array)"
894
+ }
895
+ },
801
896
  "parameters": {
802
897
  "block-name-1":{
803
898
  "build": {
@@ -984,7 +1079,7 @@ class App(BaseClient):
984
1079
  "summary": "string",
985
1080
  "tags": [
986
1081
  {
987
- "name": "string",
1082
+ "name": "string",
988
1083
  }
989
1084
  ],
990
1085
  "title": "string",
peak/press/blocks.py CHANGED
@@ -542,6 +542,7 @@ class Block(BaseClient):
542
542
  "secrets": []
543
543
  },
544
544
  "sessionStickiness": "boolean (only for web-app service)",
545
+ "scaleToZero": "boolean (only for web-app service)",
545
546
  "entrypoint": "string",
546
547
  "healthCheckURL": "string",
547
548
  "minInstances": "number. Default is 1 and maximum is 2",
@@ -1090,6 +1091,7 @@ class Block(BaseClient):
1090
1091
  "secrets": []
1091
1092
  },
1092
1093
  "sessionStickiness": "boolean (only for web-app service)",
1094
+ "scaleToZero": "boolean (only for web-app service)",
1093
1095
  "entrypoint": "string",
1094
1096
  "healthCheckURL": "string",
1095
1097
  "minInstances": "number. Default is 1 and maximum is 2",
peak/press/deployments.py CHANGED
@@ -153,6 +153,41 @@ class Deployment(BaseClient):
153
153
  subdomain="press",
154
154
  )
155
155
 
156
+ def patch_parameters(
157
+ self,
158
+ deployment_id: str,
159
+ body: Dict[str, Any],
160
+ ) -> Dict[str, Any]:
161
+ """Get the parameters for a deployment at run time.
162
+
163
+ REFERENCE:
164
+ 🔗 `API Documentation <https://press.peak.ai/api-docs/index.htm#/Deployment%20Parameters/patch_v1_deployments__deploymentId__parameters_run>`__
165
+
166
+ Args:
167
+ deployment_id (str): The ID of the deployment.
168
+ body (Dict[str, Any]): Dictionary containing the updated parameters.
169
+
170
+ Returns:
171
+ Dict[str, Any]: Dictionary containing the updated parameters.
172
+
173
+ Raises:
174
+ BadRequestException: The given parameters are invalid.
175
+ UnauthorizedException: The credentials are invalid.
176
+ ForbiddenException: The user does not have permission to perform the operation.
177
+ NotFoundException: The given deployment does not exist.
178
+ InternalServerErrorException: The server encountered an unexpected condition that
179
+ prevented it from fulfilling the request.
180
+ """
181
+ method, endpoint = HttpMethods.PATCH, f"v1/deployments/{deployment_id}/parameters/run"
182
+
183
+ return self.session.create_request( # type: ignore[no-any-return]
184
+ endpoint,
185
+ method,
186
+ body=body,
187
+ content_type=ContentType.APPLICATION_JSON,
188
+ subdomain="press",
189
+ )
190
+
156
191
 
157
192
  def get_client(session: Optional[Session] = None) -> Deployment:
158
193
  """Returns a Deployment client.
@@ -26,4 +26,13 @@ from typing import List
26
26
 
27
27
  from peak.resources import alerts, artifacts, images, services, tenants, users, webapps, workflows
28
28
 
29
- __all__: List[str] = ["alerts", "artifacts", "images", "services", "tenants", "users", "webapps", "workflows"]
29
+ __all__: List[str] = [
30
+ "alerts",
31
+ "artifacts",
32
+ "images",
33
+ "services",
34
+ "tenants",
35
+ "users",
36
+ "webapps",
37
+ "workflows",
38
+ ]
@@ -152,6 +152,7 @@ class Service(BaseClient):
152
152
  },
153
153
  "description": "string",
154
154
  "sessionStickiness": "boolean. Not required for 'api' service type.",
155
+ "scaleToZero": "boolean. Only for 'web-app' service type.",
155
156
  "entrypoint": "string",
156
157
  "healthCheckURL": "string",
157
158
  "minInstances": "number. Default is 1 and maximum is 2",
@@ -180,7 +181,7 @@ class Service(BaseClient):
180
181
  """Updates the existing service.
181
182
 
182
183
  When updating the service, it will trigger a redeployment only under specific conditions.
183
- Redeployment is triggered if you make changes to any of the following parameters: imageId, versionId, instanceTypeId, parameters, healthCheckURL, entrypoint or sessionStickiness.
184
+ Redeployment is triggered if you make changes to any of the following parameters: imageId, versionId, instanceTypeId, parameters, healthCheckURL, entrypoint, scaleToZero or sessionStickiness.
184
185
  However, only modifying the title or description will not trigger a redeployment.
185
186
 
186
187
  With the help of this operation, we can just update the required fields (except name and serviceType) and keep the rest of the fields as it is.
@@ -215,6 +216,7 @@ class Service(BaseClient):
215
216
  },
216
217
  "description": "string",
217
218
  "sessionStickiness": "boolean. Not required for 'api' service type.",
219
+ "scaleToZero": "boolean. Only for 'web-app' service type.",
218
220
  "entrypoint": "string",
219
221
  "healthCheckURL": "string",
220
222
  "minInstances": "number. Default is 1 and maximum is 2",
@@ -240,7 +242,7 @@ class Service(BaseClient):
240
242
  """Create a new service or updates an existing service based on service name.
241
243
 
242
244
  When updating the service, it will trigger a redeployment only under specific conditions.
243
- Redeployment is triggered if you make changes to any of the following parameters: imageId, versionId, instanceTypeId, parameters, healthCheckURL, entrypoint or sessionStickiness.
245
+ Redeployment is triggered if you make changes to any of the following parameters: imageId, versionId, instanceTypeId, parameters, healthCheckURL, entrypoint, scaleToZero or sessionStickiness.
244
246
  However, only modifying the title or description will not trigger a redeployment.
245
247
 
246
248
  REFERENCE:
@@ -274,6 +276,7 @@ class Service(BaseClient):
274
276
  },
275
277
  "description": "string",
276
278
  "sessionStickiness": "boolean. Not required for 'api' service type.",
279
+ "scaleToZero": "boolean. Only for 'web-app' service type.",
277
280
  "entrypoint": "string",
278
281
  "healthCheckURL": "string",
279
282
  "minInstances": "number. Default is 1 and maximum is 2",
@@ -0,0 +1,8 @@
1
+ # create_collection.yaml
2
+
3
+ body:
4
+ name: test
5
+ scope: public
6
+ description: "This collection is used for product metrics"
7
+ artifact:
8
+ path: metrics
@@ -0,0 +1,6 @@
1
+ # publish.yaml
2
+
3
+ body:
4
+ namespace: dev
5
+ artifact:
6
+ path: metrics
@@ -0,0 +1,25 @@
1
+ namespace: default
2
+ generateSql: false
3
+ measures:
4
+ - product.price
5
+ dimensions:
6
+ - product.name
7
+ filters:
8
+ - dimension: product.category
9
+ operator: equals
10
+ values:
11
+ - "electronics"
12
+ timeDimensions:
13
+ - dimension: product.created_at
14
+ dateRange:
15
+ - "2020-01-26T00:00:00Z"
16
+ - "2020-02-06T00:00:00Z"
17
+ granularity: day
18
+ segments:
19
+ - product.category
20
+ - product.price
21
+ order:
22
+ product.created_at: desc
23
+ product.price: asc
24
+ limit: 100
25
+ ofset: 0
@@ -10,6 +10,18 @@ body:
10
10
  imageUrl: https://my-block-pics.com/image-0.jpg
11
11
  tags:
12
12
  - name: CLI
13
+ appParameters:
14
+ build:
15
+ watcher_user: "abc@123.com"
16
+ use_cache: true
17
+ runtime_exceeded: 10
18
+ run:
19
+ agg_type: "SUM"
20
+ num_iterations: 50
21
+ email_notifications: true
22
+ file_names:
23
+ - input.csv
24
+ - output.csv
13
25
  parameters:
14
26
  block-1:
15
27
  build:
@@ -1,6 +1,18 @@
1
1
  # app_deployment_revision.yaml
2
2
 
3
3
  body:
4
+ appParameters:
5
+ build:
6
+ watcher_user: "abc@123.com"
7
+ use_cache: true
8
+ runtime_exceeded: 10
9
+ run:
10
+ agg_type: "SUM"
11
+ num_iterations: 50
12
+ email_notifications: true
13
+ file_names:
14
+ - input.csv
15
+ - output.csv
4
16
  parameters:
5
17
  block-1:
6
18
  build:
@@ -24,6 +24,69 @@ body:
24
24
  release:
25
25
  version: 1.0.0
26
26
  autoRunOnDeploy: False
27
+ parameters:
28
+ build:
29
+ - name: watcher_user
30
+ type: string
31
+ required: true
32
+ title: Watcher User Email
33
+ description: Set the watcher user email
34
+ defaultValue: user@peak.ai
35
+ hideValue: false
36
+ - name: use_cache
37
+ type: boolean
38
+ required: false
39
+ title: Image Caching
40
+ description: Enable image caching for the workflow
41
+ defaultValue: false
42
+ - name: runtime_exceeded
43
+ type: number
44
+ required: false
45
+ title: Runtime Exceeded
46
+ description: Select the runtime exceeded value to trigger a failed notification for the workflow (in minutes)
47
+ options:
48
+ - title: Low
49
+ value: 10
50
+ - title: Medium
51
+ value: 50
52
+ - title: High
53
+ value: 100
54
+ defaultValue: 10
55
+ run:
56
+ - name: agg_type
57
+ type: string
58
+ required: false
59
+ title: Agg Type
60
+ description: Select an aggregation function (e.g., AVG, SUM, COUNT)
61
+ defaultValue: AVG
62
+ hideValue: true
63
+ - name: email_notifications
64
+ type: boolean
65
+ required: false
66
+ title: Email Notifications
67
+ description: Enable email notifications
68
+ defaultValue: false
69
+ - name: num_iterations
70
+ type: number
71
+ required: false
72
+ title: Number of Iterations
73
+ description: Select the number of iterations
74
+ options:
75
+ - title: Low
76
+ value: 10
77
+ - title: Medium
78
+ value: 50
79
+ - title: High
80
+ value: 100
81
+ defaultValue: 10
82
+ - name: file_names
83
+ type: string_array
84
+ required: true
85
+ title: File Names
86
+ description: Specify input and output file names
87
+ defaultValue:
88
+ - input.csv
89
+ - output.csv
27
90
  featured: true
28
91
  scope: shared
29
92
  tenants:
@@ -13,3 +13,66 @@ body:
13
13
  release:
14
14
  version: 2.0.0
15
15
  autoRunOnDeploy: False
16
+ parameters:
17
+ build:
18
+ - name: watcher_user
19
+ type: string
20
+ required: true
21
+ title: Watcher User Email
22
+ description: Set the watcher user email
23
+ defaultValue: user@peak.ai
24
+ hideValue: false
25
+ - name: use_cache
26
+ type: boolean
27
+ required: false
28
+ title: Image Caching
29
+ description: Enable image caching for the workflow
30
+ defaultValue: false
31
+ - name: runtime_exceeded
32
+ type: number
33
+ required: false
34
+ title: Runtime Exceeded
35
+ description: Select the runtime exceeded value to trigger a failed notification for the workflow (in minutes)
36
+ options:
37
+ - title: Low
38
+ value: 10
39
+ - title: Medium
40
+ value: 50
41
+ - title: High
42
+ value: 100
43
+ defaultValue: 10
44
+ run:
45
+ - name: agg_type
46
+ type: string
47
+ required: false
48
+ title: Agg Type
49
+ description: Select an aggregation function (e.g., AVG, SUM, COUNT)
50
+ defaultValue: AVG
51
+ hideValue: true
52
+ - name: email_notifications
53
+ type: boolean
54
+ required: false
55
+ title: Email Notifications
56
+ description: Enable email notifications
57
+ defaultValue: false
58
+ - name: num_iterations
59
+ type: number
60
+ required: false
61
+ title: Number of Iterations
62
+ description: Select the number of iterations
63
+ options:
64
+ - title: Low
65
+ value: 10
66
+ - title: Medium
67
+ value: 50
68
+ - title: High
69
+ value: 100
70
+ defaultValue: 10
71
+ - name: file_names
72
+ type: string_array
73
+ required: true
74
+ title: File Names
75
+ description: Specify input and output file names
76
+ defaultValue:
77
+ - input.csv
78
+ - output.csv
@@ -35,16 +35,18 @@ body:
35
35
  minInstances: 1
36
36
  parameters:
37
37
  build:
38
- - defaultValue: /health
39
- description: Enter the health check URL
40
- name: health_check_url
38
+ - name: health_check_url
39
+ type: string
41
40
  required: true
42
41
  title: Health Check URL
43
- type: string
42
+ description: Enter the health check URL
43
+ defaultValue: /health
44
44
  hideValue: false
45
- - defaultValue: 20
45
+ - name: instance_type_id
46
+ type: number
47
+ required: true
48
+ title: Instance Type ID
46
49
  description: Select an instance type
47
- name: instance_type_id
48
50
  options:
49
51
  - title: Pico (0.125CPU, 0.125GB RAM)
50
52
  value: 20
@@ -52,26 +54,26 @@ parameters:
52
54
  value: 21
53
55
  - title: Micro (0.5CPU, 1GB RAM)
54
56
  value: 22
55
- required: true
56
- title: Instance Type ID
57
- type: number
57
+ defaultValue: 20
58
58
  run:
59
- - defaultValue: AVG
60
- description: Select an aggregation function (e.g., AVG, SUM, COUNT)
61
- name: agg_type
59
+ - name: agg_type
60
+ type: string
62
61
  required: false
63
62
  title: Agg Type
64
- type: string
63
+ description: Select an aggregation function (e.g., AVG, SUM, COUNT)
64
+ defaultValue: AVG
65
65
  hideValue: true
66
- - defaultValue: false
67
- description: Enable email notifications
68
- name: email_notifications
66
+ - name: email_notifications
67
+ type: boolean
69
68
  required: false
70
69
  title: Email Notifications
71
- type: boolean
72
- - defaultValue: 10
70
+ description: Enable email notifications
71
+ defaultValue: false
72
+ - name: num_iterations
73
+ type: number
74
+ required: false
75
+ title: Number of Iterations
73
76
  description: Select the number of iterations
74
- name: num_iterations
75
77
  options:
76
78
  - title: Low
77
79
  value: 10
@@ -79,17 +81,15 @@ parameters:
79
81
  value: 50
80
82
  - title: High
81
83
  value: 100
82
- required: false
83
- title: Number of Iterations
84
- type: number
85
- - defaultValue:
86
- - input.csv
87
- - output.csv
88
- description: Specify input and output file names
89
- name: file_names
84
+ defaultValue: 10
85
+ - name: file_names
86
+ type: string_array
90
87
  required: true
91
88
  title: File Names
92
- type: string_array
89
+ description: Specify input and output file names
90
+ defaultValue:
91
+ - input.csv
92
+ - output.csv
93
93
  artifact:
94
94
  path: "."
95
95
  ignore_files: