# coding: utf-8

"""
    Collibra Data Governance Center Core API

    <p>The Core REST API allows you to create your own integrations with Collibra Data Governance Center.</p><p><i>Create custom applications to help users get access to the right data.</i></p>  # noqa: E501

    The version of the OpenAPI document: 2.0
    Generated by: https://openapi-generator.tech
"""

from datetime import date, datetime  # noqa: F401
import decimal  # noqa: F401
import functools  # noqa: F401
import io  # noqa: F401
import re  # noqa: F401
import typing  # noqa: F401
import typing_extensions  # noqa: F401
import uuid  # noqa: F401

import frozendict  # noqa: F401

from collibra_core import schemas  # noqa: F401


class ChangeMappingByMappedResourceRequest(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.

    The properties of the mapping to be changed, for the mapping identified by its external system IDs and mapped resource ID.
    """


    class MetaOapg:
        required = {
            "mappedResourceId",
        }
        
        class properties:
            mappedResourceId = schemas.UUIDSchema
            
            
            class externalEntityUrl(
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    max_length = 255
                    min_length = 1
            description = schemas.StrSchema
            lastSyncDate = schemas.Int64Schema
            
            
            class syncAction(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "ADD": "ADD",
                        "UPDATE": "UPDATE",
                        "REMOVE": "REMOVE",
                    }
                
                @schemas.classproperty
                def ADD(cls):
                    return cls("ADD")
                
                @schemas.classproperty
                def UPDATE(cls):
                    return cls("UPDATE")
                
                @schemas.classproperty
                def REMOVE(cls):
                    return cls("REMOVE")
            __annotations__ = {
                "mappedResourceId": mappedResourceId,
                "externalEntityUrl": externalEntityUrl,
                "description": description,
                "lastSyncDate": lastSyncDate,
                "syncAction": syncAction,
            }
    
    mappedResourceId: MetaOapg.properties.mappedResourceId
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["mappedResourceId"]) -> MetaOapg.properties.mappedResourceId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["externalEntityUrl"]) -> MetaOapg.properties.externalEntityUrl: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["lastSyncDate"]) -> MetaOapg.properties.lastSyncDate: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["syncAction"]) -> MetaOapg.properties.syncAction: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["mappedResourceId", "externalEntityUrl", "description", "lastSyncDate", "syncAction", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["mappedResourceId"]) -> MetaOapg.properties.mappedResourceId: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["externalEntityUrl"]) -> typing.Union[MetaOapg.properties.externalEntityUrl, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["description"]) -> typing.Union[MetaOapg.properties.description, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["lastSyncDate"]) -> typing.Union[MetaOapg.properties.lastSyncDate, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["syncAction"]) -> typing.Union[MetaOapg.properties.syncAction, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["mappedResourceId", "externalEntityUrl", "description", "lastSyncDate", "syncAction", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        mappedResourceId: typing.Union[MetaOapg.properties.mappedResourceId, str, uuid.UUID, ],
        externalEntityUrl: typing.Union[MetaOapg.properties.externalEntityUrl, str, schemas.Unset] = schemas.unset,
        description: typing.Union[MetaOapg.properties.description, str, schemas.Unset] = schemas.unset,
        lastSyncDate: typing.Union[MetaOapg.properties.lastSyncDate, decimal.Decimal, int, schemas.Unset] = schemas.unset,
        syncAction: typing.Union[MetaOapg.properties.syncAction, str, schemas.Unset] = schemas.unset,
        _configuration: typing.Optional[schemas.Configuration] = None,
        **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
    ) -> 'ChangeMappingByMappedResourceRequest':
        return super().__new__(
            cls,
            *args,
            mappedResourceId=mappedResourceId,
            externalEntityUrl=externalEntityUrl,
            description=description,
            lastSyncDate=lastSyncDate,
            syncAction=syncAction,
            _configuration=_configuration,
            **kwargs,
        )
