Source code for fixtrate.exceptions

from . import constants as fix


[docs]class FIXError(Exception): """A FIX error occured""" pass
[docs]class SessionError(FIXError): """A FIX session-level error occured"""
[docs]class FIXAuthenticationError(FIXError): """Unablet to authenticate client"""
[docs]class DuplicateSessionError(FIXAuthenticationError): """A connection is already bound to this session.""" def __init__(self): msg = 'A connection is already bound to this session.' super().__init__(msg)
[docs]class SequenceGapError(FIXError): """ A sequence gap occured (remote sequence number is greater than expected). """ def __init__(self, fix_msg, gap): expected = fix_msg.seq_num - gap greater_or_lower = 'greater' if gap > 0 else 'lower' error = ( 'Remote sequence number is %s than ' 'expected, expected %s but got %s' '' % (greater_or_lower, expected, fix_msg.seq_num) ) super().__init__(error) self.fix_msg = fix_msg self.gap = gap self.expected = expected
[docs]class FatalSequenceGapError(SequenceGapError): """ A fatal sequence gap occured (remote sequence number is lower than expected). """
[docs]class FixRejectionError(FIXError): """ Reject<3> message received.""" def __init__(self, rej_msg, reason): self.rej_msg = rej_msg self.reason = reason msg = 'Peer rejected message: %s' % reason super().__init__(msg)
[docs]class UnsupportedVersion(FIXError): """ Unsupported FIX version""" pass
[docs]class InvalidFixDictTag(FIXError): """ Tag specified in FIX XML dictionary is not a valid FIX tag""" pass
[docs]class InvalidFIXVersion(FIXError): def __init__(self, version): super().__init__( '{} is not a valid FIX version'.format(version))
[docs]class InvalidMessageError(FIXError): """An invalid message was received""" def __init__(self, msg, fix_msg, tag, reject_type): self.fix_msg = fix_msg self.tag = tag self.reject_type = reject_type super().__init__(msg)
[docs]class MissingRequiredTagError(InvalidMessageError): """An required tag is missing""" reject_type = fix.SessionRejectReason.REQUIRED_TAG_MISSING def __init__(self, fix_msg, tag): self.fix_msg = fix_msg error = 'Missing required tag %s.' % tag super().__init__(error, fix_msg, tag, self.reject_type)
[docs]class IncorrectTagValueError(InvalidMessageError): """An invalid message was received""" reject_type = fix.SessionRejectReason.VALUE_IS_INCORRECT def __init__(self, fix_msg, tag, expected, actual): self.fix_msg = fix_msg error = 'Expected %s for tag %s, instead got %s' % ( expected, tag, actual) super().__init__(error, fix_msg, tag, self.reject_type)
[docs]class InvalidTypeError(InvalidMessageError): """Incorrect data type for value""" reject_type = fix.SessionRejectReason.INCORRECT_DATA_FORMAT_FOR_VALUE def __init__(self, fix_msg, tag, value, expected_type): self.fix_msg = fix_msg error = ( '%s is not of a valid type for ' 'tag %s, expected type [%s]' % ( value, tag, expected_type.__name__) ) super().__init__(error, fix_msg, tag, self.reject_type)
[docs]class BindClosedError(RuntimeError): """Bind was closed while waiting for session""" def __init__(self): super().__init__('Bind was closed while waiting for session')
[docs]class UnresponsiveClientError(TimeoutError): """Did not receive a respone from the client in the alloted time""" def __init__(self): msg = ( 'Did not receive a respone from ' 'the client in the alloted time' ) super().__init__(msg)