# coding: utf-8

"""
    Abstract API

    No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)  # noqa: E501

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


import pprint
import re  # noqa: F401

import six

from enigma.swagger_client.models.apicollections_parent_collection import ApicollectionsParentCollection  # noqa: F401,E501
from enigma.swagger_client.models.apicollections_tags import ApicollectionsTags  # noqa: F401,E501
from enigma.swagger_client.models.apidatasets_dependencies import ApidatasetsDependencies  # noqa: F401,E501
from enigma.swagger_client.models.apidatasets_source_lag_time import ApidatasetsSourceLagTime  # noqa: F401,E501


class Body2(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 = {
        'citation': 'str',
        'dependencies': 'list[ApidatasetsDependencies]',
        'derivatives': 'list[ApidatasetsDependencies]',
        'description': 'str',
        'description_short': 'str',
        'display_name': 'str',
        'extraction_type': 'str',
        'key_value': 'object',
        'one_time_ingestion': 'bool',
        'parent_collection': 'ApicollectionsParentCollection',
        'published': 'bool',
        'resource_owner': 'str',
        'resource_owner_contact': 'str',
        'source_description': 'str',
        'source_lag_time': 'ApidatasetsSourceLagTime',
        'source_type': 'str',
        'source_update_schedule': 'ApidatasetsSourceLagTime',
        'tags': 'list[ApicollectionsTags]',
        'technical_owner': 'str',
        'technical_owner_contact': 'str',
        'terms_of_service': 'str'
    }

    attribute_map = {
        'citation': 'citation',
        'dependencies': 'dependencies',
        'derivatives': 'derivatives',
        'description': 'description',
        'description_short': 'description_short',
        'display_name': 'display_name',
        'extraction_type': 'extraction_type',
        'key_value': 'key_value',
        'one_time_ingestion': 'one_time_ingestion',
        'parent_collection': 'parent_collection',
        'published': 'published',
        'resource_owner': 'resource_owner',
        'resource_owner_contact': 'resource_owner_contact',
        'source_description': 'source_description',
        'source_lag_time': 'source_lag_time',
        'source_type': 'source_type',
        'source_update_schedule': 'source_update_schedule',
        'tags': 'tags',
        'technical_owner': 'technical_owner',
        'technical_owner_contact': 'technical_owner_contact',
        'terms_of_service': 'terms_of_service'
    }

    def __init__(self, citation='', dependencies=None, derivatives=None, description='', description_short='', display_name=None, extraction_type=None, key_value=None, one_time_ingestion=None, parent_collection=None, published=False, resource_owner=None, resource_owner_contact=None, source_description=None, source_lag_time=None, source_type=None, source_update_schedule=None, tags=None, technical_owner=None, technical_owner_contact=None, terms_of_service=None):  # noqa: E501
        """Body2 - a model defined in Swagger"""  # noqa: E501

        self._citation = None
        self._dependencies = None
        self._derivatives = None
        self._description = None
        self._description_short = None
        self._display_name = None
        self._extraction_type = None
        self._key_value = None
        self._one_time_ingestion = None
        self._parent_collection = None
        self._published = None
        self._resource_owner = None
        self._resource_owner_contact = None
        self._source_description = None
        self._source_lag_time = None
        self._source_type = None
        self._source_update_schedule = None
        self._tags = None
        self._technical_owner = None
        self._technical_owner_contact = None
        self._terms_of_service = None
        self.discriminator = None

        if citation is not None:
            self.citation = citation
        if dependencies is not None:
            self.dependencies = dependencies
        if derivatives is not None:
            self.derivatives = derivatives
        if description is not None:
            self.description = description
        if description_short is not None:
            self.description_short = description_short
        self.display_name = display_name
        if extraction_type is not None:
            self.extraction_type = extraction_type
        if key_value is not None:
            self.key_value = key_value
        if one_time_ingestion is not None:
            self.one_time_ingestion = one_time_ingestion
        if parent_collection is not None:
            self.parent_collection = parent_collection
        if published is not None:
            self.published = published
        if resource_owner is not None:
            self.resource_owner = resource_owner
        if resource_owner_contact is not None:
            self.resource_owner_contact = resource_owner_contact
        if source_description is not None:
            self.source_description = source_description
        if source_lag_time is not None:
            self.source_lag_time = source_lag_time
        if source_type is not None:
            self.source_type = source_type
        if source_update_schedule is not None:
            self.source_update_schedule = source_update_schedule
        if tags is not None:
            self.tags = tags
        if technical_owner is not None:
            self.technical_owner = technical_owner
        if technical_owner_contact is not None:
            self.technical_owner_contact = technical_owner_contact
        if terms_of_service is not None:
            self.terms_of_service = terms_of_service

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


        :return: The citation of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._citation

    @citation.setter
    def citation(self, citation):
        """Sets the citation of this Body2.


        :param citation: The citation of this Body2.  # noqa: E501
        :type: str
        """

        self._citation = citation

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


        :return: The dependencies of this Body2.  # noqa: E501
        :rtype: list[ApidatasetsDependencies]
        """
        return self._dependencies

    @dependencies.setter
    def dependencies(self, dependencies):
        """Sets the dependencies of this Body2.


        :param dependencies: The dependencies of this Body2.  # noqa: E501
        :type: list[ApidatasetsDependencies]
        """

        self._dependencies = dependencies

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


        :return: The derivatives of this Body2.  # noqa: E501
        :rtype: list[ApidatasetsDependencies]
        """
        return self._derivatives

    @derivatives.setter
    def derivatives(self, derivatives):
        """Sets the derivatives of this Body2.


        :param derivatives: The derivatives of this Body2.  # noqa: E501
        :type: list[ApidatasetsDependencies]
        """

        self._derivatives = derivatives

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


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

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


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

        self._description = description

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


        :return: The description_short of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._description_short

    @description_short.setter
    def description_short(self, description_short):
        """Sets the description_short of this Body2.


        :param description_short: The description_short of this Body2.  # noqa: E501
        :type: str
        """

        self._description_short = description_short

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


        :return: The display_name of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._display_name

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


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

        self._display_name = display_name

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


        :return: The extraction_type of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._extraction_type

    @extraction_type.setter
    def extraction_type(self, extraction_type):
        """Sets the extraction_type of this Body2.


        :param extraction_type: The extraction_type of this Body2.  # noqa: E501
        :type: str
        """

        self._extraction_type = extraction_type

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


        :return: The key_value of this Body2.  # noqa: E501
        :rtype: object
        """
        return self._key_value

    @key_value.setter
    def key_value(self, key_value):
        """Sets the key_value of this Body2.


        :param key_value: The key_value of this Body2.  # noqa: E501
        :type: object
        """

        self._key_value = key_value

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


        :return: The one_time_ingestion of this Body2.  # noqa: E501
        :rtype: bool
        """
        return self._one_time_ingestion

    @one_time_ingestion.setter
    def one_time_ingestion(self, one_time_ingestion):
        """Sets the one_time_ingestion of this Body2.


        :param one_time_ingestion: The one_time_ingestion of this Body2.  # noqa: E501
        :type: bool
        """

        self._one_time_ingestion = one_time_ingestion

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


        :return: The parent_collection of this Body2.  # noqa: E501
        :rtype: ApicollectionsParentCollection
        """
        return self._parent_collection

    @parent_collection.setter
    def parent_collection(self, parent_collection):
        """Sets the parent_collection of this Body2.


        :param parent_collection: The parent_collection of this Body2.  # noqa: E501
        :type: ApicollectionsParentCollection
        """

        self._parent_collection = parent_collection

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


        :return: The published of this Body2.  # noqa: E501
        :rtype: bool
        """
        return self._published

    @published.setter
    def published(self, published):
        """Sets the published of this Body2.


        :param published: The published of this Body2.  # noqa: E501
        :type: bool
        """

        self._published = published

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


        :return: The resource_owner of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._resource_owner

    @resource_owner.setter
    def resource_owner(self, resource_owner):
        """Sets the resource_owner of this Body2.


        :param resource_owner: The resource_owner of this Body2.  # noqa: E501
        :type: str
        """

        self._resource_owner = resource_owner

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


        :return: The resource_owner_contact of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._resource_owner_contact

    @resource_owner_contact.setter
    def resource_owner_contact(self, resource_owner_contact):
        """Sets the resource_owner_contact of this Body2.


        :param resource_owner_contact: The resource_owner_contact of this Body2.  # noqa: E501
        :type: str
        """

        self._resource_owner_contact = resource_owner_contact

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


        :return: The source_description of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._source_description

    @source_description.setter
    def source_description(self, source_description):
        """Sets the source_description of this Body2.


        :param source_description: The source_description of this Body2.  # noqa: E501
        :type: str
        """

        self._source_description = source_description

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


        :return: The source_lag_time of this Body2.  # noqa: E501
        :rtype: ApidatasetsSourceLagTime
        """
        return self._source_lag_time

    @source_lag_time.setter
    def source_lag_time(self, source_lag_time):
        """Sets the source_lag_time of this Body2.


        :param source_lag_time: The source_lag_time of this Body2.  # noqa: E501
        :type: ApidatasetsSourceLagTime
        """

        self._source_lag_time = source_lag_time

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


        :return: The source_type of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._source_type

    @source_type.setter
    def source_type(self, source_type):
        """Sets the source_type of this Body2.


        :param source_type: The source_type of this Body2.  # noqa: E501
        :type: str
        """

        self._source_type = source_type

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


        :return: The source_update_schedule of this Body2.  # noqa: E501
        :rtype: ApidatasetsSourceLagTime
        """
        return self._source_update_schedule

    @source_update_schedule.setter
    def source_update_schedule(self, source_update_schedule):
        """Sets the source_update_schedule of this Body2.


        :param source_update_schedule: The source_update_schedule of this Body2.  # noqa: E501
        :type: ApidatasetsSourceLagTime
        """

        self._source_update_schedule = source_update_schedule

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


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

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


        :param tags: The tags of this Body2.  # noqa: E501
        :type: list[ApicollectionsTags]
        """

        self._tags = tags

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


        :return: The technical_owner of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._technical_owner

    @technical_owner.setter
    def technical_owner(self, technical_owner):
        """Sets the technical_owner of this Body2.


        :param technical_owner: The technical_owner of this Body2.  # noqa: E501
        :type: str
        """

        self._technical_owner = technical_owner

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


        :return: The technical_owner_contact of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._technical_owner_contact

    @technical_owner_contact.setter
    def technical_owner_contact(self, technical_owner_contact):
        """Sets the technical_owner_contact of this Body2.


        :param technical_owner_contact: The technical_owner_contact of this Body2.  # noqa: E501
        :type: str
        """

        self._technical_owner_contact = technical_owner_contact

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


        :return: The terms_of_service of this Body2.  # noqa: E501
        :rtype: str
        """
        return self._terms_of_service

    @terms_of_service.setter
    def terms_of_service(self, terms_of_service):
        """Sets the terms_of_service of this Body2.


        :param terms_of_service: The terms_of_service of this Body2.  # noqa: E501
        :type: str
        """

        self._terms_of_service = terms_of_service

    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

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

        return self.__dict__ == other.__dict__

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