# coding: utf-8

"""
    Robust Intelligence REST API

    API methods for Robust Intelligence. Users must authenticate using the `X-Firewall-Api-Key` for all the firewall methods and `rime-api-key` for all other methods.  # noqa: E501

    OpenAPI spec version: 1.0
    Contact: dev@robustintelligence.com
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

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

    Do not edit the class manually.
    """
    """
    Attributes:
      swagger_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.
    """
    swagger_types = {
        'id': 'RimeUUID',
        'name': 'str',
        'description': 'str',
        'use_case': 'str',
        'ethical_consideration': 'str',
        'creation_time': 'datetime',
        'owner_id': 'RimeUUID',
        'workspace_id': 'RimeUUID',
        'model_task': 'RimeModelTask',
        'tags': 'list[str]',
        'firewall_ids': 'list[RimeUUID]',
        'project_test_suite_config': 'TestrunTestSuiteConfig',
        'profiling_config': 'TestrunProfilingConfig',
        'run_time_info': 'RuntimeinfoRunTimeInfo',
        'is_published': 'bool',
        'last_test_run_time': 'datetime',
        'stress_test_categories': 'list[TestrunTestCategoryType]',
        'continuous_test_categories': 'list[TestrunTestCategoryType]',
        'risk_scores': 'list[RiskscoreRiskScore]',
        'active_schedule': 'ProjectScheduleInfo'
    }

    attribute_map = {
        'id': 'id',
        'name': 'name',
        'description': 'description',
        'use_case': 'useCase',
        'ethical_consideration': 'ethicalConsideration',
        'creation_time': 'creationTime',
        'owner_id': 'ownerId',
        'workspace_id': 'workspaceId',
        'model_task': 'modelTask',
        'tags': 'tags',
        'firewall_ids': 'firewallIds',
        'project_test_suite_config': 'projectTestSuiteConfig',
        'profiling_config': 'profilingConfig',
        'run_time_info': 'runTimeInfo',
        'is_published': 'isPublished',
        'last_test_run_time': 'lastTestRunTime',
        'stress_test_categories': 'stressTestCategories',
        'continuous_test_categories': 'continuousTestCategories',
        'risk_scores': 'riskScores',
        'active_schedule': 'activeSchedule'
    }

    def __init__(self, id=None, name=None, description=None, use_case=None, ethical_consideration=None, creation_time=None, owner_id=None, workspace_id=None, model_task=None, tags=None, firewall_ids=None, project_test_suite_config=None, profiling_config=None, run_time_info=None, is_published=None, last_test_run_time=None, stress_test_categories=None, continuous_test_categories=None, risk_scores=None, active_schedule=None):  # noqa: E501
        """ProjectProject - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._name = None
        self._description = None
        self._use_case = None
        self._ethical_consideration = None
        self._creation_time = None
        self._owner_id = None
        self._workspace_id = None
        self._model_task = None
        self._tags = None
        self._firewall_ids = None
        self._project_test_suite_config = None
        self._profiling_config = None
        self._run_time_info = None
        self._is_published = None
        self._last_test_run_time = None
        self._stress_test_categories = None
        self._continuous_test_categories = None
        self._risk_scores = None
        self._active_schedule = None
        self.discriminator = None
        if id is not None:
            self.id = id
        if name is not None:
            self.name = name
        if description is not None:
            self.description = description
        if use_case is not None:
            self.use_case = use_case
        if ethical_consideration is not None:
            self.ethical_consideration = ethical_consideration
        if creation_time is not None:
            self.creation_time = creation_time
        if owner_id is not None:
            self.owner_id = owner_id
        if workspace_id is not None:
            self.workspace_id = workspace_id
        if model_task is not None:
            self.model_task = model_task
        if tags is not None:
            self.tags = tags
        if firewall_ids is not None:
            self.firewall_ids = firewall_ids
        if project_test_suite_config is not None:
            self.project_test_suite_config = project_test_suite_config
        if profiling_config is not None:
            self.profiling_config = profiling_config
        if run_time_info is not None:
            self.run_time_info = run_time_info
        if is_published is not None:
            self.is_published = is_published
        if last_test_run_time is not None:
            self.last_test_run_time = last_test_run_time
        if stress_test_categories is not None:
            self.stress_test_categories = stress_test_categories
        if continuous_test_categories is not None:
            self.continuous_test_categories = continuous_test_categories
        if risk_scores is not None:
            self.risk_scores = risk_scores
        if active_schedule is not None:
            self.active_schedule = active_schedule

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


        :return: The id of this ProjectProject.  # noqa: E501
        :rtype: RimeUUID
        """
        return self._id

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


        :param id: The id of this ProjectProject.  # noqa: E501
        :type: RimeUUID
        """

        self._id = id

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


        :return: The name of this ProjectProject.  # noqa: E501
        :rtype: str
        """
        return self._name

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


        :param name: The name of this ProjectProject.  # noqa: E501
        :type: str
        """

        self._name = name

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


        :return: The description of this ProjectProject.  # noqa: E501
        :rtype: str
        """
        return self._description

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


        :param description: The description of this ProjectProject.  # noqa: E501
        :type: str
        """

        self._description = description

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


        :return: The use_case of this ProjectProject.  # noqa: E501
        :rtype: str
        """
        return self._use_case

    @use_case.setter
    def use_case(self, use_case):
        """Sets the use_case of this ProjectProject.


        :param use_case: The use_case of this ProjectProject.  # noqa: E501
        :type: str
        """

        self._use_case = use_case

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


        :return: The ethical_consideration of this ProjectProject.  # noqa: E501
        :rtype: str
        """
        return self._ethical_consideration

    @ethical_consideration.setter
    def ethical_consideration(self, ethical_consideration):
        """Sets the ethical_consideration of this ProjectProject.


        :param ethical_consideration: The ethical_consideration of this ProjectProject.  # noqa: E501
        :type: str
        """

        self._ethical_consideration = ethical_consideration

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


        :return: The creation_time of this ProjectProject.  # noqa: E501
        :rtype: datetime
        """
        return self._creation_time

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


        :param creation_time: The creation_time of this ProjectProject.  # noqa: E501
        :type: datetime
        """

        self._creation_time = creation_time

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


        :return: The owner_id of this ProjectProject.  # noqa: E501
        :rtype: RimeUUID
        """
        return self._owner_id

    @owner_id.setter
    def owner_id(self, owner_id):
        """Sets the owner_id of this ProjectProject.


        :param owner_id: The owner_id of this ProjectProject.  # noqa: E501
        :type: RimeUUID
        """

        self._owner_id = owner_id

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


        :return: The workspace_id of this ProjectProject.  # noqa: E501
        :rtype: RimeUUID
        """
        return self._workspace_id

    @workspace_id.setter
    def workspace_id(self, workspace_id):
        """Sets the workspace_id of this ProjectProject.


        :param workspace_id: The workspace_id of this ProjectProject.  # noqa: E501
        :type: RimeUUID
        """

        self._workspace_id = workspace_id

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


        :return: The model_task of this ProjectProject.  # noqa: E501
        :rtype: RimeModelTask
        """
        return self._model_task

    @model_task.setter
    def model_task(self, model_task):
        """Sets the model_task of this ProjectProject.


        :param model_task: The model_task of this ProjectProject.  # noqa: E501
        :type: RimeModelTask
        """

        self._model_task = model_task

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

        List of tags associated with the Project to help organizing Projects.  # noqa: E501

        :return: The tags of this ProjectProject.  # noqa: E501
        :rtype: list[str]
        """
        return self._tags

    @tags.setter
    def tags(self, tags):
        """Sets the tags of this ProjectProject.

        List of tags associated with the Project to help organizing Projects.  # noqa: E501

        :param tags: The tags of this ProjectProject.  # noqa: E501
        :type: list[str]
        """

        self._tags = tags

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

        List of Firewall IDs that belong to the Project.  # noqa: E501

        :return: The firewall_ids of this ProjectProject.  # noqa: E501
        :rtype: list[RimeUUID]
        """
        return self._firewall_ids

    @firewall_ids.setter
    def firewall_ids(self, firewall_ids):
        """Sets the firewall_ids of this ProjectProject.

        List of Firewall IDs that belong to the Project.  # noqa: E501

        :param firewall_ids: The firewall_ids of this ProjectProject.  # noqa: E501
        :type: list[RimeUUID]
        """

        self._firewall_ids = firewall_ids

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


        :return: The project_test_suite_config of this ProjectProject.  # noqa: E501
        :rtype: TestrunTestSuiteConfig
        """
        return self._project_test_suite_config

    @project_test_suite_config.setter
    def project_test_suite_config(self, project_test_suite_config):
        """Sets the project_test_suite_config of this ProjectProject.


        :param project_test_suite_config: The project_test_suite_config of this ProjectProject.  # noqa: E501
        :type: TestrunTestSuiteConfig
        """

        self._project_test_suite_config = project_test_suite_config

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


        :return: The profiling_config of this ProjectProject.  # noqa: E501
        :rtype: TestrunProfilingConfig
        """
        return self._profiling_config

    @profiling_config.setter
    def profiling_config(self, profiling_config):
        """Sets the profiling_config of this ProjectProject.


        :param profiling_config: The profiling_config of this ProjectProject.  # noqa: E501
        :type: TestrunProfilingConfig
        """

        self._profiling_config = profiling_config

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


        :return: The run_time_info of this ProjectProject.  # noqa: E501
        :rtype: RuntimeinfoRunTimeInfo
        """
        return self._run_time_info

    @run_time_info.setter
    def run_time_info(self, run_time_info):
        """Sets the run_time_info of this ProjectProject.


        :param run_time_info: The run_time_info of this ProjectProject.  # noqa: E501
        :type: RuntimeinfoRunTimeInfo
        """

        self._run_time_info = run_time_info

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

        Published projects are shown on the Workspace overview page.  # noqa: E501

        :return: The is_published of this ProjectProject.  # noqa: E501
        :rtype: bool
        """
        return self._is_published

    @is_published.setter
    def is_published(self, is_published):
        """Sets the is_published of this ProjectProject.

        Published projects are shown on the Workspace overview page.  # noqa: E501

        :param is_published: The is_published of this ProjectProject.  # noqa: E501
        :type: bool
        """

        self._is_published = is_published

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

        Last time a Test Run was successfully uploaded to the Project.  # noqa: E501

        :return: The last_test_run_time of this ProjectProject.  # noqa: E501
        :rtype: datetime
        """
        return self._last_test_run_time

    @last_test_run_time.setter
    def last_test_run_time(self, last_test_run_time):
        """Sets the last_test_run_time of this ProjectProject.

        Last time a Test Run was successfully uploaded to the Project.  # noqa: E501

        :param last_test_run_time: The last_test_run_time of this ProjectProject.  # noqa: E501
        :type: datetime
        """

        self._last_test_run_time = last_test_run_time

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

        List of test categories to be run in Stress Testing.  # noqa: E501

        :return: The stress_test_categories of this ProjectProject.  # noqa: E501
        :rtype: list[TestrunTestCategoryType]
        """
        return self._stress_test_categories

    @stress_test_categories.setter
    def stress_test_categories(self, stress_test_categories):
        """Sets the stress_test_categories of this ProjectProject.

        List of test categories to be run in Stress Testing.  # noqa: E501

        :param stress_test_categories: The stress_test_categories of this ProjectProject.  # noqa: E501
        :type: list[TestrunTestCategoryType]
        """

        self._stress_test_categories = stress_test_categories

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

        List of test categories to be run in Continuous Testing.  # noqa: E501

        :return: The continuous_test_categories of this ProjectProject.  # noqa: E501
        :rtype: list[TestrunTestCategoryType]
        """
        return self._continuous_test_categories

    @continuous_test_categories.setter
    def continuous_test_categories(self, continuous_test_categories):
        """Sets the continuous_test_categories of this ProjectProject.

        List of test categories to be run in Continuous Testing.  # noqa: E501

        :param continuous_test_categories: The continuous_test_categories of this ProjectProject.  # noqa: E501
        :type: list[TestrunTestCategoryType]
        """

        self._continuous_test_categories = continuous_test_categories

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


        :return: The risk_scores of this ProjectProject.  # noqa: E501
        :rtype: list[RiskscoreRiskScore]
        """
        return self._risk_scores

    @risk_scores.setter
    def risk_scores(self, risk_scores):
        """Sets the risk_scores of this ProjectProject.


        :param risk_scores: The risk_scores of this ProjectProject.  # noqa: E501
        :type: list[RiskscoreRiskScore]
        """

        self._risk_scores = risk_scores

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


        :return: The active_schedule of this ProjectProject.  # noqa: E501
        :rtype: ProjectScheduleInfo
        """
        return self._active_schedule

    @active_schedule.setter
    def active_schedule(self, active_schedule):
        """Sets the active_schedule of this ProjectProject.


        :param active_schedule: The active_schedule of this ProjectProject.  # noqa: E501
        :type: ProjectScheduleInfo
        """

        self._active_schedule = active_schedule

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

        for attr, _ in six.iteritems(self.swagger_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
        if issubclass(ProjectProject, dict):
            for key, value in self.items():
                result[key] = 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, ProjectProject):
            return False

        return self.__dict__ == other.__dict__

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