fiddler-client 3.3.0.dev1__tar.gz → 3.3.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {fiddler_client-3.3.0.dev1/fiddler_client.egg-info → fiddler_client-3.3.2}/PKG-INFO +1 -1
- fiddler_client-3.3.2/fiddler/VERSION +1 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/decorators.py +1 -1
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/alert_rule.py +14 -8
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_alert_rule.py +127 -7
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/constants.py +2 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/test_logger.py +2 -2
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2/fiddler_client.egg-info}/PKG-INFO +1 -1
- fiddler_client-3.3.0.dev1/fiddler/VERSION +0 -1
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/LICENSE.txt +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/MANIFEST.in +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/PUBLIC.md +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/README.md +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/configs.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/connection.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/alert_rule.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/baseline.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/common.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/dataset.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/events.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/job.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/model.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/model_deployment.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/constants/xai.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/alert_record.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/base.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/baseline.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/custom_expression.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/dataset.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/events.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/file.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/job.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/model.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/model_artifact.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/model_deployment.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/organization.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/project.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/surrogate.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/user.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/webhook.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/entities/xai.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/exceptions.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/libs/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/libs/http_client.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/libs/json_encoder.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/libs/semver.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/packtools/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/packtools/gem.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/packtools/keras_ig_helpers.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/packtools/project_attributions_helpers.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/packtools/template_model.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/alert_record.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/alert_rule.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/base.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/baseline.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/custom_expression.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/custom_features.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/dataset.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/events.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/file.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/filter_query.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/job.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/model.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/model_deployment.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/model_schema.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/model_spec.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/model_task_params.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/organization.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/project.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/response.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/server_info.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/user.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/webhook.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/xai.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/schemas/xai_params.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_alert_record.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_baseline.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_custom_metric.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_dataset.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_events.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_files.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_generate_model.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_job.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_mixin.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model_artifact.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model_deployment.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model_surrogate.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_project.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_segment.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_webhook.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_xai.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/conftest.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/test_connection.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/test_json_encoder.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/test_utils.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/utils.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/utils/__init__.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/utils/helpers.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/utils/logger.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/utils/model_generator.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/utils/validations.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/utils/version.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/version.py +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler_client.egg-info/SOURCES.txt +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler_client.egg-info/dependency_links.txt +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler_client.egg-info/requires.txt +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler_client.egg-info/top_level.txt +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/setup.cfg +0 -0
- {fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/setup.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.3.2
|
|
@@ -39,7 +39,7 @@ def handle_api_error(func: _WrappedFuncType) -> _WrappedFuncType:
|
|
|
39
39
|
error_resp = ErrorResponse(**e.response.json())
|
|
40
40
|
except requests.JSONDecodeError:
|
|
41
41
|
raise HttpError(
|
|
42
|
-
message=f
|
|
42
|
+
message=f"Invalid response content-type - {e.response.content}" # type: ignore
|
|
43
43
|
)
|
|
44
44
|
|
|
45
45
|
if status_code == HTTPStatus.CONFLICT:
|
|
@@ -5,6 +5,8 @@ from datetime import datetime
|
|
|
5
5
|
from typing import Any, Iterator
|
|
6
6
|
from uuid import UUID
|
|
7
7
|
|
|
8
|
+
from pydantic import ValidationError
|
|
9
|
+
|
|
8
10
|
from fiddler.constants.alert_rule import AlertCondition, BinSize, CompareTo, Priority
|
|
9
11
|
from fiddler.decorators import handle_api_error
|
|
10
12
|
from fiddler.entities.base import BaseEntity
|
|
@@ -276,14 +278,18 @@ class AlertRule(
|
|
|
276
278
|
|
|
277
279
|
:return: NotificationConfig object
|
|
278
280
|
"""
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
281
|
+
|
|
282
|
+
# Validating input
|
|
283
|
+
try:
|
|
284
|
+
payload: dict[str, Any] = NotificationConfig(
|
|
285
|
+
emails=emails,
|
|
286
|
+
pagerduty_services=pagerduty_services,
|
|
287
|
+
pagerduty_severity=pagerduty_severity,
|
|
288
|
+
webhooks=webhooks,
|
|
289
|
+
).dict(exclude_none=True)
|
|
290
|
+
except ValidationError as e:
|
|
291
|
+
logger.exception('Invalid input: The format of input is not correct')
|
|
292
|
+
raise e
|
|
287
293
|
response = self._client().patch(
|
|
288
294
|
url=self._get_notification_url(id_=self.id),
|
|
289
295
|
data=payload,
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import json
|
|
2
2
|
import logging
|
|
3
|
+
import uuid
|
|
4
|
+
from copy import deepcopy
|
|
3
5
|
from http import HTTPStatus
|
|
4
6
|
from uuid import UUID
|
|
5
7
|
|
|
6
8
|
import pytest
|
|
7
9
|
import responses
|
|
10
|
+
from pydantic import ValidationError
|
|
8
11
|
|
|
9
12
|
from fiddler.constants.alert_rule import AlertCondition, BinSize, CompareTo, Priority
|
|
10
13
|
from fiddler.entities.alert_rule import AlertRule
|
|
@@ -23,6 +26,8 @@ from fiddler.tests.constants import (
|
|
|
23
26
|
PROJECT_ID,
|
|
24
27
|
PROJECT_NAME,
|
|
25
28
|
TEST_EMAILS,
|
|
29
|
+
TEST_PAGERDUTY_SERVICES,
|
|
30
|
+
TEST_PAGERDUTY_SEVERITY,
|
|
26
31
|
TEST_WEBHOOKS,
|
|
27
32
|
URL,
|
|
28
33
|
)
|
|
@@ -76,8 +81,8 @@ API_RESPONSE_200 = {
|
|
|
76
81
|
|
|
77
82
|
ALERT_NOTIFICATION_API_RESPONSE_200 = {
|
|
78
83
|
'data': {
|
|
79
|
-
'emails':
|
|
80
|
-
'webhooks':
|
|
84
|
+
'emails': [],
|
|
85
|
+
'webhooks': [],
|
|
81
86
|
'pagerduty_services': [],
|
|
82
87
|
'pagerduty_severity': '',
|
|
83
88
|
},
|
|
@@ -331,28 +336,143 @@ def test_disable_notifications(caplog) -> None:
|
|
|
331
336
|
|
|
332
337
|
|
|
333
338
|
@responses.activate
|
|
334
|
-
def
|
|
339
|
+
def test_set_notifications_email() -> None:
|
|
335
340
|
responses.get(
|
|
336
341
|
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
337
342
|
json=API_RESPONSE_200,
|
|
338
343
|
)
|
|
339
344
|
|
|
340
345
|
alert_rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
346
|
+
notification_resp = deepcopy(ALERT_NOTIFICATION_API_RESPONSE_200)
|
|
347
|
+
notification_resp['data']['emails'] = TEST_EMAILS
|
|
341
348
|
resp = responses.patch(
|
|
342
349
|
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}/notification',
|
|
343
|
-
json=
|
|
350
|
+
json=notification_resp,
|
|
344
351
|
)
|
|
345
352
|
notifications = alert_rule.set_notification_config(
|
|
346
353
|
emails=TEST_EMAILS,
|
|
347
|
-
webhooks=TEST_WEBHOOKS,
|
|
348
354
|
)
|
|
349
355
|
assert json.loads(resp.calls[0].request.body) == {
|
|
350
356
|
'emails': TEST_EMAILS,
|
|
357
|
+
}
|
|
358
|
+
assert notifications == notification_resp['data']
|
|
359
|
+
|
|
360
|
+
# Removing the emails from the notification config
|
|
361
|
+
notification_resp['data']['emails'] = []
|
|
362
|
+
resp = responses.patch(
|
|
363
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}/notification',
|
|
364
|
+
json=notification_resp,
|
|
365
|
+
)
|
|
366
|
+
notifications = alert_rule.set_notification_config(
|
|
367
|
+
emails=[],
|
|
368
|
+
)
|
|
369
|
+
assert json.loads(resp.calls[0].request.body) == {
|
|
370
|
+
'emails': [],
|
|
371
|
+
}
|
|
372
|
+
assert notifications == notification_resp['data']
|
|
373
|
+
|
|
374
|
+
|
|
375
|
+
@responses.activate
|
|
376
|
+
def test_set_notifications_pagerduty() -> None:
|
|
377
|
+
responses.get(
|
|
378
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
379
|
+
json=API_RESPONSE_200,
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
alert_rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
383
|
+
notification_resp = deepcopy(ALERT_NOTIFICATION_API_RESPONSE_200)
|
|
384
|
+
notification_resp['data']['pagerduty_services'] = TEST_PAGERDUTY_SERVICES
|
|
385
|
+
notification_resp['data']['pagerduty_severity'] = TEST_PAGERDUTY_SEVERITY
|
|
386
|
+
resp = responses.patch(
|
|
387
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}/notification',
|
|
388
|
+
json=notification_resp,
|
|
389
|
+
)
|
|
390
|
+
notifications = alert_rule.set_notification_config(
|
|
391
|
+
pagerduty_services=TEST_PAGERDUTY_SERVICES,
|
|
392
|
+
pagerduty_severity=TEST_PAGERDUTY_SEVERITY,
|
|
393
|
+
)
|
|
394
|
+
|
|
395
|
+
assert json.loads(resp.calls[0].request.body) == {
|
|
396
|
+
'pagerduty_services': TEST_PAGERDUTY_SERVICES,
|
|
397
|
+
'pagerduty_severity': TEST_PAGERDUTY_SEVERITY,
|
|
398
|
+
}
|
|
399
|
+
assert notifications == notification_resp['data']
|
|
400
|
+
|
|
401
|
+
# Removing the webhooks from the notification config
|
|
402
|
+
notification_resp['data']['pagerduty_services'] = []
|
|
403
|
+
notification_resp['data']['pagerduty_severity'] = ''
|
|
404
|
+
resp = responses.patch(
|
|
405
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}/notification',
|
|
406
|
+
json=notification_resp,
|
|
407
|
+
)
|
|
408
|
+
notifications = alert_rule.set_notification_config(
|
|
409
|
+
pagerduty_services=[],
|
|
410
|
+
pagerduty_severity='',
|
|
411
|
+
)
|
|
412
|
+
assert json.loads(resp.calls[0].request.body) == {
|
|
413
|
+
'pagerduty_services': [],
|
|
414
|
+
'pagerduty_severity': '',
|
|
415
|
+
}
|
|
416
|
+
assert notifications == notification_resp['data']
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
@responses.activate
|
|
420
|
+
def test_set_notifications_webhooks() -> None:
|
|
421
|
+
responses.get(
|
|
422
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
423
|
+
json=API_RESPONSE_200,
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
alert_rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
427
|
+
notification_resp = deepcopy(ALERT_NOTIFICATION_API_RESPONSE_200)
|
|
428
|
+
notification_resp['data']['webhooks'] = TEST_WEBHOOKS
|
|
429
|
+
resp = responses.patch(
|
|
430
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}/notification',
|
|
431
|
+
json=notification_resp,
|
|
432
|
+
)
|
|
433
|
+
notifications = alert_rule.set_notification_config(
|
|
434
|
+
webhooks=TEST_WEBHOOKS,
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
notification_resp['data']['webhooks'] = [
|
|
438
|
+
uuid.UUID(webhook_uuid)
|
|
439
|
+
for webhook_uuid in notification_resp['data']['webhooks']
|
|
440
|
+
]
|
|
441
|
+
assert json.loads(resp.calls[0].request.body) == {
|
|
351
442
|
'webhooks': TEST_WEBHOOKS,
|
|
352
443
|
}
|
|
353
|
-
assert notifications ==
|
|
354
|
-
|
|
444
|
+
assert notifications == notification_resp['data']
|
|
445
|
+
|
|
446
|
+
# Removing the webhooks from the notification config
|
|
447
|
+
notification_resp['data']['webhooks'] = []
|
|
448
|
+
resp = responses.patch(
|
|
449
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}/notification',
|
|
450
|
+
json=notification_resp,
|
|
355
451
|
)
|
|
452
|
+
notifications = alert_rule.set_notification_config(
|
|
453
|
+
webhooks=[],
|
|
454
|
+
)
|
|
455
|
+
assert json.loads(resp.calls[0].request.body) == {
|
|
456
|
+
'webhooks': [],
|
|
457
|
+
}
|
|
458
|
+
assert notifications == notification_resp['data']
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
@responses.activate
|
|
462
|
+
def test_set_notifications_invalid_input(caplog) -> None:
|
|
463
|
+
responses.get(
|
|
464
|
+
url=f'{URL}/v3/alert-rules/{ALERT_RULE_ID}',
|
|
465
|
+
json=API_RESPONSE_200,
|
|
466
|
+
)
|
|
467
|
+
|
|
468
|
+
alert_rule = AlertRule.get(id_=ALERT_RULE_ID)
|
|
469
|
+
|
|
470
|
+
with pytest.raises(ValidationError):
|
|
471
|
+
alert_rule.set_notification_config(
|
|
472
|
+
emails=TEST_EMAILS[0],
|
|
473
|
+
webhooks=TEST_WEBHOOKS,
|
|
474
|
+
)
|
|
475
|
+
assert 'Invalid input: The format of input is not correct' in caplog.messages[0]
|
|
356
476
|
|
|
357
477
|
|
|
358
478
|
@responses.activate
|
|
@@ -21,6 +21,8 @@ DATASET_NAME = 'dataset3'
|
|
|
21
21
|
BASELINE_ID = 'af05646f-0cef-4638-84c9-0d195df2575d'
|
|
22
22
|
ALERT_RULE_ID = 'ed8f18e6-c319-4374-8884-71126a6bab85'
|
|
23
23
|
TEST_EMAILS = ['test@fiddler.ai', 'admin@fiddler.ai']
|
|
24
|
+
TEST_PAGERDUTY_SERVICES = ['service1', 'service2']
|
|
25
|
+
TEST_PAGERDUTY_SEVERITY = 'critical'
|
|
24
26
|
TEST_WEBHOOKS = [
|
|
25
27
|
'e20bf4cc-d2cf-4540-baef-d96913b14f1b',
|
|
26
28
|
'6e796fda-0111-4a72-82cd-f0f219e903e1',
|
|
@@ -6,7 +6,7 @@ from fiddler.utils.logger import set_logging
|
|
|
6
6
|
|
|
7
7
|
def test_set_logging() -> None:
|
|
8
8
|
app_logger = logging.getLogger(LOGGER_NAME)
|
|
9
|
-
assert len(app_logger.handlers) ==
|
|
9
|
+
assert len(app_logger.handlers) == 2
|
|
10
10
|
|
|
11
11
|
set_logging(level=logging.ERROR)
|
|
12
|
-
assert len(app_logger.handlers) ==
|
|
12
|
+
assert len(app_logger.handlers) == 3
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
3.3.0.dev1
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/packtools/project_attributions_helpers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_generate_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model_artifact.py
RENAMED
|
File without changes
|
{fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model_deployment.py
RENAMED
|
File without changes
|
{fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler/tests/apis/test_model_surrogate.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fiddler_client-3.3.0.dev1 → fiddler_client-3.3.2}/fiddler_client.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|