"""
Type annotations for lakeformation service type definitions.

[Documentation](https://youtype.github.io/boto3_stubs_docs/mypy_boto3_lakeformation/type_defs/)

Copyright 2025 Vlad Emelianov

Usage::

    ```python
    from mypy_boto3_lakeformation.type_defs import ResponseMetadataTypeDef

    data: ResponseMetadataTypeDef = ...
    ```
"""

from __future__ import annotations

import sys
from collections.abc import Mapping, Sequence
from datetime import datetime
from typing import Any, Union

from botocore.response import StreamingBody

from .literals import (
    ApplicationStatusType,
    ComparisonOperatorType,
    DataLakeResourceTypeType,
    EnableStatusType,
    FieldNameStringType,
    OptimizerTypeType,
    PermissionType,
    PermissionTypeType,
    QueryStateStringType,
    ResourceShareTypeType,
    ResourceTypeType,
    ServiceAuthorizationType,
    TransactionStatusFilterType,
    TransactionStatusType,
    TransactionTypeType,
)

if sys.version_info >= (3, 12):
    from typing import NotRequired, TypedDict
else:
    from typing_extensions import NotRequired, TypedDict


__all__ = (
    "AddLFTagsToResourceRequestTypeDef",
    "AddLFTagsToResourceResponseTypeDef",
    "AddObjectInputTypeDef",
    "AssumeDecoratedRoleWithSAMLRequestTypeDef",
    "AssumeDecoratedRoleWithSAMLResponseTypeDef",
    "AuditContextTypeDef",
    "BatchGrantPermissionsRequestTypeDef",
    "BatchGrantPermissionsResponseTypeDef",
    "BatchPermissionsFailureEntryTypeDef",
    "BatchPermissionsRequestEntryOutputTypeDef",
    "BatchPermissionsRequestEntryTypeDef",
    "BatchPermissionsRequestEntryUnionTypeDef",
    "BatchRevokePermissionsRequestTypeDef",
    "BatchRevokePermissionsResponseTypeDef",
    "CancelTransactionRequestTypeDef",
    "CatalogResourceTypeDef",
    "ColumnLFTagTypeDef",
    "ColumnWildcardOutputTypeDef",
    "ColumnWildcardTypeDef",
    "ColumnWildcardUnionTypeDef",
    "CommitTransactionRequestTypeDef",
    "CommitTransactionResponseTypeDef",
    "ConditionTypeDef",
    "CreateDataCellsFilterRequestTypeDef",
    "CreateLFTagExpressionRequestTypeDef",
    "CreateLFTagRequestTypeDef",
    "CreateLakeFormationIdentityCenterConfigurationRequestTypeDef",
    "CreateLakeFormationIdentityCenterConfigurationResponseTypeDef",
    "CreateLakeFormationOptInRequestTypeDef",
    "DataCellsFilterOutputTypeDef",
    "DataCellsFilterResourceTypeDef",
    "DataCellsFilterTypeDef",
    "DataCellsFilterUnionTypeDef",
    "DataLakePrincipalTypeDef",
    "DataLakeSettingsOutputTypeDef",
    "DataLakeSettingsTypeDef",
    "DataLakeSettingsUnionTypeDef",
    "DataLocationResourceTypeDef",
    "DatabaseResourceTypeDef",
    "DeleteDataCellsFilterRequestTypeDef",
    "DeleteLFTagExpressionRequestTypeDef",
    "DeleteLFTagRequestTypeDef",
    "DeleteLakeFormationIdentityCenterConfigurationRequestTypeDef",
    "DeleteLakeFormationOptInRequestTypeDef",
    "DeleteObjectInputTypeDef",
    "DeleteObjectsOnCancelRequestTypeDef",
    "DeregisterResourceRequestTypeDef",
    "DescribeLakeFormationIdentityCenterConfigurationRequestTypeDef",
    "DescribeLakeFormationIdentityCenterConfigurationResponseTypeDef",
    "DescribeResourceRequestTypeDef",
    "DescribeResourceResponseTypeDef",
    "DescribeTransactionRequestTypeDef",
    "DescribeTransactionResponseTypeDef",
    "DetailsMapTypeDef",
    "ErrorDetailTypeDef",
    "ExecutionStatisticsTypeDef",
    "ExtendTransactionRequestTypeDef",
    "ExternalFilteringConfigurationOutputTypeDef",
    "ExternalFilteringConfigurationTypeDef",
    "ExternalFilteringConfigurationUnionTypeDef",
    "FilterConditionTypeDef",
    "GetDataCellsFilterRequestTypeDef",
    "GetDataCellsFilterResponseTypeDef",
    "GetDataLakePrincipalResponseTypeDef",
    "GetDataLakeSettingsRequestTypeDef",
    "GetDataLakeSettingsResponseTypeDef",
    "GetEffectivePermissionsForPathRequestTypeDef",
    "GetEffectivePermissionsForPathResponseTypeDef",
    "GetLFTagExpressionRequestTypeDef",
    "GetLFTagExpressionResponseTypeDef",
    "GetLFTagRequestTypeDef",
    "GetLFTagResponseTypeDef",
    "GetQueryStateRequestTypeDef",
    "GetQueryStateResponseTypeDef",
    "GetQueryStatisticsRequestTypeDef",
    "GetQueryStatisticsResponseTypeDef",
    "GetResourceLFTagsRequestTypeDef",
    "GetResourceLFTagsResponseTypeDef",
    "GetTableObjectsRequestTypeDef",
    "GetTableObjectsResponseTypeDef",
    "GetTemporaryGluePartitionCredentialsRequestTypeDef",
    "GetTemporaryGluePartitionCredentialsResponseTypeDef",
    "GetTemporaryGlueTableCredentialsRequestTypeDef",
    "GetTemporaryGlueTableCredentialsResponseTypeDef",
    "GetWorkUnitResultsRequestTypeDef",
    "GetWorkUnitResultsResponseTypeDef",
    "GetWorkUnitsRequestPaginateTypeDef",
    "GetWorkUnitsRequestTypeDef",
    "GetWorkUnitsResponseTypeDef",
    "GrantPermissionsRequestTypeDef",
    "LFTagErrorTypeDef",
    "LFTagExpressionResourceTypeDef",
    "LFTagExpressionTypeDef",
    "LFTagKeyResourceOutputTypeDef",
    "LFTagKeyResourceTypeDef",
    "LFTagKeyResourceUnionTypeDef",
    "LFTagOutputTypeDef",
    "LFTagPairOutputTypeDef",
    "LFTagPairTypeDef",
    "LFTagPairUnionTypeDef",
    "LFTagPolicyResourceOutputTypeDef",
    "LFTagPolicyResourceTypeDef",
    "LFTagPolicyResourceUnionTypeDef",
    "LFTagTypeDef",
    "LFTagUnionTypeDef",
    "LakeFormationOptInsInfoTypeDef",
    "ListDataCellsFilterRequestPaginateTypeDef",
    "ListDataCellsFilterRequestTypeDef",
    "ListDataCellsFilterResponseTypeDef",
    "ListLFTagExpressionsRequestPaginateTypeDef",
    "ListLFTagExpressionsRequestTypeDef",
    "ListLFTagExpressionsResponseTypeDef",
    "ListLFTagsRequestPaginateTypeDef",
    "ListLFTagsRequestTypeDef",
    "ListLFTagsResponseTypeDef",
    "ListLakeFormationOptInsRequestTypeDef",
    "ListLakeFormationOptInsResponseTypeDef",
    "ListPermissionsRequestTypeDef",
    "ListPermissionsResponseTypeDef",
    "ListResourcesRequestTypeDef",
    "ListResourcesResponseTypeDef",
    "ListTableStorageOptimizersRequestTypeDef",
    "ListTableStorageOptimizersResponseTypeDef",
    "ListTransactionsRequestTypeDef",
    "ListTransactionsResponseTypeDef",
    "PaginatorConfigTypeDef",
    "PartitionObjectsTypeDef",
    "PartitionValueListTypeDef",
    "PlanningStatisticsTypeDef",
    "PrincipalPermissionsOutputTypeDef",
    "PrincipalPermissionsTypeDef",
    "PrincipalResourcePermissionsTypeDef",
    "PutDataLakeSettingsRequestTypeDef",
    "QueryPlanningContextTypeDef",
    "QuerySessionContextTypeDef",
    "RedshiftConnectTypeDef",
    "RedshiftScopeUnionTypeDef",
    "RegisterResourceRequestTypeDef",
    "RemoveLFTagsFromResourceRequestTypeDef",
    "RemoveLFTagsFromResourceResponseTypeDef",
    "ResourceInfoTypeDef",
    "ResourceOutputTypeDef",
    "ResourceTypeDef",
    "ResourceUnionTypeDef",
    "ResponseMetadataTypeDef",
    "RevokePermissionsRequestTypeDef",
    "RowFilterOutputTypeDef",
    "RowFilterTypeDef",
    "SearchDatabasesByLFTagsRequestPaginateTypeDef",
    "SearchDatabasesByLFTagsRequestTypeDef",
    "SearchDatabasesByLFTagsResponseTypeDef",
    "SearchTablesByLFTagsRequestPaginateTypeDef",
    "SearchTablesByLFTagsRequestTypeDef",
    "SearchTablesByLFTagsResponseTypeDef",
    "ServiceIntegrationUnionOutputTypeDef",
    "ServiceIntegrationUnionTypeDef",
    "ServiceIntegrationUnionUnionTypeDef",
    "StartQueryPlanningRequestTypeDef",
    "StartQueryPlanningResponseTypeDef",
    "StartTransactionRequestTypeDef",
    "StartTransactionResponseTypeDef",
    "StorageOptimizerTypeDef",
    "TableObjectTypeDef",
    "TableResourceOutputTypeDef",
    "TableResourceTypeDef",
    "TableResourceUnionTypeDef",
    "TableWithColumnsResourceOutputTypeDef",
    "TableWithColumnsResourceTypeDef",
    "TableWithColumnsResourceUnionTypeDef",
    "TaggedDatabaseTypeDef",
    "TaggedTableTypeDef",
    "TimestampTypeDef",
    "TransactionDescriptionTypeDef",
    "UpdateDataCellsFilterRequestTypeDef",
    "UpdateLFTagExpressionRequestTypeDef",
    "UpdateLFTagRequestTypeDef",
    "UpdateLakeFormationIdentityCenterConfigurationRequestTypeDef",
    "UpdateResourceRequestTypeDef",
    "UpdateTableObjectsRequestTypeDef",
    "UpdateTableStorageOptimizerRequestTypeDef",
    "UpdateTableStorageOptimizerResponseTypeDef",
    "VirtualObjectTypeDef",
    "WorkUnitRangeTypeDef",
    "WriteOperationTypeDef",
)


class ResponseMetadataTypeDef(TypedDict):
    RequestId: str
    HTTPStatusCode: int
    HTTPHeaders: dict[str, str]
    RetryAttempts: int
    HostId: NotRequired[str]


class AddObjectInputTypeDef(TypedDict):
    Uri: str
    ETag: str
    Size: int
    PartitionValues: NotRequired[Sequence[str]]


class AssumeDecoratedRoleWithSAMLRequestTypeDef(TypedDict):
    SAMLAssertion: str
    RoleArn: str
    PrincipalArn: str
    DurationSeconds: NotRequired[int]


class AuditContextTypeDef(TypedDict):
    AdditionalAuditContext: NotRequired[str]


class ErrorDetailTypeDef(TypedDict):
    ErrorCode: NotRequired[str]
    ErrorMessage: NotRequired[str]


class ConditionTypeDef(TypedDict):
    Expression: NotRequired[str]


class DataLakePrincipalTypeDef(TypedDict):
    DataLakePrincipalIdentifier: NotRequired[str]


class CancelTransactionRequestTypeDef(TypedDict):
    TransactionId: str


class CatalogResourceTypeDef(TypedDict):
    Id: NotRequired[str]


class LFTagPairOutputTypeDef(TypedDict):
    TagKey: str
    TagValues: list[str]
    CatalogId: NotRequired[str]


class ColumnWildcardOutputTypeDef(TypedDict):
    ExcludedColumnNames: NotRequired[list[str]]


class ColumnWildcardTypeDef(TypedDict):
    ExcludedColumnNames: NotRequired[Sequence[str]]


class CommitTransactionRequestTypeDef(TypedDict):
    TransactionId: str


class CreateLFTagRequestTypeDef(TypedDict):
    TagKey: str
    TagValues: Sequence[str]
    CatalogId: NotRequired[str]


class RowFilterOutputTypeDef(TypedDict):
    FilterExpression: NotRequired[str]
    AllRowsWildcard: NotRequired[dict[str, Any]]


class DataCellsFilterResourceTypeDef(TypedDict):
    TableCatalogId: NotRequired[str]
    DatabaseName: NotRequired[str]
    TableName: NotRequired[str]
    Name: NotRequired[str]


class RowFilterTypeDef(TypedDict):
    FilterExpression: NotRequired[str]
    AllRowsWildcard: NotRequired[Mapping[str, Any]]


class DataLocationResourceTypeDef(TypedDict):
    ResourceArn: str
    CatalogId: NotRequired[str]


class DatabaseResourceTypeDef(TypedDict):
    Name: str
    CatalogId: NotRequired[str]


class DeleteDataCellsFilterRequestTypeDef(TypedDict):
    TableCatalogId: NotRequired[str]
    DatabaseName: NotRequired[str]
    TableName: NotRequired[str]
    Name: NotRequired[str]


class DeleteLFTagExpressionRequestTypeDef(TypedDict):
    Name: str
    CatalogId: NotRequired[str]


class DeleteLFTagRequestTypeDef(TypedDict):
    TagKey: str
    CatalogId: NotRequired[str]


class DeleteLakeFormationIdentityCenterConfigurationRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]


class DeleteObjectInputTypeDef(TypedDict):
    Uri: str
    ETag: NotRequired[str]
    PartitionValues: NotRequired[Sequence[str]]


class VirtualObjectTypeDef(TypedDict):
    Uri: str
    ETag: NotRequired[str]


class DeregisterResourceRequestTypeDef(TypedDict):
    ResourceArn: str


class DescribeLakeFormationIdentityCenterConfigurationRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]


class ExternalFilteringConfigurationOutputTypeDef(TypedDict):
    Status: EnableStatusType
    AuthorizedTargets: list[str]


class DescribeResourceRequestTypeDef(TypedDict):
    ResourceArn: str


class ResourceInfoTypeDef(TypedDict):
    ResourceArn: NotRequired[str]
    RoleArn: NotRequired[str]
    LastModified: NotRequired[datetime]
    WithFederation: NotRequired[bool]
    HybridAccessEnabled: NotRequired[bool]
    WithPrivilegedAccess: NotRequired[bool]


class DescribeTransactionRequestTypeDef(TypedDict):
    TransactionId: str


class TransactionDescriptionTypeDef(TypedDict):
    TransactionId: NotRequired[str]
    TransactionStatus: NotRequired[TransactionStatusType]
    TransactionStartTime: NotRequired[datetime]
    TransactionEndTime: NotRequired[datetime]


class DetailsMapTypeDef(TypedDict):
    ResourceShare: NotRequired[list[str]]


class ExecutionStatisticsTypeDef(TypedDict):
    AverageExecutionTimeMillis: NotRequired[int]
    DataScannedBytes: NotRequired[int]
    WorkUnitsExecutedCount: NotRequired[int]


class ExtendTransactionRequestTypeDef(TypedDict):
    TransactionId: NotRequired[str]


class ExternalFilteringConfigurationTypeDef(TypedDict):
    Status: EnableStatusType
    AuthorizedTargets: Sequence[str]


class FilterConditionTypeDef(TypedDict):
    Field: NotRequired[FieldNameStringType]
    ComparisonOperator: NotRequired[ComparisonOperatorType]
    StringValueList: NotRequired[Sequence[str]]


class GetDataCellsFilterRequestTypeDef(TypedDict):
    TableCatalogId: str
    DatabaseName: str
    TableName: str
    Name: str


class GetDataLakeSettingsRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]


class GetEffectivePermissionsForPathRequestTypeDef(TypedDict):
    ResourceArn: str
    CatalogId: NotRequired[str]
    NextToken: NotRequired[str]
    MaxResults: NotRequired[int]


class GetLFTagExpressionRequestTypeDef(TypedDict):
    Name: str
    CatalogId: NotRequired[str]


class LFTagOutputTypeDef(TypedDict):
    TagKey: str
    TagValues: list[str]


class GetLFTagRequestTypeDef(TypedDict):
    TagKey: str
    CatalogId: NotRequired[str]


class GetQueryStateRequestTypeDef(TypedDict):
    QueryId: str


class GetQueryStatisticsRequestTypeDef(TypedDict):
    QueryId: str


class PlanningStatisticsTypeDef(TypedDict):
    EstimatedDataToScanBytes: NotRequired[int]
    PlanningTimeMillis: NotRequired[int]
    QueueTimeMillis: NotRequired[int]
    WorkUnitsGeneratedCount: NotRequired[int]


TimestampTypeDef = Union[datetime, str]


class PartitionValueListTypeDef(TypedDict):
    Values: Sequence[str]


class GetWorkUnitResultsRequestTypeDef(TypedDict):
    QueryId: str
    WorkUnitId: int
    WorkUnitToken: str


class PaginatorConfigTypeDef(TypedDict):
    MaxItems: NotRequired[int]
    PageSize: NotRequired[int]
    StartingToken: NotRequired[str]


class GetWorkUnitsRequestTypeDef(TypedDict):
    QueryId: str
    NextToken: NotRequired[str]
    PageSize: NotRequired[int]


class WorkUnitRangeTypeDef(TypedDict):
    WorkUnitIdMax: int
    WorkUnitIdMin: int
    WorkUnitToken: str


class LFTagExpressionResourceTypeDef(TypedDict):
    Name: str
    CatalogId: NotRequired[str]


class LFTagKeyResourceOutputTypeDef(TypedDict):
    TagKey: str
    TagValues: list[str]
    CatalogId: NotRequired[str]


class LFTagKeyResourceTypeDef(TypedDict):
    TagKey: str
    TagValues: Sequence[str]
    CatalogId: NotRequired[str]


class LFTagPairTypeDef(TypedDict):
    TagKey: str
    TagValues: Sequence[str]
    CatalogId: NotRequired[str]


class LFTagTypeDef(TypedDict):
    TagKey: str
    TagValues: Sequence[str]


class ListLFTagExpressionsRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class ListLFTagsRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    ResourceShareType: NotRequired[ResourceShareTypeType]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class ListTableStorageOptimizersRequestTypeDef(TypedDict):
    DatabaseName: str
    TableName: str
    CatalogId: NotRequired[str]
    StorageOptimizerType: NotRequired[OptimizerTypeType]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class StorageOptimizerTypeDef(TypedDict):
    StorageOptimizerType: NotRequired[OptimizerTypeType]
    Config: NotRequired[dict[str, str]]
    ErrorMessage: NotRequired[str]
    Warnings: NotRequired[str]
    LastRunDetails: NotRequired[str]


class ListTransactionsRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    StatusFilter: NotRequired[TransactionStatusFilterType]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class TableObjectTypeDef(TypedDict):
    Uri: NotRequired[str]
    ETag: NotRequired[str]
    Size: NotRequired[int]


class RedshiftConnectTypeDef(TypedDict):
    Authorization: ServiceAuthorizationType


class RegisterResourceRequestTypeDef(TypedDict):
    ResourceArn: str
    UseServiceLinkedRole: NotRequired[bool]
    RoleArn: NotRequired[str]
    WithFederation: NotRequired[bool]
    HybridAccessEnabled: NotRequired[bool]
    WithPrivilegedAccess: NotRequired[bool]


class TableResourceOutputTypeDef(TypedDict):
    DatabaseName: str
    CatalogId: NotRequired[str]
    Name: NotRequired[str]
    TableWildcard: NotRequired[dict[str, Any]]


class StartTransactionRequestTypeDef(TypedDict):
    TransactionType: NotRequired[TransactionTypeType]


class TableResourceTypeDef(TypedDict):
    DatabaseName: str
    CatalogId: NotRequired[str]
    Name: NotRequired[str]
    TableWildcard: NotRequired[Mapping[str, Any]]


class UpdateLFTagRequestTypeDef(TypedDict):
    TagKey: str
    CatalogId: NotRequired[str]
    TagValuesToDelete: NotRequired[Sequence[str]]
    TagValuesToAdd: NotRequired[Sequence[str]]


class UpdateResourceRequestTypeDef(TypedDict):
    RoleArn: str
    ResourceArn: str
    WithFederation: NotRequired[bool]
    HybridAccessEnabled: NotRequired[bool]


class UpdateTableStorageOptimizerRequestTypeDef(TypedDict):
    DatabaseName: str
    TableName: str
    StorageOptimizerConfig: Mapping[OptimizerTypeType, Mapping[str, str]]
    CatalogId: NotRequired[str]


class AssumeDecoratedRoleWithSAMLResponseTypeDef(TypedDict):
    AccessKeyId: str
    SecretAccessKey: str
    SessionToken: str
    Expiration: datetime
    ResponseMetadata: ResponseMetadataTypeDef


class CommitTransactionResponseTypeDef(TypedDict):
    TransactionStatus: TransactionStatusType
    ResponseMetadata: ResponseMetadataTypeDef


class CreateLakeFormationIdentityCenterConfigurationResponseTypeDef(TypedDict):
    ApplicationArn: str
    ResponseMetadata: ResponseMetadataTypeDef


class GetDataLakePrincipalResponseTypeDef(TypedDict):
    Identity: str
    ResponseMetadata: ResponseMetadataTypeDef


class GetLFTagResponseTypeDef(TypedDict):
    CatalogId: str
    TagKey: str
    TagValues: list[str]
    ResponseMetadata: ResponseMetadataTypeDef


class GetQueryStateResponseTypeDef(TypedDict):
    Error: str
    State: QueryStateStringType
    ResponseMetadata: ResponseMetadataTypeDef


class GetTemporaryGluePartitionCredentialsResponseTypeDef(TypedDict):
    AccessKeyId: str
    SecretAccessKey: str
    SessionToken: str
    Expiration: datetime
    ResponseMetadata: ResponseMetadataTypeDef


class GetTemporaryGlueTableCredentialsResponseTypeDef(TypedDict):
    AccessKeyId: str
    SecretAccessKey: str
    SessionToken: str
    Expiration: datetime
    VendedS3Path: list[str]
    ResponseMetadata: ResponseMetadataTypeDef


class GetWorkUnitResultsResponseTypeDef(TypedDict):
    ResultStream: StreamingBody
    ResponseMetadata: ResponseMetadataTypeDef


class StartQueryPlanningResponseTypeDef(TypedDict):
    QueryId: str
    ResponseMetadata: ResponseMetadataTypeDef


class StartTransactionResponseTypeDef(TypedDict):
    TransactionId: str
    ResponseMetadata: ResponseMetadataTypeDef


class UpdateTableStorageOptimizerResponseTypeDef(TypedDict):
    Result: str
    ResponseMetadata: ResponseMetadataTypeDef


class PrincipalPermissionsOutputTypeDef(TypedDict):
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Permissions: NotRequired[list[PermissionType]]


class PrincipalPermissionsTypeDef(TypedDict):
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Permissions: NotRequired[Sequence[PermissionType]]


class ColumnLFTagTypeDef(TypedDict):
    Name: NotRequired[str]
    LFTags: NotRequired[list[LFTagPairOutputTypeDef]]


class LFTagErrorTypeDef(TypedDict):
    LFTag: NotRequired[LFTagPairOutputTypeDef]
    Error: NotRequired[ErrorDetailTypeDef]


class ListLFTagsResponseTypeDef(TypedDict):
    LFTags: list[LFTagPairOutputTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class TableWithColumnsResourceOutputTypeDef(TypedDict):
    DatabaseName: str
    Name: str
    CatalogId: NotRequired[str]
    ColumnNames: NotRequired[list[str]]
    ColumnWildcard: NotRequired[ColumnWildcardOutputTypeDef]


ColumnWildcardUnionTypeDef = Union[ColumnWildcardTypeDef, ColumnWildcardOutputTypeDef]


class DataCellsFilterOutputTypeDef(TypedDict):
    TableCatalogId: str
    DatabaseName: str
    TableName: str
    Name: str
    RowFilter: NotRequired[RowFilterOutputTypeDef]
    ColumnNames: NotRequired[list[str]]
    ColumnWildcard: NotRequired[ColumnWildcardOutputTypeDef]
    VersionId: NotRequired[str]


class DataCellsFilterTypeDef(TypedDict):
    TableCatalogId: str
    DatabaseName: str
    TableName: str
    Name: str
    RowFilter: NotRequired[RowFilterTypeDef]
    ColumnNames: NotRequired[Sequence[str]]
    ColumnWildcard: NotRequired[ColumnWildcardTypeDef]
    VersionId: NotRequired[str]


class TaggedDatabaseTypeDef(TypedDict):
    Database: NotRequired[DatabaseResourceTypeDef]
    LFTags: NotRequired[list[LFTagPairOutputTypeDef]]


class WriteOperationTypeDef(TypedDict):
    AddObject: NotRequired[AddObjectInputTypeDef]
    DeleteObject: NotRequired[DeleteObjectInputTypeDef]


class DeleteObjectsOnCancelRequestTypeDef(TypedDict):
    DatabaseName: str
    TableName: str
    TransactionId: str
    Objects: Sequence[VirtualObjectTypeDef]
    CatalogId: NotRequired[str]


class DescribeResourceResponseTypeDef(TypedDict):
    ResourceInfo: ResourceInfoTypeDef
    ResponseMetadata: ResponseMetadataTypeDef


class ListResourcesResponseTypeDef(TypedDict):
    ResourceInfoList: list[ResourceInfoTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class DescribeTransactionResponseTypeDef(TypedDict):
    TransactionDescription: TransactionDescriptionTypeDef
    ResponseMetadata: ResponseMetadataTypeDef


class ListTransactionsResponseTypeDef(TypedDict):
    Transactions: list[TransactionDescriptionTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


ExternalFilteringConfigurationUnionTypeDef = Union[
    ExternalFilteringConfigurationTypeDef, ExternalFilteringConfigurationOutputTypeDef
]


class ListResourcesRequestTypeDef(TypedDict):
    FilterConditionList: NotRequired[Sequence[FilterConditionTypeDef]]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class GetLFTagExpressionResponseTypeDef(TypedDict):
    Name: str
    Description: str
    CatalogId: str
    Expression: list[LFTagOutputTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef


class LFTagExpressionTypeDef(TypedDict):
    Name: NotRequired[str]
    Description: NotRequired[str]
    CatalogId: NotRequired[str]
    Expression: NotRequired[list[LFTagOutputTypeDef]]


class LFTagPolicyResourceOutputTypeDef(TypedDict):
    ResourceType: ResourceTypeType
    CatalogId: NotRequired[str]
    Expression: NotRequired[list[LFTagOutputTypeDef]]
    ExpressionName: NotRequired[str]


class GetQueryStatisticsResponseTypeDef(TypedDict):
    ExecutionStatistics: ExecutionStatisticsTypeDef
    PlanningStatistics: PlanningStatisticsTypeDef
    QuerySubmissionTime: datetime
    ResponseMetadata: ResponseMetadataTypeDef


class GetTableObjectsRequestTypeDef(TypedDict):
    DatabaseName: str
    TableName: str
    CatalogId: NotRequired[str]
    TransactionId: NotRequired[str]
    QueryAsOfTime: NotRequired[TimestampTypeDef]
    PartitionPredicate: NotRequired[str]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class QueryPlanningContextTypeDef(TypedDict):
    DatabaseName: str
    CatalogId: NotRequired[str]
    QueryAsOfTime: NotRequired[TimestampTypeDef]
    QueryParameters: NotRequired[Mapping[str, str]]
    TransactionId: NotRequired[str]


class QuerySessionContextTypeDef(TypedDict):
    QueryId: NotRequired[str]
    QueryStartTime: NotRequired[TimestampTypeDef]
    ClusterId: NotRequired[str]
    QueryAuthorizationId: NotRequired[str]
    AdditionalContext: NotRequired[Mapping[str, str]]


class GetTemporaryGluePartitionCredentialsRequestTypeDef(TypedDict):
    TableArn: str
    Partition: PartitionValueListTypeDef
    Permissions: NotRequired[Sequence[PermissionType]]
    DurationSeconds: NotRequired[int]
    AuditContext: NotRequired[AuditContextTypeDef]
    SupportedPermissionTypes: NotRequired[Sequence[PermissionTypeType]]


class GetWorkUnitsRequestPaginateTypeDef(TypedDict):
    QueryId: str
    PaginationConfig: NotRequired[PaginatorConfigTypeDef]


class ListLFTagExpressionsRequestPaginateTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    PaginationConfig: NotRequired[PaginatorConfigTypeDef]


class ListLFTagsRequestPaginateTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    ResourceShareType: NotRequired[ResourceShareTypeType]
    PaginationConfig: NotRequired[PaginatorConfigTypeDef]


class GetWorkUnitsResponseTypeDef(TypedDict):
    QueryId: str
    WorkUnitRanges: list[WorkUnitRangeTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


LFTagKeyResourceUnionTypeDef = Union[LFTagKeyResourceTypeDef, LFTagKeyResourceOutputTypeDef]
LFTagPairUnionTypeDef = Union[LFTagPairTypeDef, LFTagPairOutputTypeDef]
LFTagUnionTypeDef = Union[LFTagTypeDef, LFTagOutputTypeDef]


class ListTableStorageOptimizersResponseTypeDef(TypedDict):
    StorageOptimizerList: list[StorageOptimizerTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class PartitionObjectsTypeDef(TypedDict):
    PartitionValues: NotRequired[list[str]]
    Objects: NotRequired[list[TableObjectTypeDef]]


class RedshiftScopeUnionTypeDef(TypedDict):
    RedshiftConnect: NotRequired[RedshiftConnectTypeDef]


TableResourceUnionTypeDef = Union[TableResourceTypeDef, TableResourceOutputTypeDef]


class DataLakeSettingsOutputTypeDef(TypedDict):
    DataLakeAdmins: NotRequired[list[DataLakePrincipalTypeDef]]
    ReadOnlyAdmins: NotRequired[list[DataLakePrincipalTypeDef]]
    CreateDatabaseDefaultPermissions: NotRequired[list[PrincipalPermissionsOutputTypeDef]]
    CreateTableDefaultPermissions: NotRequired[list[PrincipalPermissionsOutputTypeDef]]
    Parameters: NotRequired[dict[str, str]]
    TrustedResourceOwners: NotRequired[list[str]]
    AllowExternalDataFiltering: NotRequired[bool]
    AllowFullTableExternalDataAccess: NotRequired[bool]
    ExternalDataFilteringAllowList: NotRequired[list[DataLakePrincipalTypeDef]]
    AuthorizedSessionTagValueList: NotRequired[list[str]]


class DataLakeSettingsTypeDef(TypedDict):
    DataLakeAdmins: NotRequired[Sequence[DataLakePrincipalTypeDef]]
    ReadOnlyAdmins: NotRequired[Sequence[DataLakePrincipalTypeDef]]
    CreateDatabaseDefaultPermissions: NotRequired[Sequence[PrincipalPermissionsTypeDef]]
    CreateTableDefaultPermissions: NotRequired[Sequence[PrincipalPermissionsTypeDef]]
    Parameters: NotRequired[Mapping[str, str]]
    TrustedResourceOwners: NotRequired[Sequence[str]]
    AllowExternalDataFiltering: NotRequired[bool]
    AllowFullTableExternalDataAccess: NotRequired[bool]
    ExternalDataFilteringAllowList: NotRequired[Sequence[DataLakePrincipalTypeDef]]
    AuthorizedSessionTagValueList: NotRequired[Sequence[str]]


class GetResourceLFTagsResponseTypeDef(TypedDict):
    LFTagOnDatabase: list[LFTagPairOutputTypeDef]
    LFTagsOnTable: list[LFTagPairOutputTypeDef]
    LFTagsOnColumns: list[ColumnLFTagTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef


class TaggedTableTypeDef(TypedDict):
    Table: NotRequired[TableResourceOutputTypeDef]
    LFTagOnDatabase: NotRequired[list[LFTagPairOutputTypeDef]]
    LFTagsOnTable: NotRequired[list[LFTagPairOutputTypeDef]]
    LFTagsOnColumns: NotRequired[list[ColumnLFTagTypeDef]]


class AddLFTagsToResourceResponseTypeDef(TypedDict):
    Failures: list[LFTagErrorTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef


class RemoveLFTagsFromResourceResponseTypeDef(TypedDict):
    Failures: list[LFTagErrorTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef


class TableWithColumnsResourceTypeDef(TypedDict):
    DatabaseName: str
    Name: str
    CatalogId: NotRequired[str]
    ColumnNames: NotRequired[Sequence[str]]
    ColumnWildcard: NotRequired[ColumnWildcardUnionTypeDef]


class GetDataCellsFilterResponseTypeDef(TypedDict):
    DataCellsFilter: DataCellsFilterOutputTypeDef
    ResponseMetadata: ResponseMetadataTypeDef


class ListDataCellsFilterResponseTypeDef(TypedDict):
    DataCellsFilters: list[DataCellsFilterOutputTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


DataCellsFilterUnionTypeDef = Union[DataCellsFilterTypeDef, DataCellsFilterOutputTypeDef]


class SearchDatabasesByLFTagsResponseTypeDef(TypedDict):
    DatabaseList: list[TaggedDatabaseTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class UpdateTableObjectsRequestTypeDef(TypedDict):
    DatabaseName: str
    TableName: str
    WriteOperations: Sequence[WriteOperationTypeDef]
    CatalogId: NotRequired[str]
    TransactionId: NotRequired[str]


class ListLFTagExpressionsResponseTypeDef(TypedDict):
    LFTagExpressions: list[LFTagExpressionTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class ResourceOutputTypeDef(TypedDict):
    Catalog: NotRequired[CatalogResourceTypeDef]
    Database: NotRequired[DatabaseResourceTypeDef]
    Table: NotRequired[TableResourceOutputTypeDef]
    TableWithColumns: NotRequired[TableWithColumnsResourceOutputTypeDef]
    DataLocation: NotRequired[DataLocationResourceTypeDef]
    DataCellsFilter: NotRequired[DataCellsFilterResourceTypeDef]
    LFTag: NotRequired[LFTagKeyResourceOutputTypeDef]
    LFTagPolicy: NotRequired[LFTagPolicyResourceOutputTypeDef]
    LFTagExpression: NotRequired[LFTagExpressionResourceTypeDef]


class StartQueryPlanningRequestTypeDef(TypedDict):
    QueryPlanningContext: QueryPlanningContextTypeDef
    QueryString: str


class GetTemporaryGlueTableCredentialsRequestTypeDef(TypedDict):
    TableArn: str
    Permissions: NotRequired[Sequence[PermissionType]]
    DurationSeconds: NotRequired[int]
    AuditContext: NotRequired[AuditContextTypeDef]
    SupportedPermissionTypes: NotRequired[Sequence[PermissionTypeType]]
    S3Path: NotRequired[str]
    QuerySessionContext: NotRequired[QuerySessionContextTypeDef]


class CreateLFTagExpressionRequestTypeDef(TypedDict):
    Name: str
    Expression: Sequence[LFTagUnionTypeDef]
    Description: NotRequired[str]
    CatalogId: NotRequired[str]


class LFTagPolicyResourceTypeDef(TypedDict):
    ResourceType: ResourceTypeType
    CatalogId: NotRequired[str]
    Expression: NotRequired[Sequence[LFTagUnionTypeDef]]
    ExpressionName: NotRequired[str]


class SearchDatabasesByLFTagsRequestPaginateTypeDef(TypedDict):
    Expression: Sequence[LFTagUnionTypeDef]
    CatalogId: NotRequired[str]
    PaginationConfig: NotRequired[PaginatorConfigTypeDef]


class SearchDatabasesByLFTagsRequestTypeDef(TypedDict):
    Expression: Sequence[LFTagUnionTypeDef]
    NextToken: NotRequired[str]
    MaxResults: NotRequired[int]
    CatalogId: NotRequired[str]


class SearchTablesByLFTagsRequestPaginateTypeDef(TypedDict):
    Expression: Sequence[LFTagUnionTypeDef]
    CatalogId: NotRequired[str]
    PaginationConfig: NotRequired[PaginatorConfigTypeDef]


class SearchTablesByLFTagsRequestTypeDef(TypedDict):
    Expression: Sequence[LFTagUnionTypeDef]
    NextToken: NotRequired[str]
    MaxResults: NotRequired[int]
    CatalogId: NotRequired[str]


class UpdateLFTagExpressionRequestTypeDef(TypedDict):
    Name: str
    Expression: Sequence[LFTagUnionTypeDef]
    Description: NotRequired[str]
    CatalogId: NotRequired[str]


class GetTableObjectsResponseTypeDef(TypedDict):
    Objects: list[PartitionObjectsTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class ServiceIntegrationUnionOutputTypeDef(TypedDict):
    Redshift: NotRequired[list[RedshiftScopeUnionTypeDef]]


class ServiceIntegrationUnionTypeDef(TypedDict):
    Redshift: NotRequired[Sequence[RedshiftScopeUnionTypeDef]]


class ListDataCellsFilterRequestPaginateTypeDef(TypedDict):
    Table: NotRequired[TableResourceUnionTypeDef]
    PaginationConfig: NotRequired[PaginatorConfigTypeDef]


class ListDataCellsFilterRequestTypeDef(TypedDict):
    Table: NotRequired[TableResourceUnionTypeDef]
    NextToken: NotRequired[str]
    MaxResults: NotRequired[int]


class GetDataLakeSettingsResponseTypeDef(TypedDict):
    DataLakeSettings: DataLakeSettingsOutputTypeDef
    ResponseMetadata: ResponseMetadataTypeDef


DataLakeSettingsUnionTypeDef = Union[DataLakeSettingsTypeDef, DataLakeSettingsOutputTypeDef]


class SearchTablesByLFTagsResponseTypeDef(TypedDict):
    TableList: list[TaggedTableTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


TableWithColumnsResourceUnionTypeDef = Union[
    TableWithColumnsResourceTypeDef, TableWithColumnsResourceOutputTypeDef
]


class CreateDataCellsFilterRequestTypeDef(TypedDict):
    TableData: DataCellsFilterUnionTypeDef


class UpdateDataCellsFilterRequestTypeDef(TypedDict):
    TableData: DataCellsFilterUnionTypeDef


class BatchPermissionsRequestEntryOutputTypeDef(TypedDict):
    Id: str
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Resource: NotRequired[ResourceOutputTypeDef]
    Permissions: NotRequired[list[PermissionType]]
    Condition: NotRequired[ConditionTypeDef]
    PermissionsWithGrantOption: NotRequired[list[PermissionType]]


class LakeFormationOptInsInfoTypeDef(TypedDict):
    Resource: NotRequired[ResourceOutputTypeDef]
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Condition: NotRequired[ConditionTypeDef]
    LastModified: NotRequired[datetime]
    LastUpdatedBy: NotRequired[str]


class PrincipalResourcePermissionsTypeDef(TypedDict):
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Resource: NotRequired[ResourceOutputTypeDef]
    Condition: NotRequired[ConditionTypeDef]
    Permissions: NotRequired[list[PermissionType]]
    PermissionsWithGrantOption: NotRequired[list[PermissionType]]
    AdditionalDetails: NotRequired[DetailsMapTypeDef]
    LastUpdated: NotRequired[datetime]
    LastUpdatedBy: NotRequired[str]


LFTagPolicyResourceUnionTypeDef = Union[
    LFTagPolicyResourceTypeDef, LFTagPolicyResourceOutputTypeDef
]


class DescribeLakeFormationIdentityCenterConfigurationResponseTypeDef(TypedDict):
    CatalogId: str
    InstanceArn: str
    ApplicationArn: str
    ExternalFiltering: ExternalFilteringConfigurationOutputTypeDef
    ShareRecipients: list[DataLakePrincipalTypeDef]
    ServiceIntegrations: list[ServiceIntegrationUnionOutputTypeDef]
    ResourceShare: str
    ResponseMetadata: ResponseMetadataTypeDef


ServiceIntegrationUnionUnionTypeDef = Union[
    ServiceIntegrationUnionTypeDef, ServiceIntegrationUnionOutputTypeDef
]


class PutDataLakeSettingsRequestTypeDef(TypedDict):
    DataLakeSettings: DataLakeSettingsUnionTypeDef
    CatalogId: NotRequired[str]


class BatchPermissionsFailureEntryTypeDef(TypedDict):
    RequestEntry: NotRequired[BatchPermissionsRequestEntryOutputTypeDef]
    Error: NotRequired[ErrorDetailTypeDef]


class ListLakeFormationOptInsResponseTypeDef(TypedDict):
    LakeFormationOptInsInfoList: list[LakeFormationOptInsInfoTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class GetEffectivePermissionsForPathResponseTypeDef(TypedDict):
    Permissions: list[PrincipalResourcePermissionsTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class ListPermissionsResponseTypeDef(TypedDict):
    PrincipalResourcePermissions: list[PrincipalResourcePermissionsTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef
    NextToken: NotRequired[str]


class ResourceTypeDef(TypedDict):
    Catalog: NotRequired[CatalogResourceTypeDef]
    Database: NotRequired[DatabaseResourceTypeDef]
    Table: NotRequired[TableResourceUnionTypeDef]
    TableWithColumns: NotRequired[TableWithColumnsResourceUnionTypeDef]
    DataLocation: NotRequired[DataLocationResourceTypeDef]
    DataCellsFilter: NotRequired[DataCellsFilterResourceTypeDef]
    LFTag: NotRequired[LFTagKeyResourceUnionTypeDef]
    LFTagPolicy: NotRequired[LFTagPolicyResourceUnionTypeDef]
    LFTagExpression: NotRequired[LFTagExpressionResourceTypeDef]


class CreateLakeFormationIdentityCenterConfigurationRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    InstanceArn: NotRequired[str]
    ExternalFiltering: NotRequired[ExternalFilteringConfigurationUnionTypeDef]
    ShareRecipients: NotRequired[Sequence[DataLakePrincipalTypeDef]]
    ServiceIntegrations: NotRequired[Sequence[ServiceIntegrationUnionUnionTypeDef]]


class UpdateLakeFormationIdentityCenterConfigurationRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    ShareRecipients: NotRequired[Sequence[DataLakePrincipalTypeDef]]
    ServiceIntegrations: NotRequired[Sequence[ServiceIntegrationUnionUnionTypeDef]]
    ApplicationStatus: NotRequired[ApplicationStatusType]
    ExternalFiltering: NotRequired[ExternalFilteringConfigurationUnionTypeDef]


class BatchGrantPermissionsResponseTypeDef(TypedDict):
    Failures: list[BatchPermissionsFailureEntryTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef


class BatchRevokePermissionsResponseTypeDef(TypedDict):
    Failures: list[BatchPermissionsFailureEntryTypeDef]
    ResponseMetadata: ResponseMetadataTypeDef


ResourceUnionTypeDef = Union[ResourceTypeDef, ResourceOutputTypeDef]


class AddLFTagsToResourceRequestTypeDef(TypedDict):
    Resource: ResourceUnionTypeDef
    LFTags: Sequence[LFTagPairUnionTypeDef]
    CatalogId: NotRequired[str]


class BatchPermissionsRequestEntryTypeDef(TypedDict):
    Id: str
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Resource: NotRequired[ResourceUnionTypeDef]
    Permissions: NotRequired[Sequence[PermissionType]]
    Condition: NotRequired[ConditionTypeDef]
    PermissionsWithGrantOption: NotRequired[Sequence[PermissionType]]


class CreateLakeFormationOptInRequestTypeDef(TypedDict):
    Principal: DataLakePrincipalTypeDef
    Resource: ResourceUnionTypeDef
    Condition: NotRequired[ConditionTypeDef]


class DeleteLakeFormationOptInRequestTypeDef(TypedDict):
    Principal: DataLakePrincipalTypeDef
    Resource: ResourceUnionTypeDef
    Condition: NotRequired[ConditionTypeDef]


class GetResourceLFTagsRequestTypeDef(TypedDict):
    Resource: ResourceUnionTypeDef
    CatalogId: NotRequired[str]
    ShowAssignedLFTags: NotRequired[bool]


class GrantPermissionsRequestTypeDef(TypedDict):
    Principal: DataLakePrincipalTypeDef
    Resource: ResourceUnionTypeDef
    Permissions: Sequence[PermissionType]
    CatalogId: NotRequired[str]
    Condition: NotRequired[ConditionTypeDef]
    PermissionsWithGrantOption: NotRequired[Sequence[PermissionType]]


class ListLakeFormationOptInsRequestTypeDef(TypedDict):
    Principal: NotRequired[DataLakePrincipalTypeDef]
    Resource: NotRequired[ResourceUnionTypeDef]
    MaxResults: NotRequired[int]
    NextToken: NotRequired[str]


class ListPermissionsRequestTypeDef(TypedDict):
    CatalogId: NotRequired[str]
    Principal: NotRequired[DataLakePrincipalTypeDef]
    ResourceType: NotRequired[DataLakeResourceTypeType]
    Resource: NotRequired[ResourceUnionTypeDef]
    NextToken: NotRequired[str]
    MaxResults: NotRequired[int]
    IncludeRelated: NotRequired[str]


class RemoveLFTagsFromResourceRequestTypeDef(TypedDict):
    Resource: ResourceUnionTypeDef
    LFTags: Sequence[LFTagPairUnionTypeDef]
    CatalogId: NotRequired[str]


class RevokePermissionsRequestTypeDef(TypedDict):
    Principal: DataLakePrincipalTypeDef
    Resource: ResourceUnionTypeDef
    Permissions: Sequence[PermissionType]
    CatalogId: NotRequired[str]
    Condition: NotRequired[ConditionTypeDef]
    PermissionsWithGrantOption: NotRequired[Sequence[PermissionType]]


BatchPermissionsRequestEntryUnionTypeDef = Union[
    BatchPermissionsRequestEntryTypeDef, BatchPermissionsRequestEntryOutputTypeDef
]


class BatchGrantPermissionsRequestTypeDef(TypedDict):
    Entries: Sequence[BatchPermissionsRequestEntryUnionTypeDef]
    CatalogId: NotRequired[str]


class BatchRevokePermissionsRequestTypeDef(TypedDict):
    Entries: Sequence[BatchPermissionsRequestEntryUnionTypeDef]
    CatalogId: NotRequired[str]
