docs: def deserialize_iso(attr):
          """Deserialize ISO-8601 formatted string into Datetime object.
  
          :param str attr: response string to be deserialized.
          :rtype: Datetime
          :raises: DeserializationError if string format invalid.
          """
          if isinstance(attr, ET.Element):
              attr = attr.text
          try:
              attr = attr.upper()
              match = Deserializer.valid_date.match(attr)
              if not match:
                  raise ValueError("Invalid datetime string: " + attr)
  
              check_decimal = attr.split('.')
              if len(check_decimal) > 1:
                  decimal_str = ""
                  for digit in check_decimal[1]:
                      if digit.isdigit():
                          decimal_str += digit
                      else:
                          break
                  if len(decimal_str) > 6:
                      attr = attr.replace(decimal_str, decimal_str[0:6])
  
              date_obj = isodate.parse_datetime(attr)
              test_utc = date_obj.utctimetuple()
              if test_utc.tm_year > 9999 or test_utc.tm_year < 1:
                  raise OverflowError("Hit max or min date")
          except(ValueError, OverflowError, AttributeError) as err:
              msg = "Cannot deserialize datetime object."
              raise_with_traceback(DeserializationError, msg, err)
          else:
              return date_obj