# coding: utf-8

"""
HostTypeValues.py

 The Clear BSD License

 Copyright (c) – 2016, NetApp, Inc. All rights reserved.

 Redistribution and use in source and binary forms, with or without modification, are permitted (subject to the limitations in the disclaimer below) provided that the following conditions are met:

 * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

 * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

 * Neither the name of NetApp, Inc. nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

 NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
"""

from pprint import pformat
from six import iteritems


class HostTypeValues(object):
    """
    NOTE: This class is auto generated by the swagger code generator program.
    Do not edit the class manually.
    """
    def __init__(self):
        """
        HostTypeValues - a model defined in Swagger

        :param dict swaggerTypes: The key is attribute name
                                  and the value is attribute type.
        :param dict attributeMap: The key is attribute name
                                  and the value is json key in definition.
        """
        self.swagger_types = {
            'wait_for_download': 'bool',  # (required parameter)
            'not_ready_sense_for_quiescence_in_progress': 'bool',  # (required parameter)
            'not_ready_sense_for_quiescence_in_progress2': 'bool',  # (required parameter)
            'check_condition_for_vendor_unique_ua_conditions': 'bool',  # (required parameter)
            'report_deferred_errors': 'bool',  # (required parameter)
            'ignore_force_unit_access': 'bool',  # (required parameter)
            'ignore_write_cache_disable': 'bool',  # (required parameter)
            'allow_reservation_on_unowned_lu_ns': 'bool',  # (required parameter)
            'world_wide_name_in_standard_inquiry': 'bool',  # (required parameter)
            'propagate_host_bus_resets': 'bool',  # (required parameter)
            'report_scc_device_enable': 'bool',  # (required parameter)
            'conditional_fc_logout': 'bool',  # (required parameter)
            'force_scsi2': 'bool',  # (required parameter)
            'report_unconfigured_lu_ns': 'bool',  # (required parameter)
            'ignore_sync_cache': 'bool',  # (required parameter)
            'ignore_utm_lun_ownership': 'bool',  # (required parameter)
            'report_lun_preferred_path_in_standard_inquiry': 'bool',  # (required parameter)
            'auto_lun_transfer': 'bool',  # (required parameter)
            'inquiry_unconfigured_device_type': 'str',  # (required parameter)
            'inquiry_unowned_device_type': 'str',  # (required parameter)
            'unowned_block0_read': 'str',  # (required parameter)
            'retain_logins': 'bool',  # (required parameter)
            'host_port_type': 'str',  # (required parameter)
            'max_restricted_lu_ns': 'int',  # (required parameter)
            'reserved1': 'str',  
            'avt_exclusion_extents_enabled': 'bool',  # (required parameter)
            'suppress_vol_off_preferred_path_alert': 'bool',  # (required parameter)
            'host_type': 'str',  # (required parameter)
            'tpgs_supported': 'bool',  # (required parameter)
            'volume_format_options': 'bool',  # (required parameter)
            'restricted_lun0': 'bool',  # (required parameter)
            'use_page2_c_quiescence_timeout': 'bool',  # (required parameter)
            'asymmetric_lu_access': 'bool',  # (required parameter)
            'ignore_iscsi_session_id_in_itn': 'bool',  # (required parameter)
            'enable_lu_check_condition_parallel_responses': 'bool',  # (required parameter)
            'disable_explicit_tpgs': 'bool',  # (required parameter)
            'unowned_check_condition_during_fw_activation': 'bool',  # (required parameter)
            'allow_preferred_owner_reporting_suppression': 'bool',  # (required parameter)
            'enable_target_failback': 'bool',  # (required parameter)
            'enable_auto_load_balance': 'bool',  # (required parameter)
            'quiescence_in_progress_sense_key': 'int',  # (required parameter)
            'quiescence_in_progress_asc': 'int',  # (required parameter)
            'quiescence_in_progress_ascq': 'int',  # (required parameter)
            'persistent_id': 'int',  # (required parameter)
            'index': 'int',  
            'default': 'bool'
        }

        self.attribute_map = {
            'wait_for_download': 'waitForDownload',  # (required parameter)
            'not_ready_sense_for_quiescence_in_progress': 'notReadySenseForQuiescenceInProgress',  # (required parameter)
            'not_ready_sense_for_quiescence_in_progress2': 'notReadySenseForQuiescenceInProgress2',  # (required parameter)
            'check_condition_for_vendor_unique_ua_conditions': 'checkConditionForVendorUniqueUAConditions',  # (required parameter)
            'report_deferred_errors': 'reportDeferredErrors',  # (required parameter)
            'ignore_force_unit_access': 'ignoreForceUnitAccess',  # (required parameter)
            'ignore_write_cache_disable': 'ignoreWriteCacheDisable',  # (required parameter)
            'allow_reservation_on_unowned_lu_ns': 'allowReservationOnUnownedLUNs',  # (required parameter)
            'world_wide_name_in_standard_inquiry': 'worldWideNameInStandardInquiry',  # (required parameter)
            'propagate_host_bus_resets': 'propagateHostBusResets',  # (required parameter)
            'report_scc_device_enable': 'reportSCCDeviceEnable',  # (required parameter)
            'conditional_fc_logout': 'conditionalFCLogout',  # (required parameter)
            'force_scsi2': 'forceSCSI2',  # (required parameter)
            'report_unconfigured_lu_ns': 'reportUnconfiguredLUNs',  # (required parameter)
            'ignore_sync_cache': 'ignoreSyncCache',  # (required parameter)
            'ignore_utm_lun_ownership': 'ignoreUTMLunOwnership',  # (required parameter)
            'report_lun_preferred_path_in_standard_inquiry': 'reportLUNPreferredPathInStandardInquiry',  # (required parameter)
            'auto_lun_transfer': 'autoLUNTransfer',  # (required parameter)
            'inquiry_unconfigured_device_type': 'inquiryUnconfiguredDeviceType',  # (required parameter)
            'inquiry_unowned_device_type': 'inquiryUnownedDeviceType',  # (required parameter)
            'unowned_block0_read': 'unownedBlock0Read',  # (required parameter)
            'retain_logins': 'retainLogins',  # (required parameter)
            'host_port_type': 'hostPortType',  # (required parameter)
            'max_restricted_lu_ns': 'maxRestrictedLUNs',  # (required parameter)
            'reserved1': 'reserved1',  
            'avt_exclusion_extents_enabled': 'avtExclusionExtentsEnabled',  # (required parameter)
            'suppress_vol_off_preferred_path_alert': 'suppressVolOffPreferredPathAlert',  # (required parameter)
            'host_type': 'hostType',  # (required parameter)
            'tpgs_supported': 'tpgsSupported',  # (required parameter)
            'volume_format_options': 'volumeFormatOptions',  # (required parameter)
            'restricted_lun0': 'restrictedLun0',  # (required parameter)
            'use_page2_c_quiescence_timeout': 'usePage2CQuiescenceTimeout',  # (required parameter)
            'asymmetric_lu_access': 'asymmetricLUAccess',  # (required parameter)
            'ignore_iscsi_session_id_in_itn': 'ignoreISCSISessionIDInITN',  # (required parameter)
            'enable_lu_check_condition_parallel_responses': 'enableLUCheckConditionParallelResponses',  # (required parameter)
            'disable_explicit_tpgs': 'disableExplicitTPGS',  # (required parameter)
            'unowned_check_condition_during_fw_activation': 'unownedCheckConditionDuringFWActivation',  # (required parameter)
            'allow_preferred_owner_reporting_suppression': 'allowPreferredOwnerReportingSuppression',  # (required parameter)
            'enable_target_failback': 'enableTargetFailback',  # (required parameter)
            'enable_auto_load_balance': 'enableAutoLoadBalance',  # (required parameter)
            'quiescence_in_progress_sense_key': 'quiescenceInProgressSenseKey',  # (required parameter)
            'quiescence_in_progress_asc': 'quiescenceInProgressASC',  # (required parameter)
            'quiescence_in_progress_ascq': 'quiescenceInProgressASCQ',  # (required parameter)
            'persistent_id': 'persistentID',  # (required parameter)
            'index': 'index',  
            'default': 'default'
        }

        self._wait_for_download = None
        self._not_ready_sense_for_quiescence_in_progress = None
        self._not_ready_sense_for_quiescence_in_progress2 = None
        self._check_condition_for_vendor_unique_ua_conditions = None
        self._report_deferred_errors = None
        self._ignore_force_unit_access = None
        self._ignore_write_cache_disable = None
        self._allow_reservation_on_unowned_lu_ns = None
        self._world_wide_name_in_standard_inquiry = None
        self._propagate_host_bus_resets = None
        self._report_scc_device_enable = None
        self._conditional_fc_logout = None
        self._force_scsi2 = None
        self._report_unconfigured_lu_ns = None
        self._ignore_sync_cache = None
        self._ignore_utm_lun_ownership = None
        self._report_lun_preferred_path_in_standard_inquiry = None
        self._auto_lun_transfer = None
        self._inquiry_unconfigured_device_type = None
        self._inquiry_unowned_device_type = None
        self._unowned_block0_read = None
        self._retain_logins = None
        self._host_port_type = None
        self._max_restricted_lu_ns = None
        self._reserved1 = None
        self._avt_exclusion_extents_enabled = None
        self._suppress_vol_off_preferred_path_alert = None
        self._host_type = None
        self._tpgs_supported = None
        self._volume_format_options = None
        self._restricted_lun0 = None
        self._use_page2_c_quiescence_timeout = None
        self._asymmetric_lu_access = None
        self._ignore_iscsi_session_id_in_itn = None
        self._enable_lu_check_condition_parallel_responses = None
        self._disable_explicit_tpgs = None
        self._unowned_check_condition_during_fw_activation = None
        self._allow_preferred_owner_reporting_suppression = None
        self._enable_target_failback = None
        self._enable_auto_load_balance = None
        self._quiescence_in_progress_sense_key = None
        self._quiescence_in_progress_asc = None
        self._quiescence_in_progress_ascq = None
        self._persistent_id = None
        self._index = None
        self._default = None

    @property
    def wait_for_download(self):
        """
        Gets the wait_for_download of this HostTypeValues.
        The download microcode status control.

        :return: The wait_for_download of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._wait_for_download

    @wait_for_download.setter
    def wait_for_download(self, wait_for_download):
        """
        Sets the wait_for_download of this HostTypeValues.
        The download microcode status control.

        :param wait_for_download: The wait_for_download of this HostTypeValues.
        :type: bool
        """
        self._wait_for_download = wait_for_download

    @property
    def not_ready_sense_for_quiescence_in_progress(self):
        """
        Gets the not_ready_sense_for_quiescence_in_progress of this HostTypeValues.
        This value determines the response of the controller to commands received during the 'controller quiesced' state.

        :return: The not_ready_sense_for_quiescence_in_progress of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._not_ready_sense_for_quiescence_in_progress

    @not_ready_sense_for_quiescence_in_progress.setter
    def not_ready_sense_for_quiescence_in_progress(self, not_ready_sense_for_quiescence_in_progress):
        """
        Sets the not_ready_sense_for_quiescence_in_progress of this HostTypeValues.
        This value determines the response of the controller to commands received during the 'controller quiesced' state.

        :param not_ready_sense_for_quiescence_in_progress: The not_ready_sense_for_quiescence_in_progress of this HostTypeValues.
        :type: bool
        """
        self._not_ready_sense_for_quiescence_in_progress = not_ready_sense_for_quiescence_in_progress

    @property
    def not_ready_sense_for_quiescence_in_progress2(self):
        """
        Gets the not_ready_sense_for_quiescence_in_progress2 of this HostTypeValues.
        This value determines the response of the controller to commands received during the 'controller quiesced' state.

        :return: The not_ready_sense_for_quiescence_in_progress2 of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._not_ready_sense_for_quiescence_in_progress2

    @not_ready_sense_for_quiescence_in_progress2.setter
    def not_ready_sense_for_quiescence_in_progress2(self, not_ready_sense_for_quiescence_in_progress2):
        """
        Sets the not_ready_sense_for_quiescence_in_progress2 of this HostTypeValues.
        This value determines the response of the controller to commands received during the 'controller quiesced' state.

        :param not_ready_sense_for_quiescence_in_progress2: The not_ready_sense_for_quiescence_in_progress2 of this HostTypeValues.
        :type: bool
        """
        self._not_ready_sense_for_quiescence_in_progress2 = not_ready_sense_for_quiescence_in_progress2

    @property
    def check_condition_for_vendor_unique_ua_conditions(self):
        """
        Gets the check_condition_for_vendor_unique_ua_conditions of this HostTypeValues.
        This value determines if the controller will report a vendor unique Unit Attention condition as a Check Condition status.

        :return: The check_condition_for_vendor_unique_ua_conditions of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._check_condition_for_vendor_unique_ua_conditions

    @check_condition_for_vendor_unique_ua_conditions.setter
    def check_condition_for_vendor_unique_ua_conditions(self, check_condition_for_vendor_unique_ua_conditions):
        """
        Sets the check_condition_for_vendor_unique_ua_conditions of this HostTypeValues.
        This value determines if the controller will report a vendor unique Unit Attention condition as a Check Condition status.

        :param check_condition_for_vendor_unique_ua_conditions: The check_condition_for_vendor_unique_ua_conditions of this HostTypeValues.
        :type: bool
        """
        self._check_condition_for_vendor_unique_ua_conditions = check_condition_for_vendor_unique_ua_conditions

    @property
    def report_deferred_errors(self):
        """
        Gets the report_deferred_errors of this HostTypeValues.
        This value is used to determine how deferred errors are reported to the host.

        :return: The report_deferred_errors of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._report_deferred_errors

    @report_deferred_errors.setter
    def report_deferred_errors(self, report_deferred_errors):
        """
        Sets the report_deferred_errors of this HostTypeValues.
        This value is used to determine how deferred errors are reported to the host.

        :param report_deferred_errors: The report_deferred_errors of this HostTypeValues.
        :type: bool
        """
        self._report_deferred_errors = report_deferred_errors

    @property
    def ignore_force_unit_access(self):
        """
        Gets the ignore_force_unit_access of this HostTypeValues.
        This value determines controller treatment of the Force Unit Access Option in the SCSI Read(10) and Write(10) commands.

        :return: The ignore_force_unit_access of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._ignore_force_unit_access

    @ignore_force_unit_access.setter
    def ignore_force_unit_access(self, ignore_force_unit_access):
        """
        Sets the ignore_force_unit_access of this HostTypeValues.
        This value determines controller treatment of the Force Unit Access Option in the SCSI Read(10) and Write(10) commands.

        :param ignore_force_unit_access: The ignore_force_unit_access of this HostTypeValues.
        :type: bool
        """
        self._ignore_force_unit_access = ignore_force_unit_access

    @property
    def ignore_write_cache_disable(self):
        """
        Gets the ignore_write_cache_disable of this HostTypeValues.
        This value determines if the controller will allow the resetting of the WCE bit in the Mode Select Caching Page to disable write caching.

        :return: The ignore_write_cache_disable of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._ignore_write_cache_disable

    @ignore_write_cache_disable.setter
    def ignore_write_cache_disable(self, ignore_write_cache_disable):
        """
        Sets the ignore_write_cache_disable of this HostTypeValues.
        This value determines if the controller will allow the resetting of the WCE bit in the Mode Select Caching Page to disable write caching.

        :param ignore_write_cache_disable: The ignore_write_cache_disable of this HostTypeValues.
        :type: bool
        """
        self._ignore_write_cache_disable = ignore_write_cache_disable

    @property
    def allow_reservation_on_unowned_lu_ns(self):
        """
        Gets the allow_reservation_on_unowned_lu_ns of this HostTypeValues.
        This value determines the controller response to Reservation/Release commands that are received for LUNs that are not owned by the controller.

        :return: The allow_reservation_on_unowned_lu_ns of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._allow_reservation_on_unowned_lu_ns

    @allow_reservation_on_unowned_lu_ns.setter
    def allow_reservation_on_unowned_lu_ns(self, allow_reservation_on_unowned_lu_ns):
        """
        Sets the allow_reservation_on_unowned_lu_ns of this HostTypeValues.
        This value determines the controller response to Reservation/Release commands that are received for LUNs that are not owned by the controller.

        :param allow_reservation_on_unowned_lu_ns: The allow_reservation_on_unowned_lu_ns of this HostTypeValues.
        :type: bool
        """
        self._allow_reservation_on_unowned_lu_ns = allow_reservation_on_unowned_lu_ns

    @property
    def world_wide_name_in_standard_inquiry(self):
        """
        Gets the world_wide_name_in_standard_inquiry of this HostTypeValues.
        Set to true if the WWN is in the standard inquiry data.

        :return: The world_wide_name_in_standard_inquiry of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._world_wide_name_in_standard_inquiry

    @world_wide_name_in_standard_inquiry.setter
    def world_wide_name_in_standard_inquiry(self, world_wide_name_in_standard_inquiry):
        """
        Sets the world_wide_name_in_standard_inquiry of this HostTypeValues.
        Set to true if the WWN is in the standard inquiry data.

        :param world_wide_name_in_standard_inquiry: The world_wide_name_in_standard_inquiry of this HostTypeValues.
        :type: bool
        """
        self._world_wide_name_in_standard_inquiry = world_wide_name_in_standard_inquiry

    @property
    def propagate_host_bus_resets(self):
        """
        Gets the propagate_host_bus_resets of this HostTypeValues.
        This value determines whether the controller will propagate a Host Bus Reset/Target Reset/Logical Unit Reset to the other controller in a dual controller subsystem to support Microsoft Clustering Services.

        :return: The propagate_host_bus_resets of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._propagate_host_bus_resets

    @propagate_host_bus_resets.setter
    def propagate_host_bus_resets(self, propagate_host_bus_resets):
        """
        Sets the propagate_host_bus_resets of this HostTypeValues.
        This value determines whether the controller will propagate a Host Bus Reset/Target Reset/Logical Unit Reset to the other controller in a dual controller subsystem to support Microsoft Clustering Services.

        :param propagate_host_bus_resets: The propagate_host_bus_resets of this HostTypeValues.
        :type: bool
        """
        self._propagate_host_bus_resets = propagate_host_bus_resets

    @property
    def report_scc_device_enable(self):
        """
        Gets the report_scc_device_enable of this HostTypeValues.
        Report SCC Device Enable.

        :return: The report_scc_device_enable of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._report_scc_device_enable

    @report_scc_device_enable.setter
    def report_scc_device_enable(self, report_scc_device_enable):
        """
        Sets the report_scc_device_enable of this HostTypeValues.
        Report SCC Device Enable.

        :param report_scc_device_enable: The report_scc_device_enable of this HostTypeValues.
        :type: bool
        """
        self._report_scc_device_enable = report_scc_device_enable

    @property
    def conditional_fc_logout(self):
        """
        Gets the conditional_fc_logout of this HostTypeValues.
        Conditional Fibre Channel Logout.

        :return: The conditional_fc_logout of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._conditional_fc_logout

    @conditional_fc_logout.setter
    def conditional_fc_logout(self, conditional_fc_logout):
        """
        Sets the conditional_fc_logout of this HostTypeValues.
        Conditional Fibre Channel Logout.

        :param conditional_fc_logout: The conditional_fc_logout of this HostTypeValues.
        :type: bool
        """
        self._conditional_fc_logout = conditional_fc_logout

    @property
    def force_scsi2(self):
        """
        Gets the force_scsi2 of this HostTypeValues.
        Report SCSI-2 Through Fibre Channel Host Interface.

        :return: The force_scsi2 of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._force_scsi2

    @force_scsi2.setter
    def force_scsi2(self, force_scsi2):
        """
        Sets the force_scsi2 of this HostTypeValues.
        Report SCSI-2 Through Fibre Channel Host Interface.

        :param force_scsi2: The force_scsi2 of this HostTypeValues.
        :type: bool
        """
        self._force_scsi2 = force_scsi2

    @property
    def report_unconfigured_lu_ns(self):
        """
        Gets the report_unconfigured_lu_ns of this HostTypeValues.
        This value determines the LUN data returned by the Report LUNs command.

        :return: The report_unconfigured_lu_ns of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._report_unconfigured_lu_ns

    @report_unconfigured_lu_ns.setter
    def report_unconfigured_lu_ns(self, report_unconfigured_lu_ns):
        """
        Sets the report_unconfigured_lu_ns of this HostTypeValues.
        This value determines the LUN data returned by the Report LUNs command.

        :param report_unconfigured_lu_ns: The report_unconfigured_lu_ns of this HostTypeValues.
        :type: bool
        """
        self._report_unconfigured_lu_ns = report_unconfigured_lu_ns

    @property
    def ignore_sync_cache(self):
        """
        Gets the ignore_sync_cache of this HostTypeValues.
        Ignore Cache Sync Command.

        :return: The ignore_sync_cache of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._ignore_sync_cache

    @ignore_sync_cache.setter
    def ignore_sync_cache(self, ignore_sync_cache):
        """
        Sets the ignore_sync_cache of this HostTypeValues.
        Ignore Cache Sync Command.

        :param ignore_sync_cache: The ignore_sync_cache of this HostTypeValues.
        :type: bool
        """
        self._ignore_sync_cache = ignore_sync_cache

    @property
    def ignore_utm_lun_ownership(self):
        """
        Gets the ignore_utm_lun_ownership of this HostTypeValues.
        Ignore UTM LUN Ownership.

        :return: The ignore_utm_lun_ownership of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._ignore_utm_lun_ownership

    @ignore_utm_lun_ownership.setter
    def ignore_utm_lun_ownership(self, ignore_utm_lun_ownership):
        """
        Sets the ignore_utm_lun_ownership of this HostTypeValues.
        Ignore UTM LUN Ownership.

        :param ignore_utm_lun_ownership: The ignore_utm_lun_ownership of this HostTypeValues.
        :type: bool
        """
        self._ignore_utm_lun_ownership = ignore_utm_lun_ownership

    @property
    def report_lun_preferred_path_in_standard_inquiry(self):
        """
        Gets the report_lun_preferred_path_in_standard_inquiry of this HostTypeValues.
        Report LUN Preferred Path in Standard Inquiry Data.

        :return: The report_lun_preferred_path_in_standard_inquiry of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._report_lun_preferred_path_in_standard_inquiry

    @report_lun_preferred_path_in_standard_inquiry.setter
    def report_lun_preferred_path_in_standard_inquiry(self, report_lun_preferred_path_in_standard_inquiry):
        """
        Sets the report_lun_preferred_path_in_standard_inquiry of this HostTypeValues.
        Report LUN Preferred Path in Standard Inquiry Data.

        :param report_lun_preferred_path_in_standard_inquiry: The report_lun_preferred_path_in_standard_inquiry of this HostTypeValues.
        :type: bool
        """
        self._report_lun_preferred_path_in_standard_inquiry = report_lun_preferred_path_in_standard_inquiry

    @property
    def auto_lun_transfer(self):
        """
        Gets the auto_lun_transfer of this HostTypeValues.
        Auto Volume Transfer.

        :return: The auto_lun_transfer of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._auto_lun_transfer

    @auto_lun_transfer.setter
    def auto_lun_transfer(self, auto_lun_transfer):
        """
        Sets the auto_lun_transfer of this HostTypeValues.
        Auto Volume Transfer.

        :param auto_lun_transfer: The auto_lun_transfer of this HostTypeValues.
        :type: bool
        """
        self._auto_lun_transfer = auto_lun_transfer

    @property
    def inquiry_unconfigured_device_type(self):
        """
        Gets the inquiry_unconfigured_device_type of this HostTypeValues.
        The value returned in the Inquiry Device Type Field when an unconfigured LUN is accessed.

        :return: The inquiry_unconfigured_device_type of this HostTypeValues.
        :rtype: str
        :required/optional: required
        """
        return self._inquiry_unconfigured_device_type

    @inquiry_unconfigured_device_type.setter
    def inquiry_unconfigured_device_type(self, inquiry_unconfigured_device_type):
        """
        Sets the inquiry_unconfigured_device_type of this HostTypeValues.
        The value returned in the Inquiry Device Type Field when an unconfigured LUN is accessed.

        :param inquiry_unconfigured_device_type: The inquiry_unconfigured_device_type of this HostTypeValues.
        :type: str
        """
        self._inquiry_unconfigured_device_type = inquiry_unconfigured_device_type

    @property
    def inquiry_unowned_device_type(self):
        """
        Gets the inquiry_unowned_device_type of this HostTypeValues.
        This value is used to define the device type the controller should return in the first byte of the Inquiry data, if the addressed logical unit is not owned by the addressed controller.

        :return: The inquiry_unowned_device_type of this HostTypeValues.
        :rtype: str
        :required/optional: required
        """
        return self._inquiry_unowned_device_type

    @inquiry_unowned_device_type.setter
    def inquiry_unowned_device_type(self, inquiry_unowned_device_type):
        """
        Sets the inquiry_unowned_device_type of this HostTypeValues.
        This value is used to define the device type the controller should return in the first byte of the Inquiry data, if the addressed logical unit is not owned by the addressed controller.

        :param inquiry_unowned_device_type: The inquiry_unowned_device_type of this HostTypeValues.
        :type: str
        """
        self._inquiry_unowned_device_type = inquiry_unowned_device_type

    @property
    def unowned_block0_read(self):
        """
        Gets the unowned_block0_read of this HostTypeValues.
        This value is used to define how the controller handles a read request to Block 0 of an unowned volume. When this is enabled, the non-owning controller sends a request for the block 0 data to the owning controller and the owning controller sends the requested block 0 data back to the non-owning controller. If disabled, the controller will do a volume transfer (if AVT is enabled) and then a read of the now owned volume.

        :return: The unowned_block0_read of this HostTypeValues.
        :rtype: str
        :required/optional: required
        """
        return self._unowned_block0_read

    @unowned_block0_read.setter
    def unowned_block0_read(self, unowned_block0_read):
        """
        Sets the unowned_block0_read of this HostTypeValues.
        This value is used to define how the controller handles a read request to Block 0 of an unowned volume. When this is enabled, the non-owning controller sends a request for the block 0 data to the owning controller and the owning controller sends the requested block 0 data back to the non-owning controller. If disabled, the controller will do a volume transfer (if AVT is enabled) and then a read of the now owned volume.

        :param unowned_block0_read: The unowned_block0_read of this HostTypeValues.
        :type: str
        """
        self._unowned_block0_read = unowned_block0_read

    @property
    def retain_logins(self):
        """
        Gets the retain_logins of this HostTypeValues.
        This field is deprecated.

        :return: The retain_logins of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._retain_logins

    @retain_logins.setter
    def retain_logins(self, retain_logins):
        """
        Sets the retain_logins of this HostTypeValues.
        This field is deprecated.

        :param retain_logins: The retain_logins of this HostTypeValues.
        :type: bool
        """
        self._retain_logins = retain_logins

    @property
    def host_port_type(self):
        """
        Gets the host_port_type of this HostTypeValues.
        The host type.

        :return: The host_port_type of this HostTypeValues.
        :rtype: str
        :required/optional: required
        """
        return self._host_port_type

    @host_port_type.setter
    def host_port_type(self, host_port_type):
        """
        Sets the host_port_type of this HostTypeValues.
        The host type.

        :param host_port_type: The host_port_type of this HostTypeValues.
        :type: str
        """
        self._host_port_type = host_port_type

    @property
    def max_restricted_lu_ns(self):
        """
        Gets the max_restricted_lu_ns of this HostTypeValues.
        Maximum number of LUNs allowed for host type.

        :return: The max_restricted_lu_ns of this HostTypeValues.
        :rtype: int
        :required/optional: required
        """
        return self._max_restricted_lu_ns

    @max_restricted_lu_ns.setter
    def max_restricted_lu_ns(self, max_restricted_lu_ns):
        """
        Sets the max_restricted_lu_ns of this HostTypeValues.
        Maximum number of LUNs allowed for host type.

        :param max_restricted_lu_ns: The max_restricted_lu_ns of this HostTypeValues.
        :type: int
        """
        self._max_restricted_lu_ns = max_restricted_lu_ns

    @property
    def reserved1(self):
        """
        Gets the reserved1 of this HostTypeValues.


        :return: The reserved1 of this HostTypeValues.
        :rtype: str
        :required/optional: optional
        """
        return self._reserved1

    @reserved1.setter
    def reserved1(self, reserved1):
        """
        Sets the reserved1 of this HostTypeValues.


        :param reserved1: The reserved1 of this HostTypeValues.
        :type: str
        """
        self._reserved1 = reserved1

    @property
    def avt_exclusion_extents_enabled(self):
        """
        Gets the avt_exclusion_extents_enabled of this HostTypeValues.
        Enable the AVT exclusion extents for this heterogeneous host region.

        :return: The avt_exclusion_extents_enabled of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._avt_exclusion_extents_enabled

    @avt_exclusion_extents_enabled.setter
    def avt_exclusion_extents_enabled(self, avt_exclusion_extents_enabled):
        """
        Sets the avt_exclusion_extents_enabled of this HostTypeValues.
        Enable the AVT exclusion extents for this heterogeneous host region.

        :param avt_exclusion_extents_enabled: The avt_exclusion_extents_enabled of this HostTypeValues.
        :type: bool
        """
        self._avt_exclusion_extents_enabled = avt_exclusion_extents_enabled

    @property
    def suppress_vol_off_preferred_path_alert(self):
        """
        Gets the suppress_vol_off_preferred_path_alert of this HostTypeValues.
        If true, then volume-off-preferred events are not considered critical.

        :return: The suppress_vol_off_preferred_path_alert of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._suppress_vol_off_preferred_path_alert

    @suppress_vol_off_preferred_path_alert.setter
    def suppress_vol_off_preferred_path_alert(self, suppress_vol_off_preferred_path_alert):
        """
        Sets the suppress_vol_off_preferred_path_alert of this HostTypeValues.
        If true, then volume-off-preferred events are not considered critical.

        :param suppress_vol_off_preferred_path_alert: The suppress_vol_off_preferred_path_alert of this HostTypeValues.
        :type: bool
        """
        self._suppress_vol_off_preferred_path_alert = suppress_vol_off_preferred_path_alert

    @property
    def host_type(self):
        """
        Gets the host_type of this HostTypeValues.
        The host type string. A zero-length string is allowed and indicates that the associated host-specific NVSRAM region has been cleared. This field should be used in place of the deprecated hostPortType field.

        :return: The host_type of this HostTypeValues.
        :rtype: str
        :required/optional: required
        """
        return self._host_type

    @host_type.setter
    def host_type(self, host_type):
        """
        Sets the host_type of this HostTypeValues.
        The host type string. A zero-length string is allowed and indicates that the associated host-specific NVSRAM region has been cleared. This field should be used in place of the deprecated hostPortType field.

        :param host_type: The host_type of this HostTypeValues.
        :type: str
        """
        self._host_type = host_type

    @property
    def tpgs_supported(self):
        """
        Gets the tpgs_supported of this HostTypeValues.
        This field is set to true if Target Port Group Support is provided; otherwise it is false.

        :return: The tpgs_supported of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._tpgs_supported

    @tpgs_supported.setter
    def tpgs_supported(self, tpgs_supported):
        """
        Sets the tpgs_supported of this HostTypeValues.
        This field is set to true if Target Port Group Support is provided; otherwise it is false.

        :param tpgs_supported: The tpgs_supported of this HostTypeValues.
        :type: bool
        """
        self._tpgs_supported = tpgs_supported

    @property
    def volume_format_options(self):
        """
        Gets the volume_format_options of this HostTypeValues.
        If true, a format unit request will interrupt any in-progress IAF and start a write-zeros initialization. If false, the format unit will be returned with no action.

        :return: The volume_format_options of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._volume_format_options

    @volume_format_options.setter
    def volume_format_options(self, volume_format_options):
        """
        Sets the volume_format_options of this HostTypeValues.
        If true, a format unit request will interrupt any in-progress IAF and start a write-zeros initialization. If false, the format unit will be returned with no action.

        :param volume_format_options: The volume_format_options of this HostTypeValues.
        :type: bool
        """
        self._volume_format_options = volume_format_options

    @property
    def restricted_lun0(self):
        """
        Gets the restricted_lun0 of this HostTypeValues.
        If true, LUN 0 is restricted and volume mapping to LUN 0 will not be allowed or be reported in the REPORT LUNS data. If false, a volume-to-LUN mapping can be created to LUN 0 and will be reported in a REPORT LUNS response.

        :return: The restricted_lun0 of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._restricted_lun0

    @restricted_lun0.setter
    def restricted_lun0(self, restricted_lun0):
        """
        Sets the restricted_lun0 of this HostTypeValues.
        If true, LUN 0 is restricted and volume mapping to LUN 0 will not be allowed or be reported in the REPORT LUNS data. If false, a volume-to-LUN mapping can be created to LUN 0 and will be reported in a REPORT LUNS response.

        :param restricted_lun0: The restricted_lun0 of this HostTypeValues.
        :type: bool
        """
        self._restricted_lun0 = restricted_lun0

    @property
    def use_page2_c_quiescence_timeout(self):
        """
        Gets the use_page2_c_quiescence_timeout of this HostTypeValues.
        The quiescence timeout is the amount of time the controller should wait to achieve a \"no I/Os active\" state before invoking a forced transfer of LUN ownership. When this field is set to true, the timeout parameter provided by the host initiator in a mode select Page 2C will be used. When this field is set to false, the timeout value applied will be calculated by the controller.

        :return: The use_page2_c_quiescence_timeout of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._use_page2_c_quiescence_timeout

    @use_page2_c_quiescence_timeout.setter
    def use_page2_c_quiescence_timeout(self, use_page2_c_quiescence_timeout):
        """
        Sets the use_page2_c_quiescence_timeout of this HostTypeValues.
        The quiescence timeout is the amount of time the controller should wait to achieve a \"no I/Os active\" state before invoking a forced transfer of LUN ownership. When this field is set to true, the timeout parameter provided by the host initiator in a mode select Page 2C will be used. When this field is set to false, the timeout value applied will be calculated by the controller.

        :param use_page2_c_quiescence_timeout: The use_page2_c_quiescence_timeout of this HostTypeValues.
        :type: bool
        """
        self._use_page2_c_quiescence_timeout = use_page2_c_quiescence_timeout

    @property
    def asymmetric_lu_access(self):
        """
        Gets the asymmetric_lu_access of this HostTypeValues.
        If true, Asymmetric Logical Unit Access is enabled.

        :return: The asymmetric_lu_access of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._asymmetric_lu_access

    @asymmetric_lu_access.setter
    def asymmetric_lu_access(self, asymmetric_lu_access):
        """
        Sets the asymmetric_lu_access of this HostTypeValues.
        If true, Asymmetric Logical Unit Access is enabled.

        :param asymmetric_lu_access: The asymmetric_lu_access of this HostTypeValues.
        :type: bool
        """
        self._asymmetric_lu_access = asymmetric_lu_access

    @property
    def ignore_iscsi_session_id_in_itn(self):
        """
        Gets the ignore_iscsi_session_id_in_itn of this HostTypeValues.
        If true, the array iSCSI target driver will not use the session identifier as part of its internal I_T Nexus identifiers. This reduces churn in I_T Nexus identifiers if the initiator does not re-use iSCSI session identifiers when re-opening a session.

        :return: The ignore_iscsi_session_id_in_itn of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._ignore_iscsi_session_id_in_itn

    @ignore_iscsi_session_id_in_itn.setter
    def ignore_iscsi_session_id_in_itn(self, ignore_iscsi_session_id_in_itn):
        """
        Sets the ignore_iscsi_session_id_in_itn of this HostTypeValues.
        If true, the array iSCSI target driver will not use the session identifier as part of its internal I_T Nexus identifiers. This reduces churn in I_T Nexus identifiers if the initiator does not re-use iSCSI session identifiers when re-opening a session.

        :param ignore_iscsi_session_id_in_itn: The ignore_iscsi_session_id_in_itn of this HostTypeValues.
        :type: bool
        """
        self._ignore_iscsi_session_id_in_itn = ignore_iscsi_session_id_in_itn

    @property
    def enable_lu_check_condition_parallel_responses(self):
        """
        Gets the enable_lu_check_condition_parallel_responses of this HostTypeValues.
        If true, array may return multiple CHECK CONDITION responses simultaneously on a given logical unit.

        :return: The enable_lu_check_condition_parallel_responses of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._enable_lu_check_condition_parallel_responses

    @enable_lu_check_condition_parallel_responses.setter
    def enable_lu_check_condition_parallel_responses(self, enable_lu_check_condition_parallel_responses):
        """
        Sets the enable_lu_check_condition_parallel_responses of this HostTypeValues.
        If true, array may return multiple CHECK CONDITION responses simultaneously on a given logical unit.

        :param enable_lu_check_condition_parallel_responses: The enable_lu_check_condition_parallel_responses of this HostTypeValues.
        :type: bool
        """
        self._enable_lu_check_condition_parallel_responses = enable_lu_check_condition_parallel_responses

    @property
    def disable_explicit_tpgs(self):
        """
        Gets the disable_explicit_tpgs of this HostTypeValues.
        If true, the standard INQUIRY data reporting TPGS support to the initiator will only indicate support for implicit mode (providing TPGS support is enabled, see tpgsSupported field).

        :return: The disable_explicit_tpgs of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._disable_explicit_tpgs

    @disable_explicit_tpgs.setter
    def disable_explicit_tpgs(self, disable_explicit_tpgs):
        """
        Sets the disable_explicit_tpgs of this HostTypeValues.
        If true, the standard INQUIRY data reporting TPGS support to the initiator will only indicate support for implicit mode (providing TPGS support is enabled, see tpgsSupported field).

        :param disable_explicit_tpgs: The disable_explicit_tpgs of this HostTypeValues.
        :type: bool
        """
        self._disable_explicit_tpgs = disable_explicit_tpgs

    @property
    def unowned_check_condition_during_fw_activation(self):
        """
        Gets the unowned_check_condition_during_fw_activation of this HostTypeValues.
        If true, controller will return a LUN NOT OWNED (05h/94h/01h) CHECK CONDITION when unable to handle I/O during firmware activation.

        :return: The unowned_check_condition_during_fw_activation of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._unowned_check_condition_during_fw_activation

    @unowned_check_condition_during_fw_activation.setter
    def unowned_check_condition_during_fw_activation(self, unowned_check_condition_during_fw_activation):
        """
        Sets the unowned_check_condition_during_fw_activation of this HostTypeValues.
        If true, controller will return a LUN NOT OWNED (05h/94h/01h) CHECK CONDITION when unable to handle I/O during firmware activation.

        :param unowned_check_condition_during_fw_activation: The unowned_check_condition_during_fw_activation of this HostTypeValues.
        :type: bool
        """
        self._unowned_check_condition_during_fw_activation = unowned_check_condition_during_fw_activation

    @property
    def allow_preferred_owner_reporting_suppression(self):
        """
        Gets the allow_preferred_owner_reporting_suppression of this HostTypeValues.
        If true, the controller will suppress reporting the preferred owner in REPORT TARGET PORT GROUPS or INQUIRY VPD data in conditions when the preferred controller cannot process I/O.

        :return: The allow_preferred_owner_reporting_suppression of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._allow_preferred_owner_reporting_suppression

    @allow_preferred_owner_reporting_suppression.setter
    def allow_preferred_owner_reporting_suppression(self, allow_preferred_owner_reporting_suppression):
        """
        Sets the allow_preferred_owner_reporting_suppression of this HostTypeValues.
        If true, the controller will suppress reporting the preferred owner in REPORT TARGET PORT GROUPS or INQUIRY VPD data in conditions when the preferred controller cannot process I/O.

        :param allow_preferred_owner_reporting_suppression: The allow_preferred_owner_reporting_suppression of this HostTypeValues.
        :type: bool
        """
        self._allow_preferred_owner_reporting_suppression = allow_preferred_owner_reporting_suppression

    @property
    def enable_target_failback(self):
        """
        Gets the enable_target_failback of this HostTypeValues.
        If true, controller initiates fail-back of volumes to the preferred owner .

        :return: The enable_target_failback of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._enable_target_failback

    @enable_target_failback.setter
    def enable_target_failback(self, enable_target_failback):
        """
        Sets the enable_target_failback of this HostTypeValues.
        If true, controller initiates fail-back of volumes to the preferred owner .

        :param enable_target_failback: The enable_target_failback of this HostTypeValues.
        :type: bool
        """
        self._enable_target_failback = enable_target_failback

    @property
    def enable_auto_load_balance(self):
        """
        Gets the enable_auto_load_balance of this HostTypeValues.
        If true, the controller may issue volume ownership changes to balance IO load between controllers.

        :return: The enable_auto_load_balance of this HostTypeValues.
        :rtype: bool
        :required/optional: required
        """
        return self._enable_auto_load_balance

    @enable_auto_load_balance.setter
    def enable_auto_load_balance(self, enable_auto_load_balance):
        """
        Sets the enable_auto_load_balance of this HostTypeValues.
        If true, the controller may issue volume ownership changes to balance IO load between controllers.

        :param enable_auto_load_balance: The enable_auto_load_balance of this HostTypeValues.
        :type: bool
        """
        self._enable_auto_load_balance = enable_auto_load_balance

    @property
    def quiescence_in_progress_sense_key(self):
        """
        Gets the quiescence_in_progress_sense_key of this HostTypeValues.
        Sense Key returned to host for Quiescence In Progress Check Conditions.

        :return: The quiescence_in_progress_sense_key of this HostTypeValues.
        :rtype: int
        :required/optional: required
        """
        return self._quiescence_in_progress_sense_key

    @quiescence_in_progress_sense_key.setter
    def quiescence_in_progress_sense_key(self, quiescence_in_progress_sense_key):
        """
        Sets the quiescence_in_progress_sense_key of this HostTypeValues.
        Sense Key returned to host for Quiescence In Progress Check Conditions.

        :param quiescence_in_progress_sense_key: The quiescence_in_progress_sense_key of this HostTypeValues.
        :type: int
        """
        self._quiescence_in_progress_sense_key = quiescence_in_progress_sense_key

    @property
    def quiescence_in_progress_asc(self):
        """
        Gets the quiescence_in_progress_asc of this HostTypeValues.
        Additional Sense Code returned to host for Quiescence In Progress Check Conditions.

        :return: The quiescence_in_progress_asc of this HostTypeValues.
        :rtype: int
        :required/optional: required
        """
        return self._quiescence_in_progress_asc

    @quiescence_in_progress_asc.setter
    def quiescence_in_progress_asc(self, quiescence_in_progress_asc):
        """
        Sets the quiescence_in_progress_asc of this HostTypeValues.
        Additional Sense Code returned to host for Quiescence In Progress Check Conditions.

        :param quiescence_in_progress_asc: The quiescence_in_progress_asc of this HostTypeValues.
        :type: int
        """
        self._quiescence_in_progress_asc = quiescence_in_progress_asc

    @property
    def quiescence_in_progress_ascq(self):
        """
        Gets the quiescence_in_progress_ascq of this HostTypeValues.
        Additional Sense Code Qualifier returned to host for Quiscence In Progress Check Conditions.

        :return: The quiescence_in_progress_ascq of this HostTypeValues.
        :rtype: int
        :required/optional: required
        """
        return self._quiescence_in_progress_ascq

    @quiescence_in_progress_ascq.setter
    def quiescence_in_progress_ascq(self, quiescence_in_progress_ascq):
        """
        Sets the quiescence_in_progress_ascq of this HostTypeValues.
        Additional Sense Code Qualifier returned to host for Quiscence In Progress Check Conditions.

        :param quiescence_in_progress_ascq: The quiescence_in_progress_ascq of this HostTypeValues.
        :type: int
        """
        self._quiescence_in_progress_ascq = quiescence_in_progress_ascq

    @property
    def persistent_id(self):
        """
        Gets the persistent_id of this HostTypeValues.
        Unique identifier for this specific host type. This value is stored in the controller configuration database when persisting Host objects in order to uniquely identify this specific host type across all NVSRAM builds.

        :return: The persistent_id of this HostTypeValues.
        :rtype: int
        :required/optional: required
        """
        return self._persistent_id

    @persistent_id.setter
    def persistent_id(self, persistent_id):
        """
        Sets the persistent_id of this HostTypeValues.
        Unique identifier for this specific host type. This value is stored in the controller configuration database when persisting Host objects in order to uniquely identify this specific host type across all NVSRAM builds.

        :param persistent_id: The persistent_id of this HostTypeValues.
        :type: int
        """
        self._persistent_id = persistent_id

    @property
    def index(self):
        """
        Gets the index of this HostTypeValues.


        :return: The index of this HostTypeValues.
        :rtype: int
        :required/optional: optional
        """
        return self._index

    @index.setter
    def index(self, index):
        """
        Sets the index of this HostTypeValues.


        :param index: The index of this HostTypeValues.
        :type: int
        """
        self._index = index

    @property
    def default(self):
        """
        Gets the default of this HostTypeValues.


        :return: The default of this HostTypeValues.
        :rtype: bool
        :required/optional: optional
        """
        return self._default

    @default.setter
    def default(self, default):
        """
        Sets the default of this HostTypeValues.


        :param default: The default of this HostTypeValues.
        :type: bool
        """
        self._default = default

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

        for attr, _ in 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 pformat(self.to_dict())

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

    def __eq__(self, other):
        """
        Returns true if both objects are equal
        """
        if self is None or other is None:
            return None
        return self.__dict__ == other.__dict__

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

