# coding: utf-8

"""
    Data Repository API

    <details><summary>This document defines the REST API for the Terra Data Repository.</summary> <p> **Status: design in progress** There are a few top-level endpoints (besides some used by swagger):  * / - generated by swagger: swagger API page that provides this documentation and a live UI for submitting REST requests  * /status - provides the operational status of the service  * /configuration - provides the basic configuration and information about the service  * /api - is the authenticated and authorized Data Repository API  * /ga4gh/drs/v1 - is a transcription of the Data Repository Service API  The API endpoints are organized by interface. Each interface is separately versioned. <p> **Notes on Naming** <p> All of the reference items are suffixed with \\\"Model\\\". Those names are used as the class names in the generated Java code. It is helpful to distinguish these model classes from other related classes, like the DAO classes and the operation classes. </details>   # noqa: E501

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


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

    Do not edit the class manually.

    SnapshotModel returns detailed data about an existing snapshot.

    """


    class MetaOapg:
        
        class properties:
            id = schemas.UUIDSchema
        
            @staticmethod
            def name() -> typing.Type['DatasetSnapshotNameProperty']:
                return DatasetSnapshotNameProperty
            description = schemas.StrSchema
            createdDate = schemas.StrSchema
            consentCode = schemas.StrSchema
            
            
            class source(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['SnapshotSourceModel']:
                        return SnapshotSourceModel
            
                def __new__(
                    cls,
                    _arg: typing.Union[typing.Tuple['SnapshotSourceModel'], typing.List['SnapshotSourceModel']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'source':
                    return super().__new__(
                        cls,
                        _arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'SnapshotSourceModel':
                    return super().__getitem__(i)
            
            
            class tables(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['TableModel']:
                        return TableModel
            
                def __new__(
                    cls,
                    _arg: typing.Union[typing.Tuple['TableModel'], typing.List['TableModel']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'tables':
                    return super().__new__(
                        cls,
                        _arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'TableModel':
                    return super().__getitem__(i)
            
            
            class relationships(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    
                    @staticmethod
                    def items() -> typing.Type['RelationshipModel']:
                        return RelationshipModel
            
                def __new__(
                    cls,
                    _arg: typing.Union[typing.Tuple['RelationshipModel'], typing.List['RelationshipModel']],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'relationships':
                    return super().__new__(
                        cls,
                        _arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> 'RelationshipModel':
                    return super().__getitem__(i)
            profileId = schemas.UUIDSchema
            dataProject = schemas.StrSchema
        
            @staticmethod
            def accessInformation() -> typing.Type['AccessInfoModel']:
                return AccessInfoModel
        
            @staticmethod
            def creationInformation() -> typing.Type['SnapshotRequestContentsModel']:
                return SnapshotRequestContentsModel
        
            @staticmethod
            def cloudPlatform() -> typing.Type['CloudPlatform']:
                return CloudPlatform
            properties = schemas.DictSchema
        
            @staticmethod
            def duosFirecloudGroup() -> typing.Type['DuosFirecloudGroupModel']:
                return DuosFirecloudGroupModel
            globalFileIds = schemas.BoolSchema
            compactIdPrefix = schemas.StrSchema
            
            
            class tags(
                schemas.ListSchema
            ):
            
            
                class MetaOapg:
                    items = schemas.StrSchema
            
                def __new__(
                    cls,
                    _arg: typing.Union[typing.Tuple[typing.Union[MetaOapg.items, str, ]], typing.List[typing.Union[MetaOapg.items, str, ]]],
                    _configuration: typing.Optional[schemas.Configuration] = None,
                ) -> 'tags':
                    return super().__new__(
                        cls,
                        _arg,
                        _configuration=_configuration,
                    )
            
                def __getitem__(self, i: int) -> MetaOapg.items:
                    return super().__getitem__(i)
            __annotations__ = {
                "id": id,
                "name": name,
                "description": description,
                "createdDate": createdDate,
                "consentCode": consentCode,
                "source": source,
                "tables": tables,
                "relationships": relationships,
                "profileId": profileId,
                "dataProject": dataProject,
                "accessInformation": accessInformation,
                "creationInformation": creationInformation,
                "cloudPlatform": cloudPlatform,
                "properties": properties,
                "duosFirecloudGroup": duosFirecloudGroup,
                "globalFileIds": globalFileIds,
                "compactIdPrefix": compactIdPrefix,
                "tags": tags,
            }
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["name"]) -> 'DatasetSnapshotNameProperty': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["description"]) -> MetaOapg.properties.description: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["createdDate"]) -> MetaOapg.properties.createdDate: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["consentCode"]) -> MetaOapg.properties.consentCode: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["source"]) -> MetaOapg.properties.source: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["tables"]) -> MetaOapg.properties.tables: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["relationships"]) -> MetaOapg.properties.relationships: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["profileId"]) -> MetaOapg.properties.profileId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["dataProject"]) -> MetaOapg.properties.dataProject: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["accessInformation"]) -> 'AccessInfoModel': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["creationInformation"]) -> 'SnapshotRequestContentsModel': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["cloudPlatform"]) -> 'CloudPlatform': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["properties"]) -> MetaOapg.properties.properties: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["duosFirecloudGroup"]) -> 'DuosFirecloudGroupModel': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["globalFileIds"]) -> MetaOapg.properties.globalFileIds: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["compactIdPrefix"]) -> MetaOapg.properties.compactIdPrefix: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["tags"]) -> MetaOapg.properties.tags: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "name", "description", "createdDate", "consentCode", "source", "tables", "relationships", "profileId", "dataProject", "accessInformation", "creationInformation", "cloudPlatform", "properties", "duosFirecloudGroup", "globalFileIds", "compactIdPrefix", "tags", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["name"]) -> typing.Union['DatasetSnapshotNameProperty', 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["createdDate"]) -> typing.Union[MetaOapg.properties.createdDate, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["consentCode"]) -> typing.Union[MetaOapg.properties.consentCode, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["source"]) -> typing.Union[MetaOapg.properties.source, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["tables"]) -> typing.Union[MetaOapg.properties.tables, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["relationships"]) -> typing.Union[MetaOapg.properties.relationships, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["profileId"]) -> typing.Union[MetaOapg.properties.profileId, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["dataProject"]) -> typing.Union[MetaOapg.properties.dataProject, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["accessInformation"]) -> typing.Union['AccessInfoModel', schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["creationInformation"]) -> typing.Union['SnapshotRequestContentsModel', schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["cloudPlatform"]) -> typing.Union['CloudPlatform', schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["properties"]) -> typing.Union[MetaOapg.properties.properties, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["duosFirecloudGroup"]) -> typing.Union['DuosFirecloudGroupModel', schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["globalFileIds"]) -> typing.Union[MetaOapg.properties.globalFileIds, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["compactIdPrefix"]) -> typing.Union[MetaOapg.properties.compactIdPrefix, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["tags"]) -> typing.Union[MetaOapg.properties.tags, 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["id", "name", "description", "createdDate", "consentCode", "source", "tables", "relationships", "profileId", "dataProject", "accessInformation", "creationInformation", "cloudPlatform", "properties", "duosFirecloudGroup", "globalFileIds", "compactIdPrefix", "tags", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *_args: typing.Union[dict, frozendict.frozendict, ],
        id: typing.Union[MetaOapg.properties.id, str, uuid.UUID, schemas.Unset] = schemas.unset,
        name: typing.Union['DatasetSnapshotNameProperty', schemas.Unset] = schemas.unset,
        description: typing.Union[MetaOapg.properties.description, str, schemas.Unset] = schemas.unset,
        createdDate: typing.Union[MetaOapg.properties.createdDate, str, schemas.Unset] = schemas.unset,
        consentCode: typing.Union[MetaOapg.properties.consentCode, str, schemas.Unset] = schemas.unset,
        source: typing.Union[MetaOapg.properties.source, list, tuple, schemas.Unset] = schemas.unset,
        tables: typing.Union[MetaOapg.properties.tables, list, tuple, schemas.Unset] = schemas.unset,
        relationships: typing.Union[MetaOapg.properties.relationships, list, tuple, schemas.Unset] = schemas.unset,
        profileId: typing.Union[MetaOapg.properties.profileId, str, uuid.UUID, schemas.Unset] = schemas.unset,
        dataProject: typing.Union[MetaOapg.properties.dataProject, str, schemas.Unset] = schemas.unset,
        accessInformation: typing.Union['AccessInfoModel', schemas.Unset] = schemas.unset,
        creationInformation: typing.Union['SnapshotRequestContentsModel', schemas.Unset] = schemas.unset,
        cloudPlatform: typing.Union['CloudPlatform', schemas.Unset] = schemas.unset,
        properties: typing.Union[MetaOapg.properties.properties, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        duosFirecloudGroup: typing.Union['DuosFirecloudGroupModel', schemas.Unset] = schemas.unset,
        globalFileIds: typing.Union[MetaOapg.properties.globalFileIds, bool, schemas.Unset] = schemas.unset,
        compactIdPrefix: typing.Union[MetaOapg.properties.compactIdPrefix, str, schemas.Unset] = schemas.unset,
        tags: typing.Union[MetaOapg.properties.tags, list, tuple, 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],
    ) -> 'SnapshotModel':
        return super().__new__(
            cls,
            *_args,
            id=id,
            name=name,
            description=description,
            createdDate=createdDate,
            consentCode=consentCode,
            source=source,
            tables=tables,
            relationships=relationships,
            profileId=profileId,
            dataProject=dataProject,
            accessInformation=accessInformation,
            creationInformation=creationInformation,
            cloudPlatform=cloudPlatform,
            properties=properties,
            duosFirecloudGroup=duosFirecloudGroup,
            globalFileIds=globalFileIds,
            compactIdPrefix=compactIdPrefix,
            tags=tags,
            _configuration=_configuration,
            **kwargs,
        )

from data_repo_client.model.access_info_model import AccessInfoModel
from data_repo_client.model.cloud_platform import CloudPlatform
from data_repo_client.model.dataset_snapshot_name_property import DatasetSnapshotNameProperty
from data_repo_client.model.duos_firecloud_group_model import DuosFirecloudGroupModel
from data_repo_client.model.relationship_model import RelationshipModel
from data_repo_client.model.snapshot_request_contents_model import SnapshotRequestContentsModel
from data_repo_client.model.snapshot_source_model import SnapshotSourceModel
from data_repo_client.model.table_model import TableModel
