def _check_status_errors(proto, content, error_traps=None): """Raises HTTPErrors based on error statuses sent from validator. Checks for common statuses and runs route specific error traps. """ if content.status == proto.OK: return try: if content.status == proto.INTERNAL_ERROR: raise errors.UnknownValidatorError() except AttributeError: # Not every protobuf has every status enum, so pass AttributeErrors pass try: if content.status == proto.NOT_READY: raise errors.ValidatorNotReady() except AttributeError: pass try: if content.status == proto.NO_ROOT: raise errors.HeadNotFound() except AttributeError: pass try: if content.status == proto.INVALID_PAGING: raise errors.PagingInvalid() except AttributeError: pass try: if content.status == proto.INVALID_SORT: raise errors.SortInvalid() except AttributeError: pass # Check custom error traps from the particular route message if error_traps is not None: for trap in error_traps: trap.check(content.status)
def _try_response_parse(cls, proto, response, traps=None): """Parses the Protobuf response from the validator. Checks for common error-raising response statuses, as well as route specific status errors using the error trap interface. """ parsed = proto() parsed.ParseFromString(response) # Check for common response statuses that should raise errors try: if parsed.status == proto.INTERNAL_ERROR: raise errors.UnknownValidatorError() except AttributeError: # Not every protobuf has every status enum, so pass AttributeErrors pass try: if parsed.status == proto.NOT_READY: raise errors.ValidatorNotReady() except AttributeError: pass try: if parsed.status == proto.NO_ROOT: raise errors.HeadNotFound() except AttributeError: pass try: if parsed.status == proto.INVALID_PAGING: raise errors.PagingInvalid() except AttributeError: pass # Check custom error traps from the particular route message if traps is not None: for trap in traps: trap.check(parsed.status) return cls.message_to_dict(parsed)