From a4ca8efe342efa9ddc717bd5294abcaa6736b963 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Thu, 12 Feb 2026 21:17:05 +0000 Subject: [PATCH] Regenerate client from commit 91aa34e of spec repo --- .generator/schemas/v1/openapi.yaml | 66 ++++++- .generator/schemas/v2/openapi.yaml | 178 ++++++++---------- docs/datadog_api_client.v1.model.rst | 14 ++ docs/datadog_api_client.v2.model.rst | 35 ++-- .../CreateSLO_512760759.py | 68 +++++++ .../CreateTagPipelinesRuleset_1897535856.py | 54 ++++++ .../UpdateTagPipelinesRuleset.py | 6 +- .../UpdateTagPipelinesRuleset_1964644735.py | 49 +++++ .../v1/model/service_level_objective.py | 7 +- .../v1/model/service_level_objective_query.py | 2 +- .../model/service_level_objective_request.py | 7 +- .../v1/model/slo_count_definition.py | 70 +++++++ .../v1/model/slo_count_spec.py | 45 +++++ .../v1/model/slo_response_data.py | 7 +- .../v1/model/slo_sli_spec.py | 8 +- src/datadog_api_client/v1/models/__init__.py | 4 + ...set_request_data_attributes_rules_items.py | 16 +- ...est_data_attributes_rules_items_mapping.py | 48 ----- ...quest_data_attributes_rules_items_query.py | 23 ++- ..._attributes_rules_items_reference_table.py | 16 +- ...ta_attributes_rules_items_if_tag_exists.py | 41 ++++ .../data_attributes_rules_items_mapping.py | 75 ++++++++ ...uleset_resp_data_attributes_rules_items.py | 16 +- ...esp_data_attributes_rules_items_mapping.py | 48 ----- ..._resp_data_attributes_rules_items_query.py | 23 ++- ..._attributes_rules_items_reference_table.py | 16 +- ...set_request_data_attributes_rules_items.py | 16 +- ...est_data_attributes_rules_items_mapping.py | 48 ----- ...quest_data_attributes_rules_items_query.py | 23 ++- ..._attributes_rules_items_reference_table.py | 16 +- src/datadog_api_client/v2/models/__init__.py | 16 +- ...i_specification_returns_ok_response.frozen | 1 + ...sli_specification_returns_ok_response.yaml | 45 +++++ .../features/service_level_objectives.feature | 17 ++ ...h_if_tag_exists_returns_ok_response.frozen | 1 + ...ith_if_tag_exists_returns_ok_response.yaml | 24 +++ ...h_if_tag_exists_returns_ok_response.frozen | 1 + ...ith_if_tag_exists_returns_ok_response.yaml | 22 +++ .../v2/features/cloud_cost_management.feature | 17 ++ 39 files changed, 848 insertions(+), 341 deletions(-) create mode 100644 examples/v1/service-level-objectives/CreateSLO_512760759.py create mode 100644 examples/v2/cloud-cost-management/CreateTagPipelinesRuleset_1897535856.py create mode 100644 examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset_1964644735.py create mode 100644 src/datadog_api_client/v1/model/slo_count_definition.py create mode 100644 src/datadog_api_client/v1/model/slo_count_spec.py delete mode 100644 src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_mapping.py create mode 100644 src/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.py create mode 100644 src/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py delete mode 100644 src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_mapping.py delete mode 100644 src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_mapping.py create mode 100644 tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.frozen create mode 100644 tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml create mode 100644 tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen create mode 100644 tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index a38d274f9b..3e86f3a82c 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -11900,6 +11900,60 @@ components: example: UTC type: string type: object + SLOCountDefinition: + description: 'A count-based (metric) SLI specification, composed of three parts: + the good events formula, the total events formula, + + and the underlying queries.' + example: + good_events_formula: query1 - query2 + queries: + - data_source: metrics + name: query1 + query: sum:trace.servlet.request.hits{*} by {env}.as_count() + - data_source: metrics + name: query2 + query: sum:trace.servlet.request.errors{*} by {env}.as_count() + total_events_formula: query1 + properties: + good_events_formula: + $ref: '#/components/schemas/SLOFormula' + queries: + example: + - data_source: metrics + name: query1 + query: sum:trace.servlet.request.hits{*} by {env}.as_count() + items: + $ref: '#/components/schemas/SLODataSourceQueryDefinition' + minItems: 1 + type: array + total_events_formula: + $ref: '#/components/schemas/SLOFormula' + required: + - good_events_formula + - total_events_formula + - queries + type: object + SLOCountSpec: + additionalProperties: false + description: A metric SLI specification. + example: + count: + good_events_formula: query1 - query2 + queries: + - data_source: metrics + name: query1 + query: sum:trace.servlet.request.hits{*} by {env}.as_count() + - data_source: metrics + name: query2 + query: sum:trace.servlet.request.errors{*} by {env}.as_count() + total_events_formula: query1 + properties: + count: + $ref: '#/components/schemas/SLOCountDefinition' + required: + - count + type: object SLOCreator: description: The creator of the SLO nullable: true @@ -12747,8 +12801,12 @@ components: type: string query: $ref: '#/components/schemas/ServiceLevelObjectiveQuery' + description: The metric query used to define a count-based SLO as the ratio + of good events to total events. sli_specification: $ref: '#/components/schemas/SLOSliSpec' + description: A generic SLI specification. This is currently used for time-slice + and count-based (metric) SLOs only. tags: description: 'A list of tags associated with this service level objective. @@ -12804,10 +12862,11 @@ components: type: number type: object SLOSliSpec: - description: A generic SLI specification. This is currently used for time-slice - SLOs only. + description: A generic SLI specification. This is used for time-slice and count-based + (metric) SLOs only. oneOf: - $ref: '#/components/schemas/SLOTimeSliceSpec' + - $ref: '#/components/schemas/SLOCountSpec' SLOState: description: State of the SLO. enum: @@ -13959,7 +14018,8 @@ components: - type type: object ServiceLevelObjectiveQuery: - description: 'A metric-based SLO. **Required if type is `metric`**. Note that + description: 'A count-based (metric) SLO query. This field is superseded by + `sli_specification` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator to be used because this will sum up all request counts instead of averaging diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 83eb288171..73c6d67371 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -14428,7 +14428,7 @@ components: key: cost_center value: engineering case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: account_id:"123456789" AND service:"web-api" reference_table: null id: New Ruleset @@ -14473,7 +14473,7 @@ components: example: false type: boolean mapping: - $ref: '#/components/schemas/CreateRulesetRequestDataAttributesRulesItemsMapping' + $ref: '#/components/schemas/DataAttributesRulesItemsMapping' metadata: $ref: '#/components/schemas/RulesetItemMetadata' name: @@ -14488,31 +14488,6 @@ components: - enabled - name type: object - CreateRulesetRequestDataAttributesRulesItemsMapping: - description: The definition of `CreateRulesetRequestDataAttributesRulesItemsMapping` - object. - nullable: true - properties: - destination_key: - description: The `mapping` `destination_key`. - example: '' - type: string - if_not_exists: - description: The `mapping` `if_not_exists`. - example: false - type: boolean - source_keys: - description: The `mapping` `source_keys`. - example: - - '' - items: - type: string - type: array - required: - - destination_key - - if_not_exists - - source_keys - type: object CreateRulesetRequestDataAttributesRulesItemsQuery: description: The definition of `CreateRulesetRequestDataAttributesRulesItemsQuery` object. @@ -14524,16 +14499,17 @@ components: description: The `query` `case_insensitivity`. type: boolean if_not_exists: - description: The `query` `if_not_exists`. - example: false + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' query: description: The `query` `query`. example: '' type: string required: - addition - - if_not_exists - query type: object CreateRulesetRequestDataAttributesRulesItemsQueryAddition: @@ -14567,8 +14543,12 @@ components: $ref: '#/components/schemas/CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems' type: array if_not_exists: - description: The `reference_table` `if_not_exists`. + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `reference_table` + `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' source_keys: description: The `reference_table` `source_keys`. example: @@ -18273,6 +18253,42 @@ components: - INTEGRATION_SCREENBOARD - INTEGRATION_TIMEBOARD - HOST_TIMEBOARD + DataAttributesRulesItemsIfTagExists: + description: The behavior when the tag already exists. + enum: + - append + - do_not_apply + - replace + type: string + x-enum-varnames: + - APPEND + - DO_NOT_APPLY + - REPLACE + DataAttributesRulesItemsMapping: + description: The definition of `DataAttributesRulesItemsMapping` object. + nullable: true + properties: + destination_key: + description: The `mapping` `destination_key`. + example: '' + type: string + if_not_exists: + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `mapping` `if_not_exists`. + type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' + source_keys: + description: The `mapping` `source_keys`. + example: + - '' + items: + type: string + type: array + required: + - destination_key + - source_keys + type: object DataDeletionResponseItem: description: The created data deletion request information. properties: @@ -50015,13 +50031,13 @@ components: key: abc value: ww case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: billingcurrency:"USD" AND account_name:"SZA96462" AND billingcurrency:"USD" reference_table: null - enabled: true mapping: destination_key: h - if_not_exists: true + if_tag_exists: do_not_apply source_keys: - accountname - accountownerid @@ -50041,7 +50057,7 @@ components: output_key: status - input_column: status_description output_key: dess - if_not_exists: false + if_tag_exists: append source_keys: - http_status - status_description @@ -50074,13 +50090,13 @@ components: key: environment value: production case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: billingcurrency:"USD" AND account_name:"prod-account" reference_table: null - enabled: true mapping: destination_key: team_owner - if_not_exists: true + if_tag_exists: do_not_apply source_keys: - account_name - service @@ -50100,7 +50116,7 @@ components: output_key: status - input_column: status_description output_key: dess - if_not_exists: false + if_tag_exists: append source_keys: - http_status - status_description @@ -50125,7 +50141,7 @@ components: key: cost_center value: engineering case_insensitivity: true - if_not_exists: true + if_tag_exists: do_not_apply query: account_name:"dev-*" reference_table: null version: 1 @@ -50236,7 +50252,7 @@ components: example: false type: boolean mapping: - $ref: '#/components/schemas/RulesetRespDataAttributesRulesItemsMapping' + $ref: '#/components/schemas/DataAttributesRulesItemsMapping' metadata: $ref: '#/components/schemas/RulesetItemMetadata' name: @@ -50251,31 +50267,6 @@ components: - enabled - name type: object - RulesetRespDataAttributesRulesItemsMapping: - description: The definition of `RulesetRespDataAttributesRulesItemsMapping` - object. - nullable: true - properties: - destination_key: - description: The `mapping` `destination_key`. - example: '' - type: string - if_not_exists: - description: The `mapping` `if_not_exists`. - example: false - type: boolean - source_keys: - description: The `mapping` `source_keys`. - example: - - '' - items: - type: string - type: array - required: - - destination_key - - if_not_exists - - source_keys - type: object RulesetRespDataAttributesRulesItemsQuery: description: The definition of `RulesetRespDataAttributesRulesItemsQuery` object. nullable: true @@ -50286,16 +50277,17 @@ components: description: The `query` `case_insensitivity`. type: boolean if_not_exists: - description: The `query` `if_not_exists`. - example: false + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' query: description: The `query` `query`. example: '' type: string required: - addition - - if_not_exists - query type: object RulesetRespDataAttributesRulesItemsQueryAddition: @@ -50329,8 +50321,12 @@ components: $ref: '#/components/schemas/RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems' type: array if_not_exists: - description: The `reference_table` `if_not_exists`. + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `reference_table` + `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' source_keys: description: The `reference_table` `source_keys`. example: @@ -65276,13 +65272,13 @@ components: key: cost_center value: engineering case_insensitivity: false - if_not_exists: true + if_tag_exists: do_not_apply query: account_id:"123456789" AND service:"web-api" reference_table: null - enabled: true mapping: destination_key: team_owner - if_not_exists: true + if_tag_exists: do_not_apply source_keys: - account_name - account_id @@ -65302,7 +65298,7 @@ components: output_key: status - input_column: status_description output_key: dess - if_not_exists: false + if_tag_exists: append source_keys: - http_status - status_description @@ -65354,7 +65350,7 @@ components: example: false type: boolean mapping: - $ref: '#/components/schemas/UpdateRulesetRequestDataAttributesRulesItemsMapping' + $ref: '#/components/schemas/DataAttributesRulesItemsMapping' metadata: $ref: '#/components/schemas/RulesetItemMetadata' name: @@ -65369,31 +65365,6 @@ components: - enabled - name type: object - UpdateRulesetRequestDataAttributesRulesItemsMapping: - description: The definition of `UpdateRulesetRequestDataAttributesRulesItemsMapping` - object. - nullable: true - properties: - destination_key: - description: The `mapping` `destination_key`. - example: '' - type: string - if_not_exists: - description: The `mapping` `if_not_exists`. - example: false - type: boolean - source_keys: - description: The `mapping` `source_keys`. - example: - - '' - items: - type: string - type: array - required: - - destination_key - - if_not_exists - - source_keys - type: object UpdateRulesetRequestDataAttributesRulesItemsQuery: description: The definition of `UpdateRulesetRequestDataAttributesRulesItemsQuery` object. @@ -65405,16 +65376,17 @@ components: description: The `query` `case_insensitivity`. type: boolean if_not_exists: - description: The `query` `if_not_exists`. - example: false + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `query` `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' query: description: The `query` `query`. example: '' type: string required: - addition - - if_not_exists - query type: object UpdateRulesetRequestDataAttributesRulesItemsQueryAddition: @@ -65448,8 +65420,12 @@ components: $ref: '#/components/schemas/UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems' type: array if_not_exists: - description: The `reference_table` `if_not_exists`. + deprecated: true + description: Deprecated. Use `if_tag_exists` instead. The `reference_table` + `if_not_exists`. type: boolean + if_tag_exists: + $ref: '#/components/schemas/DataAttributesRulesItemsIfTagExists' source_keys: description: The `reference_table` `source_keys`. example: diff --git a/docs/datadog_api_client.v1.model.rst b/docs/datadog_api_client.v1.model.rst index 11d7ba1320..b20c86c2ba 100644 --- a/docs/datadog_api_client.v1.model.rst +++ b/docs/datadog_api_client.v1.model.rst @@ -3784,6 +3784,20 @@ datadog\_api\_client.v1.model.slo\_correction\_update\_request\_attributes modul :members: :show-inheritance: +datadog\_api\_client.v1.model.slo\_count\_definition module +----------------------------------------------------------- + +.. automodule:: datadog_api_client.v1.model.slo_count_definition + :members: + :show-inheritance: + +datadog\_api\_client.v1.model.slo\_count\_spec module +----------------------------------------------------- + +.. automodule:: datadog_api_client.v1.model.slo_count_spec + :members: + :show-inheritance: + datadog\_api\_client.v1.model.slo\_creator module ------------------------------------------------- diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index 6c0d5099a1..bca0ce24b2 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -5905,13 +5905,6 @@ datadog\_api\_client.v2.model.create\_ruleset\_request\_data\_attributes\_rules\ :members: :show-inheritance: -datadog\_api\_client.v2.model.create\_ruleset\_request\_data\_attributes\_rules\_items\_mapping module ------------------------------------------------------------------------------------------------------- - -.. automodule:: datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_mapping - :members: - :show-inheritance: - datadog\_api\_client.v2.model.create\_ruleset\_request\_data\_attributes\_rules\_items\_query module ---------------------------------------------------------------------------------------------------- @@ -7130,6 +7123,20 @@ datadog\_api\_client.v2.model.dashboard\_type module :members: :show-inheritance: +datadog\_api\_client.v2.model.data\_attributes\_rules\_items\_if\_tag\_exists module +------------------------------------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.data\_attributes\_rules\_items\_mapping module +---------------------------------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.data_attributes_rules_items_mapping + :members: + :show-inheritance: + datadog\_api\_client.v2.model.data\_deletion\_response\_item module ------------------------------------------------------------------- @@ -21774,13 +21781,6 @@ datadog\_api\_client.v2.model.ruleset\_resp\_data\_attributes\_rules\_items modu :members: :show-inheritance: -datadog\_api\_client.v2.model.ruleset\_resp\_data\_attributes\_rules\_items\_mapping module -------------------------------------------------------------------------------------------- - -.. automodule:: datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_mapping - :members: - :show-inheritance: - datadog\_api\_client.v2.model.ruleset\_resp\_data\_attributes\_rules\_items\_query module ----------------------------------------------------------------------------------------- @@ -28858,13 +28858,6 @@ datadog\_api\_client.v2.model.update\_ruleset\_request\_data\_attributes\_rules\ :members: :show-inheritance: -datadog\_api\_client.v2.model.update\_ruleset\_request\_data\_attributes\_rules\_items\_mapping module ------------------------------------------------------------------------------------------------------- - -.. automodule:: datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_mapping - :members: - :show-inheritance: - datadog\_api\_client.v2.model.update\_ruleset\_request\_data\_attributes\_rules\_items\_query module ---------------------------------------------------------------------------------------------------- diff --git a/examples/v1/service-level-objectives/CreateSLO_512760759.py b/examples/v1/service-level-objectives/CreateSLO_512760759.py new file mode 100644 index 0000000000..6fa6cef618 --- /dev/null +++ b/examples/v1/service-level-objectives/CreateSLO_512760759.py @@ -0,0 +1,68 @@ +""" +Create a new metric SLO object using sli_specification returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v1.api.service_level_objectives_api import ServiceLevelObjectivesApi +from datadog_api_client.v1.model.formula_and_function_metric_data_source import FormulaAndFunctionMetricDataSource +from datadog_api_client.v1.model.formula_and_function_metric_query_definition import ( + FormulaAndFunctionMetricQueryDefinition, +) +from datadog_api_client.v1.model.service_level_objective_request import ServiceLevelObjectiveRequest +from datadog_api_client.v1.model.slo_count_definition import SLOCountDefinition +from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec +from datadog_api_client.v1.model.slo_formula import SLOFormula +from datadog_api_client.v1.model.slo_threshold import SLOThreshold +from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe +from datadog_api_client.v1.model.slo_type import SLOType + +body = ServiceLevelObjectiveRequest( + type=SLOType.METRIC, + description="Metric SLO using sli_specification", + name="Example-Service-Level-Objective", + sli_specification=SLOCountSpec( + count=SLOCountDefinition( + good_events_formula=SLOFormula( + formula="query1 - query2", + ), + total_events_formula=SLOFormula( + formula="query1", + ), + queries=[ + FormulaAndFunctionMetricQueryDefinition( + data_source=FormulaAndFunctionMetricDataSource.METRICS, + name="query1", + query="sum:httpservice.hits{*}.as_count()", + ), + FormulaAndFunctionMetricQueryDefinition( + data_source=FormulaAndFunctionMetricDataSource.METRICS, + name="query2", + query="sum:httpservice.errors{*}.as_count()", + ), + ], + ), + ), + tags=[ + "env:prod", + "type:count", + ], + thresholds=[ + SLOThreshold( + target=99.0, + target_display="99.0", + timeframe=SLOTimeframe.SEVEN_DAYS, + warning=99.5, + warning_display="99.5", + ), + ], + timeframe=SLOTimeframe.SEVEN_DAYS, + target_threshold=99.0, + warning_threshold=99.5, +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = ServiceLevelObjectivesApi(api_client) + response = api_instance.create_slo(body=body) + + print(response) diff --git a/examples/v2/cloud-cost-management/CreateTagPipelinesRuleset_1897535856.py b/examples/v2/cloud-cost-management/CreateTagPipelinesRuleset_1897535856.py new file mode 100644 index 0000000000..aa8240424c --- /dev/null +++ b/examples/v2/cloud-cost-management/CreateTagPipelinesRuleset_1897535856.py @@ -0,0 +1,54 @@ +""" +Create tag pipeline ruleset with if_tag_exists returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.cloud_cost_management_api import CloudCostManagementApi +from datadog_api_client.v2.model.create_ruleset_request import CreateRulesetRequest +from datadog_api_client.v2.model.create_ruleset_request_data import CreateRulesetRequestData +from datadog_api_client.v2.model.create_ruleset_request_data_attributes import CreateRulesetRequestDataAttributes +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items import ( + CreateRulesetRequestDataAttributesRulesItems, +) +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import ( + CreateRulesetRequestDataAttributesRulesItemsQuery, +) +from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query_addition import ( + CreateRulesetRequestDataAttributesRulesItemsQueryAddition, +) +from datadog_api_client.v2.model.create_ruleset_request_data_type import CreateRulesetRequestDataType +from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists + +body = CreateRulesetRequest( + data=CreateRulesetRequestData( + attributes=CreateRulesetRequestDataAttributes( + enabled=True, + rules=[ + CreateRulesetRequestDataAttributesRulesItems( + enabled=True, + mapping=None, + name="Add Cost Center Tag", + query=CreateRulesetRequestDataAttributesRulesItemsQuery( + addition=CreateRulesetRequestDataAttributesRulesItemsQueryAddition( + key="cost_center", + value="engineering", + ), + case_insensitivity=False, + if_tag_exists=DataAttributesRulesItemsIfTagExists.REPLACE, + query='account_id:"123456789" AND service:"web-api"', + ), + reference_table=None, + ), + ], + ), + id="New Ruleset", + type=CreateRulesetRequestDataType.CREATE_RULESET, + ), +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = CloudCostManagementApi(api_client) + response = api_instance.create_tag_pipelines_ruleset(body=body) + + print(response) diff --git a/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset.py b/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset.py index e7cccb525c..3648907dc9 100644 --- a/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset.py +++ b/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset.py @@ -4,15 +4,13 @@ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.cloud_cost_management_api import CloudCostManagementApi +from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.update_ruleset_request import UpdateRulesetRequest from datadog_api_client.v2.model.update_ruleset_request_data import UpdateRulesetRequestData from datadog_api_client.v2.model.update_ruleset_request_data_attributes import UpdateRulesetRequestDataAttributes from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items import ( UpdateRulesetRequestDataAttributesRulesItems, ) -from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_mapping import ( - UpdateRulesetRequestDataAttributesRulesItemsMapping, -) from datadog_api_client.v2.model.update_ruleset_request_data_type import UpdateRulesetRequestDataType body = UpdateRulesetRequest( @@ -23,7 +21,7 @@ rules=[ UpdateRulesetRequestDataAttributesRulesItems( enabled=True, - mapping=UpdateRulesetRequestDataAttributesRulesItemsMapping( + mapping=DataAttributesRulesItemsMapping( destination_key="team_owner", if_not_exists=True, source_keys=[ diff --git a/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset_1964644735.py b/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset_1964644735.py new file mode 100644 index 0000000000..b99c0b07be --- /dev/null +++ b/examples/v2/cloud-cost-management/UpdateTagPipelinesRuleset_1964644735.py @@ -0,0 +1,49 @@ +""" +Update tag pipeline ruleset with if_tag_exists returns "OK" response +""" + +from datadog_api_client import ApiClient, Configuration +from datadog_api_client.v2.api.cloud_cost_management_api import CloudCostManagementApi +from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists +from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping +from datadog_api_client.v2.model.update_ruleset_request import UpdateRulesetRequest +from datadog_api_client.v2.model.update_ruleset_request_data import UpdateRulesetRequestData +from datadog_api_client.v2.model.update_ruleset_request_data_attributes import UpdateRulesetRequestDataAttributes +from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items import ( + UpdateRulesetRequestDataAttributesRulesItems, +) +from datadog_api_client.v2.model.update_ruleset_request_data_type import UpdateRulesetRequestDataType + +body = UpdateRulesetRequest( + data=UpdateRulesetRequestData( + attributes=UpdateRulesetRequestDataAttributes( + enabled=True, + last_version=3611102, + rules=[ + UpdateRulesetRequestDataAttributesRulesItems( + enabled=True, + mapping=DataAttributesRulesItemsMapping( + destination_key="team_owner", + if_tag_exists=DataAttributesRulesItemsIfTagExists.REPLACE, + source_keys=[ + "account_name", + "account_id", + ], + ), + name="Account Name Mapping", + query=None, + reference_table=None, + ), + ], + ), + id="New Ruleset", + type=UpdateRulesetRequestDataType.UPDATE_RULESET, + ), +) + +configuration = Configuration() +with ApiClient(configuration) as api_client: + api_instance = CloudCostManagementApi(api_client) + response = api_instance.update_tag_pipelines_ruleset(ruleset_id="ee10c3ff-312f-464c-b4f6-46adaa6d00a1", body=body) + + print(response) diff --git a/src/datadog_api_client/v1/model/service_level_objective.py b/src/datadog_api_client/v1/model/service_level_objective.py index a95b993513..077a473544 100644 --- a/src/datadog_api_client/v1/model/service_level_objective.py +++ b/src/datadog_api_client/v1/model/service_level_objective.py @@ -22,6 +22,7 @@ from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe from datadog_api_client.v1.model.slo_type import SLOType from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec class ServiceLevelObjective(ModelNormal): @@ -94,7 +95,7 @@ def __init__( monitor_ids: Union[List[int], UnsetType] = unset, monitor_tags: Union[List[str], UnsetType] = unset, query: Union[ServiceLevelObjectiveQuery, UnsetType] = unset, - sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, UnsetType] = unset, + sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, SLOCountSpec, UnsetType] = unset, tags: Union[List[str], UnsetType] = unset, target_threshold: Union[float, UnsetType] = unset, timeframe: Union[SLOTimeframe, UnsetType] = unset, @@ -151,12 +152,12 @@ def __init__( :param name: The name of the service level objective object. :type name: str - :param query: A metric-based SLO. **Required if type is metric**. Note that Datadog only allows the sum by aggregator + :param query: A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator to be used because this will sum up all request counts instead of averaging them, or taking the max or min of all of those requests. :type query: ServiceLevelObjectiveQuery, optional - :param sli_specification: A generic SLI specification. This is currently used for time-slice SLOs only. + :param sli_specification: A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. :type sli_specification: SLOSliSpec, optional :param tags: A list of tags associated with this service level objective. diff --git a/src/datadog_api_client/v1/model/service_level_objective_query.py b/src/datadog_api_client/v1/model/service_level_objective_query.py index ee11656739..79dca96665 100644 --- a/src/datadog_api_client/v1/model/service_level_objective_query.py +++ b/src/datadog_api_client/v1/model/service_level_objective_query.py @@ -25,7 +25,7 @@ def openapi_types(_): def __init__(self_, denominator: str, numerator: str, **kwargs): """ - A metric-based SLO. **Required if type is metric**. Note that Datadog only allows the sum by aggregator + A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator to be used because this will sum up all request counts instead of averaging them, or taking the max or min of all of those requests. diff --git a/src/datadog_api_client/v1/model/service_level_objective_request.py b/src/datadog_api_client/v1/model/service_level_objective_request.py index dbeb4bd0d9..7eb74c2f53 100644 --- a/src/datadog_api_client/v1/model/service_level_objective_request.py +++ b/src/datadog_api_client/v1/model/service_level_objective_request.py @@ -21,6 +21,7 @@ from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe from datadog_api_client.v1.model.slo_type import SLOType from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec class ServiceLevelObjectiveRequest(ModelNormal): @@ -71,7 +72,7 @@ def __init__( groups: Union[List[str], UnsetType] = unset, monitor_ids: Union[List[int], UnsetType] = unset, query: Union[ServiceLevelObjectiveQuery, UnsetType] = unset, - sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, UnsetType] = unset, + sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, SLOCountSpec, UnsetType] = unset, tags: Union[List[str], UnsetType] = unset, target_threshold: Union[float, UnsetType] = unset, timeframe: Union[SLOTimeframe, UnsetType] = unset, @@ -102,12 +103,12 @@ def __init__( :param name: The name of the service level objective object. :type name: str - :param query: A metric-based SLO. **Required if type is metric**. Note that Datadog only allows the sum by aggregator + :param query: A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator to be used because this will sum up all request counts instead of averaging them, or taking the max or min of all of those requests. :type query: ServiceLevelObjectiveQuery, optional - :param sli_specification: A generic SLI specification. This is currently used for time-slice SLOs only. + :param sli_specification: A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. :type sli_specification: SLOSliSpec, optional :param tags: A list of tags associated with this service level objective. diff --git a/src/datadog_api_client/v1/model/slo_count_definition.py b/src/datadog_api_client/v1/model/slo_count_definition.py new file mode 100644 index 0000000000..2011e9bfcd --- /dev/null +++ b/src/datadog_api_client/v1/model/slo_count_definition.py @@ -0,0 +1,70 @@ +# 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, +) + + +if TYPE_CHECKING: + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + from datadog_api_client.v1.model.formula_and_function_metric_query_definition import ( + FormulaAndFunctionMetricQueryDefinition, + ) + + +class SLOCountDefinition(ModelNormal): + validations = { + "queries": { + "min_items": 1, + }, + } + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_formula import SLOFormula + from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition + + return { + "good_events_formula": (SLOFormula,), + "queries": ([SLODataSourceQueryDefinition],), + "total_events_formula": (SLOFormula,), + } + + attribute_map = { + "good_events_formula": "good_events_formula", + "queries": "queries", + "total_events_formula": "total_events_formula", + } + + def __init__( + self_, + good_events_formula: SLOFormula, + queries: List[Union[SLODataSourceQueryDefinition, FormulaAndFunctionMetricQueryDefinition]], + total_events_formula: SLOFormula, + **kwargs, + ): + """ + A count-based (metric) SLI specification, composed of three parts: the good events formula, the total events formula, + and the underlying queries. + + :param good_events_formula: A formula that specifies how to combine the results of multiple queries. + :type good_events_formula: SLOFormula + + :param queries: + :type queries: [SLODataSourceQueryDefinition] + + :param total_events_formula: A formula that specifies how to combine the results of multiple queries. + :type total_events_formula: SLOFormula + """ + super().__init__(kwargs) + + self_.good_events_formula = good_events_formula + self_.queries = queries + self_.total_events_formula = total_events_formula diff --git a/src/datadog_api_client/v1/model/slo_count_spec.py b/src/datadog_api_client/v1/model/slo_count_spec.py new file mode 100644 index 0000000000..72f4a6aec6 --- /dev/null +++ b/src/datadog_api_client/v1/model/slo_count_spec.py @@ -0,0 +1,45 @@ +# 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.v1.model.slo_count_definition import SLOCountDefinition + + +class SLOCountSpec(ModelNormal): + @cached_property + def additional_properties_type(_): + return None + + @cached_property + def openapi_types(_): + from datadog_api_client.v1.model.slo_count_definition import SLOCountDefinition + + return { + "count": (SLOCountDefinition,), + } + + attribute_map = { + "count": "count", + } + + def __init__(self_, count: SLOCountDefinition, **kwargs): + """ + A metric SLI specification. + + :param count: A count-based (metric) SLI specification, composed of three parts: the good events formula, the total events formula, + and the underlying queries. + :type count: SLOCountDefinition + """ + super().__init__(kwargs) + + self_.count = count diff --git a/src/datadog_api_client/v1/model/slo_response_data.py b/src/datadog_api_client/v1/model/slo_response_data.py index 275644beb1..4fd18ec907 100644 --- a/src/datadog_api_client/v1/model/slo_response_data.py +++ b/src/datadog_api_client/v1/model/slo_response_data.py @@ -22,6 +22,7 @@ from datadog_api_client.v1.model.slo_timeframe import SLOTimeframe from datadog_api_client.v1.model.slo_type import SLOType from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec class SLOResponseData(ModelNormal): @@ -95,7 +96,7 @@ def __init__( monitor_tags: Union[List[str], UnsetType] = unset, name: Union[str, UnsetType] = unset, query: Union[ServiceLevelObjectiveQuery, UnsetType] = unset, - sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, UnsetType] = unset, + sli_specification: Union[SLOSliSpec, SLOTimeSliceSpec, SLOCountSpec, UnsetType] = unset, tags: Union[List[str], UnsetType] = unset, target_threshold: Union[float, UnsetType] = unset, thresholds: Union[List[SLOThreshold], UnsetType] = unset, @@ -157,12 +158,12 @@ def __init__( :param name: The name of the service level objective object. :type name: str, optional - :param query: A metric-based SLO. **Required if type is metric**. Note that Datadog only allows the sum by aggregator + :param query: A count-based (metric) SLO query. This field is superseded by ``sli_specification`` but is retained for backwards compatibility. Note that Datadog only allows the sum by aggregator to be used because this will sum up all request counts instead of averaging them, or taking the max or min of all of those requests. :type query: ServiceLevelObjectiveQuery, optional - :param sli_specification: A generic SLI specification. This is currently used for time-slice SLOs only. + :param sli_specification: A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. :type sli_specification: SLOSliSpec, optional :param tags: A list of tags associated with this service level objective. diff --git a/src/datadog_api_client/v1/model/slo_sli_spec.py b/src/datadog_api_client/v1/model/slo_sli_spec.py index 69f9e701d5..671827072d 100644 --- a/src/datadog_api_client/v1/model/slo_sli_spec.py +++ b/src/datadog_api_client/v1/model/slo_sli_spec.py @@ -13,11 +13,15 @@ class SLOSliSpec(ModelComposed): def __init__(self, **kwargs): """ - A generic SLI specification. This is currently used for time-slice SLOs only. + A generic SLI specification. This is used for time-slice and count-based (metric) SLOs only. :param time_slice: The time-slice condition, composed of 3 parts: 1. the metric timeseries query, 2. the comparator, and 3. the threshold. Optionally, a fourth part, the query interval, can be provided. :type time_slice: SLOTimeSliceCondition + + :param count: A count-based (metric) SLI specification, composed of three parts: the good events formula, the total events formula, + and the underlying queries. + :type count: SLOCountDefinition """ super().__init__(kwargs) @@ -31,9 +35,11 @@ def _composed_schemas(_): # classes don't exist yet because their module has not finished # loading from datadog_api_client.v1.model.slo_time_slice_spec import SLOTimeSliceSpec + from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec return { "oneOf": [ SLOTimeSliceSpec, + SLOCountSpec, ], } diff --git a/src/datadog_api_client/v1/models/__init__.py b/src/datadog_api_client/v1/models/__init__.py index 43893fead5..1710446bfc 100644 --- a/src/datadog_api_client/v1/models/__init__.py +++ b/src/datadog_api_client/v1/models/__init__.py @@ -561,6 +561,8 @@ from datadog_api_client.v1.model.slo_correction_update_data import SLOCorrectionUpdateData from datadog_api_client.v1.model.slo_correction_update_request import SLOCorrectionUpdateRequest from datadog_api_client.v1.model.slo_correction_update_request_attributes import SLOCorrectionUpdateRequestAttributes +from datadog_api_client.v1.model.slo_count_definition import SLOCountDefinition +from datadog_api_client.v1.model.slo_count_spec import SLOCountSpec from datadog_api_client.v1.model.slo_creator import SLOCreator from datadog_api_client.v1.model.slo_data_source_query_definition import SLODataSourceQueryDefinition from datadog_api_client.v1.model.slo_delete_response import SLODeleteResponse @@ -1634,6 +1636,8 @@ "SLOCorrectionUpdateData", "SLOCorrectionUpdateRequest", "SLOCorrectionUpdateRequestAttributes", + "SLOCountDefinition", + "SLOCountSpec", "SLOCreator", "SLODataSourceQueryDefinition", "SLODeleteResponse", diff --git a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py index 67a38d3c90..f078a3a1ec 100644 --- a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py +++ b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items.py @@ -15,9 +15,7 @@ if TYPE_CHECKING: - from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_mapping import ( - CreateRulesetRequestDataAttributesRulesItemsMapping, - ) + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import ( CreateRulesetRequestDataAttributesRulesItemsQuery, @@ -30,9 +28,7 @@ class CreateRulesetRequestDataAttributesRulesItems(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_mapping import ( - CreateRulesetRequestDataAttributesRulesItemsMapping, - ) + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import ( CreateRulesetRequestDataAttributesRulesItemsQuery, @@ -43,7 +39,7 @@ def openapi_types(_): return { "enabled": (bool,), - "mapping": (CreateRulesetRequestDataAttributesRulesItemsMapping,), + "mapping": (DataAttributesRulesItemsMapping,), "metadata": (RulesetItemMetadata,), "name": (str,), "query": (CreateRulesetRequestDataAttributesRulesItemsQuery,), @@ -63,7 +59,7 @@ def __init__( self_, enabled: bool, name: str, - mapping: Union[CreateRulesetRequestDataAttributesRulesItemsMapping, none_type, UnsetType] = unset, + mapping: Union[DataAttributesRulesItemsMapping, none_type, UnsetType] = unset, metadata: Union[RulesetItemMetadata, none_type, UnsetType] = unset, query: Union[CreateRulesetRequestDataAttributesRulesItemsQuery, none_type, UnsetType] = unset, reference_table: Union[ @@ -77,8 +73,8 @@ def __init__( :param enabled: The ``items`` ``enabled``. :type enabled: bool - :param mapping: The definition of ``CreateRulesetRequestDataAttributesRulesItemsMapping`` object. - :type mapping: CreateRulesetRequestDataAttributesRulesItemsMapping, none_type, optional + :param mapping: The definition of ``DataAttributesRulesItemsMapping`` object. + :type mapping: DataAttributesRulesItemsMapping, none_type, optional :param metadata: The ``items`` ``metadata``. :type metadata: RulesetItemMetadata, none_type, optional diff --git a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_mapping.py b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_mapping.py deleted file mode 100644 index 37081fb959..0000000000 --- a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_mapping.py +++ /dev/null @@ -1,48 +0,0 @@ -# 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 - -from datadog_api_client.model_utils import ( - ModelNormal, - cached_property, -) - - -class CreateRulesetRequestDataAttributesRulesItemsMapping(ModelNormal): - _nullable = True - - @cached_property - def openapi_types(_): - return { - "destination_key": (str,), - "if_not_exists": (bool,), - "source_keys": ([str],), - } - - attribute_map = { - "destination_key": "destination_key", - "if_not_exists": "if_not_exists", - "source_keys": "source_keys", - } - - def __init__(self_, destination_key: str, if_not_exists: bool, source_keys: List[str], **kwargs): - """ - The definition of ``CreateRulesetRequestDataAttributesRulesItemsMapping`` object. - - :param destination_key: The ``mapping`` ``destination_key``. - :type destination_key: str - - :param if_not_exists: The ``mapping`` ``if_not_exists``. - :type if_not_exists: bool - - :param source_keys: The ``mapping`` ``source_keys``. - :type source_keys: [str] - """ - super().__init__(kwargs) - - self_.destination_key = destination_key - self_.if_not_exists = if_not_exists - self_.source_keys = source_keys diff --git a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.py b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.py index 35d731e65c..9c195753cb 100644 --- a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.py +++ b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_query.py @@ -18,6 +18,9 @@ from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query_addition import ( CreateRulesetRequestDataAttributesRulesItemsQueryAddition, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) class CreateRulesetRequestDataAttributesRulesItemsQuery(ModelNormal): @@ -28,11 +31,15 @@ def openapi_types(_): from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query_addition import ( CreateRulesetRequestDataAttributesRulesItemsQueryAddition, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) return { "addition": (CreateRulesetRequestDataAttributesRulesItemsQueryAddition,), "case_insensitivity": (bool,), "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), "query": (str,), } @@ -40,15 +47,17 @@ def openapi_types(_): "addition": "addition", "case_insensitivity": "case_insensitivity", "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", "query": "query", } def __init__( self_, addition: Union[CreateRulesetRequestDataAttributesRulesItemsQueryAddition, none_type], - if_not_exists: bool, query: str, case_insensitivity: Union[bool, UnsetType] = unset, + if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, **kwargs, ): """ @@ -60,16 +69,22 @@ def __init__( :param case_insensitivity: The ``query`` ``case_insensitivity``. :type case_insensitivity: bool, optional - :param if_not_exists: The ``query`` ``if_not_exists``. - :type if_not_exists: bool + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``query`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional :param query: The ``query`` ``query``. :type query: str """ if case_insensitivity is not unset: kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists super().__init__(kwargs) self_.addition = addition - self_.if_not_exists = if_not_exists self_.query = query diff --git a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.py b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.py index 5d49da4a86..11429ee352 100644 --- a/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.py +++ b/src/datadog_api_client/v2/model/create_ruleset_request_data_attributes_rules_items_reference_table.py @@ -17,6 +17,9 @@ from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import ( CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) class CreateRulesetRequestDataAttributesRulesItemsReferenceTable(ModelNormal): @@ -27,11 +30,15 @@ def openapi_types(_): from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import ( CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) return { "case_insensitivity": (bool,), "field_pairs": ([CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems],), "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), "source_keys": ([str],), "table_name": (str,), } @@ -40,6 +47,7 @@ def openapi_types(_): "case_insensitivity": "case_insensitivity", "field_pairs": "field_pairs", "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", "source_keys": "source_keys", "table_name": "table_name", } @@ -51,6 +59,7 @@ def __init__( table_name: str, case_insensitivity: Union[bool, UnsetType] = unset, if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, **kwargs, ): """ @@ -62,9 +71,12 @@ def __init__( :param field_pairs: The ``reference_table`` ``field_pairs``. :type field_pairs: [CreateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems] - :param if_not_exists: The ``reference_table`` ``if_not_exists``. + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``reference_table`` ``if_not_exists``. **Deprecated**. :type if_not_exists: bool, optional + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + :param source_keys: The ``reference_table`` ``source_keys``. :type source_keys: [str] @@ -75,6 +87,8 @@ def __init__( kwargs["case_insensitivity"] = case_insensitivity if if_not_exists is not unset: kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists super().__init__(kwargs) self_.field_pairs = field_pairs diff --git a/src/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.py b/src/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.py new file mode 100644 index 0000000000..31ac3bc213 --- /dev/null +++ b/src/datadog_api_client/v2/model/data_attributes_rules_items_if_tag_exists.py @@ -0,0 +1,41 @@ +# 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 DataAttributesRulesItemsIfTagExists(ModelSimple): + """ + The behavior when the tag already exists. + + :param value: Must be one of ["append", "do_not_apply", "replace"]. + :type value: str + """ + + allowed_values = { + "append", + "do_not_apply", + "replace", + } + APPEND: ClassVar["DataAttributesRulesItemsIfTagExists"] + DO_NOT_APPLY: ClassVar["DataAttributesRulesItemsIfTagExists"] + REPLACE: ClassVar["DataAttributesRulesItemsIfTagExists"] + + @cached_property + def openapi_types(_): + return { + "value": (str,), + } + + +DataAttributesRulesItemsIfTagExists.APPEND = DataAttributesRulesItemsIfTagExists("append") +DataAttributesRulesItemsIfTagExists.DO_NOT_APPLY = DataAttributesRulesItemsIfTagExists("do_not_apply") +DataAttributesRulesItemsIfTagExists.REPLACE = DataAttributesRulesItemsIfTagExists("replace") diff --git a/src/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py b/src/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py new file mode 100644 index 0000000000..63dc4b6e3b --- /dev/null +++ b/src/datadog_api_client/v2/model/data_attributes_rules_items_mapping.py @@ -0,0 +1,75 @@ +# 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.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) + + +class DataAttributesRulesItemsMapping(ModelNormal): + _nullable = True + + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) + + return { + "destination_key": (str,), + "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), + "source_keys": ([str],), + } + + attribute_map = { + "destination_key": "destination_key", + "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", + "source_keys": "source_keys", + } + + def __init__( + self_, + destination_key: str, + source_keys: List[str], + if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, + **kwargs, + ): + """ + The definition of ``DataAttributesRulesItemsMapping`` object. + + :param destination_key: The ``mapping`` ``destination_key``. + :type destination_key: str + + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``mapping`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + + :param source_keys: The ``mapping`` ``source_keys``. + :type source_keys: [str] + """ + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists + super().__init__(kwargs) + + self_.destination_key = destination_key + self_.source_keys = source_keys diff --git a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py index dd7b4bb310..15e705b00b 100644 --- a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py +++ b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items.py @@ -15,9 +15,7 @@ if TYPE_CHECKING: - from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_mapping import ( - RulesetRespDataAttributesRulesItemsMapping, - ) + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query import ( RulesetRespDataAttributesRulesItemsQuery, @@ -30,9 +28,7 @@ class RulesetRespDataAttributesRulesItems(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_mapping import ( - RulesetRespDataAttributesRulesItemsMapping, - ) + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query import ( RulesetRespDataAttributesRulesItemsQuery, @@ -43,7 +39,7 @@ def openapi_types(_): return { "enabled": (bool,), - "mapping": (RulesetRespDataAttributesRulesItemsMapping,), + "mapping": (DataAttributesRulesItemsMapping,), "metadata": (RulesetItemMetadata,), "name": (str,), "query": (RulesetRespDataAttributesRulesItemsQuery,), @@ -63,7 +59,7 @@ def __init__( self_, enabled: bool, name: str, - mapping: Union[RulesetRespDataAttributesRulesItemsMapping, none_type, UnsetType] = unset, + mapping: Union[DataAttributesRulesItemsMapping, none_type, UnsetType] = unset, metadata: Union[RulesetItemMetadata, none_type, UnsetType] = unset, query: Union[RulesetRespDataAttributesRulesItemsQuery, none_type, UnsetType] = unset, reference_table: Union[RulesetRespDataAttributesRulesItemsReferenceTable, none_type, UnsetType] = unset, @@ -75,8 +71,8 @@ def __init__( :param enabled: The ``items`` ``enabled``. :type enabled: bool - :param mapping: The definition of ``RulesetRespDataAttributesRulesItemsMapping`` object. - :type mapping: RulesetRespDataAttributesRulesItemsMapping, none_type, optional + :param mapping: The definition of ``DataAttributesRulesItemsMapping`` object. + :type mapping: DataAttributesRulesItemsMapping, none_type, optional :param metadata: The ``items`` ``metadata``. :type metadata: RulesetItemMetadata, none_type, optional diff --git a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_mapping.py b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_mapping.py deleted file mode 100644 index dbc1f56cf5..0000000000 --- a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_mapping.py +++ /dev/null @@ -1,48 +0,0 @@ -# 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 - -from datadog_api_client.model_utils import ( - ModelNormal, - cached_property, -) - - -class RulesetRespDataAttributesRulesItemsMapping(ModelNormal): - _nullable = True - - @cached_property - def openapi_types(_): - return { - "destination_key": (str,), - "if_not_exists": (bool,), - "source_keys": ([str],), - } - - attribute_map = { - "destination_key": "destination_key", - "if_not_exists": "if_not_exists", - "source_keys": "source_keys", - } - - def __init__(self_, destination_key: str, if_not_exists: bool, source_keys: List[str], **kwargs): - """ - The definition of ``RulesetRespDataAttributesRulesItemsMapping`` object. - - :param destination_key: The ``mapping`` ``destination_key``. - :type destination_key: str - - :param if_not_exists: The ``mapping`` ``if_not_exists``. - :type if_not_exists: bool - - :param source_keys: The ``mapping`` ``source_keys``. - :type source_keys: [str] - """ - super().__init__(kwargs) - - self_.destination_key = destination_key - self_.if_not_exists = if_not_exists - self_.source_keys = source_keys diff --git a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.py b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.py index 30c9cf32db..5d53c19641 100644 --- a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.py +++ b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_query.py @@ -18,6 +18,9 @@ from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query_addition import ( RulesetRespDataAttributesRulesItemsQueryAddition, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) class RulesetRespDataAttributesRulesItemsQuery(ModelNormal): @@ -28,11 +31,15 @@ def openapi_types(_): from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query_addition import ( RulesetRespDataAttributesRulesItemsQueryAddition, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) return { "addition": (RulesetRespDataAttributesRulesItemsQueryAddition,), "case_insensitivity": (bool,), "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), "query": (str,), } @@ -40,15 +47,17 @@ def openapi_types(_): "addition": "addition", "case_insensitivity": "case_insensitivity", "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", "query": "query", } def __init__( self_, addition: Union[RulesetRespDataAttributesRulesItemsQueryAddition, none_type], - if_not_exists: bool, query: str, case_insensitivity: Union[bool, UnsetType] = unset, + if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, **kwargs, ): """ @@ -60,16 +69,22 @@ def __init__( :param case_insensitivity: The ``query`` ``case_insensitivity``. :type case_insensitivity: bool, optional - :param if_not_exists: The ``query`` ``if_not_exists``. - :type if_not_exists: bool + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``query`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional :param query: The ``query`` ``query``. :type query: str """ if case_insensitivity is not unset: kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists super().__init__(kwargs) self_.addition = addition - self_.if_not_exists = if_not_exists self_.query = query diff --git a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.py b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.py index 6c6075ac3d..708911247d 100644 --- a/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.py +++ b/src/datadog_api_client/v2/model/ruleset_resp_data_attributes_rules_items_reference_table.py @@ -17,6 +17,9 @@ from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items import ( RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) class RulesetRespDataAttributesRulesItemsReferenceTable(ModelNormal): @@ -27,11 +30,15 @@ def openapi_types(_): from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_reference_table_field_pairs_items import ( RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) return { "case_insensitivity": (bool,), "field_pairs": ([RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems],), "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), "source_keys": ([str],), "table_name": (str,), } @@ -40,6 +47,7 @@ def openapi_types(_): "case_insensitivity": "case_insensitivity", "field_pairs": "field_pairs", "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", "source_keys": "source_keys", "table_name": "table_name", } @@ -51,6 +59,7 @@ def __init__( table_name: str, case_insensitivity: Union[bool, UnsetType] = unset, if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, **kwargs, ): """ @@ -62,9 +71,12 @@ def __init__( :param field_pairs: The ``reference_table`` ``field_pairs``. :type field_pairs: [RulesetRespDataAttributesRulesItemsReferenceTableFieldPairsItems] - :param if_not_exists: The ``reference_table`` ``if_not_exists``. + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``reference_table`` ``if_not_exists``. **Deprecated**. :type if_not_exists: bool, optional + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + :param source_keys: The ``reference_table`` ``source_keys``. :type source_keys: [str] @@ -75,6 +87,8 @@ def __init__( kwargs["case_insensitivity"] = case_insensitivity if if_not_exists is not unset: kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists super().__init__(kwargs) self_.field_pairs = field_pairs diff --git a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py index 95fb20d421..3412558737 100644 --- a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py +++ b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items.py @@ -15,9 +15,7 @@ if TYPE_CHECKING: - from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_mapping import ( - UpdateRulesetRequestDataAttributesRulesItemsMapping, - ) + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query import ( UpdateRulesetRequestDataAttributesRulesItemsQuery, @@ -30,9 +28,7 @@ class UpdateRulesetRequestDataAttributesRulesItems(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_mapping import ( - UpdateRulesetRequestDataAttributesRulesItemsMapping, - ) + from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.ruleset_item_metadata import RulesetItemMetadata from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query import ( UpdateRulesetRequestDataAttributesRulesItemsQuery, @@ -43,7 +39,7 @@ def openapi_types(_): return { "enabled": (bool,), - "mapping": (UpdateRulesetRequestDataAttributesRulesItemsMapping,), + "mapping": (DataAttributesRulesItemsMapping,), "metadata": (RulesetItemMetadata,), "name": (str,), "query": (UpdateRulesetRequestDataAttributesRulesItemsQuery,), @@ -63,7 +59,7 @@ def __init__( self_, enabled: bool, name: str, - mapping: Union[UpdateRulesetRequestDataAttributesRulesItemsMapping, none_type, UnsetType] = unset, + mapping: Union[DataAttributesRulesItemsMapping, none_type, UnsetType] = unset, metadata: Union[RulesetItemMetadata, none_type, UnsetType] = unset, query: Union[UpdateRulesetRequestDataAttributesRulesItemsQuery, none_type, UnsetType] = unset, reference_table: Union[ @@ -77,8 +73,8 @@ def __init__( :param enabled: The ``items`` ``enabled``. :type enabled: bool - :param mapping: The definition of ``UpdateRulesetRequestDataAttributesRulesItemsMapping`` object. - :type mapping: UpdateRulesetRequestDataAttributesRulesItemsMapping, none_type, optional + :param mapping: The definition of ``DataAttributesRulesItemsMapping`` object. + :type mapping: DataAttributesRulesItemsMapping, none_type, optional :param metadata: The ``items`` ``metadata``. :type metadata: RulesetItemMetadata, none_type, optional diff --git a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_mapping.py b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_mapping.py deleted file mode 100644 index a8ff7c0b08..0000000000 --- a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_mapping.py +++ /dev/null @@ -1,48 +0,0 @@ -# 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 - -from datadog_api_client.model_utils import ( - ModelNormal, - cached_property, -) - - -class UpdateRulesetRequestDataAttributesRulesItemsMapping(ModelNormal): - _nullable = True - - @cached_property - def openapi_types(_): - return { - "destination_key": (str,), - "if_not_exists": (bool,), - "source_keys": ([str],), - } - - attribute_map = { - "destination_key": "destination_key", - "if_not_exists": "if_not_exists", - "source_keys": "source_keys", - } - - def __init__(self_, destination_key: str, if_not_exists: bool, source_keys: List[str], **kwargs): - """ - The definition of ``UpdateRulesetRequestDataAttributesRulesItemsMapping`` object. - - :param destination_key: The ``mapping`` ``destination_key``. - :type destination_key: str - - :param if_not_exists: The ``mapping`` ``if_not_exists``. - :type if_not_exists: bool - - :param source_keys: The ``mapping`` ``source_keys``. - :type source_keys: [str] - """ - super().__init__(kwargs) - - self_.destination_key = destination_key - self_.if_not_exists = if_not_exists - self_.source_keys = source_keys diff --git a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.py b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.py index 1cf536d9f5..94d6731e7e 100644 --- a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.py +++ b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_query.py @@ -18,6 +18,9 @@ from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query_addition import ( UpdateRulesetRequestDataAttributesRulesItemsQueryAddition, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) class UpdateRulesetRequestDataAttributesRulesItemsQuery(ModelNormal): @@ -28,11 +31,15 @@ def openapi_types(_): from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query_addition import ( UpdateRulesetRequestDataAttributesRulesItemsQueryAddition, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) return { "addition": (UpdateRulesetRequestDataAttributesRulesItemsQueryAddition,), "case_insensitivity": (bool,), "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), "query": (str,), } @@ -40,15 +47,17 @@ def openapi_types(_): "addition": "addition", "case_insensitivity": "case_insensitivity", "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", "query": "query", } def __init__( self_, addition: Union[UpdateRulesetRequestDataAttributesRulesItemsQueryAddition, none_type], - if_not_exists: bool, query: str, case_insensitivity: Union[bool, UnsetType] = unset, + if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, **kwargs, ): """ @@ -60,16 +69,22 @@ def __init__( :param case_insensitivity: The ``query`` ``case_insensitivity``. :type case_insensitivity: bool, optional - :param if_not_exists: The ``query`` ``if_not_exists``. - :type if_not_exists: bool + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``query`` ``if_not_exists``. **Deprecated**. + :type if_not_exists: bool, optional + + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional :param query: The ``query`` ``query``. :type query: str """ if case_insensitivity is not unset: kwargs["case_insensitivity"] = case_insensitivity + if if_not_exists is not unset: + kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists super().__init__(kwargs) self_.addition = addition - self_.if_not_exists = if_not_exists self_.query = query diff --git a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.py b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.py index 0f2dbb7713..b35ae9a7db 100644 --- a/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.py +++ b/src/datadog_api_client/v2/model/update_ruleset_request_data_attributes_rules_items_reference_table.py @@ -17,6 +17,9 @@ from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import ( UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) class UpdateRulesetRequestDataAttributesRulesItemsReferenceTable(ModelNormal): @@ -27,11 +30,15 @@ def openapi_types(_): from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_reference_table_field_pairs_items import ( UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems, ) + from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import ( + DataAttributesRulesItemsIfTagExists, + ) return { "case_insensitivity": (bool,), "field_pairs": ([UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems],), "if_not_exists": (bool,), + "if_tag_exists": (DataAttributesRulesItemsIfTagExists,), "source_keys": ([str],), "table_name": (str,), } @@ -40,6 +47,7 @@ def openapi_types(_): "case_insensitivity": "case_insensitivity", "field_pairs": "field_pairs", "if_not_exists": "if_not_exists", + "if_tag_exists": "if_tag_exists", "source_keys": "source_keys", "table_name": "table_name", } @@ -51,6 +59,7 @@ def __init__( table_name: str, case_insensitivity: Union[bool, UnsetType] = unset, if_not_exists: Union[bool, UnsetType] = unset, + if_tag_exists: Union[DataAttributesRulesItemsIfTagExists, UnsetType] = unset, **kwargs, ): """ @@ -62,9 +71,12 @@ def __init__( :param field_pairs: The ``reference_table`` ``field_pairs``. :type field_pairs: [UpdateRulesetRequestDataAttributesRulesItemsReferenceTableFieldPairsItems] - :param if_not_exists: The ``reference_table`` ``if_not_exists``. + :param if_not_exists: Deprecated. Use ``if_tag_exists`` instead. The ``reference_table`` ``if_not_exists``. **Deprecated**. :type if_not_exists: bool, optional + :param if_tag_exists: The behavior when the tag already exists. + :type if_tag_exists: DataAttributesRulesItemsIfTagExists, optional + :param source_keys: The ``reference_table`` ``source_keys``. :type source_keys: [str] @@ -75,6 +87,8 @@ def __init__( kwargs["case_insensitivity"] = case_insensitivity if if_not_exists is not unset: kwargs["if_not_exists"] = if_not_exists + if if_tag_exists is not unset: + kwargs["if_tag_exists"] = if_tag_exists super().__init__(kwargs) self_.field_pairs = field_pairs diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index ae78d8b84b..3fa7932ad3 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -1132,9 +1132,6 @@ from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items import ( CreateRulesetRequestDataAttributesRulesItems, ) -from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_mapping import ( - CreateRulesetRequestDataAttributesRulesItemsMapping, -) from datadog_api_client.v2.model.create_ruleset_request_data_attributes_rules_items_query import ( CreateRulesetRequestDataAttributesRulesItemsQuery, ) @@ -1468,6 +1465,8 @@ from datadog_api_client.v2.model.dashboard_list_update_items_response import DashboardListUpdateItemsResponse from datadog_api_client.v2.model.dashboard_trigger_wrapper import DashboardTriggerWrapper from datadog_api_client.v2.model.dashboard_type import DashboardType +from datadog_api_client.v2.model.data_attributes_rules_items_if_tag_exists import DataAttributesRulesItemsIfTagExists +from datadog_api_client.v2.model.data_attributes_rules_items_mapping import DataAttributesRulesItemsMapping from datadog_api_client.v2.model.data_deletion_response_item import DataDeletionResponseItem from datadog_api_client.v2.model.data_deletion_response_item_attributes import DataDeletionResponseItemAttributes from datadog_api_client.v2.model.data_deletion_response_meta import DataDeletionResponseMeta @@ -4452,9 +4451,6 @@ from datadog_api_client.v2.model.ruleset_resp_data_attributes_created import RulesetRespDataAttributesCreated from datadog_api_client.v2.model.ruleset_resp_data_attributes_modified import RulesetRespDataAttributesModified from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items import RulesetRespDataAttributesRulesItems -from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_mapping import ( - RulesetRespDataAttributesRulesItemsMapping, -) from datadog_api_client.v2.model.ruleset_resp_data_attributes_rules_items_query import ( RulesetRespDataAttributesRulesItemsQuery, ) @@ -5835,9 +5831,6 @@ from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items import ( UpdateRulesetRequestDataAttributesRulesItems, ) -from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_mapping import ( - UpdateRulesetRequestDataAttributesRulesItemsMapping, -) from datadog_api_client.v2.model.update_ruleset_request_data_attributes_rules_items_query import ( UpdateRulesetRequestDataAttributesRulesItemsQuery, ) @@ -6861,7 +6854,6 @@ "CreateRulesetRequestData", "CreateRulesetRequestDataAttributes", "CreateRulesetRequestDataAttributesRulesItems", - "CreateRulesetRequestDataAttributesRulesItemsMapping", "CreateRulesetRequestDataAttributesRulesItemsQuery", "CreateRulesetRequestDataAttributesRulesItemsQueryAddition", "CreateRulesetRequestDataAttributesRulesItemsReferenceTable", @@ -7069,6 +7061,8 @@ "DashboardListUpdateItemsResponse", "DashboardTriggerWrapper", "DashboardType", + "DataAttributesRulesItemsIfTagExists", + "DataAttributesRulesItemsMapping", "DataDeletionResponseItem", "DataDeletionResponseItemAttributes", "DataDeletionResponseMeta", @@ -9181,7 +9175,6 @@ "RulesetRespDataAttributesCreated", "RulesetRespDataAttributesModified", "RulesetRespDataAttributesRulesItems", - "RulesetRespDataAttributesRulesItemsMapping", "RulesetRespDataAttributesRulesItemsQuery", "RulesetRespDataAttributesRulesItemsQueryAddition", "RulesetRespDataAttributesRulesItemsReferenceTable", @@ -10146,7 +10139,6 @@ "UpdateRulesetRequestData", "UpdateRulesetRequestDataAttributes", "UpdateRulesetRequestDataAttributesRulesItems", - "UpdateRulesetRequestDataAttributesRulesItemsMapping", "UpdateRulesetRequestDataAttributesRulesItemsQuery", "UpdateRulesetRequestDataAttributesRulesItemsQueryAddition", "UpdateRulesetRequestDataAttributesRulesItemsReferenceTable", diff --git a/tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.frozen b/tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.frozen new file mode 100644 index 0000000000..6f05e9c1d1 --- /dev/null +++ b/tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.frozen @@ -0,0 +1 @@ +2026-02-05T20:07:38.100Z \ No newline at end of file diff --git a/tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.yaml b/tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.yaml new file mode 100644 index 0000000000..02460eedb1 --- /dev/null +++ b/tests/v1/cassettes/test_scenarios/test_create_a_new_metric_slo_object_using_sli_specification_returns_ok_response.yaml @@ -0,0 +1,45 @@ +interactions: +- request: + body: '{"description":"Metric SLO using sli_specification","name":"Test-Create_a_new_metric_SLO_object_using_sli_specification_returns_OK_response-1770322058","sli_specification":{"count":{"good_events_formula":{"formula":"query1 + - query2"},"queries":[{"data_source":"metrics","name":"query1","query":"sum:httpservice.hits{*}.as_count()"},{"data_source":"metrics","name":"query2","query":"sum:httpservice.errors{*}.as_count()"}],"total_events_formula":{"formula":"query1"}}},"tags":["env:prod","type:count"],"target_threshold":99,"thresholds":[{"target":99,"target_display":"99.0","timeframe":"7d","warning":99.5,"warning_display":"99.5"}],"timeframe":"7d","type":"metric","warning_threshold":99.5}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v1/slo + response: + body: + string: '{"data":[{"id":"6e49f8aa9883507dbc719f00eede5a5d","name":"Test-Create_a_new_metric_SLO_object_using_sli_specification_returns_OK_response-1770322058","tags":["env:prod","type:count"],"monitor_tags":[],"thresholds":[{"timeframe":"7d","target":99.0,"target_display":"99.","warning":99.5,"warning_display":"99.5"}],"type":"metric","type_id":1,"description":"Metric + SLO using sli_specification","timeframe":"7d","warning_threshold":99.5,"target_threshold":99,"query":{"numerator":"sum:httpservice.hits{*}.as_count() + - sum:httpservice.errors{*}.as_count()","denominator":"sum:httpservice.hits{*}.as_count()"},"creator":{"name":"CI + Account","handle":"9919ec9b-ebc7-49ee-8dc8-03626e717cca","email":"team-intg-tools-libs-spam@datadoghq.com"},"created_at":1770322058,"modified_at":1770322058,"sli_specification":{"count":{"good_events_formula":{"formula":"query1 + - query2"},"queries":[{"data_source":"metrics","name":"query1","query":"sum:httpservice.hits{*}.as_count()"},{"data_source":"metrics","name":"query2","query":"sum:httpservice.errors{*}.as_count()"}],"total_events_formula":{"formula":"query1"}}}}],"error":null} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - application/json + method: DELETE + uri: https://api.datadoghq.com/api/v1/slo/6e49f8aa9883507dbc719f00eede5a5d + response: + body: + string: '{"data":["6e49f8aa9883507dbc719f00eede5a5d"],"error":null} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +version: 1 diff --git a/tests/v1/features/service_level_objectives.feature b/tests/v1/features/service_level_objectives.feature index c5534618a7..22c9d6cd3f 100644 --- a/tests/v1/features/service_level_objectives.feature +++ b/tests/v1/features/service_level_objectives.feature @@ -48,6 +48,23 @@ Feature: Service Level Objectives When the request is sent Then the response status is 200 OK + @team:DataDog/slo-app + Scenario: Create a new metric SLO object using sli_specification returns "OK" response + Given new "CreateSLO" request + And body with value {"type":"metric","description":"Metric SLO using sli_specification","name":"{{ unique }}","sli_specification":{"count":{"good_events_formula":{"formula":"query1 - query2"},"total_events_formula":{"formula":"query1"},"queries":[{"data_source":"metrics","name":"query1","query":"sum:httpservice.hits{*}.as_count()"},{"data_source":"metrics","name":"query2","query":"sum:httpservice.errors{*}.as_count()"}]}},"tags":["env:prod","type:count"],"thresholds":[{"target":99.0,"target_display":"99.0","timeframe":"7d","warning":99.5,"warning_display":"99.5"}],"timeframe":"7d","target_threshold":99.0,"warning_threshold":99.5} + When the request is sent + Then the response status is 200 OK + And the response "data[0].timeframe" is equal to "7d" + And the response "data[0].target_threshold" is equal to 99.0 + And the response "data[0].warning_threshold" is equal to 99.5 + And the response "data[0]" has field "sli_specification" + And the response "data[0].sli_specification" has field "count" + And the response "data[0].sli_specification.count" has field "good_events_formula" + And the response "data[0].sli_specification.count" has field "total_events_formula" + And the response "data[0].sli_specification.count" has field "queries" + And the response "data[0].sli_specification.count.queries" has length 2 + And the response "data[0]" has field "query" + @team:DataDog/slo-app Scenario: Create a time-slice SLO object returns "OK" response Given new "CreateSLO" request diff --git a/tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen new file mode 100644 index 0000000000..ed9c47c8e2 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen @@ -0,0 +1 @@ +2026-02-04T16:26:04.110Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml new file mode 100644 index 0000000000..b3626ca14b --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml @@ -0,0 +1,24 @@ +interactions: +- request: + body: '{"data":{"attributes":{"enabled":true,"rules":[{"enabled":true,"mapping":null,"name":"Add + Cost Center Tag","query":{"addition":{"key":"cost_center","value":"engineering"},"case_insensitivity":false,"if_tag_exists":"replace","query":"account_id:\"123456789\" + AND service:\"web-api\""},"reference_table":null}]},"id":"New Ruleset","type":"create_ruleset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/tags/enrichment + response: + body: + string: '{"data":{"id":"ee10c3ff-312f-464c-b4f6-46adaa6d00a1","type":"ruleset","attributes":{"created":{"seconds":1759947966,"nanos":679638000},"enabled":true,"last_modified_user_uuid":"3ad549bf-eba0-11e9-a77a-0705486660d0","modified":{"seconds":1759947966,"nanos":679638000},"name":"New + Ruleset","position":1,"rules":[{"name":"Add Cost Center Tag","enabled":true,"query":{"query":"account_id:\"123456789\" + AND service:\"web-api\"","addition":{"key":"cost_center","value":"engineering"},"if_tag_exists":"replace","case_insensitivity":false},"mapping":null,"reference_table":null,"metadata":null}],"version":3611102}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen new file mode 100644 index 0000000000..3de83d4268 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-10-08T19:15:10.916Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml new file mode 100644 index 0000000000..1bdb940241 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_update_tag_pipeline_ruleset_with_if_tag_exists_returns_ok_response.yaml @@ -0,0 +1,22 @@ +interactions: +- request: + body: '{"data":{"attributes":{"enabled":true,"last_version":3611102,"rules":[{"enabled":true,"mapping":{"destination_key":"team_owner","if_tag_exists":"replace","source_keys":["account_name","account_id"]},"name":"Account + Name Mapping","query":null,"reference_table":null}]},"id":"New Ruleset","type":"update_ruleset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PATCH + uri: https://api.datadoghq.com/api/v2/tags/enrichment/ee10c3ff-312f-464c-b4f6-46adaa6d00a1 + response: + body: + string: '{"data":{"id":"ee10c3ff-312f-464c-b4f6-46adaa6d00a1","type":"ruleset","attributes":{"created":{"seconds":1759950911,"nanos":31873000},"enabled":true,"last_modified_user_uuid":"3ad549bf-eba0-11e9-a77a-0705486660d0","modified":{"seconds":1759950911,"nanos":31873000},"name":"New + Ruleset","position":1,"rules":[{"name":"Account Name Mapping","enabled":true,"query":null,"mapping":{"source_keys":["account_name","account_id"],"destination_key":"team_owner","if_tag_exists":"replace"},"reference_table":null,"metadata":null}],"version":3611113}}}' + headers: + content-type: + - application/vnd.api+json + status: + code: 200 + message: OK +version: 1 diff --git a/tests/v2/features/cloud_cost_management.feature b/tests/v2/features/cloud_cost_management.feature index 66ccd680c2..312e05fb38 100644 --- a/tests/v2/features/cloud_cost_management.feature +++ b/tests/v2/features/cloud_cost_management.feature @@ -97,6 +97,15 @@ Feature: Cloud Cost Management And the response "data.type" is equal to "ruleset" And the response "data.attributes.name" is equal to "New Ruleset" + @replay-only @team:DataDog/cloud-cost-management + Scenario: Create tag pipeline ruleset with if_tag_exists returns "OK" response + Given new "CreateTagPipelinesRuleset" request + And body with value {"data": {"attributes": {"enabled": true, "rules": [{"enabled": true, "mapping": null, "name": "Add Cost Center Tag", "query": {"addition": {"key": "cost_center", "value": "engineering"}, "case_insensitivity": false, "if_tag_exists": "replace", "query": "account_id:\"123456789\" AND service:\"web-api\""}, "reference_table": null}]}, "id": "New Ruleset", "type": "create_ruleset"}} + When the request is sent + Then the response status is 200 OK + And the response "data.type" is equal to "ruleset" + And the response "data.attributes.name" is equal to "New Ruleset" + @generated @skip @team:DataDog/cloud-cost-management Scenario: Delete Cloud Cost Management AWS CUR config returns "Bad Request" response Given new "DeleteCostAWSCURConfig" request @@ -447,6 +456,14 @@ Feature: Cloud Cost Management When the request is sent Then the response status is 200 OK + @replay-only @team:DataDog/cloud-cost-management + Scenario: Update tag pipeline ruleset with if_tag_exists returns "OK" response + Given new "UpdateTagPipelinesRuleset" request + And request contains "ruleset_id" parameter with value "ee10c3ff-312f-464c-b4f6-46adaa6d00a1" + And body with value {"data": {"attributes": {"enabled": true, "last_version": 3611102, "rules": [{"enabled": true, "mapping": {"destination_key": "team_owner", "if_tag_exists": "replace", "source_keys": ["account_name", "account_id"]}, "name": "Account Name Mapping", "query": null, "reference_table": null}]}, "id": "New Ruleset", "type": "update_ruleset"}} + When the request is sent + Then the response status is 200 OK + @replay-only @team:DataDog/cloud-cost-management Scenario: Upload Custom Costs File returns "Accepted" response Given new "UploadCustomCostsFile" request