diff --git a/.generated-info b/.generated-info index 92376f869c..c3510ff322 100644 --- a/.generated-info +++ b/.generated-info @@ -1,4 +1,4 @@ { - "spec_repo_commit": "ab8171f", - "generated": "2025-07-31 17:34:02.923" + "spec_repo_commit": "672a533", + "generated": "2025-07-31 18:08:32.981" } diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 9e86624abd..ea57695f05 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -13145,31 +13145,33 @@ components: required: - type type: object - Dataset: - description: "Dataset object.\n\n### Datasets Constraints\n- **Tag Limit per - Dataset**:\n - Each restricted dataset supports a maximum of 10 key:value - pairs per product.\n\n- **Tag Key Rules per Telemetry Type**:\n - Only one - tag key or attribute may be used to define access within a single telemetry - type.\n - The same or different tag key may be used across different telemetry - types.\n\n- **Tag Value Uniqueness**:\n - Tag values must be unique within - a single dataset.\n - A tag value used in one dataset cannot be reused in - another dataset of the same telemetry type." + DatasetAttributesRequest: + description: Dataset metadata and configurations. properties: - attributes: - $ref: '#/components/schemas/DatasetAttributes' - id: - description: Unique identifier for the dataset. - example: 123e4567-e89b-12d3-a456-426614174000 - type: string - type: - description: Resource type, always "dataset". - example: dataset + name: + description: Name of the dataset. + example: Security Audit Dataset type: string + principals: + description: List of access principals, formatted as `principal_type:id`. + Principal can be 'team' or 'role'. + example: + - role:94172442-be03-11e9-a77a-3b7612558ac1 + items: + example: role:94172442-be03-11e9-a77a-3b7612558ac1 + type: string + type: array + product_filters: + description: List of product-specific filters. + items: + $ref: '#/components/schemas/FiltersPerProduct' + type: array required: - - type - - attributes + - name + - product_filters + - principals type: object - DatasetAttributes: + DatasetAttributesResponse: description: Dataset metadata and configuration(s). properties: created_at: @@ -13199,43 +13201,76 @@ components: items: $ref: '#/components/schemas/FiltersPerProduct' type: array - required: - - name - - product_filters - - principals type: object DatasetCreateRequest: description: Create request for a dataset. properties: data: - $ref: '#/components/schemas/Dataset' + $ref: '#/components/schemas/DatasetRequest' required: - data type: object + DatasetRequest: + description: "**Datasets Object Constraints**\n- **Tag limit per dataset**:\n + \ - Each restricted dataset supports a maximum of 10 key:value pairs per product.\n\n- + **Tag key rules per telemetry type**:\n - Only one tag key or attribute may + be used to define access within a single telemetry type.\n - The same or + different tag key may be used across different telemetry types.\n\n- **Tag + value uniqueness**:\n - Tag values must be unique within a single dataset.\n + \ - A tag value used in one dataset cannot be reused in another dataset of + the same telemetry type." + properties: + attributes: + $ref: '#/components/schemas/DatasetAttributesRequest' + type: + description: Resource type, always "dataset". + example: dataset + type: string + required: + - type + - attributes + type: object + DatasetResponse: + description: "**Datasets Object Constraints**\n- **Tag Limit per Dataset**:\n + \ - Each restricted dataset supports a maximum of 10 key:value pairs per product.\n\n- + **Tag Key Rules per Telemetry Type**:\n - Only one tag key or attribute may + be used to define access within a single telemetry type.\n - The same or + different tag key may be used across different telemetry types.\n\n- **Tag + Value Uniqueness**:\n - Tag values must be unique within a single dataset.\n + \ - A tag value used in one dataset cannot be reused in another dataset of + the same telemetry type." + properties: + attributes: + $ref: '#/components/schemas/DatasetAttributesResponse' + id: + description: Unique identifier for the dataset. + example: 123e4567-e89b-12d3-a456-426614174000 + type: string + type: + description: Resource type, always "dataset". + example: dataset + type: string + type: object DatasetResponseMulti: description: Response containing a list of datasets. properties: data: description: The list of datasets returned in response. items: - $ref: '#/components/schemas/Dataset' + $ref: '#/components/schemas/DatasetResponse' type: array - required: - - data type: object DatasetResponseSingle: description: Response containing a single dataset object. properties: data: - $ref: '#/components/schemas/Dataset' - required: - - data + $ref: '#/components/schemas/DatasetResponse' type: object DatasetUpdateRequest: description: Edit request for a dataset. properties: data: - $ref: '#/components/schemas/Dataset' + $ref: '#/components/schemas/DatasetRequest' required: - data type: object @@ -49913,6 +49948,9 @@ paths: operator: OR permissions: - user_access_read + x-unstable: '**Note: Data Access is in preview. If you have any feedback, + + contact [Datadog support](https://docs.datadoghq.com/help/).**' post: description: Create a dataset with the configurations in the request. operationId: CreateDataset @@ -49924,7 +49962,7 @@ paths: attributes: name: Test RUM Dataset principals: - - role:23bacb30-1c59-11f0-a596-da7ad0900002 + - role:94172442-be03-11e9-a77a-3b7612558ac1 product_filters: - filters: - '@application.id:application_123' @@ -49962,6 +50000,9 @@ paths: operator: OR permissions: - user_access_manage + x-unstable: '**Note: Data Access is in preview. If you have any feedback, + + contact [Datadog support](https://docs.datadoghq.com/help/).**' /api/v2/datasets/{dataset_id}: delete: description: Deletes the dataset associated with the ID. @@ -49989,6 +50030,9 @@ paths: x-permission: operator: OPEN permissions: [] + x-unstable: '**Note: Data Access is in preview. If you have any feedback, + + contact [Datadog support](https://docs.datadoghq.com/help/).**' get: description: Retrieves the dataset associated with the ID. operationId: GetDataset @@ -50019,6 +50063,9 @@ paths: x-permission: operator: OPEN permissions: [] + x-unstable: '**Note: Data Access is in preview. If you have any feedback, + + contact [Datadog support](https://docs.datadoghq.com/help/).**' put: description: Edits the dataset associated with the ID. operationId: UpdateDataset @@ -50057,6 +50104,9 @@ paths: x-permission: operator: OPEN permissions: [] + x-unstable: '**Note: Data Access is in preview. If you have any feedback, + + contact [Datadog support](https://docs.datadoghq.com/help/).**' /api/v2/deletion/data/{product}: post: description: Creates a data deletion request by providing a query and a timeframe diff --git a/docs/datadog_api_client.v2.model.rst b/docs/datadog_api_client.v2.model.rst index 995b6697e6..688325abd5 100644 --- a/docs/datadog_api_client.v2.model.rst +++ b/docs/datadog_api_client.v2.model.rst @@ -5247,17 +5247,17 @@ datadog\_api\_client.v2.model.datadog\_integration\_update module :members: :show-inheritance: -datadog\_api\_client.v2.model.dataset module --------------------------------------------- +datadog\_api\_client.v2.model.dataset\_attributes\_request module +----------------------------------------------------------------- -.. automodule:: datadog_api_client.v2.model.dataset +.. automodule:: datadog_api_client.v2.model.dataset_attributes_request :members: :show-inheritance: -datadog\_api\_client.v2.model.dataset\_attributes module --------------------------------------------------------- +datadog\_api\_client.v2.model.dataset\_attributes\_response module +------------------------------------------------------------------ -.. automodule:: datadog_api_client.v2.model.dataset_attributes +.. automodule:: datadog_api_client.v2.model.dataset_attributes_response :members: :show-inheritance: @@ -5268,6 +5268,20 @@ datadog\_api\_client.v2.model.dataset\_create\_request module :members: :show-inheritance: +datadog\_api\_client.v2.model.dataset\_request module +----------------------------------------------------- + +.. automodule:: datadog_api_client.v2.model.dataset_request + :members: + :show-inheritance: + +datadog\_api\_client.v2.model.dataset\_response module +------------------------------------------------------ + +.. automodule:: datadog_api_client.v2.model.dataset_response + :members: + :show-inheritance: + datadog\_api\_client.v2.model.dataset\_response\_multi module ------------------------------------------------------------- diff --git a/examples/v2/datasets/CreateDataset.py b/examples/v2/datasets/CreateDataset.py index 084ed22a5d..0d9850922e 100644 --- a/examples/v2/datasets/CreateDataset.py +++ b/examples/v2/datasets/CreateDataset.py @@ -4,34 +4,33 @@ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.datasets_api import DatasetsApi -from datadog_api_client.v2.model.dataset import Dataset -from datadog_api_client.v2.model.dataset_attributes import DatasetAttributes +from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest from datadog_api_client.v2.model.dataset_create_request import DatasetCreateRequest +from datadog_api_client.v2.model.dataset_request import DatasetRequest from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct body = DatasetCreateRequest( - data=Dataset( - attributes=DatasetAttributes( - created_at=None, + data=DatasetRequest( + attributes=DatasetAttributesRequest( name="Security Audit Dataset", principals=[ - "role:86245fce-0a4e-11f0-92bd-da7ad0900002", + "role:94172442-be03-11e9-a77a-3b7612558ac1", ], product_filters=[ FiltersPerProduct( filters=[ "@application.id:ABCD", ], - product="logs", + product="metrics", ), ], ), - id="123e4567-e89b-12d3-a456-426614174000", type="dataset", ), ) configuration = Configuration() +configuration.unstable_operations["create_dataset"] = True with ApiClient(configuration) as api_client: api_instance = DatasetsApi(api_client) response = api_instance.create_dataset(body=body) diff --git a/examples/v2/datasets/DeleteDataset.py b/examples/v2/datasets/DeleteDataset.py index fdb678dbef..a6b56baefe 100644 --- a/examples/v2/datasets/DeleteDataset.py +++ b/examples/v2/datasets/DeleteDataset.py @@ -2,12 +2,17 @@ Delete a dataset returns "No Content" response """ +from os import environ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.datasets_api import DatasetsApi +# there is a valid "dataset" in the system +DATASET_DATA_ID = environ["DATASET_DATA_ID"] + configuration = Configuration() +configuration.unstable_operations["delete_dataset"] = True with ApiClient(configuration) as api_client: api_instance = DatasetsApi(api_client) api_instance.delete_dataset( - dataset_id="dataset_id", + dataset_id=DATASET_DATA_ID, ) diff --git a/examples/v2/datasets/GetAllDatasets.py b/examples/v2/datasets/GetAllDatasets.py index 8c7957dcac..175b101396 100644 --- a/examples/v2/datasets/GetAllDatasets.py +++ b/examples/v2/datasets/GetAllDatasets.py @@ -6,6 +6,7 @@ from datadog_api_client.v2.api.datasets_api import DatasetsApi configuration = Configuration() +configuration.unstable_operations["get_all_datasets"] = True with ApiClient(configuration) as api_client: api_instance = DatasetsApi(api_client) response = api_instance.get_all_datasets() diff --git a/examples/v2/datasets/GetDataset.py b/examples/v2/datasets/GetDataset.py index 41b4e448d5..fbea1f2c5f 100644 --- a/examples/v2/datasets/GetDataset.py +++ b/examples/v2/datasets/GetDataset.py @@ -2,14 +2,19 @@ Get a single dataset by ID returns "OK" response """ +from os import environ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.datasets_api import DatasetsApi +# there is a valid "dataset" in the system +DATASET_DATA_ID = environ["DATASET_DATA_ID"] + configuration = Configuration() +configuration.unstable_operations["get_dataset"] = True with ApiClient(configuration) as api_client: api_instance = DatasetsApi(api_client) response = api_instance.get_dataset( - dataset_id="dataset_id", + dataset_id=DATASET_DATA_ID, ) print(response) diff --git a/examples/v2/datasets/UpdateDataset.py b/examples/v2/datasets/UpdateDataset.py index 7cc4a89a39..dcd26fa839 100644 --- a/examples/v2/datasets/UpdateDataset.py +++ b/examples/v2/datasets/UpdateDataset.py @@ -2,38 +2,41 @@ Edit a dataset returns "OK" response """ +from os import environ from datadog_api_client import ApiClient, Configuration from datadog_api_client.v2.api.datasets_api import DatasetsApi -from datadog_api_client.v2.model.dataset import Dataset -from datadog_api_client.v2.model.dataset_attributes import DatasetAttributes +from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest +from datadog_api_client.v2.model.dataset_request import DatasetRequest from datadog_api_client.v2.model.dataset_update_request import DatasetUpdateRequest from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct +# there is a valid "dataset" in the system +DATASET_DATA_ID = environ["DATASET_DATA_ID"] + body = DatasetUpdateRequest( - data=Dataset( - attributes=DatasetAttributes( - created_at=None, + data=DatasetRequest( + attributes=DatasetAttributesRequest( name="Security Audit Dataset", principals=[ - "role:86245fce-0a4e-11f0-92bd-da7ad0900002", + "role:94172442-be03-11e9-a77a-3b7612558ac1", ], product_filters=[ FiltersPerProduct( filters=[ - "@application.id:ABCD", + "@application.id:1234", ], - product="logs", + product="metrics", ), ], ), - id="123e4567-e89b-12d3-a456-426614174000", type="dataset", ), ) configuration = Configuration() +configuration.unstable_operations["update_dataset"] = True with ApiClient(configuration) as api_client: api_instance = DatasetsApi(api_client) - response = api_instance.update_dataset(dataset_id="dataset_id", body=body) + response = api_instance.update_dataset(dataset_id=DATASET_DATA_ID, body=body) print(response) diff --git a/src/datadog_api_client/configuration.py b/src/datadog_api_client/configuration.py index 03fb2a5256..f8000bce6c 100644 --- a/src/datadog_api_client/configuration.py +++ b/src/datadog_api_client/configuration.py @@ -255,6 +255,11 @@ def __init__( "v2.list_vulnerable_assets": False, "v2.mute_findings": False, "v2.run_historical_job": False, + "v2.create_dataset": False, + "v2.delete_dataset": False, + "v2.get_all_datasets": False, + "v2.get_dataset": False, + "v2.update_dataset": False, "v2.cancel_data_deletion_request": False, "v2.create_data_deletion_request": False, "v2.get_data_deletion_requests": False, diff --git a/src/datadog_api_client/v2/model/dataset_attributes_request.py b/src/datadog_api_client/v2/model/dataset_attributes_request.py new file mode 100644 index 0000000000..70e80fa905 --- /dev/null +++ b/src/datadog_api_client/v2/model/dataset_attributes_request.py @@ -0,0 +1,52 @@ +# 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, TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct + + +class DatasetAttributesRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct + + return { + "name": (str,), + "principals": ([str],), + "product_filters": ([FiltersPerProduct],), + } + + attribute_map = { + "name": "name", + "principals": "principals", + "product_filters": "product_filters", + } + + def __init__(self_, name: str, principals: List[str], product_filters: List[FiltersPerProduct], **kwargs): + """ + Dataset metadata and configurations. + + :param name: Name of the dataset. + :type name: str + + :param principals: List of access principals, formatted as ``principal_type:id``. Principal can be 'team' or 'role'. + :type principals: [str] + + :param product_filters: List of product-specific filters. + :type product_filters: [FiltersPerProduct] + """ + super().__init__(kwargs) + + self_.name = name + self_.principals = principals + self_.product_filters = product_filters diff --git a/src/datadog_api_client/v2/model/dataset_attributes.py b/src/datadog_api_client/v2/model/dataset_attributes_response.py similarity index 77% rename from src/datadog_api_client/v2/model/dataset_attributes.py rename to src/datadog_api_client/v2/model/dataset_attributes_response.py index 1fe773a49d..2925460f50 100644 --- a/src/datadog_api_client/v2/model/dataset_attributes.py +++ b/src/datadog_api_client/v2/model/dataset_attributes_response.py @@ -20,7 +20,7 @@ from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct -class DatasetAttributes(ModelNormal): +class DatasetAttributesResponse(ModelNormal): @cached_property def openapi_types(_): from datadog_api_client.v2.model.filters_per_product import FiltersPerProduct @@ -43,11 +43,11 @@ def openapi_types(_): def __init__( self_, - name: str, - principals: List[str], - product_filters: List[FiltersPerProduct], created_at: Union[datetime, none_type, UnsetType] = unset, created_by: Union[UUID, UnsetType] = unset, + name: Union[str, UnsetType] = unset, + principals: Union[List[str], UnsetType] = unset, + product_filters: Union[List[FiltersPerProduct], UnsetType] = unset, **kwargs, ): """ @@ -60,20 +60,22 @@ def __init__( :type created_by: UUID, optional :param name: Name of the dataset. - :type name: str + :type name: str, optional :param principals: List of access principals, formatted as ``principal_type:id``. Principal can be 'team' or 'role'. - :type principals: [str] + :type principals: [str], optional :param product_filters: List of product-specific filters. - :type product_filters: [FiltersPerProduct] + :type product_filters: [FiltersPerProduct], optional """ if created_at is not unset: kwargs["created_at"] = created_at if created_by is not unset: kwargs["created_by"] = created_by + if name is not unset: + kwargs["name"] = name + if principals is not unset: + kwargs["principals"] = principals + if product_filters is not unset: + kwargs["product_filters"] = product_filters super().__init__(kwargs) - - self_.name = name - self_.principals = principals - self_.product_filters = product_filters diff --git a/src/datadog_api_client/v2/model/dataset_create_request.py b/src/datadog_api_client/v2/model/dataset_create_request.py index 9d6c21534b..4e33205a96 100644 --- a/src/datadog_api_client/v2/model/dataset_create_request.py +++ b/src/datadog_api_client/v2/model/dataset_create_request.py @@ -12,47 +12,45 @@ if TYPE_CHECKING: - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_request import DatasetRequest class DatasetCreateRequest(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_request import DatasetRequest return { - "data": (Dataset,), + "data": (DatasetRequest,), } attribute_map = { "data": "data", } - def __init__(self_, data: Dataset, **kwargs): + def __init__(self_, data: DatasetRequest, **kwargs): """ Create request for a dataset. - :param data: Dataset object. - - **Datasets Constraints** + :param data: **Datasets Object Constraints** * - **Tag Limit per Dataset** : + **Tag limit per dataset** : * Each restricted dataset supports a maximum of 10 key:value pairs per product. * - **Tag Key Rules per Telemetry Type** : + **Tag key rules per telemetry type** : * Only one tag key or attribute may be used to define access within a single telemetry type. * The same or different tag key may be used across different telemetry types. * - **Tag Value Uniqueness** : + **Tag value uniqueness** : * Tag values must be unique within a single dataset. * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. - :type data: Dataset + :type data: DatasetRequest """ super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/model/dataset_request.py b/src/datadog_api_client/v2/model/dataset_request.py new file mode 100644 index 0000000000..fbb180cc40 --- /dev/null +++ b/src/datadog_api_client/v2/model/dataset_request.py @@ -0,0 +1,63 @@ +# Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +# This product includes software developed at Datadog (https://www.datadoghq.com/). +# Copyright 2019-Present Datadog, Inc. +from __future__ import annotations + +from typing import TYPE_CHECKING + +from datadog_api_client.model_utils import ( + ModelNormal, + cached_property, +) + + +if TYPE_CHECKING: + from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest + + +class DatasetRequest(ModelNormal): + @cached_property + def openapi_types(_): + from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest + + return { + "attributes": (DatasetAttributesRequest,), + "type": (str,), + } + + attribute_map = { + "attributes": "attributes", + "type": "type", + } + + def __init__(self_, attributes: DatasetAttributesRequest, type: str, **kwargs): + """ + **Datasets Object Constraints** + + * + **Tag limit per dataset** : + + * Each restricted dataset supports a maximum of 10 key:value pairs per product. + + * + **Tag key rules per telemetry type** : + + * Only one tag key or attribute may be used to define access within a single telemetry type. + * The same or different tag key may be used across different telemetry types. + + * + **Tag value uniqueness** : + + * Tag values must be unique within a single dataset. + * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + + :param attributes: Dataset metadata and configurations. + :type attributes: DatasetAttributesRequest + + :param type: Resource type, always "dataset". + :type type: str + """ + super().__init__(kwargs) + + self_.attributes = attributes + self_.type = type diff --git a/src/datadog_api_client/v2/model/dataset.py b/src/datadog_api_client/v2/model/dataset_response.py similarity index 67% rename from src/datadog_api_client/v2/model/dataset.py rename to src/datadog_api_client/v2/model/dataset_response.py index 143bece077..ea47c390ea 100644 --- a/src/datadog_api_client/v2/model/dataset.py +++ b/src/datadog_api_client/v2/model/dataset_response.py @@ -14,16 +14,16 @@ if TYPE_CHECKING: - from datadog_api_client.v2.model.dataset_attributes import DatasetAttributes + from datadog_api_client.v2.model.dataset_attributes_response import DatasetAttributesResponse -class Dataset(ModelNormal): +class DatasetResponse(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.dataset_attributes import DatasetAttributes + from datadog_api_client.v2.model.dataset_attributes_response import DatasetAttributesResponse return { - "attributes": (DatasetAttributes,), + "attributes": (DatasetAttributesResponse,), "id": (str,), "type": (str,), } @@ -34,11 +34,15 @@ def openapi_types(_): "type": "type", } - def __init__(self_, attributes: DatasetAttributes, type: str, id: Union[str, UnsetType] = unset, **kwargs): + def __init__( + self_, + attributes: Union[DatasetAttributesResponse, UnsetType] = unset, + id: Union[str, UnsetType] = unset, + type: Union[str, UnsetType] = unset, + **kwargs, + ): """ - Dataset object. - - **Datasets Constraints** + **Datasets Object Constraints** * **Tag Limit per Dataset** : @@ -58,17 +62,18 @@ def __init__(self_, attributes: DatasetAttributes, type: str, id: Union[str, Uns * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. :param attributes: Dataset metadata and configuration(s). - :type attributes: DatasetAttributes + :type attributes: DatasetAttributesResponse, optional :param id: Unique identifier for the dataset. :type id: str, optional :param type: Resource type, always "dataset". - :type type: str + :type type: str, optional """ + if attributes is not unset: + kwargs["attributes"] = attributes if id is not unset: kwargs["id"] = id + if type is not unset: + kwargs["type"] = type super().__init__(kwargs) - - self_.attributes = attributes - self_.type = type diff --git a/src/datadog_api_client/v2/model/dataset_response_multi.py b/src/datadog_api_client/v2/model/dataset_response_multi.py index 97b769d8d9..7487abecc6 100644 --- a/src/datadog_api_client/v2/model/dataset_response_multi.py +++ b/src/datadog_api_client/v2/model/dataset_response_multi.py @@ -3,38 +3,40 @@ # Copyright 2019-Present Datadog, Inc. from __future__ import annotations -from typing import List, TYPE_CHECKING +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.dataset import Dataset + from datadog_api_client.v2.model.dataset_response import DatasetResponse class DatasetResponseMulti(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_response import DatasetResponse return { - "data": ([Dataset],), + "data": ([DatasetResponse],), } attribute_map = { "data": "data", } - def __init__(self_, data: List[Dataset], **kwargs): + def __init__(self_, data: Union[List[DatasetResponse], UnsetType] = unset, **kwargs): """ Response containing a list of datasets. :param data: The list of datasets returned in response. - :type data: [Dataset] + :type data: [DatasetResponse], optional """ + if data is not unset: + kwargs["data"] = data super().__init__(kwargs) - - self_.data = data diff --git a/src/datadog_api_client/v2/model/dataset_response_single.py b/src/datadog_api_client/v2/model/dataset_response_single.py index 463f3e627a..2af6e634e2 100644 --- a/src/datadog_api_client/v2/model/dataset_response_single.py +++ b/src/datadog_api_client/v2/model/dataset_response_single.py @@ -3,38 +3,38 @@ # Copyright 2019-Present Datadog, Inc. from __future__ import annotations -from typing import TYPE_CHECKING +from typing import Union, TYPE_CHECKING from datadog_api_client.model_utils import ( ModelNormal, cached_property, + unset, + UnsetType, ) if TYPE_CHECKING: - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_response import DatasetResponse class DatasetResponseSingle(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_response import DatasetResponse return { - "data": (Dataset,), + "data": (DatasetResponse,), } attribute_map = { "data": "data", } - def __init__(self_, data: Dataset, **kwargs): + def __init__(self_, data: Union[DatasetResponse, UnsetType] = unset, **kwargs): """ Response containing a single dataset object. - :param data: Dataset object. - - **Datasets Constraints** + :param data: **Datasets Object Constraints** * **Tag Limit per Dataset** : @@ -52,8 +52,8 @@ def __init__(self_, data: Dataset, **kwargs): * Tag values must be unique within a single dataset. * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. - :type data: Dataset + :type data: DatasetResponse, optional """ + if data is not unset: + kwargs["data"] = data super().__init__(kwargs) - - self_.data = data diff --git a/src/datadog_api_client/v2/model/dataset_update_request.py b/src/datadog_api_client/v2/model/dataset_update_request.py index aab34ff704..33a07c76cb 100644 --- a/src/datadog_api_client/v2/model/dataset_update_request.py +++ b/src/datadog_api_client/v2/model/dataset_update_request.py @@ -12,47 +12,45 @@ if TYPE_CHECKING: - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_request import DatasetRequest class DatasetUpdateRequest(ModelNormal): @cached_property def openapi_types(_): - from datadog_api_client.v2.model.dataset import Dataset + from datadog_api_client.v2.model.dataset_request import DatasetRequest return { - "data": (Dataset,), + "data": (DatasetRequest,), } attribute_map = { "data": "data", } - def __init__(self_, data: Dataset, **kwargs): + def __init__(self_, data: DatasetRequest, **kwargs): """ Edit request for a dataset. - :param data: Dataset object. - - **Datasets Constraints** + :param data: **Datasets Object Constraints** * - **Tag Limit per Dataset** : + **Tag limit per dataset** : * Each restricted dataset supports a maximum of 10 key:value pairs per product. * - **Tag Key Rules per Telemetry Type** : + **Tag key rules per telemetry type** : * Only one tag key or attribute may be used to define access within a single telemetry type. * The same or different tag key may be used across different telemetry types. * - **Tag Value Uniqueness** : + **Tag value uniqueness** : * Tag values must be unique within a single dataset. * A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. - :type data: Dataset + :type data: DatasetRequest """ super().__init__(kwargs) diff --git a/src/datadog_api_client/v2/models/__init__.py b/src/datadog_api_client/v2/models/__init__.py index aef60f5452..63b442cffe 100644 --- a/src/datadog_api_client/v2/models/__init__.py +++ b/src/datadog_api_client/v2/models/__init__.py @@ -1037,9 +1037,11 @@ from datadog_api_client.v2.model.datadog_integration import DatadogIntegration from datadog_api_client.v2.model.datadog_integration_type import DatadogIntegrationType from datadog_api_client.v2.model.datadog_integration_update import DatadogIntegrationUpdate -from datadog_api_client.v2.model.dataset import Dataset -from datadog_api_client.v2.model.dataset_attributes import DatasetAttributes +from datadog_api_client.v2.model.dataset_attributes_request import DatasetAttributesRequest +from datadog_api_client.v2.model.dataset_attributes_response import DatasetAttributesResponse from datadog_api_client.v2.model.dataset_create_request import DatasetCreateRequest +from datadog_api_client.v2.model.dataset_request import DatasetRequest +from datadog_api_client.v2.model.dataset_response import DatasetResponse from datadog_api_client.v2.model.dataset_response_multi import DatasetResponseMulti from datadog_api_client.v2.model.dataset_response_single import DatasetResponseSingle from datadog_api_client.v2.model.dataset_update_request import DatasetUpdateRequest @@ -4574,9 +4576,11 @@ "DatadogIntegration", "DatadogIntegrationType", "DatadogIntegrationUpdate", - "Dataset", - "DatasetAttributes", + "DatasetAttributesRequest", + "DatasetAttributesResponse", "DatasetCreateRequest", + "DatasetRequest", + "DatasetResponse", "DatasetResponseMulti", "DatasetResponseSingle", "DatasetUpdateRequest", diff --git a/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_bad_request_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_bad_request_response.frozen new file mode 100644 index 0000000000..71929eb2a5 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_bad_request_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:57.144Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_bad_request_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_bad_request_response.yaml new file mode 100644 index 0000000000..b9268a28e3 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_bad_request_response.yaml @@ -0,0 +1,20 @@ +interactions: +- request: + body: '{"test":"bad_request"}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"errors":["Invalid request: Request body contains invalid json"]}' + headers: + content-type: + - application/json + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_conflict_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_conflict_response.frozen new file mode 100644 index 0000000000..f6e462458c --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_conflict_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:57.324Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_conflict_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_conflict_response.yaml new file mode 100644 index 0000000000..f9f21f3ce9 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_conflict_response.yaml @@ -0,0 +1,60 @@ +interactions: +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":{"type":"dataset","id":"7cbada94-7d01-4e73-8c74-ea70fb3b3088","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"errors":["Invalid request: [DatasetNameConflict] dataset with name + \"Security Audit Dataset\" already exists"]} + + ' + headers: + content-type: + - application/json + status: + code: 409 + message: Conflict +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/7cbada94-7d01-4e73-8c74-ea70fb3b3088 + response: + body: + string: '' + headers: + content-type: + - application/json + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_ok_response.frozen new file mode 100644 index 0000000000..a11869c8f1 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:57.839Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_ok_response.yaml new file mode 100644 index 0000000000..edd4d80e8f --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_create_a_dataset_returns_ok_response.yaml @@ -0,0 +1,39 @@ +interactions: +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":{"type":"dataset","id":"86f67664-8b7b-49ae-b671-919ebe11886c","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/86f67664-8b7b-49ae-b671-919ebe11886c + response: + body: + string: '' + headers: + content-type: + - application/json + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_bad_request_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_bad_request_response.frozen new file mode 100644 index 0000000000..5c83b1435b --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_bad_request_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:58.251Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_bad_request_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_bad_request_response.yaml new file mode 100644 index 0000000000..329f7f506d --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_bad_request_response.yaml @@ -0,0 +1,21 @@ +interactions: +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/malformed_id + response: + body: + string: '{"errors":["Invalid request: [UUIDInvalidValue] \"malformed_id\" is + not a valid UUID: invalid UUID length: 12"]} + + ' + headers: + content-type: + - application/json + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_no_content_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_no_content_response.frozen new file mode 100644 index 0000000000..3f1f084a92 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_no_content_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:58.429Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_no_content_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_no_content_response.yaml new file mode 100644 index 0000000000..af8a98eeea --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_no_content_response.yaml @@ -0,0 +1,58 @@ +interactions: +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":{"type":"dataset","id":"60ee6562-48f5-455f-bdb4-fd3f5f899978","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/60ee6562-48f5-455f-bdb4-fd3f5f899978 + response: + body: + string: '' + headers: + content-type: + - application/json + status: + code: 204 + message: No Content +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/60ee6562-48f5-455f-bdb4-fd3f5f899978 + response: + body: + string: '{"errors":["Invalid request: [DatasetNotFound] dataset \"60ee6562-48f5-455f-bdb4-fd3f5f899978\" + not found"]} + + ' + headers: + content-type: + - application/json + status: + code: 404 + message: Not Found +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_not_found_response.frozen b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_not_found_response.frozen new file mode 100644 index 0000000000..a6e2fb8464 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_not_found_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:58.996Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_not_found_response.yaml b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_not_found_response.yaml new file mode 100644 index 0000000000..41e682bd4f --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_delete_a_dataset_returns_not_found_response.yaml @@ -0,0 +1,21 @@ +interactions: +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/00000000-0000-0000-0000-000000000000 + response: + body: + string: '{"errors":["Invalid request: [DatasetNotFound] dataset \"00000000-0000-0000-0000-000000000000\" + not found"]} + + ' + headers: + content-type: + - application/json + status: + code: 404 + message: Not Found +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_bad_request_response.frozen b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_bad_request_response.frozen new file mode 100644 index 0000000000..cdc3a3a57a --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_bad_request_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:59.180Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_bad_request_response.yaml b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_bad_request_response.yaml new file mode 100644 index 0000000000..20b47f318c --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_bad_request_response.yaml @@ -0,0 +1,20 @@ +interactions: +- request: + body: null + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/datasets/malformed_id + response: + body: + string: '{"errors":["Invalid request: Request body contains invalid json"]}' + headers: + content-type: + - application/json + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_ok_response.frozen new file mode 100644 index 0000000000..89c4ccef77 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:35:59.399Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_ok_response.yaml new file mode 100644 index 0000000000..bd5145af3a --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_edit_a_dataset_returns_ok_response.yaml @@ -0,0 +1,60 @@ +interactions: +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":{"type":"dataset","id":"2bf848a1-b18a-4602-8348-814a53862c52","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:1234"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: PUT + uri: https://api.datadoghq.com/api/v2/datasets/2bf848a1-b18a-4602-8348-814a53862c52 + response: + body: + string: '{"data":{"type":"dataset","id":"2bf848a1-b18a-4602-8348-814a53862c52","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:1234"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/2bf848a1-b18a-4602-8348-814a53862c52 + response: + body: + string: '' + headers: + content-type: + - application/json + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_bad_request_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_bad_request_response.frozen new file mode 100644 index 0000000000..f1b5154444 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_bad_request_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:36:00.009Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_bad_request_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_bad_request_response.yaml new file mode 100644 index 0000000000..23883ff05a --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_bad_request_response.yaml @@ -0,0 +1,21 @@ +interactions: +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/datasets/malformed_id + response: + body: + string: '{"errors":["Invalid request: [UUIDInvalidValue] \"malformed_id\" is + not a valid UUID: invalid UUID length: 12"]} + + ' + headers: + content-type: + - application/json + status: + code: 400 + message: Bad Request +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_ok_response.frozen new file mode 100644 index 0000000000..e339d721db --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:36:00.186Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_ok_response.yaml new file mode 100644 index 0000000000..68b97520b8 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_a_single_dataset_by_id_returns_ok_response.yaml @@ -0,0 +1,58 @@ +interactions: +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":{"type":"dataset","id":"9e576299-3cc1-4145-8aad-67a1ab914829","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/datasets/9e576299-3cc1-4145-8aad-67a1ab914829 + response: + body: + string: '{"data":{"type":"dataset","id":"9e576299-3cc1-4145-8aad-67a1ab914829","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/9e576299-3cc1-4145-8aad-67a1ab914829 + response: + body: + string: '' + headers: + content-type: + - application/json + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/cassettes/test_scenarios/test_get_all_datasets_returns_ok_response.frozen b/tests/v2/cassettes/test_scenarios/test_get_all_datasets_returns_ok_response.frozen new file mode 100644 index 0000000000..7db64cb6bc --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_all_datasets_returns_ok_response.frozen @@ -0,0 +1 @@ +2025-07-29T20:36:00.713Z \ No newline at end of file diff --git a/tests/v2/cassettes/test_scenarios/test_get_all_datasets_returns_ok_response.yaml b/tests/v2/cassettes/test_scenarios/test_get_all_datasets_returns_ok_response.yaml new file mode 100644 index 0000000000..cefaac1303 --- /dev/null +++ b/tests/v2/cassettes/test_scenarios/test_get_all_datasets_returns_ok_response.yaml @@ -0,0 +1,58 @@ +interactions: +- request: + body: '{"data":{"attributes":{"name":"Security Audit Dataset","principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"product_filters":[{"filters":["@application.id:ABCD"],"product":"metrics"}]},"type":"dataset"}}' + headers: + accept: + - application/json + content-type: + - application/json + method: POST + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":{"type":"dataset","id":"b0f617b4-affb-4411-970a-2c157933514c","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"]}}} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - application/json + method: GET + uri: https://api.datadoghq.com/api/v2/datasets + response: + body: + string: '{"data":[{"type":"dataset","id":"b0f617b4-affb-4411-970a-2c157933514c","attributes":{"name":"Security + Audit Dataset","product_filters":[{"product":"metrics","filters":["@application.id:ABCD"]}],"principals":["role:94172442-be03-11e9-a77a-3b7612558ac1"],"created_by":"3ad549bf-eba0-11e9-a77a-0705486660d0","created_at":"2025-07-29T20:36:00.94442Z"}}]} + + ' + headers: + content-type: + - application/json + status: + code: 200 + message: OK +- request: + body: null + headers: + accept: + - '*/*' + method: DELETE + uri: https://api.datadoghq.com/api/v2/datasets/b0f617b4-affb-4411-970a-2c157933514c + response: + body: + string: '' + headers: + content-type: + - application/json + status: + code: 204 + message: No Content +version: 1 diff --git a/tests/v2/features/datasets.feature b/tests/v2/features/datasets.feature index 4a220a3c84..f4d4ac7888 100644 --- a/tests/v2/features/datasets.feature +++ b/tests/v2/features/datasets.feature @@ -11,95 +11,113 @@ Feature: Datasets And a valid "appKeyAuth" key in the system And an instance of "Datasets" API - @generated @skip @team:DataDog/aaa-granular-access + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-typescript @skip-validation @team:DataDog/aaa-granular-access Scenario: Create a dataset returns "Bad Request" response Given new "CreateDataset" request - And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + And operation "CreateDataset" enabled + And body with value {"test": "bad_request"} When the request is sent Then the response status is 400 Bad Request - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Create a dataset returns "Conflict" response - Given new "CreateDataset" request - And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + Given there is a valid "dataset" in the system + And operation "CreateDataset" enabled + And new "CreateDataset" request + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "metrics"}]}, "type": "dataset"}} When the request is sent Then the response status is 409 Conflict - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Create a dataset returns "OK" response Given new "CreateDataset" request - And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + And operation "CreateDataset" enabled + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "metrics"}]}, "type": "dataset"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Delete a dataset returns "Bad Request" response Given new "DeleteDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" + And operation "DeleteDataset" enabled + And request contains "dataset_id" parameter with value "malformed_id" When the request is sent Then the response status is 400 Bad Request - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Delete a dataset returns "No Content" response - Given new "DeleteDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" + Given there is a valid "dataset" in the system + And operation "DeleteDataset" enabled + And new "DeleteDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" When the request is sent Then the response status is 204 No Content - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Delete a dataset returns "Not Found" response Given new "DeleteDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" + And operation "DeleteDataset" enabled + And request contains "dataset_id" parameter with value "00000000-0000-0000-0000-000000000000" When the request is sent Then the response status is 404 Not Found - @generated @skip @team:DataDog/aaa-granular-access + @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-typescript @skip-validation @team:DataDog/aaa-granular-access Scenario: Edit a dataset returns "Bad Request" response Given new "UpdateDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" - And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + And operation "UpdateDataset" enabled + And request contains "dataset_id" parameter with value "malformed_id" When the request is sent Then the response status is 400 Bad Request - @generated @skip @team:DataDog/aaa-granular-access + @skip @team:DataDog/aaa-granular-access Scenario: Edit a dataset returns "Not Found" response - Given new "UpdateDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" - And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + Given there is a valid "dataset" in the system + And operation "UpdateDataset" enabled + And new "UpdateDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "metrics"}]}, "type": "dataset"}} When the request is sent Then the response status is 404 Not Found - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Edit a dataset returns "OK" response - Given new "UpdateDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" - And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + Given there is a valid "dataset" in the system + And operation "UpdateDataset" enabled + And new "UpdateDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" + And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "metrics"}]}, "type": "dataset"}} When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Get a single dataset by ID returns "Bad Request" response Given new "GetDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" + And operation "GetDataset" enabled + And request contains "dataset_id" parameter with value "malformed_id" When the request is sent Then the response status is 400 Bad Request - @generated @skip @team:DataDog/aaa-granular-access + @skip @team:DataDog/aaa-granular-access Scenario: Get a single dataset by ID returns "Not Found" response - Given new "GetDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" + Given operation "GetDataset" enabled + And new "GetDataset" request + And request contains "dataset_id" parameter with value "00000000-0000-0000-0000-000000000000" When the request is sent Then the response status is 404 Not Found - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Get a single dataset by ID returns "OK" response - Given new "GetDataset" request - And request contains "dataset_id" parameter from "REPLACE.ME" + Given there is a valid "dataset" in the system + And operation "GetDataset" enabled + And new "GetDataset" request + And request contains "dataset_id" parameter from "dataset.data.id" When the request is sent Then the response status is 200 OK - @generated @skip @team:DataDog/aaa-granular-access + @team:DataDog/aaa-granular-access Scenario: Get all datasets returns "OK" response - Given new "GetAllDatasets" request + Given there is a valid "dataset" in the system + And operation "GetAllDatasets" enabled + And new "GetAllDatasets" request When the request is sent Then the response status is 200 OK diff --git a/tests/v2/features/given.json b/tests/v2/features/given.json index 9a7a555768..d1f630f71a 100644 --- a/tests/v2/features/given.json +++ b/tests/v2/features/given.json @@ -176,6 +176,19 @@ "tag": "Dashboard Lists", "operationId": "CreateDashboardListItems" }, + { + "parameters": [ + { + "name": "body", + "origin": "request", + "value": "{\n \"data\": {\n \"attributes\": {\n \"name\": \"Security Audit Dataset\",\n \"principals\": [\n \"role:94172442-be03-11e9-a77a-3b7612558ac1\"\n ],\n \"product_filters\": [\n {\n \"filters\": [\n \"@application.id:ABCD\"\n ],\n \"product\": \"metrics\"\n }\n ]\n },\n \"type\": \"dataset\"\n }\n}" + } + ], + "step": "there is a valid \"dataset\" in the system", + "key": "dataset", + "tag": "Datasets", + "operationId": "CreateDataset" + }, { "parameters": [ { diff --git a/tests/v2/features/undo.json b/tests/v2/features/undo.json index 53bef5692a..40ab14773c 100644 --- a/tests/v2/features/undo.json +++ b/tests/v2/features/undo.json @@ -875,7 +875,7 @@ "operationId": "DeleteDataset", "parameters": [ { - "name": "id", + "name": "dataset_id", "source": "data.id" } ],