# coding: utf-8

"""
    Managed Ray API

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

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


import pprint
import re  # noqa: F401

import six

from openapi_client.configuration import Configuration


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

    Do not edit the class manually.
    """

    """
    Attributes:
      openapi_types (dict): The key is attribute name
                            and the value is attribute type.
      attribute_map (dict): The key is attribute name
                            and the value is json key in definition.
    """
    openapi_types = {
        'orgwide': 'bool',
        'project_id': 'str',
        'creator_id': 'str',
        'name': 'TextQuery',
        'include_anonymous': 'bool',
        'archive_status': 'ArchiveStatus',
        'cloud_id': 'str',
        'version': 'int',
        'sort_by_clauses': 'list[SortByClause]'
    }

    attribute_map = {
        'orgwide': 'orgwide',
        'project_id': 'project_id',
        'creator_id': 'creator_id',
        'name': 'name',
        'include_anonymous': 'include_anonymous',
        'archive_status': 'archive_status',
        'cloud_id': 'cloud_id',
        'version': 'version',
        'sort_by_clauses': 'sort_by_clauses'
    }

    def __init__(self, orgwide=False, project_id=None, creator_id=None, name=None, include_anonymous=False, archive_status=None, cloud_id=None, version=None, sort_by_clauses=None, local_vars_configuration=None):  # noqa: E501
        """ComputeTemplateQuery - a model defined in OpenAPI"""  # noqa: E501
        if local_vars_configuration is None:
            local_vars_configuration = Configuration()
        self.local_vars_configuration = local_vars_configuration

        self._orgwide = None
        self._project_id = None
        self._creator_id = None
        self._name = None
        self._include_anonymous = None
        self._archive_status = None
        self._cloud_id = None
        self._version = None
        self._sort_by_clauses = None
        self.discriminator = None

        if orgwide is not None:
            self.orgwide = orgwide
        if project_id is not None:
            self.project_id = project_id
        if creator_id is not None:
            self.creator_id = creator_id
        if name is not None:
            self.name = name
        if include_anonymous is not None:
            self.include_anonymous = include_anonymous
        if archive_status is not None:
            self.archive_status = archive_status
        if cloud_id is not None:
            self.cloud_id = cloud_id
        if version is not None:
            self.version = version
        if sort_by_clauses is not None:
            self.sort_by_clauses = sort_by_clauses

    @property
    def orgwide(self):
        """Gets the orgwide of this ComputeTemplateQuery.  # noqa: E501

        This option is deprectated. It does nothing.  # noqa: E501

        :return: The orgwide of this ComputeTemplateQuery.  # noqa: E501
        :rtype: bool
        """
        return self._orgwide

    @orgwide.setter
    def orgwide(self, orgwide):
        """Sets the orgwide of this ComputeTemplateQuery.

        This option is deprectated. It does nothing.  # noqa: E501

        :param orgwide: The orgwide of this ComputeTemplateQuery.  # noqa: E501
        :type: bool
        """

        self._orgwide = orgwide

    @property
    def project_id(self):
        """Gets the project_id of this ComputeTemplateQuery.  # noqa: E501


        :return: The project_id of this ComputeTemplateQuery.  # noqa: E501
        :rtype: str
        """
        return self._project_id

    @project_id.setter
    def project_id(self, project_id):
        """Sets the project_id of this ComputeTemplateQuery.


        :param project_id: The project_id of this ComputeTemplateQuery.  # noqa: E501
        :type: str
        """

        self._project_id = project_id

    @property
    def creator_id(self):
        """Gets the creator_id of this ComputeTemplateQuery.  # noqa: E501

        Filters Compute Templates by creator. This is only supported when `orgwide` is True.  # noqa: E501

        :return: The creator_id of this ComputeTemplateQuery.  # noqa: E501
        :rtype: str
        """
        return self._creator_id

    @creator_id.setter
    def creator_id(self, creator_id):
        """Sets the creator_id of this ComputeTemplateQuery.

        Filters Compute Templates by creator. This is only supported when `orgwide` is True.  # noqa: E501

        :param creator_id: The creator_id of this ComputeTemplateQuery.  # noqa: E501
        :type: str
        """

        self._creator_id = creator_id

    @property
    def name(self):
        """Gets the name of this ComputeTemplateQuery.  # noqa: E501

        Filters Compute Templates by name. If this field is absent, no filtering is done.  # noqa: E501

        :return: The name of this ComputeTemplateQuery.  # noqa: E501
        :rtype: TextQuery
        """
        return self._name

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

        Filters Compute Templates by name. If this field is absent, no filtering is done.  # noqa: E501

        :param name: The name of this ComputeTemplateQuery.  # noqa: E501
        :type: TextQuery
        """

        self._name = name

    @property
    def include_anonymous(self):
        """Gets the include_anonymous of this ComputeTemplateQuery.  # noqa: E501

        Whether to include anonymous Compute Templates in the search.Anonymous compute templates are usually not shown in list views.  # noqa: E501

        :return: The include_anonymous of this ComputeTemplateQuery.  # noqa: E501
        :rtype: bool
        """
        return self._include_anonymous

    @include_anonymous.setter
    def include_anonymous(self, include_anonymous):
        """Sets the include_anonymous of this ComputeTemplateQuery.

        Whether to include anonymous Compute Templates in the search.Anonymous compute templates are usually not shown in list views.  # noqa: E501

        :param include_anonymous: The include_anonymous of this ComputeTemplateQuery.  # noqa: E501
        :type: bool
        """

        self._include_anonymous = include_anonymous

    @property
    def archive_status(self):
        """Gets the archive_status of this ComputeTemplateQuery.  # noqa: E501

        The archive status to filter by. Defaults to unarchived.  # noqa: E501

        :return: The archive_status of this ComputeTemplateQuery.  # noqa: E501
        :rtype: ArchiveStatus
        """
        return self._archive_status

    @archive_status.setter
    def archive_status(self, archive_status):
        """Sets the archive_status of this ComputeTemplateQuery.

        The archive status to filter by. Defaults to unarchived.  # noqa: E501

        :param archive_status: The archive_status of this ComputeTemplateQuery.  # noqa: E501
        :type: ArchiveStatus
        """

        self._archive_status = archive_status

    @property
    def cloud_id(self):
        """Gets the cloud_id of this ComputeTemplateQuery.  # noqa: E501

        Filters Compute Templates by cloud  # noqa: E501

        :return: The cloud_id of this ComputeTemplateQuery.  # noqa: E501
        :rtype: str
        """
        return self._cloud_id

    @cloud_id.setter
    def cloud_id(self, cloud_id):
        """Sets the cloud_id of this ComputeTemplateQuery.

        Filters Compute Templates by cloud  # noqa: E501

        :param cloud_id: The cloud_id of this ComputeTemplateQuery.  # noqa: E501
        :type: str
        """

        self._cloud_id = cloud_id

    @property
    def version(self):
        """Gets the version of this ComputeTemplateQuery.  # noqa: E501

        Filters Compute Templates by version. Versions are positive integers. Setting this field to -1 will return only the latest version of each Compute Template. Setting this field to -2 will not filter by version. Setting version to None is equivalent to setting version to '-1'.  # noqa: E501

        :return: The version of this ComputeTemplateQuery.  # noqa: E501
        :rtype: int
        """
        return self._version

    @version.setter
    def version(self, version):
        """Sets the version of this ComputeTemplateQuery.

        Filters Compute Templates by version. Versions are positive integers. Setting this field to -1 will return only the latest version of each Compute Template. Setting this field to -2 will not filter by version. Setting version to None is equivalent to setting version to '-1'.  # noqa: E501

        :param version: The version of this ComputeTemplateQuery.  # noqa: E501
        :type: int
        """

        self._version = version

    @property
    def sort_by_clauses(self):
        """Gets the sort_by_clauses of this ComputeTemplateQuery.  # noqa: E501

        The order used to specify results. The list will be used to construct ORDER BY database queries. If not specified, the fallback order by clauses are 1. Creation time (desc) 2. Name (ascending) and 3. ID (ascending)  # noqa: E501

        :return: The sort_by_clauses of this ComputeTemplateQuery.  # noqa: E501
        :rtype: list[SortByClause]
        """
        return self._sort_by_clauses

    @sort_by_clauses.setter
    def sort_by_clauses(self, sort_by_clauses):
        """Sets the sort_by_clauses of this ComputeTemplateQuery.

        The order used to specify results. The list will be used to construct ORDER BY database queries. If not specified, the fallback order by clauses are 1. Creation time (desc) 2. Name (ascending) and 3. ID (ascending)  # noqa: E501

        :param sort_by_clauses: The sort_by_clauses of this ComputeTemplateQuery.  # noqa: E501
        :type: list[SortByClause]
        """

        self._sort_by_clauses = sort_by_clauses

    def to_dict(self):
        """Returns the model properties as a dict"""
        result = {}

        for attr, _ in six.iteritems(self.openapi_types):
            value = getattr(self, attr)
            if isinstance(value, list):
                result[attr] = list(map(
                    lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
                    value
                ))
            elif hasattr(value, "to_dict"):
                result[attr] = value.to_dict()
            elif isinstance(value, dict):
                result[attr] = dict(map(
                    lambda item: (item[0], item[1].to_dict())
                    if hasattr(item[1], "to_dict") else item,
                    value.items()
                ))
            else:
                result[attr] = value

        return result

    def to_str(self):
        """Returns the string representation of the model"""
        return pprint.pformat(self.to_dict())

    def __repr__(self):
        """For `print` and `pprint`"""
        return self.to_str()

    def __eq__(self, other):
        """Returns true if both objects are equal"""
        if not isinstance(other, ComputeTemplateQuery):
            return False

        return self.to_dict() == other.to_dict()

    def __ne__(self, other):
        """Returns true if both objects are not equal"""
        if not isinstance(other, ComputeTemplateQuery):
            return True

        return self.to_dict() != other.to_dict()
