awswrangler/quicksight/_delete.py (141 lines of code) (raw):
"""Amazon QuickSight Delete Module."""
from __future__ import annotations
import logging
import re
from typing import Any, Callable
import boto3
from awswrangler import _utils, exceptions, sts
from awswrangler.quicksight._get_list import (
get_dashboard_id,
get_data_source_id,
get_dataset_id,
get_template_id,
list_dashboards,
list_data_sources,
list_datasets,
list_templates,
)
_logger: logging.Logger = logging.getLogger(__name__)
def _delete(
func_name: str, account_id: str | None = None, boto3_session: boto3.Session | None = None, **kwargs: Any
) -> None:
if account_id is None:
account_id = sts.get_account_id(boto3_session=boto3_session)
client = _utils.client(service_name="quicksight", session=boto3_session)
func: Callable[..., None] = getattr(client, func_name)
func(AwsAccountId=account_id, **kwargs)
def delete_dashboard(
name: str | None = None,
dashboard_id: str | None = None,
version_number: int | None = None,
account_id: str | None = None,
boto3_session: boto3.Session | None = None,
) -> None:
"""Delete a dashboard.
Note
----
You must pass a not None ``name`` or ``dashboard_id`` argument.
Parameters
----------
name
Dashboard name.
dashboard_id
The ID for the dashboard.
version_number
The version number of the dashboard. If the version number property is provided,
only the specified version of the dashboard is deleted.
account_id
If None, the account ID will be inferred from your boto3 session.
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_dashboard(name="...")
"""
if (name is None) and (dashboard_id is None):
raise exceptions.InvalidArgument("You must pass a not None name or dashboard_id argument.")
if (dashboard_id is None) and (name is not None):
dashboard_id = get_dashboard_id(name=name, account_id=account_id, boto3_session=boto3_session)
args: dict[str, Any] = {
"func_name": "delete_dashboard",
"account_id": account_id,
"boto3_session": boto3_session,
"DashboardId": dashboard_id,
}
if version_number is not None:
args["VersionNumber"] = version_number
_delete(**args)
def delete_dataset(
name: str | None = None,
dataset_id: str | None = None,
account_id: str | None = None,
boto3_session: boto3.Session | None = None,
) -> None:
"""Delete a dataset.
Note
----
You must pass a not None ``name`` or ``dataset_id`` argument.
Parameters
----------
name
Dashboard name.
dataset_id
The ID for the dataset.
account_id
If None, the account ID will be inferred from your boto3 session.
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_dataset(name="...")
"""
if (name is None) and (dataset_id is None):
raise exceptions.InvalidArgument("You must pass a not None name or dataset_id argument.")
if (dataset_id is None) and (name is not None):
dataset_id = get_dataset_id(name=name, account_id=account_id, boto3_session=boto3_session)
args: dict[str, Any] = {
"func_name": "delete_data_set",
"account_id": account_id,
"boto3_session": boto3_session,
"DataSetId": dataset_id,
}
_delete(**args)
def delete_data_source(
name: str | None = None,
data_source_id: str | None = None,
account_id: str | None = None,
boto3_session: boto3.Session | None = None,
) -> None:
"""Delete a data source.
Note
----
You must pass a not None ``name`` or ``data_source_id`` argument.
Parameters
----------
name
Dashboard name.
data_source_id
The ID for the data source.
account_id
If None, the account ID will be inferred from your boto3 session.
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_data_source(name="...")
"""
if (name is None) and (data_source_id is None):
raise exceptions.InvalidArgument("You must pass a not None name or data_source_id argument.")
if (data_source_id is None) and (name is not None):
data_source_id = get_data_source_id(name=name, account_id=account_id, boto3_session=boto3_session)
args: dict[str, Any] = {
"func_name": "delete_data_source",
"account_id": account_id,
"boto3_session": boto3_session,
"DataSourceId": data_source_id,
}
_delete(**args)
def delete_template(
name: str | None = None,
template_id: str | None = None,
version_number: int | None = None,
account_id: str | None = None,
boto3_session: boto3.Session | None = None,
) -> None:
"""Delete a template.
Note
----
You must pass a not None ``name`` or ``template_id`` argument.
Parameters
----------
name
Dashboard name.
template_id
The ID for the dashboard.
version_number
Specifies the version of the template that you want to delete.
If you don't provide a version number, it deletes all versions of the template.
account_id
If None, the account ID will be inferred from your boto3 session.
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_template(name="...")
"""
if (name is None) and (template_id is None):
raise exceptions.InvalidArgument("You must pass a not None name or template_id argument.")
if (template_id is None) and (name is not None):
template_id = get_template_id(name=name, account_id=account_id, boto3_session=boto3_session)
args: dict[str, Any] = {
"func_name": "delete_template",
"account_id": account_id,
"boto3_session": boto3_session,
"TemplateId": template_id,
}
if version_number is not None:
args["VersionNumber"] = version_number
_delete(**args)
def delete_all_dashboards(
account_id: str | None = None, regex_filter: str | None = None, boto3_session: boto3.Session | None = None
) -> None:
"""Delete all dashboards.
Parameters
----------
account_id
If None, the account ID will be inferred from your boto3 session.
regex_filter
Regex regex_filter that will delete all dashboards with a match in their ``Name``
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_all_dashboards()
"""
if account_id is None:
account_id = sts.get_account_id(boto3_session=boto3_session)
for dashboard in list_dashboards(account_id=account_id, boto3_session=boto3_session):
if regex_filter:
if not re.search(f"^{regex_filter}$", dashboard["Name"]):
continue
delete_dashboard(dashboard_id=dashboard["DashboardId"], account_id=account_id, boto3_session=boto3_session)
def delete_all_datasets(
account_id: str | None = None, regex_filter: str | None = None, boto3_session: boto3.Session | None = None
) -> None:
"""Delete all datasets.
Parameters
----------
account_id
If None, the account ID will be inferred from your boto3 session.
regex_filter
Regex regex_filter that will delete all datasets with a match in their ``Name``
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_all_datasets()
"""
if account_id is None:
account_id = sts.get_account_id(boto3_session=boto3_session)
for dataset in list_datasets(account_id=account_id, boto3_session=boto3_session):
if regex_filter:
if not re.search(f"^{regex_filter}$", dataset["Name"]):
continue
delete_dataset(dataset_id=dataset["DataSetId"], account_id=account_id, boto3_session=boto3_session)
def delete_all_data_sources(
account_id: str | None = None, regex_filter: str | None = None, boto3_session: boto3.Session | None = None
) -> None:
"""Delete all data sources.
Parameters
----------
account_id
If None, the account ID will be inferred from your boto3 session.
regex_filter
Regex regex_filter that will delete all data sources with a match in their ``Name``
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_all_data_sources()
"""
if account_id is None:
account_id = sts.get_account_id(boto3_session=boto3_session)
for data_source in list_data_sources(account_id=account_id, boto3_session=boto3_session):
if regex_filter:
if not re.search(f"^{regex_filter}$", data_source["Name"]):
continue
delete_data_source(
data_source_id=data_source["DataSourceId"], account_id=account_id, boto3_session=boto3_session
)
def delete_all_templates(
account_id: str | None = None, regex_filter: str | None = None, boto3_session: boto3.Session | None = None
) -> None:
"""Delete all templates.
Parameters
----------
account_id
If None, the account ID will be inferred from your boto3 session.
regex_filter
Regex regex_filter that will delete all templates with a match in their ``Name``
boto3_session
The default boto3 session will be used if **boto3_session** is ``None``.
Examples
--------
>>> import awswrangler as wr
>>> wr.quicksight.delete_all_templates()
"""
if account_id is None:
account_id = sts.get_account_id(boto3_session=boto3_session)
for template in list_templates(account_id=account_id, boto3_session=boto3_session):
if regex_filter:
if not re.search(f"^{regex_filter}$", template["Name"]):
continue
delete_template(template_id=template["TemplateId"], account_id=account_id, boto3_session=boto3_session)