From f78f06e9a957a3ef1ba131c14b54625a23ad4eee Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Wed, 24 Dec 2025 11:22:47 +0000 Subject: [PATCH] Regenerate client from commit 1214813 of spec repo --- .generator/schemas/v2/openapi.yaml | 361 ++++++++++++++++++ docs/datadog_api_client.v2.model.rst | 84 ++++ .../v2/teams/CreateTeamNotificationRule.py | 38 ++ .../v2/teams/DeleteTeamNotificationRule.py | 21 + examples/v2/teams/GetTeamNotificationRule.py | 23 ++ examples/v2/teams/GetTeamNotificationRules.py | 19 + .../v2/teams/UpdateTeamNotificationRule.py | 46 +++ src/datadog_api_client/v2/api/teams_api.py | 240 ++++++++++++ .../v2/model/team_notification_rule.py | 63 +++ .../team_notification_rule_attributes.py | 88 +++++ ...team_notification_rule_attributes_email.py | 36 ++ ...m_notification_rule_attributes_ms_teams.py | 36 ++ ..._notification_rule_attributes_pagerduty.py | 36 ++ ...team_notification_rule_attributes_slack.py | 43 +++ .../model/team_notification_rule_request.py | 40 ++ .../model/team_notification_rule_response.py | 42 ++ .../v2/model/team_notification_rule_type.py | 35 ++ .../model/team_notification_rules_response.py | 56 +++ .../team_notification_rules_response_meta.py | 46 +++ ...m_notification_rules_response_meta_page.py | 97 +++++ src/datadog_api_client/v2/models/__init__.py | 26 ++ ...returns_api_error_response_response.frozen | 1 + ...e_returns_api_error_response_response.yaml | 71 ++++ ...tification_rule_returns_ok_response.frozen | 1 + ...notification_rule_returns_ok_response.yaml | 52 +++ ...returns_api_error_response_response.frozen | 1 + ...e_returns_api_error_response_response.yaml | 69 ++++ ...on_rule_returns_no_content_response.frozen | 1 + ...tion_rule_returns_no_content_response.yaml | 66 ++++ ...returns_api_error_response_response.frozen | 1 + ...e_returns_api_error_response_response.yaml | 68 ++++ ...tification_rule_returns_ok_response.frozen | 1 + ...notification_rule_returns_ok_response.yaml | 68 ++++ ...ification_rules_returns_ok_response.frozen | 1 + ...otification_rules_returns_ok_response.yaml | 68 ++++ ...returns_api_error_response_response.frozen | 1 + ...e_returns_api_error_response_response.yaml | 71 ++++ ...tification_rule_returns_ok_response.frozen | 1 + ...notification_rule_returns_ok_response.yaml | 70 ++++ tests/v2/features/given.json | 16 + tests/v2/features/teams.feature | 100 +++++ tests/v2/features/undo.json | 30 ++ 42 files changed, 2234 insertions(+) create mode 100644 examples/v2/teams/CreateTeamNotificationRule.py create mode 100644 examples/v2/teams/DeleteTeamNotificationRule.py create mode 100644 examples/v2/teams/GetTeamNotificationRule.py create mode 100644 examples/v2/teams/GetTeamNotificationRules.py create mode 100644 examples/v2/teams/UpdateTeamNotificationRule.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_attributes.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_attributes_email.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_request.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_response.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rule_type.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rules_response.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rules_response_meta.py create mode 100644 src/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py create mode 100644 tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.yaml diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index f3ca46bc04..d2192b7484 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -54408,6 +54408,143 @@ components: $ref: '#/components/schemas/TeamLink' type: array type: object + TeamNotificationRule: + description: Team notification rule + properties: + attributes: + $ref: '#/components/schemas/TeamNotificationRuleAttributes' + id: + description: The identifier of the team notification rule + example: b8626d7e-cedd-11eb-abf5-da7ad0900001 + type: string + type: + $ref: '#/components/schemas/TeamNotificationRuleType' + required: + - attributes + - type + type: object + TeamNotificationRuleAttributes: + description: Team notification rule attributes + properties: + email: + $ref: '#/components/schemas/TeamNotificationRuleAttributesEmail' + ms_teams: + $ref: '#/components/schemas/TeamNotificationRuleAttributesMsTeams' + pagerduty: + $ref: '#/components/schemas/TeamNotificationRuleAttributesPagerduty' + slack: + $ref: '#/components/schemas/TeamNotificationRuleAttributesSlack' + type: object + TeamNotificationRuleAttributesEmail: + description: Email notification settings for the team + properties: + enabled: + description: Flag indicating email notification + type: boolean + type: object + TeamNotificationRuleAttributesMsTeams: + description: MS Teams notification settings for the team + properties: + connector_name: + description: Handle for MS Teams + type: string + type: object + TeamNotificationRuleAttributesPagerduty: + description: PagerDuty notification settings for the team + properties: + service_name: + description: Service name for PagerDuty + type: string + type: object + TeamNotificationRuleAttributesSlack: + description: Slack notification settings for the team + properties: + channel: + description: Channel for Slack notification + type: string + workspace: + description: Workspace for Slack notification + type: string + type: object + TeamNotificationRuleRequest: + description: Request to create or update a team notification rule + properties: + data: + $ref: '#/components/schemas/TeamNotificationRule' + required: + - data + type: object + TeamNotificationRuleResponse: + description: Team notification rule response + properties: + data: + $ref: '#/components/schemas/TeamNotificationRule' + type: object + TeamNotificationRuleType: + default: team_notification_rules + description: Team notification rule type + enum: + - team_notification_rules + example: team_notification_rules + type: string + x-enum-varnames: + - TEAM_NOTIFICATION_RULES + TeamNotificationRulesResponse: + description: Team notification rules response + properties: + data: + description: Team notification rules response data + items: + $ref: '#/components/schemas/TeamNotificationRule' + type: array + meta: + $ref: '#/components/schemas/TeamNotificationRulesResponseMeta' + type: object + TeamNotificationRulesResponseMeta: + description: Metadata that is included in the response when querying the team + notification rules + properties: + page: + $ref: '#/components/schemas/TeamNotificationRulesResponseMetaPage' + type: object + TeamNotificationRulesResponseMetaPage: + description: Metadata related to paging information that is included in the + response when querying the team notification rules + properties: + first_offset: + description: The first offset. + format: int64 + type: integer + last_offset: + description: The last offset. + format: int64 + type: integer + limit: + description: Pagination limit. + format: int64 + type: integer + next_offset: + description: The next offset. + format: int64 + nullable: true + type: integer + offset: + description: The offset. + format: int64 + type: integer + prev_offset: + description: The previous offset. + format: int64 + nullable: true + type: integer + total: + description: Total results. + format: int64 + type: integer + type: + description: Offset type. + type: string + type: object TeamOnCallResponders: description: Root object representing a team's on-call responder configuration. example: @@ -87408,6 +87545,230 @@ paths: operator: OR permissions: - teams_read + /api/v2/team/{team_id}/notification-rules: + get: + operationId: GetTeamNotificationRules + parameters: + - description: None + in: path + name: team_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamNotificationRulesResponse' + description: OK + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/APIErrorResponse' + description: API error response. + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - teams_read + summary: Get team notification rules + tags: + - Teams + x-permission: + operator: OR + permissions: + - teams_read + post: + operationId: CreateTeamNotificationRule + parameters: + - description: None + in: path + name: team_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamNotificationRuleRequest' + required: true + responses: + '201': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamNotificationRuleResponse' + description: OK + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/APIErrorResponse' + description: API error response. + '409': + content: + application/json: + schema: + $ref: '#/components/schemas/APIErrorResponse' + description: API error response. + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - teams_read + summary: Create team notification rule + tags: + - Teams + x-permission: + operator: OR + permissions: + - teams_read + /api/v2/team/{team_id}/notification-rules/{rule_id}: + delete: + operationId: DeleteTeamNotificationRule + parameters: + - description: None + in: path + name: team_id + required: true + schema: + type: string + - description: None + in: path + name: rule_id + required: true + schema: + type: string + responses: + '204': + description: No Content + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/APIErrorResponse' + description: API error response. + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - teams_read + summary: Delete team notification rule + tags: + - Teams + x-permission: + operator: OR + permissions: + - teams_read + get: + operationId: GetTeamNotificationRule + parameters: + - description: None + in: path + name: team_id + required: true + schema: + type: string + - description: None + in: path + name: rule_id + required: true + schema: + type: string + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamNotificationRuleResponse' + description: OK + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/APIErrorResponse' + description: API error response. + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - teams_read + summary: Get team notification rule + tags: + - Teams + x-permission: + operator: OR + permissions: + - teams_read + put: + operationId: UpdateTeamNotificationRule + parameters: + - description: None + in: path + name: team_id + required: true + schema: + type: string + - description: None + in: path + name: rule_id + required: true + schema: + type: string + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamNotificationRuleRequest' + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/TeamNotificationRuleResponse' + description: OK + '403': + $ref: '#/components/responses/ForbiddenResponse' + '404': + content: + application/json: + schema: + $ref: '#/components/schemas/APIErrorResponse' + description: API error response. + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: + - teams_read + summary: Update team notification rule + tags: + - Teams + x-permission: + operator: OR + permissions: + - teams_read /api/v2/team/{team_id}/permission-settings: get: description: Get all permission settings for a given team. diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index 84078e9c26..2e859a4f0f 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -24042,6 +24042,90 @@ datadog\_api\_client.v2.model.team\_links\_response module :members: :show-inheritance: +datadog\_api\_client.v2.model.team\_notification\_rule module +------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_attributes module +------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_attributes + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_attributes\_email module +-------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_attributes_email + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_attributes\_ms\_teams module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_attributes\_pagerduty module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_attributes\_slack module +-------------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_attributes_slack + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_request module +---------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_response module +----------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_response + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rule\_type module +------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.team_notification_rule_type + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rules\_response module +------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.team_notification_rules_response + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rules\_response\_meta module +------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.team_notification_rules_response_meta + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.team\_notification\_rules\_response\_meta\_page module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.team_notification_rules_response_meta_page + :members: + :show-inheritance: + datadog\_api\_client.v2.model.team\_on\_call\_responders module --------------------------------------------------------------- diff --git a/examples/v2/teams/CreateTeamNotificationRule.py b/examples/v2/teams/CreateTeamNotificationRule.py new file mode 100644 index 0000000000..5d629fd274 --- /dev/null +++ b/examples/v2/teams/CreateTeamNotificationRule.py @@ -0,0 +1,38 @@ +""" +Create team notification rule returns "OK" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.teams_api import TeamsApi +from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule +from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes +from datadog_api_client.v2.model.team_notification_rule_attributes_email import TeamNotificationRuleAttributesEmail +from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack +from datadog_api_client.v2.model.team_notification_rule_request import TeamNotificationRuleRequest +from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType + +# there is a valid "dd_team" in the system +DD_TEAM_DATA_ID = environ["DD_TEAM_DATA_ID"] + +body = TeamNotificationRuleRequest( + data=TeamNotificationRule( + type=TeamNotificationRuleType.TEAM_NOTIFICATION_RULES, + attributes=TeamNotificationRuleAttributes( + email=TeamNotificationRuleAttributesEmail( + enabled=True, + ), + slack=TeamNotificationRuleAttributesSlack( + workspace="Datadog", + channel="aaa-omg-ops", + ), + ), + ), +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = TeamsApi(api_client) + response = api_instance.create_team_notification_rule(team_id=DD_TEAM_DATA_ID, body=body) + + print(response) diff --git a/examples/v2/teams/DeleteTeamNotificationRule.py b/examples/v2/teams/DeleteTeamNotificationRule.py new file mode 100644 index 0000000000..09000cf891 --- /dev/null +++ b/examples/v2/teams/DeleteTeamNotificationRule.py @@ -0,0 +1,21 @@ +""" +Delete team notification rule returns "No Content" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.teams_api import TeamsApi + +# there is a valid "dd_team" in the system +DD_TEAM_DATA_ID = environ["DD_TEAM_DATA_ID"] + +# there is a valid "team_notification_rule" in the system +TEAM_NOTIFICATION_RULE_DATA_ID = environ["TEAM_NOTIFICATION_RULE_DATA_ID"] + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = TeamsApi(api_client) + api_instance.delete_team_notification_rule( + team_id=DD_TEAM_DATA_ID, + rule_id=TEAM_NOTIFICATION_RULE_DATA_ID, + ) diff --git a/examples/v2/teams/GetTeamNotificationRule.py b/examples/v2/teams/GetTeamNotificationRule.py new file mode 100644 index 0000000000..6f75d03e7b --- /dev/null +++ b/examples/v2/teams/GetTeamNotificationRule.py @@ -0,0 +1,23 @@ +""" +Get team notification rule returns "OK" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.teams_api import TeamsApi + +# there is a valid "dd_team" in the system +DD_TEAM_DATA_ID = environ["DD_TEAM_DATA_ID"] + +# there is a valid "team_notification_rule" in the system +TEAM_NOTIFICATION_RULE_DATA_ID = environ["TEAM_NOTIFICATION_RULE_DATA_ID"] + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = TeamsApi(api_client) + response = api_instance.get_team_notification_rule( + team_id=DD_TEAM_DATA_ID, + rule_id=TEAM_NOTIFICATION_RULE_DATA_ID, + ) + + print(response) diff --git a/examples/v2/teams/GetTeamNotificationRules.py b/examples/v2/teams/GetTeamNotificationRules.py new file mode 100644 index 0000000000..a78d50c82d --- /dev/null +++ b/examples/v2/teams/GetTeamNotificationRules.py @@ -0,0 +1,19 @@ +""" +Get team notification rules returns "OK" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.teams_api import TeamsApi + +# there is a valid "dd_team" in the system +DD_TEAM_DATA_ID = environ["DD_TEAM_DATA_ID"] + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = TeamsApi(api_client) + response = api_instance.get_team_notification_rules( + team_id=DD_TEAM_DATA_ID, + ) + + print(response) diff --git a/examples/v2/teams/UpdateTeamNotificationRule.py b/examples/v2/teams/UpdateTeamNotificationRule.py new file mode 100644 index 0000000000..33e4395e67 --- /dev/null +++ b/examples/v2/teams/UpdateTeamNotificationRule.py @@ -0,0 +1,46 @@ +""" +Update team notification rule returns "OK" response +""" + +from os import environ +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.teams_api import TeamsApi +from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule +from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes +from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import ( + TeamNotificationRuleAttributesPagerduty, +) +from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack +from datadog_api_client.v2.model.team_notification_rule_request import TeamNotificationRuleRequest +from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType + +# there is a valid "dd_team" in the system +DD_TEAM_DATA_ID = environ["DD_TEAM_DATA_ID"] + +# there is a valid "team_notification_rule" in the system +TEAM_NOTIFICATION_RULE_DATA_ID = environ["TEAM_NOTIFICATION_RULE_DATA_ID"] + +body = TeamNotificationRuleRequest( + data=TeamNotificationRule( + type=TeamNotificationRuleType.TEAM_NOTIFICATION_RULES, + id=TEAM_NOTIFICATION_RULE_DATA_ID, + attributes=TeamNotificationRuleAttributes( + pagerduty=TeamNotificationRuleAttributesPagerduty( + service_name="Datadog-prod", + ), + slack=TeamNotificationRuleAttributesSlack( + workspace="Datadog", + channel="aaa-governance-ops", + ), + ), + ), +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = TeamsApi(api_client) + response = api_instance.update_team_notification_rule( + team_id=DD_TEAM_DATA_ID, rule_id=TEAM_NOTIFICATION_RULE_DATA_ID, body=body + ) + + print(response) diff --git a/src/datadog_api_client/v2/api/teams_api.py b/src/datadog_api_client/v2/api/teams_api.py index 2cdd66167e..e5b6af700e 100644 --- a/src/datadog_api_client/v2/api/teams_api.py +++ b/src/datadog_api_client/v2/api/teams_api.py @@ -44,6 +44,9 @@ from datadog_api_client.v2.model.user_team_response import UserTeamResponse from datadog_api_client.v2.model.user_team_request import UserTeamRequest from datadog_api_client.v2.model.user_team_update_request import UserTeamUpdateRequest +from datadog_api_client.v2.model.team_notification_rules_response import TeamNotificationRulesResponse +from datadog_api_client.v2.model.team_notification_rule_response import TeamNotificationRuleResponse +from datadog_api_client.v2.model.team_notification_rule_request import TeamNotificationRuleRequest from datadog_api_client.v2.model.team_permission_settings_response import TeamPermissionSettingsResponse from datadog_api_client.v2.model.team_permission_setting_response import TeamPermissionSettingResponse from datadog_api_client.v2.model.team_permission_setting_update_request import TeamPermissionSettingUpdateRequest @@ -197,6 +200,32 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._create_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules", + "operation_id": "create_team_notification_rule", + "http_method": "POST", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={"accept": ["application/json"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._delete_team_endpoint = _Endpoint( settings={ "response_type": None, @@ -298,6 +327,35 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._delete_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": None, + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules/{rule_id}", + "operation_id": "delete_team_notification_rule", + "http_method": "DELETE", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["*/*"], + }, + api_client=api_client, + ) + self._get_team_endpoint = _Endpoint( settings={ "response_type": (TeamResponse,), @@ -439,6 +497,58 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._get_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules/{rule_id}", + "operation_id": "get_team_notification_rule", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + + self._get_team_notification_rules_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRulesResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules", + "operation_id": "get_team_notification_rules", + "http_method": "GET", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + }, + headers_map={ + "accept": ["application/json"], + }, + api_client=api_client, + ) + self._get_team_permission_settings_endpoint = _Endpoint( settings={ "response_type": (TeamPermissionSettingsResponse,), @@ -851,6 +961,38 @@ def __init__(self, api_client=None): api_client=api_client, ) + self._update_team_notification_rule_endpoint = _Endpoint( + settings={ + "response_type": (TeamNotificationRuleResponse,), + "auth": ["apiKeyAuth", "appKeyAuth", "AuthZ"], + "endpoint_path": "/api/v2/team/{team_id}/notification-rules/{rule_id}", + "operation_id": "update_team_notification_rule", + "http_method": "PUT", + "version": "v2", + }, + params_map={ + "team_id": { + "required": True, + "openapi_types": (str,), + "attribute": "team_id", + "location": "path", + }, + "rule_id": { + "required": True, + "openapi_types": (str,), + "attribute": "rule_id", + "location": "path", + }, + "body": { + "required": True, + "openapi_types": (TeamNotificationRuleRequest,), + "location": "body", + }, + }, + headers_map={"accept": ["application/json"], "content_type": ["application/json"]}, + api_client=api_client, + ) + self._update_team_permission_setting_endpoint = _Endpoint( settings={ "response_type": (TeamPermissionSettingResponse,), @@ -1001,6 +1143,25 @@ def create_team_membership( return self._create_team_membership_endpoint.call_with_http_info(**kwargs) + def create_team_notification_rule( + self, + team_id: str, + body: TeamNotificationRuleRequest, + ) -> TeamNotificationRuleResponse: + """Create team notification rule. + + :param team_id: None + :type team_id: str + :type body: TeamNotificationRuleRequest + :rtype: TeamNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["body"] = body + + return self._create_team_notification_rule_endpoint.call_with_http_info(**kwargs) + def delete_team( self, team_id: str, @@ -1080,6 +1241,26 @@ def delete_team_membership( return self._delete_team_membership_endpoint.call_with_http_info(**kwargs) + def delete_team_notification_rule( + self, + team_id: str, + rule_id: str, + ) -> None: + """Delete team notification rule. + + :param team_id: None + :type team_id: str + :param rule_id: None + :type rule_id: str + :rtype: None + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["rule_id"] = rule_id + + return self._delete_team_notification_rule_endpoint.call_with_http_info(**kwargs) + def get_team( self, team_id: str, @@ -1249,6 +1430,41 @@ def get_team_memberships_with_pagination( } return endpoint.call_with_http_info_paginated(pagination) + def get_team_notification_rule( + self, + team_id: str, + rule_id: str, + ) -> TeamNotificationRuleResponse: + """Get team notification rule. + + :param team_id: None + :type team_id: str + :param rule_id: None + :type rule_id: str + :rtype: TeamNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["rule_id"] = rule_id + + return self._get_team_notification_rule_endpoint.call_with_http_info(**kwargs) + + def get_team_notification_rules( + self, + team_id: str, + ) -> TeamNotificationRulesResponse: + """Get team notification rules. + + :param team_id: None + :type team_id: str + :rtype: TeamNotificationRulesResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + return self._get_team_notification_rules_endpoint.call_with_http_info(**kwargs) + def get_team_permission_settings( self, team_id: str, @@ -1852,6 +2068,30 @@ def update_team_membership( return self._update_team_membership_endpoint.call_with_http_info(**kwargs) + def update_team_notification_rule( + self, + team_id: str, + rule_id: str, + body: TeamNotificationRuleRequest, + ) -> TeamNotificationRuleResponse: + """Update team notification rule. + + :param team_id: None + :type team_id: str + :param rule_id: None + :type rule_id: str + :type body: TeamNotificationRuleRequest + :rtype: TeamNotificationRuleResponse + """ + kwargs: Dict[str, Any] = {} + kwargs["team_id"] = team_id + + kwargs["rule_id"] = rule_id + + kwargs["body"] = body + + return self._update_team_notification_rule_endpoint.call_with_http_info(**kwargs) + def update_team_permission_setting( self, team_id: str, diff --git a/src/datadog_api_client/v2/model/team_notification_rule.py b/src/datadog_api_client/v2/model/team_notification_rule.py new file mode 100644 index 0000000000..3e238b6596 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule.py @@ -0,0 +1,63 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes + from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType + + +class TeamNotificationRule(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes + from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType + + return { + "attributes": (TeamNotificationRuleAttributes,), + "id": (str,), + "type": (TeamNotificationRuleType,), + } + + attribute_map = { + "attributes": "attributes", + "id": "id", + "type": "type", + } + + def __init__( + self_, + attributes: TeamNotificationRuleAttributes, + type: TeamNotificationRuleType, + id: Union[str, UnsetType] = unset, + **kwargs, + ): + """ + Team notification rule + + :param attributes: Team notification rule attributes + :type attributes: TeamNotificationRuleAttributes + + :param id: The identifier of the team notification rule + :type id: str, optional + + :param type: Team notification rule type + :type type: TeamNotificationRuleType + """ + if id is not unset: + kwargs["id"] = id + super().__init__(kwargs) + + self_.attributes = attributes + self_.type = type diff --git a/src/datadog_api_client/v2/model/team_notification_rule_attributes.py b/src/datadog_api_client/v2/model/team_notification_rule_attributes.py new file mode 100644 index 0000000000..dd2aff8f73 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_attributes.py @@ -0,0 +1,88 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule_attributes_email import TeamNotificationRuleAttributesEmail + from datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams import ( + TeamNotificationRuleAttributesMsTeams, + ) + from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import ( + TeamNotificationRuleAttributesPagerduty, + ) + from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack + + +class TeamNotificationRuleAttributes(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule_attributes_email import ( + TeamNotificationRuleAttributesEmail, + ) + from datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams import ( + TeamNotificationRuleAttributesMsTeams, + ) + from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import ( + TeamNotificationRuleAttributesPagerduty, + ) + from datadog_api_client.v2.model.team_notification_rule_attributes_slack import ( + TeamNotificationRuleAttributesSlack, + ) + + return { + "email": (TeamNotificationRuleAttributesEmail,), + "ms_teams": (TeamNotificationRuleAttributesMsTeams,), + "pagerduty": (TeamNotificationRuleAttributesPagerduty,), + "slack": (TeamNotificationRuleAttributesSlack,), + } + + attribute_map = { + "email": "email", + "ms_teams": "ms_teams", + "pagerduty": "pagerduty", + "slack": "slack", + } + + def __init__( + self_, + email: Union[TeamNotificationRuleAttributesEmail, UnsetType] = unset, + ms_teams: Union[TeamNotificationRuleAttributesMsTeams, UnsetType] = unset, + pagerduty: Union[TeamNotificationRuleAttributesPagerduty, UnsetType] = unset, + slack: Union[TeamNotificationRuleAttributesSlack, UnsetType] = unset, + **kwargs, + ): + """ + Team notification rule attributes + + :param email: Email notification settings for the team + :type email: TeamNotificationRuleAttributesEmail, optional + + :param ms_teams: MS Teams notification settings for the team + :type ms_teams: TeamNotificationRuleAttributesMsTeams, optional + + :param pagerduty: PagerDuty notification settings for the team + :type pagerduty: TeamNotificationRuleAttributesPagerduty, optional + + :param slack: Slack notification settings for the team + :type slack: TeamNotificationRuleAttributesSlack, optional + """ + if email is not unset: + kwargs["email"] = email + if ms_teams is not unset: + kwargs["ms_teams"] = ms_teams + if pagerduty is not unset: + kwargs["pagerduty"] = pagerduty + if slack is not unset: + kwargs["slack"] = slack + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rule_attributes_email.py b/src/datadog_api_client/v2/model/team_notification_rule_attributes_email.py new file mode 100644 index 0000000000..6d734cc25d --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_attributes_email.py @@ -0,0 +1,36 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +class TeamNotificationRuleAttributesEmail(ModelNormal): + @cached_property + def openapi_types(_): + return { + "enabled": (bool,), + } + + attribute_map = { + "enabled": "enabled", + } + + def __init__(self_, enabled: Union[bool, UnsetType] = unset, **kwargs): + """ + Email notification settings for the team + + :param enabled: Flag indicating email notification + :type enabled: bool, optional + """ + if enabled is not unset: + kwargs["enabled"] = enabled + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.py b/src/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.py new file mode 100644 index 0000000000..7d600ad076 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_attributes_ms_teams.py @@ -0,0 +1,36 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +class TeamNotificationRuleAttributesMsTeams(ModelNormal): + @cached_property + def openapi_types(_): + return { + "connector_name": (str,), + } + + attribute_map = { + "connector_name": "connector_name", + } + + def __init__(self_, connector_name: Union[str, UnsetType] = unset, **kwargs): + """ + MS Teams notification settings for the team + + :param connector_name: Handle for MS Teams + :type connector_name: str, optional + """ + if connector_name is not unset: + kwargs["connector_name"] = connector_name + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.py b/src/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.py new file mode 100644 index 0000000000..486e6c7795 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_attributes_pagerduty.py @@ -0,0 +1,36 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +class TeamNotificationRuleAttributesPagerduty(ModelNormal): + @cached_property + def openapi_types(_): + return { + "service_name": (str,), + } + + attribute_map = { + "service_name": "service_name", + } + + def __init__(self_, service_name: Union[str, UnsetType] = unset, **kwargs): + """ + PagerDuty notification settings for the team + + :param service_name: Service name for PagerDuty + :type service_name: str, optional + """ + if service_name is not unset: + kwargs["service_name"] = service_name + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py b/src/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py new file mode 100644 index 0000000000..557de22ea6 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_attributes_slack.py @@ -0,0 +1,43 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +class TeamNotificationRuleAttributesSlack(ModelNormal): + @cached_property + def openapi_types(_): + return { + "channel": (str,), + "workspace": (str,), + } + + attribute_map = { + "channel": "channel", + "workspace": "workspace", + } + + def __init__(self_, channel: Union[str, UnsetType] = unset, workspace: Union[str, UnsetType] = unset, **kwargs): + """ + Slack notification settings for the team + + :param channel: Channel for Slack notification + :type channel: str, optional + + :param workspace: Workspace for Slack notification + :type workspace: str, optional + """ + if channel is not unset: + kwargs["channel"] = channel + if workspace is not unset: + kwargs["workspace"] = workspace + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rule_request.py b/src/datadog_api_client/v2/model/team_notification_rule_request.py new file mode 100644 index 0000000000..68ebe10efc --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_request.py @@ -0,0 +1,40 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + + +class TeamNotificationRuleRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + + return { + "data": (TeamNotificationRule,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: TeamNotificationRule, **kwargs): + """ + Request to create or update a team notification rule + + :param data: Team notification rule + :type data: TeamNotificationRule + """ + super().__init__(kwargs) + + self_.data = data diff --git a/src/datadog_api_client/v2/model/team_notification_rule_response.py b/src/datadog_api_client/v2/model/team_notification_rule_response.py new file mode 100644 index 0000000000..c110388f20 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_response.py @@ -0,0 +1,42 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + + +class TeamNotificationRuleResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + + return { + "data": (TeamNotificationRule,), + } + + attribute_map = { + "data": "data", + } + + def __init__(self_, data: Union[TeamNotificationRule, UnsetType] = unset, **kwargs): + """ + Team notification rule response + + :param data: Team notification rule + :type data: TeamNotificationRule, optional + """ + if data is not unset: + kwargs["data"] = data + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rule_type.py b/src/datadog_api_client/v2/model/team_notification_rule_type.py new file mode 100644 index 0000000000..71848240cf --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rule_type.py @@ -0,0 +1,35 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + + +from datadog_api_client.model_utils import ( + ModelSimple, + cached_property, +) + +from typing import ClassVar + + +class TeamNotificationRuleType(ModelSimple): + """ + Team notification rule type + + :param value: If omitted defaults to "team_notification_rules". Must be one of ["team_notification_rules"]. + :type value: str + """ + + allowed_values = { + "team_notification_rules", + } + TEAM_NOTIFICATION_RULES: ClassVar["TeamNotificationRuleType"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +TeamNotificationRuleType.TEAM_NOTIFICATION_RULES = TeamNotificationRuleType("team_notification_rules") diff --git a/src/datadog_api_client/v2/model/team_notification_rules_response.py b/src/datadog_api_client/v2/model/team_notification_rules_response.py new file mode 100644 index 0000000000..ce2eb2620f --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rules_response.py @@ -0,0 +1,56 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import List, Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + from datadog_api_client.v2.model.team_notification_rules_response_meta import TeamNotificationRulesResponseMeta + + +class TeamNotificationRulesResponse(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule + from datadog_api_client.v2.model.team_notification_rules_response_meta import TeamNotificationRulesResponseMeta + + return { + "data": ([TeamNotificationRule],), + "meta": (TeamNotificationRulesResponseMeta,), + } + + attribute_map = { + "data": "data", + "meta": "meta", + } + + def __init__( + self_, + data: Union[List[TeamNotificationRule], UnsetType] = unset, + meta: Union[TeamNotificationRulesResponseMeta, UnsetType] = unset, + **kwargs, + ): + """ + Team notification rules response + + :param data: Team notification rules response data + :type data: [TeamNotificationRule], optional + + :param meta: Metadata that is included in the response when querying the team notification rules + :type meta: TeamNotificationRulesResponseMeta, optional + """ + if data is not unset: + kwargs["data"] = data + if meta is not unset: + kwargs["meta"] = meta + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rules_response_meta.py b/src/datadog_api_client/v2/model/team_notification_rules_response_meta.py new file mode 100644 index 0000000000..b789a41607 --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rules_response_meta.py @@ -0,0 +1,46 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + unset, + UnsetType, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.team_notification_rules_response_meta_page import ( + TeamNotificationRulesResponseMetaPage, + ) + + +class TeamNotificationRulesResponseMeta(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.team_notification_rules_response_meta_page import ( + TeamNotificationRulesResponseMetaPage, + ) + + return { + "page": (TeamNotificationRulesResponseMetaPage,), + } + + attribute_map = { + "page": "page", + } + + def __init__(self_, page: Union[TeamNotificationRulesResponseMetaPage, UnsetType] = unset, **kwargs): + """ + Metadata that is included in the response when querying the team notification rules + + :param page: Metadata related to paging information that is included in the response when querying the team notification rules + :type page: TeamNotificationRulesResponseMetaPage, optional + """ + if page is not unset: + kwargs["page"] = page + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py b/src/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py new file mode 100644 index 0000000000..6a3f16f5af --- /dev/null +++ b/src/datadog_api_client/v2/model/team_notification_rules_response_meta_page.py @@ -0,0 +1,97 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import Union + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, + none_type, + unset, + UnsetType, +) + + +class TeamNotificationRulesResponseMetaPage(ModelNormal): + @cached_property + def openapi_types(_): + return { + "first_offset": (int,), + "last_offset": (int,), + "limit": (int,), + "next_offset": (int, none_type), + "offset": (int,), + "prev_offset": (int, none_type), + "total": (int,), + "type": (str,), + } + + attribute_map = { + "first_offset": "first_offset", + "last_offset": "last_offset", + "limit": "limit", + "next_offset": "next_offset", + "offset": "offset", + "prev_offset": "prev_offset", + "total": "total", + "type": "type", + } + + def __init__( + self_, + first_offset: Union[int, UnsetType] = unset, + last_offset: Union[int, UnsetType] = unset, + limit: Union[int, UnsetType] = unset, + next_offset: Union[int, none_type, UnsetType] = unset, + offset: Union[int, UnsetType] = unset, + prev_offset: Union[int, none_type, UnsetType] = unset, + total: Union[int, UnsetType] = unset, + type: Union[str, UnsetType] = unset, + **kwargs, + ): + """ + Metadata related to paging information that is included in the response when querying the team notification rules + + :param first_offset: The first offset. + :type first_offset: int, optional + + :param last_offset: The last offset. + :type last_offset: int, optional + + :param limit: Pagination limit. + :type limit: int, optional + + :param next_offset: The next offset. + :type next_offset: int, none_type, optional + + :param offset: The offset. + :type offset: int, optional + + :param prev_offset: The previous offset. + :type prev_offset: int, none_type, optional + + :param total: Total results. + :type total: int, optional + + :param type: Offset type. + :type type: str, optional + """ + if first_offset is not unset: + kwargs["first_offset"] = first_offset + if last_offset is not unset: + kwargs["last_offset"] = last_offset + if limit is not unset: + kwargs["limit"] = limit + if next_offset is not unset: + kwargs["next_offset"] = next_offset + if offset is not unset: + kwargs["offset"] = offset + if prev_offset is not unset: + kwargs["prev_offset"] = prev_offset + if total is not unset: + kwargs["total"] = total + if type is not unset: + kwargs["type"] = type + super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index 91f6658a33..39ee6ab446 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -4789,6 +4789,20 @@ from datadog_api_client.v2.model.team_link_response import TeamLinkResponse from datadog_api_client.v2.model.team_link_type import TeamLinkType from datadog_api_client.v2.model.team_links_response import TeamLinksResponse +from datadog_api_client.v2.model.team_notification_rule import TeamNotificationRule +from datadog_api_client.v2.model.team_notification_rule_attributes import TeamNotificationRuleAttributes +from datadog_api_client.v2.model.team_notification_rule_attributes_email import TeamNotificationRuleAttributesEmail +from datadog_api_client.v2.model.team_notification_rule_attributes_ms_teams import TeamNotificationRuleAttributesMsTeams +from datadog_api_client.v2.model.team_notification_rule_attributes_pagerduty import ( + TeamNotificationRuleAttributesPagerduty, +) +from datadog_api_client.v2.model.team_notification_rule_attributes_slack import TeamNotificationRuleAttributesSlack +from datadog_api_client.v2.model.team_notification_rule_request import TeamNotificationRuleRequest +from datadog_api_client.v2.model.team_notification_rule_response import TeamNotificationRuleResponse +from datadog_api_client.v2.model.team_notification_rule_type import TeamNotificationRuleType +from datadog_api_client.v2.model.team_notification_rules_response import TeamNotificationRulesResponse +from datadog_api_client.v2.model.team_notification_rules_response_meta import TeamNotificationRulesResponseMeta +from datadog_api_client.v2.model.team_notification_rules_response_meta_page import TeamNotificationRulesResponseMetaPage from datadog_api_client.v2.model.team_on_call_responders import TeamOnCallResponders from datadog_api_client.v2.model.team_on_call_responders_data import TeamOnCallRespondersData from datadog_api_client.v2.model.team_on_call_responders_data_relationships import TeamOnCallRespondersDataRelationships @@ -8597,6 +8611,18 @@ "TeamLinkResponse", "TeamLinkType", "TeamLinksResponse", + "TeamNotificationRule", + "TeamNotificationRuleAttributes", + "TeamNotificationRuleAttributesEmail", + "TeamNotificationRuleAttributesMsTeams", + "TeamNotificationRuleAttributesPagerduty", + "TeamNotificationRuleAttributesSlack", + "TeamNotificationRuleRequest", + "TeamNotificationRuleResponse", + "TeamNotificationRuleType", + "TeamNotificationRulesResponse", + "TeamNotificationRulesResponseMeta", + "TeamNotificationRulesResponseMetaPage", "TeamOnCallResponders", "TeamOnCallRespondersData", "TeamOnCallRespondersDataRelationships", diff --git a/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.frozen new file mode 100644 index 0000000000..f2b43c7665 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:27:22.080Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.yaml new file mode 100644 index 0000000000..b5b105aff2 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_api_error_response_response.yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-416b8af9ae1d2bbe","name":"test-name-416b8af9ae1d2bbe"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44","type":"team","attributes":{"avatar":null,"banner":5,"created_at":"2025-12-23T15:27:22.204713+00:00","description":null,"handle":"test-handle-416b8af9ae1d2bbe","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:27:22.204713+00:00","name":"test-name-416b8af9ae1d2bbe","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/notification-rules + response: + body: + string: '{"data":{"id":"56627a0f-4c41-491d-b789-14d660c391ee","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44/notification-rules + response: + body: + string: '{"errors":[{"status":"409","title":"Conflict","detail":"notification + rule already exists for this team"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 409 + message: Conflict +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/f3b7fcd4-f37c-4e11-b288-f6cfa4b0df44 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.frozen new file mode 100644 index 0000000000..6401723960 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:28:02.140Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.yaml new file mode 100644 index 0000000000..ba61b41669 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_team_notification_rule_returns_ok_response.yaml @@ -0,0 +1,52 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-72b192d95e937252","name":"test-name-72b192d95e937252"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"04eae0c8-e225-4f2c-97ec-39dab13dfc38","type":"team","attributes":{"avatar":null,"banner":13,"created_at":"2025-12-23T15:28:02.268616+00:00","description":null,"handle":"test-handle-72b192d95e937252","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:28:02.268616+00:00","name":"test-name-72b192d95e937252","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38/notification-rules + response: + body: + string: '{"data":{"id":"bba76d10-a5c6-4cb5-ba1a-5a9145f2b364","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/04eae0c8-e225-4f2c-97ec-39dab13dfc38 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.frozen new file mode 100644 index 0000000000..1cedb251b0 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.frozen @@ -0,0 +1 @@ +2025-12-23T16:10:38.852Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.yaml new file mode 100644 index 0000000000..d38e3e7da0 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_api_error_response_response.yaml @@ -0,0 +1,69 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-7ecc01265306da71","name":"test-name-7ecc01265306da71"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"9bd7798e-a955-48e0-9a36-13820e1ff74b","type":"team","attributes":{"avatar":null,"banner":2,"created_at":"2025-12-23T16:10:38.996803+00:00","description":null,"handle":"test-handle-7ecc01265306da71","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T16:10:38.996803+00:00","name":"test-name-7ecc01265306da71","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/notification-rules + response: + body: + string: '{"data":{"id":"87b5e6e4-000d-4d9d-bb1c-bc62728a8ab8","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b/notification-rules/3d031bb2-e1da-4d34-a670-1b5557b032c9 + response: + body: + string: '{"errors":[{"status":"404","detail":"rule ID 3d031bb2-e1da-4d34-a670-1b5557b032c9 + was not found in team ID 9bd7798e-a955-48e0-9a36-13820e1ff74b"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 404 + message: Not Found +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/9bd7798e-a955-48e0-9a36-13820e1ff74b + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.frozen new file mode 100644 index 0000000000..6552fdc24f --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:28:45.586Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.yaml new file mode 100644 index 0000000000..5d8e835863 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_team_notification_rule_returns_no_content_response.yaml @@ -0,0 +1,66 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-4f30392b8132329e","name":"test-name-4f30392b8132329e"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"204d172a-83e4-420c-a840-d914be2cd5ed","type":"team","attributes":{"avatar":null,"banner":4,"created_at":"2025-12-23T15:28:45.710450+00:00","description":null,"handle":"test-handle-4f30392b8132329e","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:28:45.710450+00:00","name":"test-name-4f30392b8132329e","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/notification-rules + response: + body: + string: '{"data":{"id":"d4abbaab-11b3-41ea-a6e3-ed366522a39e","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed/notification-rules/d4abbaab-11b3-41ea-a6e3-ed366522a39e + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/204d172a-83e4-420c-a840-d914be2cd5ed + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.frozen new file mode 100644 index 0000000000..6113189ccb --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:29:05.686Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.yaml new file mode 100644 index 0000000000..a71b68de5c --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_api_error_response_response.yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-903f29be232384f8","name":"test-name-903f29be232384f8"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"54fb1795-4bee-4e8f-9ccd-1aca53d24f8e","type":"team","attributes":{"avatar":null,"banner":14,"created_at":"2025-12-23T15:29:05.802966+00:00","description":null,"handle":"test-handle-903f29be232384f8","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:29:05.802966+00:00","name":"test-name-903f29be232384f8","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/notification-rules + response: + body: + string: '{"data":{"id":"51f01e40-e075-4c25-8878-9fd3f7800770","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e/notification-rules/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e + response: + body: + string: '{"errors":[{"status":"404","title":"Not Found","detail":"rule not found"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 404 + message: Not Found +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/54fb1795-4bee-4e8f-9ccd-1aca53d24f8e + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.frozen new file mode 100644 index 0000000000..9ed298dca5 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:29:22.965Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.yaml new file mode 100644 index 0000000000..577744fe4f --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rule_returns_ok_response.yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-ee0eead53fe855d3","name":"test-name-ee0eead53fe855d3"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"a7145aa7-d043-4f4d-bd45-fd02669b47d7","type":"team","attributes":{"avatar":null,"banner":14,"created_at":"2025-12-23T15:29:23.130502+00:00","description":null,"handle":"test-handle-ee0eead53fe855d3","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:29:23.130502+00:00","name":"test-name-ee0eead53fe855d3","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/notification-rules + response: + body: + string: '{"data":{"id":"68717b60-b443-49ac-b7ca-75664cb53c29","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7/notification-rules/68717b60-b443-49ac-b7ca-75664cb53c29 + response: + body: + string: '{"data":{"id":"68717b60-b443-49ac-b7ca-75664cb53c29","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/a7145aa7-d043-4f4d-bd45-fd02669b47d7 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.frozen new file mode 100644 index 0000000000..754f3a36db --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:29:44.007Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.yaml new file mode 100644 index 0000000000..6d29df5d9c --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_team_notification_rules_returns_ok_response.yaml @@ -0,0 +1,68 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-470a68e726826798","name":"test-name-470a68e726826798"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"a3101ed3-6329-48f6-86fa-17f3680205a3","type":"team","attributes":{"avatar":null,"banner":14,"created_at":"2025-12-23T15:29:44.163043+00:00","description":null,"handle":"test-handle-470a68e726826798","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:29:44.163043+00:00","name":"test-name-470a68e726826798","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/notification-rules + response: + body: + string: '{"data":{"id":"136542b0-6555-4240-bcc9-5d040c17cd54","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3/notification-rules + response: + body: + string: '{"data":[{"id":"136542b0-6555-4240-bcc9-5d040c17cd54","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}],"meta":{"page":{"type":"offset_limit","offset":0,"limit":100,"total":1,"first_offset":0,"prev_offset":null,"next_offset":null,"last_offset":0}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/a3101ed3-6329-48f6-86fa-17f3680205a3 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.frozen b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.frozen new file mode 100644 index 0000000000..fa21b8c82e --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.frozen @@ -0,0 +1 @@ +2025-12-23T16:10:18.143Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.yaml b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.yaml new file mode 100644 index 0000000000..c012c4be8f --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_api_error_response_response.yaml @@ -0,0 +1,71 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-191ec67f8f79c1b1","name":"test-name-191ec67f8f79c1b1"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"30484b70-7506-41b9-b1c6-4fcf6c13e5e4","type":"team","attributes":{"avatar":null,"banner":2,"created_at":"2025-12-23T16:10:18.284603+00:00","description":null,"handle":"test-handle-191ec67f8f79c1b1","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T16:10:18.284603+00:00","name":"test-name-191ec67f8f79c1b1","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/notification-rules + response: + body: + string: '{"data":{"id":"5b80babd-fa31-4ab5-b180-5e36af751704","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"pagerduty":{"service_name":"Datadog-prod"},"slack":{"channel":"aaa-governance-ops","workspace":"Datadog"}},"id":"30484b70-7506-41b9-b1c6-4fcf6c13e5e4","type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4/notification-rules/3d031bb2-e1da-4d34-a670-1b5557b032c9 + response: + body: + string: '{"errors":[{"status":"409","title":"Conflict","detail":"rule id does + not match with team''s rule id"}]}' + headers: + content-type: + - application/vnd.api+json + status: + code: 409 + message: Conflict +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/30484b70-7506-41b9-b1c6-4fcf6c13e5e4 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.frozen new file mode 100644 index 0000000000..edbc02f6ec --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-12-23T15:30:20.002Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.yaml new file mode 100644 index 0000000000..42fd3c050b --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_team_notification_rule_returns_ok_response.yaml @@ -0,0 +1,70 @@ +interactions: +- request: + body: '{"data":{"attributes":{"handle":"test-handle-129c4638a0cbf5ab","name":"test-name-129c4638a0cbf5ab"},"type":"team"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team + response: + body: + string: '{"data":{"id":"b103bc00-af0b-48ee-ad0a-2cae69341320","type":"team","attributes":{"avatar":null,"banner":8,"created_at":"2025-12-23T15:30:20.131472+00:00","description":null,"handle":"test-handle-129c4638a0cbf5ab","hidden_modules":null,"is_managed":false,"link_count":0,"modified_at":"2025-12-23T15:30:20.131472+00:00","name":"test-name-129c4638a0cbf5ab","summary":null,"user_count":0,"visible_modules":null},"relationships":{"team_links":{"data":[],"links":{"related":"/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/links"}},"user_team_permissions":{"data":null,"links":{"related":"/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/permission-settings"}}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"email":{"enabled":true},"slack":{"channel":"aaa-omg-ops","workspace":"Datadog"}},"type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/notification-rules + response: + body: + string: '{"data":{"id":"5bff55f5-6777-4494-a2bd-23e0a6a3d751","type":"team_notification_rules","attributes":{"email":{"enabled":true},"slack":{"workspace":"Datadog","channel":"aaa-omg-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 201 + message: Created +- request: + body: '{"data":{"attributes":{"pagerduty":{"service_name":"Datadog-prod"},"slack":{"channel":"aaa-governance-ops","workspace":"Datadog"}},"id":"5bff55f5-6777-4494-a2bd-23e0a6a3d751","type":"team_notification_rules"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320/notification-rules/5bff55f5-6777-4494-a2bd-23e0a6a3d751 + response: + body: + string: '{"data":{"id":"5bff55f5-6777-4494-a2bd-23e0a6a3d751","type":"team_notification_rules","attributes":{"pagerduty":{"service_name":"Datadog-prod"},"slack":{"workspace":"Datadog","channel":"aaa-governance-ops"}}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/team/b103bc00-af0b-48ee-ad0a-2cae69341320 + response: + body: + string: '' + headers: {} + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/features/given.json b/tests/v2/features/given.json index 7b4bb83964..aa08181879 100644 --- a/tests/v2/features/given.json +++ b/tests/v2/features/given.json @@ -1256,6 +1256,22 @@ "tag": "Teams", "operationId": "CreateTeamMembership" }, + { + "parameters": [ + { + "name": "team_id", + "source": "dd_team.data.id" + }, + { + "name": "body", + "value": "{\n \"data\": {\n \"type\": \"team_notification_rules\",\n \"attributes\": {\n \"email\": {\n \"enabled\": true\n },\n \"slack\": {\n \"workspace\": \"Datadog\",\n \"channel\": \"aaa-omg-ops\"\n }\n }\n }\n}" + } + ], + "step": "there is a valid \"team_notification_rule\" in the system", + "key": "team_notification_rule", + "tag": "Teams", + "operationId": "CreateTeamNotificationRule" + }, { "parameters": [ { diff --git a/tests/v2/features/teams.feature b/tests/v2/features/teams.feature index 41b57b1474..722cc22c40 100644 --- a/tests/v2/features/teams.feature +++ b/tests/v2/features/teams.feature @@ -147,6 +147,25 @@ Feature: Teams And the response "data.data[0].relationships.connected_team.data.id" is equal to "@MyGitHubAccount/my-team-name" And the response "data.data[0].type" is equal to "team_connection" + @team:DataDog/aaa-omg + Scenario: Create team notification rule returns "API error response." response + Given new "CreateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And there is a valid "team_notification_rule" in the system + And body with value {"data": {"type": "team_notification_rules", "attributes": {"email": {"enabled": true}, "slack": {"workspace": "Datadog", "channel": "aaa-omg-ops"}}}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Create team notification rule returns "OK" response + Given new "CreateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And body with value {"data": {"type": "team_notification_rules", "attributes": {"email": {"enabled": true}, "slack": {"workspace": "Datadog", "channel": "aaa-omg-ops"}}}} + When the request is sent + Then the response status is 201 Created + @skip @team:DataDog/aaa-omg Scenario: Delete team connections returns "Bad Request" response Given operation "DeleteTeamConnections" enabled @@ -169,6 +188,26 @@ Feature: Teams When the request is sent Then the response status is 404 Not Found + @team:DataDog/aaa-omg + Scenario: Delete team notification rule returns "API error response." response + Given new "DeleteTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter with value "3d031bb2-e1da-4d34-a670-1b5557b032c9" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Delete team notification rule returns "No Content" response + Given new "DeleteTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "team_notification_rule.data.id" + When the request is sent + Then the response status is 204 No Content + @team:DataDog/aaa-omg Scenario: Get a team hierarchy link returns "API error response." response Given new "GetTeamHierarchyLink" request @@ -355,6 +394,43 @@ Feature: Teams Then the response status is 200 OK And the response has 3 items + @team:DataDog/aaa-omg + Scenario: Get team notification rule returns "API error response." response + Given new "GetTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "dd_team.data.id" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get team notification rule returns "OK" response + Given new "GetTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "team_notification_rule.data.id" + When the request is sent + Then the response status is 200 OK + + @generated @skip @team:DataDog/aaa-omg + Scenario: Get team notification rules returns "API error response." response + Given new "GetTeamNotificationRules" request + And request contains "team_id" parameter from "REPLACE.ME" + When the request is sent + Then the response status is 404 API error response. + + @team:DataDog/aaa-omg + Scenario: Get team notification rules returns "OK" response + Given new "GetTeamNotificationRules" request + And there is a valid "dd_team" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And there is a valid "team_notification_rule" in the system + When the request is sent + Then the response status is 200 OK + And the response "data" has length 1 + @generated @skip @team:DataDog/aaa-omg Scenario: Get team sync configurations returns "OK" response Given new "GetTeamSync" request @@ -609,3 +685,27 @@ Feature: Teams And body with value {"data": {"attributes": {"value": "admins"}, "type": "team_permission_settings"}} When the request is sent Then the response status is 200 OK + + @team:DataDog/aaa-omg + Scenario: Update team notification rule returns "API error response." response + Given new "UpdateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter with value "3d031bb2-e1da-4d34-a670-1b5557b032c9" + And body with value {"data": {"type": "team_notification_rules", "id": "{{dd_team.data.id}}", "attributes": {"pagerduty": {"service_name": "Datadog-prod"}, "slack": {"workspace": "Datadog", "channel": "aaa-governance-ops"}}}} + When the request is sent + Then the response status is 409 API error response. + + @team:DataDog/aaa-omg + Scenario: Update team notification rule returns "OK" response + Given new "UpdateTeamNotificationRule" request + And there is a valid "dd_team" in the system + And there is a valid "team_notification_rule" in the system + And request contains "team_id" parameter from "dd_team.data.id" + And request contains "rule_id" parameter from "team_notification_rule.data.id" + And body with value {"data": {"type": "team_notification_rules", "id": "{{team_notification_rule.data.id}}", "attributes": {"pagerduty": {"service_name": "Datadog-prod"}, "slack": {"workspace": "Datadog", "channel": "aaa-governance-ops"}}}} + When the request is sent + Then the response status is 200 OK + And the response "data.attributes.slack.channel" is equal to "aaa-governance-ops" + And the response "data.attributes.pagerduty.service_name" is equal to "Datadog-prod" diff --git a/tests/v2/features/undo.json b/tests/v2/features/undo.json index 2116e11f2a..eb43f26dbe 100644 --- a/tests/v2/features/undo.json +++ b/tests/v2/features/undo.json @@ -4758,6 +4758,36 @@ "type": "idempotent" } }, + "GetTeamNotificationRules": { + "tag": "Teams", + "undo": { + "type": "safe" + } + }, + "CreateTeamNotificationRule": { + "tag": "Teams", + "undo": { + "type": "safe" + } + }, + "DeleteTeamNotificationRule": { + "tag": "Teams", + "undo": { + "type": "idempotent" + } + }, + "GetTeamNotificationRule": { + "tag": "Teams", + "undo": { + "type": "safe" + } + }, + "UpdateTeamNotificationRule": { + "tag": "Teams", + "undo": { + "type": "idempotent" + } + }, "GetTeamPermissionSettings": { "tag": "Teams", "undo": {