# coding: utf-8

"""
    Curia Platform API

    These are the docs for the curia platform API. To test, generate an authorization token first.  # noqa: E501

    OpenAPI spec version: 3.16.0
    
    Generated by: https://github.com/swagger-api/swagger-codegen.git
"""

import pprint
import re  # noqa: F401

import six

class Organization(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': 'str',
        'name': 'str',
        'instance_url': 'str',
        'domain': 'str',
        'model_population': 'ModelPopulation',
        'datasets': 'list[Dataset]',
        'projects': 'list[Project]',
        'organization_settings': 'list[OrganizationSetting]',
        'organization_feature_exclusions': 'list[OrganizationFeatureExclusion]',
        'organization_feature_category_exclusions': 'list[OrganizationFeatureCategoryExclusion]',
        'last_updated_by': 'str',
        'created_by': 'str',
        'databases': 'list[Database]',
        'data_queries': 'list[DataQuery]',
        'schedulers': 'list[Scheduler]',
        'workflows': 'list[Workflow]',
        'workflow_templates': 'list[WorkflowTemplate]',
        'workflow_executions': 'list[WorkflowExecution]',
        'data_store': 'list[DataStore]',
        'feature_store': 'list[FeatureStore]',
        'population_store': 'list[PopulationStore]',
        'populations': 'list[Population]',
        'tasks': 'list[Task]',
        'created_at': 'datetime',
        'updated_at': 'datetime',
        'archived_at': 'datetime',
        'version': 'float'
    }

    attribute_map = {
        'id': 'id',
        'name': 'name',
        'instance_url': 'instanceUrl',
        'domain': 'domain',
        'model_population': 'modelPopulation',
        'datasets': 'datasets',
        'projects': 'projects',
        'organization_settings': 'organizationSettings',
        'organization_feature_exclusions': 'organizationFeatureExclusions',
        'organization_feature_category_exclusions': 'organizationFeatureCategoryExclusions',
        'last_updated_by': 'lastUpdatedBy',
        'created_by': 'createdBy',
        'databases': 'databases',
        'data_queries': 'dataQueries',
        'schedulers': 'schedulers',
        'workflows': 'workflows',
        'workflow_templates': 'workflowTemplates',
        'workflow_executions': 'workflowExecutions',
        'data_store': 'dataStore',
        'feature_store': 'featureStore',
        'population_store': 'populationStore',
        'populations': 'populations',
        'tasks': 'tasks',
        'created_at': 'createdAt',
        'updated_at': 'updatedAt',
        'archived_at': 'archivedAt',
        'version': 'version'
    }

    def __init__(self, id=None, name=None, instance_url=None, domain=None, model_population=None, datasets=None, projects=None, organization_settings=None, organization_feature_exclusions=None, organization_feature_category_exclusions=None, last_updated_by=None, created_by=None, databases=None, data_queries=None, schedulers=None, workflows=None, workflow_templates=None, workflow_executions=None, data_store=None, feature_store=None, population_store=None, populations=None, tasks=None, created_at=None, updated_at=None, archived_at=None, version=None):  # noqa: E501
        """Organization - a model defined in Swagger"""  # noqa: E501
        self._id = None
        self._name = None
        self._instance_url = None
        self._domain = None
        self._model_population = None
        self._datasets = None
        self._projects = None
        self._organization_settings = None
        self._organization_feature_exclusions = None
        self._organization_feature_category_exclusions = None
        self._last_updated_by = None
        self._created_by = None
        self._databases = None
        self._data_queries = None
        self._schedulers = None
        self._workflows = None
        self._workflow_templates = None
        self._workflow_executions = None
        self._data_store = None
        self._feature_store = None
        self._population_store = None
        self._populations = None
        self._tasks = None
        self._created_at = None
        self._updated_at = None
        self._archived_at = None
        self._version = None
        self.discriminator = None
        if id is not None:
            self.id = id
        self.name = name
        if instance_url is not None:
            self.instance_url = instance_url
        if domain is not None:
            self.domain = domain
        if model_population is not None:
            self.model_population = model_population
        if datasets is not None:
            self.datasets = datasets
        if projects is not None:
            self.projects = projects
        if organization_settings is not None:
            self.organization_settings = organization_settings
        if organization_feature_exclusions is not None:
            self.organization_feature_exclusions = organization_feature_exclusions
        if organization_feature_category_exclusions is not None:
            self.organization_feature_category_exclusions = organization_feature_category_exclusions
        if last_updated_by is not None:
            self.last_updated_by = last_updated_by
        if created_by is not None:
            self.created_by = created_by
        if databases is not None:
            self.databases = databases
        if data_queries is not None:
            self.data_queries = data_queries
        if schedulers is not None:
            self.schedulers = schedulers
        if workflows is not None:
            self.workflows = workflows
        if workflow_templates is not None:
            self.workflow_templates = workflow_templates
        if workflow_executions is not None:
            self.workflow_executions = workflow_executions
        if data_store is not None:
            self.data_store = data_store
        if feature_store is not None:
            self.feature_store = feature_store
        if population_store is not None:
            self.population_store = population_store
        if populations is not None:
            self.populations = populations
        if tasks is not None:
            self.tasks = tasks
        if created_at is not None:
            self.created_at = created_at
        if updated_at is not None:
            self.updated_at = updated_at
        if archived_at is not None:
            self.archived_at = archived_at
        if version is not None:
            self.version = version

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


        :return: The id of this Organization.  # noqa: E501
        :rtype: str
        """
        return self._id

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


        :param id: The id of this Organization.  # noqa: E501
        :type: str
        """

        self._id = id

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


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

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


        :param name: The name of this Organization.  # noqa: E501
        :type: str
        """
        if name is None:
            raise ValueError("Invalid value for `name`, must not be `None`")  # noqa: E501

        self._name = name

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


        :return: The instance_url of this Organization.  # noqa: E501
        :rtype: str
        """
        return self._instance_url

    @instance_url.setter
    def instance_url(self, instance_url):
        """Sets the instance_url of this Organization.


        :param instance_url: The instance_url of this Organization.  # noqa: E501
        :type: str
        """

        self._instance_url = instance_url

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


        :return: The domain of this Organization.  # noqa: E501
        :rtype: str
        """
        return self._domain

    @domain.setter
    def domain(self, domain):
        """Sets the domain of this Organization.


        :param domain: The domain of this Organization.  # noqa: E501
        :type: str
        """

        self._domain = domain

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


        :return: The model_population of this Organization.  # noqa: E501
        :rtype: ModelPopulation
        """
        return self._model_population

    @model_population.setter
    def model_population(self, model_population):
        """Sets the model_population of this Organization.


        :param model_population: The model_population of this Organization.  # noqa: E501
        :type: ModelPopulation
        """

        self._model_population = model_population

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


        :return: The datasets of this Organization.  # noqa: E501
        :rtype: list[Dataset]
        """
        return self._datasets

    @datasets.setter
    def datasets(self, datasets):
        """Sets the datasets of this Organization.


        :param datasets: The datasets of this Organization.  # noqa: E501
        :type: list[Dataset]
        """

        self._datasets = datasets

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


        :return: The projects of this Organization.  # noqa: E501
        :rtype: list[Project]
        """
        return self._projects

    @projects.setter
    def projects(self, projects):
        """Sets the projects of this Organization.


        :param projects: The projects of this Organization.  # noqa: E501
        :type: list[Project]
        """

        self._projects = projects

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


        :return: The organization_settings of this Organization.  # noqa: E501
        :rtype: list[OrganizationSetting]
        """
        return self._organization_settings

    @organization_settings.setter
    def organization_settings(self, organization_settings):
        """Sets the organization_settings of this Organization.


        :param organization_settings: The organization_settings of this Organization.  # noqa: E501
        :type: list[OrganizationSetting]
        """

        self._organization_settings = organization_settings

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


        :return: The organization_feature_exclusions of this Organization.  # noqa: E501
        :rtype: list[OrganizationFeatureExclusion]
        """
        return self._organization_feature_exclusions

    @organization_feature_exclusions.setter
    def organization_feature_exclusions(self, organization_feature_exclusions):
        """Sets the organization_feature_exclusions of this Organization.


        :param organization_feature_exclusions: The organization_feature_exclusions of this Organization.  # noqa: E501
        :type: list[OrganizationFeatureExclusion]
        """

        self._organization_feature_exclusions = organization_feature_exclusions

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


        :return: The organization_feature_category_exclusions of this Organization.  # noqa: E501
        :rtype: list[OrganizationFeatureCategoryExclusion]
        """
        return self._organization_feature_category_exclusions

    @organization_feature_category_exclusions.setter
    def organization_feature_category_exclusions(self, organization_feature_category_exclusions):
        """Sets the organization_feature_category_exclusions of this Organization.


        :param organization_feature_category_exclusions: The organization_feature_category_exclusions of this Organization.  # noqa: E501
        :type: list[OrganizationFeatureCategoryExclusion]
        """

        self._organization_feature_category_exclusions = organization_feature_category_exclusions

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


        :return: The last_updated_by of this Organization.  # noqa: E501
        :rtype: str
        """
        return self._last_updated_by

    @last_updated_by.setter
    def last_updated_by(self, last_updated_by):
        """Sets the last_updated_by of this Organization.


        :param last_updated_by: The last_updated_by of this Organization.  # noqa: E501
        :type: str
        """

        self._last_updated_by = last_updated_by

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


        :return: The created_by of this Organization.  # noqa: E501
        :rtype: str
        """
        return self._created_by

    @created_by.setter
    def created_by(self, created_by):
        """Sets the created_by of this Organization.


        :param created_by: The created_by of this Organization.  # noqa: E501
        :type: str
        """

        self._created_by = created_by

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


        :return: The databases of this Organization.  # noqa: E501
        :rtype: list[Database]
        """
        return self._databases

    @databases.setter
    def databases(self, databases):
        """Sets the databases of this Organization.


        :param databases: The databases of this Organization.  # noqa: E501
        :type: list[Database]
        """

        self._databases = databases

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


        :return: The data_queries of this Organization.  # noqa: E501
        :rtype: list[DataQuery]
        """
        return self._data_queries

    @data_queries.setter
    def data_queries(self, data_queries):
        """Sets the data_queries of this Organization.


        :param data_queries: The data_queries of this Organization.  # noqa: E501
        :type: list[DataQuery]
        """

        self._data_queries = data_queries

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


        :return: The schedulers of this Organization.  # noqa: E501
        :rtype: list[Scheduler]
        """
        return self._schedulers

    @schedulers.setter
    def schedulers(self, schedulers):
        """Sets the schedulers of this Organization.


        :param schedulers: The schedulers of this Organization.  # noqa: E501
        :type: list[Scheduler]
        """

        self._schedulers = schedulers

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


        :return: The workflows of this Organization.  # noqa: E501
        :rtype: list[Workflow]
        """
        return self._workflows

    @workflows.setter
    def workflows(self, workflows):
        """Sets the workflows of this Organization.


        :param workflows: The workflows of this Organization.  # noqa: E501
        :type: list[Workflow]
        """

        self._workflows = workflows

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


        :return: The workflow_templates of this Organization.  # noqa: E501
        :rtype: list[WorkflowTemplate]
        """
        return self._workflow_templates

    @workflow_templates.setter
    def workflow_templates(self, workflow_templates):
        """Sets the workflow_templates of this Organization.


        :param workflow_templates: The workflow_templates of this Organization.  # noqa: E501
        :type: list[WorkflowTemplate]
        """

        self._workflow_templates = workflow_templates

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


        :return: The workflow_executions of this Organization.  # noqa: E501
        :rtype: list[WorkflowExecution]
        """
        return self._workflow_executions

    @workflow_executions.setter
    def workflow_executions(self, workflow_executions):
        """Sets the workflow_executions of this Organization.


        :param workflow_executions: The workflow_executions of this Organization.  # noqa: E501
        :type: list[WorkflowExecution]
        """

        self._workflow_executions = workflow_executions

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


        :return: The data_store of this Organization.  # noqa: E501
        :rtype: list[DataStore]
        """
        return self._data_store

    @data_store.setter
    def data_store(self, data_store):
        """Sets the data_store of this Organization.


        :param data_store: The data_store of this Organization.  # noqa: E501
        :type: list[DataStore]
        """

        self._data_store = data_store

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


        :return: The feature_store of this Organization.  # noqa: E501
        :rtype: list[FeatureStore]
        """
        return self._feature_store

    @feature_store.setter
    def feature_store(self, feature_store):
        """Sets the feature_store of this Organization.


        :param feature_store: The feature_store of this Organization.  # noqa: E501
        :type: list[FeatureStore]
        """

        self._feature_store = feature_store

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


        :return: The population_store of this Organization.  # noqa: E501
        :rtype: list[PopulationStore]
        """
        return self._population_store

    @population_store.setter
    def population_store(self, population_store):
        """Sets the population_store of this Organization.


        :param population_store: The population_store of this Organization.  # noqa: E501
        :type: list[PopulationStore]
        """

        self._population_store = population_store

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


        :return: The populations of this Organization.  # noqa: E501
        :rtype: list[Population]
        """
        return self._populations

    @populations.setter
    def populations(self, populations):
        """Sets the populations of this Organization.


        :param populations: The populations of this Organization.  # noqa: E501
        :type: list[Population]
        """

        self._populations = populations

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


        :return: The tasks of this Organization.  # noqa: E501
        :rtype: list[Task]
        """
        return self._tasks

    @tasks.setter
    def tasks(self, tasks):
        """Sets the tasks of this Organization.


        :param tasks: The tasks of this Organization.  # noqa: E501
        :type: list[Task]
        """

        self._tasks = tasks

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


        :return: The created_at of this Organization.  # noqa: E501
        :rtype: datetime
        """
        return self._created_at

    @created_at.setter
    def created_at(self, created_at):
        """Sets the created_at of this Organization.


        :param created_at: The created_at of this Organization.  # noqa: E501
        :type: datetime
        """

        self._created_at = created_at

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


        :return: The updated_at of this Organization.  # noqa: E501
        :rtype: datetime
        """
        return self._updated_at

    @updated_at.setter
    def updated_at(self, updated_at):
        """Sets the updated_at of this Organization.


        :param updated_at: The updated_at of this Organization.  # noqa: E501
        :type: datetime
        """

        self._updated_at = updated_at

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


        :return: The archived_at of this Organization.  # noqa: E501
        :rtype: datetime
        """
        return self._archived_at

    @archived_at.setter
    def archived_at(self, archived_at):
        """Sets the archived_at of this Organization.


        :param archived_at: The archived_at of this Organization.  # noqa: E501
        :type: datetime
        """

        self._archived_at = archived_at

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


        :return: The version of this Organization.  # noqa: E501
        :rtype: float
        """
        return self._version

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


        :param version: The version of this Organization.  # noqa: E501
        :type: float
        """

        self._version = version

    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(Organization, 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, Organization):
            return False

        return self.__dict__ == other.__dict__

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