# coding: utf-8

"""
    node-server

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    The version of the OpenAPI document: 0.0.237
    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 openapi_client import schemas  # noqa: F401


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

    Do not edit the class manually.
    """


    class MetaOapg:
        required = {
            "createdAt",
            "notes",
            "data",
            "createdBy",
            "organization",
            "project",
            "_id",
            "extId",
            "tag",
            "branch",
            "isFavourite",
            "status",
        }
        
        class properties:
            _id = schemas.StrSchema
            extId = schemas.StrSchema
            createdBy = schemas.StrSchema
            organization = schemas.StrSchema
            project = schemas.StrSchema
            branch = schemas.StrSchema
            tag = schemas.StrSchema
        
            @staticmethod
            def data() -> typing.Type['ModelGraph']:
                return ModelGraph
            createdAt = schemas.DateTimeSchema
            notes = schemas.StrSchema
            
            
            class status(
                schemas.EnumBase,
                schemas.StrSchema
            ):
            
            
                class MetaOapg:
                    enum_value_to_name = {
                        "visible": "VISIBLE",
                        "trash": "TRASH",
                    }
                
                @schemas.classproperty
                def VISIBLE(cls):
                    return cls("visible")
                
                @schemas.classproperty
                def TRASH(cls):
                    return cls("trash")
            isFavourite = schemas.BoolSchema
            __annotations__ = {
                "_id": _id,
                "extId": extId,
                "createdBy": createdBy,
                "organization": organization,
                "project": project,
                "branch": branch,
                "tag": tag,
                "data": data,
                "createdAt": createdAt,
                "notes": notes,
                "status": status,
                "isFavourite": isFavourite,
            }
        additional_properties = schemas.NotAnyTypeSchema
    
    createdAt: MetaOapg.properties.createdAt
    notes: MetaOapg.properties.notes
    data: 'ModelGraph'
    createdBy: MetaOapg.properties.createdBy
    organization: MetaOapg.properties.organization
    project: MetaOapg.properties.project
    _id: MetaOapg.properties._id
    extId: MetaOapg.properties.extId
    tag: MetaOapg.properties.tag
    branch: MetaOapg.properties.branch
    isFavourite: MetaOapg.properties.isFavourite
    status: MetaOapg.properties.status
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["createdAt"]) -> MetaOapg.properties.createdAt: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["notes"]) -> MetaOapg.properties.notes: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["data"]) -> 'ModelGraph': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["createdBy"]) -> MetaOapg.properties.createdBy: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["organization"]) -> MetaOapg.properties.organization: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["project"]) -> MetaOapg.properties.project: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["_id"]) -> MetaOapg.properties._id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["extId"]) -> MetaOapg.properties.extId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["tag"]) -> MetaOapg.properties.tag: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["branch"]) -> MetaOapg.properties.branch: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["isFavourite"]) -> MetaOapg.properties.isFavourite: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["createdAt"], typing_extensions.Literal["notes"], typing_extensions.Literal["data"], typing_extensions.Literal["createdBy"], typing_extensions.Literal["organization"], typing_extensions.Literal["project"], typing_extensions.Literal["_id"], typing_extensions.Literal["extId"], typing_extensions.Literal["tag"], typing_extensions.Literal["branch"], typing_extensions.Literal["isFavourite"], typing_extensions.Literal["status"], ]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["createdAt"]) -> MetaOapg.properties.createdAt: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["notes"]) -> MetaOapg.properties.notes: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["data"]) -> 'ModelGraph': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["createdBy"]) -> MetaOapg.properties.createdBy: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["organization"]) -> MetaOapg.properties.organization: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["project"]) -> MetaOapg.properties.project: ...
    
    @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["extId"]) -> MetaOapg.properties.extId: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["tag"]) -> MetaOapg.properties.tag: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["branch"]) -> MetaOapg.properties.branch: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["isFavourite"]) -> MetaOapg.properties.isFavourite: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["createdAt"], typing_extensions.Literal["notes"], typing_extensions.Literal["data"], typing_extensions.Literal["createdBy"], typing_extensions.Literal["organization"], typing_extensions.Literal["project"], typing_extensions.Literal["_id"], typing_extensions.Literal["extId"], typing_extensions.Literal["tag"], typing_extensions.Literal["branch"], typing_extensions.Literal["isFavourite"], typing_extensions.Literal["status"], ]):
        return super().get_item_oapg(name)

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        createdAt: typing.Union[MetaOapg.properties.createdAt, str, datetime, ],
        notes: typing.Union[MetaOapg.properties.notes, str, ],
        data: 'ModelGraph',
        createdBy: typing.Union[MetaOapg.properties.createdBy, str, ],
        organization: typing.Union[MetaOapg.properties.organization, str, ],
        project: typing.Union[MetaOapg.properties.project, str, ],
        _id: typing.Union[MetaOapg.properties._id, str, ],
        extId: typing.Union[MetaOapg.properties.extId, str, ],
        tag: typing.Union[MetaOapg.properties.tag, str, ],
        branch: typing.Union[MetaOapg.properties.branch, str, ],
        isFavourite: typing.Union[MetaOapg.properties.isFavourite, bool, ],
        status: typing.Union[MetaOapg.properties.status, str, ],
        _configuration: typing.Optional[schemas.Configuration] = None,
    ) -> 'Version':
        return super().__new__(
            cls,
            *args,
            createdAt=createdAt,
            notes=notes,
            data=data,
            createdBy=createdBy,
            organization=organization,
            project=project,
            _id=_id,
            extId=extId,
            tag=tag,
            branch=branch,
            isFavourite=isFavourite,
            status=status,
            _configuration=_configuration,
        )

from openapi_client.model.model_graph import ModelGraph
