# 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 ActivityImpl(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.

    The list of results.
    """


    class MetaOapg:
        required = {
            "callId",
            "callCount",
            "cause",
            "description",
            "id",
            "activityType",
            "user",
            "timestamp",
        }
        
        class properties:
            id = schemas.UUIDSchema
        
            @staticmethod
            def user() -> typing.Type['UserReferenceImpl']:
                return UserReferenceImpl
            timestamp = schemas.Int64Schema
            
            
            class cause(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "MANUAL": "MANUAL",
                        "IMPORT": "IMPORT",
                        "BULK_DELETE": "BULK_DELETE",
                        "BULK_MOVE": "BULK_MOVE",
                        "BULK_EDIT": "BULK_EDIT",
                        "BULK_INSERT": "BULK_INSERT",
                        "WORKFLOW": "WORKFLOW",
                    }
                
                @schemas.classproperty
                def MANUAL(cls):
                    return cls("MANUAL")
                
                @schemas.classproperty
                def IMPORT(cls):
                    return cls("IMPORT")
                
                @schemas.classproperty
                def BULK_DELETE(cls):
                    return cls("BULK_DELETE")
                
                @schemas.classproperty
                def BULK_MOVE(cls):
                    return cls("BULK_MOVE")
                
                @schemas.classproperty
                def BULK_EDIT(cls):
                    return cls("BULK_EDIT")
                
                @schemas.classproperty
                def BULK_INSERT(cls):
                    return cls("BULK_INSERT")
                
                @schemas.classproperty
                def WORKFLOW(cls):
                    return cls("WORKFLOW")
            callId = schemas.StrSchema
            callCount = schemas.Int32Schema
            
            
            class activityType(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "ADD": "ADD",
                        "UPDATE": "UPDATE",
                        "DELETE": "DELETE",
                    }
                
                @schemas.classproperty
                def ADD(cls):
                    return cls("ADD")
                
                @schemas.classproperty
                def UPDATE(cls):
                    return cls("UPDATE")
                
                @schemas.classproperty
                def DELETE(cls):
                    return cls("DELETE")
            description = schemas.StrSchema
            __annotations__ = {
                "id": id,
                "user": user,
                "timestamp": timestamp,
                "cause": cause,
                "callId": callId,
                "callCount": callCount,
                "activityType": activityType,
                "description": description,
            }
    
    callId: MetaOapg.properties.callId
    callCount: MetaOapg.properties.callCount
    cause: MetaOapg.properties.cause
    description: MetaOapg.properties.description
    id: MetaOapg.properties.id
    activityType: MetaOapg.properties.activityType
    user: 'UserReferenceImpl'
    timestamp: MetaOapg.properties.timestamp
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["user"]) -> 'UserReferenceImpl': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["timestamp"]) -> MetaOapg.properties.timestamp: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["cause"]) -> MetaOapg.properties.cause: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["callId"]) -> MetaOapg.properties.callId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["callCount"]) -> MetaOapg.properties.callCount: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["activityType"]) -> MetaOapg.properties.activityType: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "user", "timestamp", "cause", "callId", "callCount", "activityType", "description", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["user"]) -> 'UserReferenceImpl': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["timestamp"]) -> MetaOapg.properties.timestamp: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["cause"]) -> MetaOapg.properties.cause: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["callId"]) -> MetaOapg.properties.callId: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["callCount"]) -> MetaOapg.properties.callCount: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["activityType"]) -> MetaOapg.properties.activityType: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @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["id", "user", "timestamp", "cause", "callId", "callCount", "activityType", "description", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        callId: typing.Union[MetaOapg.properties.callId, str, ],
        callCount: typing.Union[MetaOapg.properties.callCount, decimal.Decimal, int, ],
        cause: typing.Union[MetaOapg.properties.cause, str, ],
        description: typing.Union[MetaOapg.properties.description, str, ],
        id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, ],
        activityType: typing.Union[MetaOapg.properties.activityType, str, ],
        user: 'UserReferenceImpl',
        timestamp: typing.Union[MetaOapg.properties.timestamp, decimal.Decimal, int, ],
        _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],
    ) -> 'ActivityImpl':
        return super().__new__(
            cls,
            *args,
            callId=callId,
            callCount=callCount,
            cause=cause,
            description=description,
            id=id,
            activityType=activityType,
            user=user,
            timestamp=timestamp,
            _configuration=_configuration,
            **kwargs,
        )

from collibra_core.model.user_reference_impl import UserReferenceImpl
