# coding: utf-8

"""
    Anyscale 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 anyscale_client.configuration import Configuration


class ClusterComputesQuery(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 = {
        'project_id': 'str',
        'creator_id': 'str',
        'name': 'TextQuery',
        'include_anonymous': 'bool',
        'paging': 'PageQuery',
        'cloud_id': 'str',
        'version': 'int',
        'sort_by_clauses': 'list[SortByClauseClusterComputesSortField]'
    }

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

    def __init__(self, project_id=None, creator_id=None, name=None, include_anonymous=False, paging=None, cloud_id=None, version=None, sort_by_clauses=[{"sort_field":"CREATED_AT","sort_order":"DESC"},{"sort_field":"NAME","sort_order":"ASC"},{"sort_field":"ID","sort_order":"ASC"}], local_vars_configuration=None):  # noqa: E501
        """ClusterComputesQuery - 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._project_id = None
        self._creator_id = None
        self._name = None
        self._include_anonymous = None
        self._paging = None
        self._cloud_id = None
        self._version = None
        self._sort_by_clauses = None
        self.discriminator = None

        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 paging is not None:
            self.paging = paging
        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 project_id(self):
        """Gets the project_id of this ClusterComputesQuery.  # noqa: E501

        Filters Cluster Computes by project. If this field is absent, no filtering is done.  # noqa: E501

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

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

        Filters Cluster Computes by project. If this field is absent, no filtering is done.  # noqa: E501

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

        self._project_id = project_id

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

        Filters Cluster Computes by creator. If this field is absent, no filtering is done.  # noqa: E501

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

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

        Filters Cluster Computes by creator. If this field is absent, no filtering is done.  # noqa: E501

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

        self._creator_id = creator_id

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

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

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

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

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

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

        self._name = name

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

        Whether to include anonymous Cluster Computes in the search.  # noqa: E501

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

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

        Whether to include anonymous Cluster Computes in the search.  # noqa: E501

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

        self._include_anonymous = include_anonymous

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

        Pagination information.  # noqa: E501

        :return: The paging of this ClusterComputesQuery.  # noqa: E501
        :rtype: PageQuery
        """
        return self._paging

    @paging.setter
    def paging(self, paging):
        """Sets the paging of this ClusterComputesQuery.

        Pagination information.  # noqa: E501

        :param paging: The paging of this ClusterComputesQuery.  # noqa: E501
        :type: PageQuery
        """

        self._paging = paging

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

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

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

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

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

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

        self._cloud_id = cloud_id

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

        Filters Cluster Computes by version. Versions are positive integers. Setting this field to -1 will return only the latest version of each Cluster Compute. Setting this field to -2 will not filter by version. For example, this can be used to fetch all versions of a Cluster Compute. Deprecated behavior: Setting version to None is equivalent to setting version to '-1'.  # noqa: E501

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

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

        Filters Cluster Computes by version. Versions are positive integers. Setting this field to -1 will return only the latest version of each Cluster Compute. Setting this field to -2 will not filter by version. For example, this can be used to fetch all versions of a Cluster Compute. Deprecated behavior: Setting version to None is equivalent to setting version to '-1'.  # noqa: E501

        :param version: The version of this ClusterComputesQuery.  # noqa: E501
        :type: int
        """
        if (self.local_vars_configuration.client_side_validation and
                version is not None and version < -2):  # noqa: E501
            raise ValueError("Invalid value for `version`, must be a value greater than or equal to `-2`")  # noqa: E501

        self._version = version

    @property
    def sort_by_clauses(self):
        """Gets the sort_by_clauses of this ClusterComputesQuery.  # 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 ClusterComputesQuery.  # noqa: E501
        :rtype: list[SortByClauseClusterComputesSortField]
        """
        return self._sort_by_clauses

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

        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 ClusterComputesQuery.  # noqa: E501
        :type: list[SortByClauseClusterComputesSortField]
        """

        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, ClusterComputesQuery):
            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, ClusterComputesQuery):
            return True

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