# coding: utf-8
"""
ControllerStats.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
[docs]class ControllerStats(object):
"""
NOTE: This class is auto generated by the swagger code generator program.
Do not edit the class manually.
"""
def __init__(self):
"""
ControllerStats - 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 = {
'observed_time': 'datetime', # (required parameter)
'observed_time_in_ms': 'int', # (required parameter)
'last_reset_time': 'datetime', # (required parameter)
'last_reset_time_in_ms': 'int', # (required parameter)
'controller_id': 'str', # (required parameter)
'array_id': 'str', # (required parameter)
'array_wwn': 'str', # (required parameter)
'cpu_utilization_stats': 'list[CpuUtilizationStats]', # (required parameter)
'total_iops_serviced': 'float', # (required parameter)
'total_bytes_serviced': 'float', # (required parameter)
'cache_hits_iops_total': 'float', # (required parameter)
'cache_hits_bytes_total': 'float', # (required parameter)
'random_ios_total': 'float', # (required parameter)
'random_bytes_total': 'float', # (required parameter)
'read_iops_total': 'float', # (required parameter)
'read_bytes_total': 'float', # (required parameter)
'write_iops_total': 'float', # (required parameter)
'write_bytes_total': 'float', # (required parameter)
'mirror_iops_total': 'float', # (required parameter)
'mirror_bytes_total': 'float', # (required parameter)
'full_stripe_writes_bytes': 'float', # (required parameter)
'raid0_bytes_transferred': 'float', # (required parameter)
'raid1_bytes_transferred': 'float', # (required parameter)
'raid5_bytes_transferred': 'float', # (required parameter)
'raid6_bytes_transferred': 'float', # (required parameter)
'ddp_bytes_transferred': 'float', # (required parameter)
'max_possible_bps_under_current_load': 'float', # (required parameter)
'max_possible_iops_under_current_load': 'float'
}
self.attribute_map = {
'observed_time': 'observedTime', # (required parameter)
'observed_time_in_ms': 'observedTimeInMS', # (required parameter)
'last_reset_time': 'lastResetTime', # (required parameter)
'last_reset_time_in_ms': 'lastResetTimeInMS', # (required parameter)
'controller_id': 'controllerId', # (required parameter)
'array_id': 'arrayId', # (required parameter)
'array_wwn': 'arrayWwn', # (required parameter)
'cpu_utilization_stats': 'cpuUtilizationStats', # (required parameter)
'total_iops_serviced': 'totalIopsServiced', # (required parameter)
'total_bytes_serviced': 'totalBytesServiced', # (required parameter)
'cache_hits_iops_total': 'cacheHitsIopsTotal', # (required parameter)
'cache_hits_bytes_total': 'cacheHitsBytesTotal', # (required parameter)
'random_ios_total': 'randomIosTotal', # (required parameter)
'random_bytes_total': 'randomBytesTotal', # (required parameter)
'read_iops_total': 'readIopsTotal', # (required parameter)
'read_bytes_total': 'readBytesTotal', # (required parameter)
'write_iops_total': 'writeIopsTotal', # (required parameter)
'write_bytes_total': 'writeBytesTotal', # (required parameter)
'mirror_iops_total': 'mirrorIopsTotal', # (required parameter)
'mirror_bytes_total': 'mirrorBytesTotal', # (required parameter)
'full_stripe_writes_bytes': 'fullStripeWritesBytes', # (required parameter)
'raid0_bytes_transferred': 'raid0BytesTransferred', # (required parameter)
'raid1_bytes_transferred': 'raid1BytesTransferred', # (required parameter)
'raid5_bytes_transferred': 'raid5BytesTransferred', # (required parameter)
'raid6_bytes_transferred': 'raid6BytesTransferred', # (required parameter)
'ddp_bytes_transferred': 'ddpBytesTransferred', # (required parameter)
'max_possible_bps_under_current_load': 'maxPossibleBpsUnderCurrentLoad', # (required parameter)
'max_possible_iops_under_current_load': 'maxPossibleIopsUnderCurrentLoad'
}
self._observed_time = None
self._observed_time_in_ms = None
self._last_reset_time = None
self._last_reset_time_in_ms = None
self._controller_id = None
self._array_id = None
self._array_wwn = None
self._cpu_utilization_stats = None
self._total_iops_serviced = None
self._total_bytes_serviced = None
self._cache_hits_iops_total = None
self._cache_hits_bytes_total = None
self._random_ios_total = None
self._random_bytes_total = None
self._read_iops_total = None
self._read_bytes_total = None
self._write_iops_total = None
self._write_bytes_total = None
self._mirror_iops_total = None
self._mirror_bytes_total = None
self._full_stripe_writes_bytes = None
self._raid0_bytes_transferred = None
self._raid1_bytes_transferred = None
self._raid5_bytes_transferred = None
self._raid6_bytes_transferred = None
self._ddp_bytes_transferred = None
self._max_possible_bps_under_current_load = None
self._max_possible_iops_under_current_load = None
@property
def observed_time(self):
"""
Gets the observed_time of this ControllerStats.
:return: The observed_time of this ControllerStats.
:rtype: datetime
:required/optional: required
"""
return self._observed_time
@observed_time.setter
def observed_time(self, observed_time):
"""
Sets the observed_time of this ControllerStats.
:param observed_time: The observed_time of this ControllerStats.
:type: datetime
"""
self._observed_time = observed_time
@property
def observed_time_in_ms(self):
"""
Gets the observed_time_in_ms of this ControllerStats.
:return: The observed_time_in_ms of this ControllerStats.
:rtype: int
:required/optional: required
"""
return self._observed_time_in_ms
@observed_time_in_ms.setter
def observed_time_in_ms(self, observed_time_in_ms):
"""
Sets the observed_time_in_ms of this ControllerStats.
:param observed_time_in_ms: The observed_time_in_ms of this ControllerStats.
:type: int
"""
self._observed_time_in_ms = observed_time_in_ms
@property
def last_reset_time(self):
"""
Gets the last_reset_time of this ControllerStats.
:return: The last_reset_time of this ControllerStats.
:rtype: datetime
:required/optional: required
"""
return self._last_reset_time
@last_reset_time.setter
def last_reset_time(self, last_reset_time):
"""
Sets the last_reset_time of this ControllerStats.
:param last_reset_time: The last_reset_time of this ControllerStats.
:type: datetime
"""
self._last_reset_time = last_reset_time
@property
def last_reset_time_in_ms(self):
"""
Gets the last_reset_time_in_ms of this ControllerStats.
:return: The last_reset_time_in_ms of this ControllerStats.
:rtype: int
:required/optional: required
"""
return self._last_reset_time_in_ms
@last_reset_time_in_ms.setter
def last_reset_time_in_ms(self, last_reset_time_in_ms):
"""
Sets the last_reset_time_in_ms of this ControllerStats.
:param last_reset_time_in_ms: The last_reset_time_in_ms of this ControllerStats.
:type: int
"""
self._last_reset_time_in_ms = last_reset_time_in_ms
@property
def controller_id(self):
"""
Gets the controller_id of this ControllerStats.
Controller that generated this group.
:return: The controller_id of this ControllerStats.
:rtype: str
:required/optional: required
"""
return self._controller_id
@controller_id.setter
def controller_id(self, controller_id):
"""
Sets the controller_id of this ControllerStats.
Controller that generated this group.
:param controller_id: The controller_id of this ControllerStats.
:type: str
"""
self._controller_id = controller_id
@property
def array_id(self):
"""
Gets the array_id of this ControllerStats.
:return: The array_id of this ControllerStats.
:rtype: str
:required/optional: required
"""
return self._array_id
@array_id.setter
def array_id(self, array_id):
"""
Sets the array_id of this ControllerStats.
:param array_id: The array_id of this ControllerStats.
:type: str
"""
self._array_id = array_id
@property
def array_wwn(self):
"""
Gets the array_wwn of this ControllerStats.
:return: The array_wwn of this ControllerStats.
:rtype: str
:required/optional: required
"""
return self._array_wwn
@array_wwn.setter
def array_wwn(self, array_wwn):
"""
Sets the array_wwn of this ControllerStats.
:param array_wwn: The array_wwn of this ControllerStats.
:type: str
"""
self._array_wwn = array_wwn
@property
def cpu_utilization_stats(self):
"""
Gets the cpu_utilization_stats of this ControllerStats.
CPU utilization statistics structure.
:return: The cpu_utilization_stats of this ControllerStats.
:rtype: list[CpuUtilizationStats]
:required/optional: required
"""
return self._cpu_utilization_stats
@cpu_utilization_stats.setter
def cpu_utilization_stats(self, cpu_utilization_stats):
"""
Sets the cpu_utilization_stats of this ControllerStats.
CPU utilization statistics structure.
:param cpu_utilization_stats: The cpu_utilization_stats of this ControllerStats.
:type: list[CpuUtilizationStats]
"""
self._cpu_utilization_stats = cpu_utilization_stats
@property
def total_iops_serviced(self):
"""
Gets the total_iops_serviced of this ControllerStats.
Total number of IO operations serviced by the controller.
:return: The total_iops_serviced of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._total_iops_serviced
@total_iops_serviced.setter
def total_iops_serviced(self, total_iops_serviced):
"""
Sets the total_iops_serviced of this ControllerStats.
Total number of IO operations serviced by the controller.
:param total_iops_serviced: The total_iops_serviced of this ControllerStats.
:type: float
"""
self._total_iops_serviced = total_iops_serviced
@property
def total_bytes_serviced(self):
"""
Gets the total_bytes_serviced of this ControllerStats.
Total number of Bytes serviced by the controller.
:return: The total_bytes_serviced of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._total_bytes_serviced
@total_bytes_serviced.setter
def total_bytes_serviced(self, total_bytes_serviced):
"""
Sets the total_bytes_serviced of this ControllerStats.
Total number of Bytes serviced by the controller.
:param total_bytes_serviced: The total_bytes_serviced of this ControllerStats.
:type: float
"""
self._total_bytes_serviced = total_bytes_serviced
@property
def cache_hits_iops_total(self):
"""
Gets the cache_hits_iops_total of this ControllerStats.
Total number of IO operations that hit cache.
:return: The cache_hits_iops_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._cache_hits_iops_total
@cache_hits_iops_total.setter
def cache_hits_iops_total(self, cache_hits_iops_total):
"""
Sets the cache_hits_iops_total of this ControllerStats.
Total number of IO operations that hit cache.
:param cache_hits_iops_total: The cache_hits_iops_total of this ControllerStats.
:type: float
"""
self._cache_hits_iops_total = cache_hits_iops_total
@property
def cache_hits_bytes_total(self):
"""
Gets the cache_hits_bytes_total of this ControllerStats.
Total number of bytes that hit cache.
:return: The cache_hits_bytes_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._cache_hits_bytes_total
@cache_hits_bytes_total.setter
def cache_hits_bytes_total(self, cache_hits_bytes_total):
"""
Sets the cache_hits_bytes_total of this ControllerStats.
Total number of bytes that hit cache.
:param cache_hits_bytes_total: The cache_hits_bytes_total of this ControllerStats.
:type: float
"""
self._cache_hits_bytes_total = cache_hits_bytes_total
@property
def random_ios_total(self):
"""
Gets the random_ios_total of this ControllerStats.
Total number of IOs that are categorized as random.
:return: The random_ios_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._random_ios_total
@random_ios_total.setter
def random_ios_total(self, random_ios_total):
"""
Sets the random_ios_total of this ControllerStats.
Total number of IOs that are categorized as random.
:param random_ios_total: The random_ios_total of this ControllerStats.
:type: float
"""
self._random_ios_total = random_ios_total
@property
def random_bytes_total(self):
"""
Gets the random_bytes_total of this ControllerStats.
Total number of Bytes that are categorized as random.
:return: The random_bytes_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._random_bytes_total
@random_bytes_total.setter
def random_bytes_total(self, random_bytes_total):
"""
Sets the random_bytes_total of this ControllerStats.
Total number of Bytes that are categorized as random.
:param random_bytes_total: The random_bytes_total of this ControllerStats.
:type: float
"""
self._random_bytes_total = random_bytes_total
@property
def read_iops_total(self):
"""
Gets the read_iops_total of this ControllerStats.
Total number of Read IO operations.
:return: The read_iops_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._read_iops_total
@read_iops_total.setter
def read_iops_total(self, read_iops_total):
"""
Sets the read_iops_total of this ControllerStats.
Total number of Read IO operations.
:param read_iops_total: The read_iops_total of this ControllerStats.
:type: float
"""
self._read_iops_total = read_iops_total
@property
def read_bytes_total(self):
"""
Gets the read_bytes_total of this ControllerStats.
Total number of Bytes read.
:return: The read_bytes_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._read_bytes_total
@read_bytes_total.setter
def read_bytes_total(self, read_bytes_total):
"""
Sets the read_bytes_total of this ControllerStats.
Total number of Bytes read.
:param read_bytes_total: The read_bytes_total of this ControllerStats.
:type: float
"""
self._read_bytes_total = read_bytes_total
@property
def write_iops_total(self):
"""
Gets the write_iops_total of this ControllerStats.
Total number of Write IO operations.
:return: The write_iops_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._write_iops_total
@write_iops_total.setter
def write_iops_total(self, write_iops_total):
"""
Sets the write_iops_total of this ControllerStats.
Total number of Write IO operations.
:param write_iops_total: The write_iops_total of this ControllerStats.
:type: float
"""
self._write_iops_total = write_iops_total
@property
def write_bytes_total(self):
"""
Gets the write_bytes_total of this ControllerStats.
Total number of Bytes written.
:return: The write_bytes_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._write_bytes_total
@write_bytes_total.setter
def write_bytes_total(self, write_bytes_total):
"""
Sets the write_bytes_total of this ControllerStats.
Total number of Bytes written.
:param write_bytes_total: The write_bytes_total of this ControllerStats.
:type: float
"""
self._write_bytes_total = write_bytes_total
@property
def mirror_iops_total(self):
"""
Gets the mirror_iops_total of this ControllerStats.
Total number of IO operations serviced by the controller that are characterized as cache mirroring related. If cache mirroring is disabled, this counter will not have any value.
:return: The mirror_iops_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._mirror_iops_total
@mirror_iops_total.setter
def mirror_iops_total(self, mirror_iops_total):
"""
Sets the mirror_iops_total of this ControllerStats.
Total number of IO operations serviced by the controller that are characterized as cache mirroring related. If cache mirroring is disabled, this counter will not have any value.
:param mirror_iops_total: The mirror_iops_total of this ControllerStats.
:type: float
"""
self._mirror_iops_total = mirror_iops_total
@property
def mirror_bytes_total(self):
"""
Gets the mirror_bytes_total of this ControllerStats.
Total number of Bytes serviced by the controller that are characterized as cache mirroring related. If cache mirroring is disabled, this counter will not have any value.
:return: The mirror_bytes_total of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._mirror_bytes_total
@mirror_bytes_total.setter
def mirror_bytes_total(self, mirror_bytes_total):
"""
Sets the mirror_bytes_total of this ControllerStats.
Total number of Bytes serviced by the controller that are characterized as cache mirroring related. If cache mirroring is disabled, this counter will not have any value.
:param mirror_bytes_total: The mirror_bytes_total of this ControllerStats.
:type: float
"""
self._mirror_bytes_total = mirror_bytes_total
@property
def full_stripe_writes_bytes(self):
"""
Gets the full_stripe_writes_bytes of this ControllerStats.
Bytes written that are categorized as Full stripe writes.
:return: The full_stripe_writes_bytes of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._full_stripe_writes_bytes
@full_stripe_writes_bytes.setter
def full_stripe_writes_bytes(self, full_stripe_writes_bytes):
"""
Sets the full_stripe_writes_bytes of this ControllerStats.
Bytes written that are categorized as Full stripe writes.
:param full_stripe_writes_bytes: The full_stripe_writes_bytes of this ControllerStats.
:type: float
"""
self._full_stripe_writes_bytes = full_stripe_writes_bytes
@property
def raid0_bytes_transferred(self):
"""
Gets the raid0_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 0 transfers.
:return: The raid0_bytes_transferred of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._raid0_bytes_transferred
@raid0_bytes_transferred.setter
def raid0_bytes_transferred(self, raid0_bytes_transferred):
"""
Sets the raid0_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 0 transfers.
:param raid0_bytes_transferred: The raid0_bytes_transferred of this ControllerStats.
:type: float
"""
self._raid0_bytes_transferred = raid0_bytes_transferred
@property
def raid1_bytes_transferred(self):
"""
Gets the raid1_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 1 transfers.
:return: The raid1_bytes_transferred of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._raid1_bytes_transferred
@raid1_bytes_transferred.setter
def raid1_bytes_transferred(self, raid1_bytes_transferred):
"""
Sets the raid1_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 1 transfers.
:param raid1_bytes_transferred: The raid1_bytes_transferred of this ControllerStats.
:type: float
"""
self._raid1_bytes_transferred = raid1_bytes_transferred
@property
def raid5_bytes_transferred(self):
"""
Gets the raid5_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 5 transfers.
:return: The raid5_bytes_transferred of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._raid5_bytes_transferred
@raid5_bytes_transferred.setter
def raid5_bytes_transferred(self, raid5_bytes_transferred):
"""
Sets the raid5_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 5 transfers.
:param raid5_bytes_transferred: The raid5_bytes_transferred of this ControllerStats.
:type: float
"""
self._raid5_bytes_transferred = raid5_bytes_transferred
@property
def raid6_bytes_transferred(self):
"""
Gets the raid6_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 6 transfers.
:return: The raid6_bytes_transferred of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._raid6_bytes_transferred
@raid6_bytes_transferred.setter
def raid6_bytes_transferred(self, raid6_bytes_transferred):
"""
Sets the raid6_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as RAID 6 transfers.
:param raid6_bytes_transferred: The raid6_bytes_transferred of this ControllerStats.
:type: float
"""
self._raid6_bytes_transferred = raid6_bytes_transferred
@property
def ddp_bytes_transferred(self):
"""
Gets the ddp_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as DDP transfers.
:return: The ddp_bytes_transferred of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._ddp_bytes_transferred
@ddp_bytes_transferred.setter
def ddp_bytes_transferred(self, ddp_bytes_transferred):
"""
Sets the ddp_bytes_transferred of this ControllerStats.
Bytes transferred that are categorized as DDP transfers.
:param ddp_bytes_transferred: The ddp_bytes_transferred of this ControllerStats.
:type: float
"""
self._ddp_bytes_transferred = ddp_bytes_transferred
@property
def max_possible_bps_under_current_load(self):
"""
Gets the max_possible_bps_under_current_load of this ControllerStats.
Theoretical maximum possible Bytes per second under current load.
:return: The max_possible_bps_under_current_load of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._max_possible_bps_under_current_load
@max_possible_bps_under_current_load.setter
def max_possible_bps_under_current_load(self, max_possible_bps_under_current_load):
"""
Sets the max_possible_bps_under_current_load of this ControllerStats.
Theoretical maximum possible Bytes per second under current load.
:param max_possible_bps_under_current_load: The max_possible_bps_under_current_load of this ControllerStats.
:type: float
"""
self._max_possible_bps_under_current_load = max_possible_bps_under_current_load
@property
def max_possible_iops_under_current_load(self):
"""
Gets the max_possible_iops_under_current_load of this ControllerStats.
Theoretical maximum possible IO per second under current load.
:return: The max_possible_iops_under_current_load of this ControllerStats.
:rtype: float
:required/optional: required
"""
return self._max_possible_iops_under_current_load
@max_possible_iops_under_current_load.setter
def max_possible_iops_under_current_load(self, max_possible_iops_under_current_load):
"""
Sets the max_possible_iops_under_current_load of this ControllerStats.
Theoretical maximum possible IO per second under current load.
:param max_possible_iops_under_current_load: The max_possible_iops_under_current_load of this ControllerStats.
:type: float
"""
self._max_possible_iops_under_current_load = max_possible_iops_under_current_load
[docs] 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
[docs] 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