# coding: utf-8

from __future__ import absolute_import
from datetime import date, datetime  # noqa: F401

from typing import List, Dict  # noqa: F401

from mistk.transform.server.models.base_model_ import Model
from mistk.transform.server import util


class ObjectInfo(Model):
    """NOTE: This class is auto generated by the swagger code generator program.

    Do not edit the class manually.
    """

    def __init__(self, kind: str=None, id: str=None, name: str=None, display_name: str=None, description: str=None, summary: str=None, owner: str=None, project: str=None, public: bool=None, labels: object=None, resources: List[str]=None, resource_version: int=None, creation_time: datetime=None, modification_time: datetime=None):  # noqa: E501
        """ObjectInfo - a model defined in Swagger

        :param kind: The kind of this ObjectInfo.  # noqa: E501
        :type kind: str
        :param id: The id of this ObjectInfo.  # noqa: E501
        :type id: str
        :param name: The name of this ObjectInfo.  # noqa: E501
        :type name: str
        :param display_name: The display_name of this ObjectInfo.  # noqa: E501
        :type display_name: str
        :param description: The description of this ObjectInfo.  # noqa: E501
        :type description: str
        :param summary: The summary of this ObjectInfo.  # noqa: E501
        :type summary: str
        :param owner: The owner of this ObjectInfo.  # noqa: E501
        :type owner: str
        :param project: The project of this ObjectInfo.  # noqa: E501
        :type project: str
        :param public: The public of this ObjectInfo.  # noqa: E501
        :type public: bool
        :param labels: The labels of this ObjectInfo.  # noqa: E501
        :type labels: object
        :param resources: The resources of this ObjectInfo.  # noqa: E501
        :type resources: List[str]
        :param resource_version: The resource_version of this ObjectInfo.  # noqa: E501
        :type resource_version: int
        :param creation_time: The creation_time of this ObjectInfo.  # noqa: E501
        :type creation_time: datetime
        :param modification_time: The modification_time of this ObjectInfo.  # noqa: E501
        :type modification_time: datetime
        """
        self.swagger_types = {
            'kind': str,
            'id': str,
            'name': str,
            'display_name': str,
            'description': str,
            'summary': str,
            'owner': str,
            'project': str,
            'public': bool,
            'labels': object,
            'resources': List[str],
            'resource_version': int,
            'creation_time': datetime,
            'modification_time': datetime
        }

        self.attribute_map = {
            'kind': 'kind',
            'id': 'id',
            'name': 'name',
            'display_name': 'displayName',
            'description': 'description',
            'summary': 'summary',
            'owner': 'owner',
            'project': 'project',
            'public': 'public',
            'labels': 'labels',
            'resources': 'resources',
            'resource_version': 'resourceVersion',
            'creation_time': 'creationTime',
            'modification_time': 'modificationTime'
        }

        self._kind = kind
        self._id = id
        self._name = name
        self._display_name = display_name
        self._description = description
        self._summary = summary
        self._owner = owner
        self._project = project
        self._public = public
        self._labels = labels
        self._resources = resources
        self._resource_version = resource_version
        self._creation_time = creation_time
        self._modification_time = modification_time

    @classmethod
    def from_dict(cls, dikt) -> 'ObjectInfo':
        """Returns the dict as a model

        :param dikt: A dict.
        :type: dict
        :return: The ObjectInfo of this ObjectInfo.  # noqa: E501
        :rtype: ObjectInfo
        """
        return util.deserialize_model(dikt, cls)

    @property
    def kind(self) -> str:
        """Gets the kind of this ObjectInfo.

        This is the type of the resource (e.g., Model, Dataset). The field is primarily used when returning watch events, where the type of the field will be unknown.  When submitting resources, this field will often simply be inferred from the context of the submission.   # noqa: E501

        :return: The kind of this ObjectInfo.
        :rtype: str
        """
        return self._kind

    @kind.setter
    def kind(self, kind: str):
        """Sets the kind of this ObjectInfo.

        This is the type of the resource (e.g., Model, Dataset). The field is primarily used when returning watch events, where the type of the field will be unknown.  When submitting resources, this field will often simply be inferred from the context of the submission.   # noqa: E501

        :param kind: The kind of this ObjectInfo.
        :type kind: str
        """

        self._kind = kind

    @property
    def id(self) -> str:
        """Gets the id of this ObjectInfo.

        The unique identifier of the object.  This will be generated automatically.   # noqa: E501

        :return: The id of this ObjectInfo.
        :rtype: str
        """
        return self._id

    @id.setter
    def id(self, id: str):
        """Sets the id of this ObjectInfo.

        The unique identifier of the object.  This will be generated automatically.   # noqa: E501

        :param id: The id of this ObjectInfo.
        :type id: str
        """

        self._id = id

    @property
    def name(self) -> str:
        """Gets the name of this ObjectInfo.

        The unique name of the object. Names of SML resources should be up to maximum length of 253 characters and consist of lower case alphanumeric characters, -, and .   # noqa: E501

        :return: The name of this ObjectInfo.
        :rtype: str
        """
        return self._name

    @name.setter
    def name(self, name: str):
        """Sets the name of this ObjectInfo.

        The unique name of the object. Names of SML resources should be up to maximum length of 253 characters and consist of lower case alphanumeric characters, -, and .   # noqa: E501

        :param name: The name of this ObjectInfo.
        :type name: str
        """

        self._name = name

    @property
    def display_name(self) -> str:
        """Gets the display_name of this ObjectInfo.

        The name of this resoure, as presented via this UI.  This field can have spaces and upper and lower case alphanumeric  characters as well as spaces.   # noqa: E501

        :return: The display_name of this ObjectInfo.
        :rtype: str
        """
        return self._display_name

    @display_name.setter
    def display_name(self, display_name: str):
        """Sets the display_name of this ObjectInfo.

        The name of this resoure, as presented via this UI.  This field can have spaces and upper and lower case alphanumeric  characters as well as spaces.   # noqa: E501

        :param display_name: The display_name of this ObjectInfo.
        :type display_name: str
        """

        self._display_name = display_name

    @property
    def description(self) -> str:
        """Gets the description of this ObjectInfo.

        A documentation description of the resource.  This string can be in Markdown form.   # noqa: E501

        :return: The description of this ObjectInfo.
        :rtype: str
        """
        return self._description

    @description.setter
    def description(self, description: str):
        """Sets the description of this ObjectInfo.

        A documentation description of the resource.  This string can be in Markdown form.   # noqa: E501

        :param description: The description of this ObjectInfo.
        :type description: str
        """

        self._description = description

    @property
    def summary(self) -> str:
        """Gets the summary of this ObjectInfo.

        A short description of this object   # noqa: E501

        :return: The summary of this ObjectInfo.
        :rtype: str
        """
        return self._summary

    @summary.setter
    def summary(self, summary: str):
        """Sets the summary of this ObjectInfo.

        A short description of this object   # noqa: E501

        :param summary: The summary of this ObjectInfo.
        :type summary: str
        """

        self._summary = summary

    @property
    def owner(self) -> str:
        """Gets the owner of this ObjectInfo.

        The owner/creator of this object.   # noqa: E501

        :return: The owner of this ObjectInfo.
        :rtype: str
        """
        return self._owner

    @owner.setter
    def owner(self, owner: str):
        """Sets the owner of this ObjectInfo.

        The owner/creator of this object.   # noqa: E501

        :param owner: The owner of this ObjectInfo.
        :type owner: str
        """

        self._owner = owner

    @property
    def project(self) -> str:
        """Gets the project of this ObjectInfo.

        The project for this object (assuming the resource is project-scoped)   # noqa: E501

        :return: The project of this ObjectInfo.
        :rtype: str
        """
        return self._project

    @project.setter
    def project(self, project: str):
        """Sets the project of this ObjectInfo.

        The project for this object (assuming the resource is project-scoped)   # noqa: E501

        :param project: The project of this ObjectInfo.
        :type project: str
        """

        self._project = project

    @property
    def public(self) -> bool:
        """Gets the public of this ObjectInfo.

        Boolean flag indicating whether this resource will be  accessible to members outside of the project   # noqa: E501

        :return: The public of this ObjectInfo.
        :rtype: bool
        """
        return self._public

    @public.setter
    def public(self, public: bool):
        """Sets the public of this ObjectInfo.

        Boolean flag indicating whether this resource will be  accessible to members outside of the project   # noqa: E501

        :param public: The public of this ObjectInfo.
        :type public: bool
        """

        self._public = public

    @property
    def labels(self) -> object:
        """Gets the labels of this ObjectInfo.

        Key-value pairs of annotations associate with the object.   # noqa: E501

        :return: The labels of this ObjectInfo.
        :rtype: object
        """
        return self._labels

    @labels.setter
    def labels(self, labels: object):
        """Sets the labels of this ObjectInfo.

        Key-value pairs of annotations associate with the object.   # noqa: E501

        :param labels: The labels of this ObjectInfo.
        :type labels: object
        """

        self._labels = labels

    @property
    def resources(self) -> List[str]:
        """Gets the resources of this ObjectInfo.

        An array of resources/reference URIs   # noqa: E501

        :return: The resources of this ObjectInfo.
        :rtype: List[str]
        """
        return self._resources

    @resources.setter
    def resources(self, resources: List[str]):
        """Sets the resources of this ObjectInfo.

        An array of resources/reference URIs   # noqa: E501

        :param resources: The resources of this ObjectInfo.
        :type resources: List[str]
        """

        self._resources = resources

    @property
    def resource_version(self) -> int:
        """Gets the resource_version of this ObjectInfo.

        This is the server-managed version for the object.  It is used  to support monitoring of resources.  This should not be set by the client (and will likely be ignored if it is)   # noqa: E501

        :return: The resource_version of this ObjectInfo.
        :rtype: int
        """
        return self._resource_version

    @resource_version.setter
    def resource_version(self, resource_version: int):
        """Sets the resource_version of this ObjectInfo.

        This is the server-managed version for the object.  It is used  to support monitoring of resources.  This should not be set by the client (and will likely be ignored if it is)   # noqa: E501

        :param resource_version: The resource_version of this ObjectInfo.
        :type resource_version: int
        """

        self._resource_version = resource_version

    @property
    def creation_time(self) -> datetime:
        """Gets the creation_time of this ObjectInfo.

        The date time at which this object was initially created. This will be auto generated by the underlying database. Any user input for this field will be ignored. This will be in the isoformat of 'YYYY-MM-DDTHH:MM:SS.ffffff'   # noqa: E501

        :return: The creation_time of this ObjectInfo.
        :rtype: datetime
        """
        return self._creation_time

    @creation_time.setter
    def creation_time(self, creation_time: datetime):
        """Sets the creation_time of this ObjectInfo.

        The date time at which this object was initially created. This will be auto generated by the underlying database. Any user input for this field will be ignored. This will be in the isoformat of 'YYYY-MM-DDTHH:MM:SS.ffffff'   # noqa: E501

        :param creation_time: The creation_time of this ObjectInfo.
        :type creation_time: datetime
        """

        self._creation_time = creation_time

    @property
    def modification_time(self) -> datetime:
        """Gets the modification_time of this ObjectInfo.

        The date time at which this object was last modified. This will be auto generated by the underlying database. Any user input for this field will be ignored. This will be in the isoformat of 'YYYY-MM-DDTHH:MM:SS.ffffff'   # noqa: E501

        :return: The modification_time of this ObjectInfo.
        :rtype: datetime
        """
        return self._modification_time

    @modification_time.setter
    def modification_time(self, modification_time: datetime):
        """Sets the modification_time of this ObjectInfo.

        The date time at which this object was last modified. This will be auto generated by the underlying database. Any user input for this field will be ignored. This will be in the isoformat of 'YYYY-MM-DDTHH:MM:SS.ffffff'   # noqa: E501

        :param modification_time: The modification_time of this ObjectInfo.
        :type modification_time: datetime
        """

        self._modification_time = modification_time
