1
0
mirror of https://github.com/JoelBender/bacpypes synced 2025-09-28 22:15:23 +08:00

first add the classes to the errors module

This commit is contained in:
Joel Bender 2015-09-21 22:42:48 -04:00
parent 4c45c8d70a
commit a344b188c2
3 changed files with 849 additions and 21 deletions

View File

@ -6,8 +6,9 @@
class ConfigurationError(ValueError):
""" This error is raised when there is a configuration problem such as
bindings between layers or required parameters that are missing. """
"""This error is raised when there is a configuration problem such as
bindings between layers or required parameters that are missing.
"""
def __init__(self, *args):
self.args = args
@ -18,7 +19,8 @@ class ConfigurationError(ValueError):
class EncodingError(ValueError):
""" This error is raised if there is a problem during encoding. """
"""This error is raised if there is a problem during encoding.
"""
def __init__(self, *args):
self.args = args
@ -29,7 +31,8 @@ class EncodingError(ValueError):
class DecodingError(ValueError):
""" This error is raised if there is a problem during decoding. """
"""This error is raised if there is a problem during decoding.
"""
def __init__(self, *args):
self.args = args
@ -40,11 +43,284 @@ class DecodingError(ValueError):
class ExecutionError(RuntimeError):
""" This error is raised for if there is an error during the execution of
a service or function at the application layer of stack and the error
translated into an ErrorPDU. """
"""This error is raised for if there is an error during the execution of
a service or function at the application layer of stack and the error
translated into an ErrorPDU.
"""
def __init__(self, errorClass, errorCode):
self.errorClass = errorClass
self.errorCode = errorCode
self.args = (errorClass, errorCode)
#
# Reject Exception Family
#
class RejectException(Exception):
"""Exceptions in this family correspond to reject reasons. If the
application raises one of these errors while processing a confirmed
service request, the stack will form an appropriate RejectPDU and
send it to the client.
"""
rejectReason = None
def __init__(self, *args):
if not self.rejectReason:
raise NotImplementedError("use a derived class")
# save the args
self.args = args
class RejectOther(RejectException):
"""Generated in response to a confirmed request APDU that contains a
syntax error for which an error code has not been explicitly defined.
"""
rejectReason = 'other'
class RejectBufferOverflow(RejectException):
"""A buffer capacity has been exceeded.
"""
rejectReason = 'bufferOverflow'
class InconsistentParameters(RejectException):
"""Generated in response to a confirmed request APDU that omits a
conditional service argument that should be present or contains a
conditional service argument that should not be present. This condition
could also elicit a Reject PDU with a Reject Reason of INVALID_TAG.
"""
rejectReason = 'inconsistentParameters'
class InvalidParameterDatatype(RejectException):
"""Generated in response to a confirmed request APDU in which the encoding
of one or more of the service parameters does not follow the correct type
specification. This condition could also elicit a Reject PDU with a Reject
Reason of INVALID_TAG.
"""
rejectReason = 'invalidParameterDatatype'
class InvalidTag(RejectException):
"""While parsing a message, an invalid tag was encountered. Since an
invalid tag could confuse the parsing logic, any of the following Reject
Reasons may also be generated in response to a confirmed request
containing an invalid tag: INCONSISTENT_PARAMETERS,
INVALID_PARAMETER_DATA_TYPE, MISSING_REQUIRED_PARAMETER, and
TOO_MANY_ARGUMENTS.
"""
rejectReason = 'invalidTag'
class MissingRequiredParameter(RejectException):
"""Generated in response to a confirmed request APDU that is missing at
least one mandatory service argument. This condition could also elicit a
Reject PDU with a Reject Reason of INVALID_TAG.
"""
rejectReason = 'missingRequiredParameter'
class ParameterOutOfRange(RejectException):
"""Generated in response to a confirmed request APDU that conveys a
parameter whose value is outside the range defined for this service.
"""
rejectReason = 'parameterOutOfRange'
class TooManyArguments(RejectException):
"""Generated in response to a confirmed request APDU in which the total
number of service arguments is greater than specified for the service.
This condition could also elicit a Reject PDU with a Reject Reason of
INVALID_TAG.
"""
rejectReason = 'tooManyArguments'
class UndefinedEnumeration(RejectException):
"""Generated in response to a confirmed request APDU in which one or
more of the service parameters is decoded as an enumeration that is not
defined by the type specification of this parameter.
"""
rejectReason = 'undefinedEnumeration'
class UnrecognizedService(RejectException):
"""Generated in response to a confirmed request APDU in which the Service
Choice field specifies an unknown or unsupported service.
"""
rejectReason = 'unrecognizedService'
#
# Abort Exception Family
#
class AbortException(Exception):
"""Exceptions in this family correspond to abort reasons. If the
application raises one of these errors while processing a confirmed
service request, the stack will form an appropriate AbortPDU and
send it to the client.
"""
abortReason = None
def __init__(self, *args):
if not self.abortReason:
raise NotImplementedError("use a derived class")
# save the args
self.args = args
class AbortOther(AbortException):
"""This abort reason is returned for a reason other than any of those
for which an error code has not been explicitly defined.
"""
abortReason = 'other'
class AbortBufferOverflow(AbortException):
"""A buffer capacity has been exceeded.
"""
abortReason = 'bufferOverflow'
class InvalidAPDUInThisState(AbortException):
"""Generated in response to an APDU that is not expected in the present
state of the Transaction State Machine.
"""
abortReason = 'invalidApduInThisState'
class PreemptedByHigherPriorityTask(AbortException):
"""The transaction shall be aborted to permit higher priority processing.
"""
abortReason = 'preemptedByHigherPriorityTask'
class SegmentationNotSupported(AbortException):
"""Generated in response to an APDU that has its segmentation bit set to
TRUE when the receiving device does not support segmentation. It is also
generated when a BACnet-ComplexACK- PDU is large enough to require
segmentation but it cannot be transmitted because either the transmitting
device or the receiving device does not support segmentation.
"""
abortReason = 'segmentationNotSupported'
class SecurityError(AbortException):
"""The Transaction is aborted due to receipt of a security error.
"""
abortReason = 'securityError'
class InsufficientSecurity(AbortException):
"""The transaction is aborted due to receipt of a PDU secured differently
than the original PDU of the transaction.
"""
abortReason = 'insufficientSecurity'
class WindowSizeOutOfRange(AbortException):
"""A device receives a request that is segmented, or receives any segment
of a segmented request, where the Proposed Window Size field of the PDU
header is either zero or greater than 127.
"""
abortReason = 'windowSizeOutOfRange'
class ApplicationExceededReplyTime(AbortException):
"""A device receives a confirmed request but its application layer has not
responded within the published APDU Timeout period.
"""
abortReason = 'applicationExceededReplyTime'
class OutOfResources(AbortException):
"""A device receives a request but cannot start processing because it has
run out of some internal resource.
"""
abortReason = 'outOfResources'
class TSMTimeout(AbortException):
"""A transaction state machine timer exceeded the timeout applicable for
the current state, causing the transaction machine to abort the
transaction.
"""
abortReason = 'tsmTimeout'
class APDUTooLong(AbortException):
"""An APDU was received from the local application program whose overall
size exceeds the maximum transmittable length or exceeds the maximum number
of segments accepted by the server.
"""
abortReason = 'apduTooLong'
class ServerTimeout(AbortException):
"""BACpypes specific.
"""
abortReason = 'serverTimeout'
class NoResponse(AbortException):
"""BACpypes specific.
"""
abortReason = 'noResponse'

View File

@ -6,8 +6,9 @@
class ConfigurationError(ValueError):
""" This error is raised when there is a configuration problem such as
bindings between layers or required parameters that are missing. """
"""This error is raised when there is a configuration problem such as
bindings between layers or required parameters that are missing.
"""
def __init__(self, *args):
self.args = args
@ -18,7 +19,8 @@ class ConfigurationError(ValueError):
class EncodingError(ValueError):
""" This error is raised if there is a problem during encoding. """
"""This error is raised if there is a problem during encoding.
"""
def __init__(self, *args):
self.args = args
@ -29,7 +31,8 @@ class EncodingError(ValueError):
class DecodingError(ValueError):
""" This error is raised if there is a problem during decoding. """
"""This error is raised if there is a problem during decoding.
"""
def __init__(self, *args):
self.args = args
@ -40,11 +43,284 @@ class DecodingError(ValueError):
class ExecutionError(RuntimeError):
""" This error is raised for if there is an error during the execution of
a service or function at the application layer of stack and the error
translated into an ErrorPDU. """
"""This error is raised for if there is an error during the execution of
a service or function at the application layer of stack and the error
translated into an ErrorPDU.
"""
def __init__(self, errorClass, errorCode):
self.errorClass = errorClass
self.errorCode = errorCode
self.args = (errorClass, errorCode)
#
# Reject Exception Family
#
class RejectException(Exception):
"""Exceptions in this family correspond to reject reasons. If the
application raises one of these errors while processing a confirmed
service request, the stack will form an appropriate RejectPDU and
send it to the client.
"""
rejectReason = None
def __init__(self, *args):
if not self.rejectReason:
raise NotImplementedError("use a derived class")
# save the args
self.args = args
class RejectOther(RejectException):
"""Generated in response to a confirmed request APDU that contains a
syntax error for which an error code has not been explicitly defined.
"""
rejectReason = 'other'
class RejectBufferOverflow(RejectException):
"""A buffer capacity has been exceeded.
"""
rejectReason = 'bufferOverflow'
class InconsistentParameters(RejectException):
"""Generated in response to a confirmed request APDU that omits a
conditional service argument that should be present or contains a
conditional service argument that should not be present. This condition
could also elicit a Reject PDU with a Reject Reason of INVALID_TAG.
"""
rejectReason = 'inconsistentParameters'
class InvalidParameterDatatype(RejectException):
"""Generated in response to a confirmed request APDU in which the encoding
of one or more of the service parameters does not follow the correct type
specification. This condition could also elicit a Reject PDU with a Reject
Reason of INVALID_TAG.
"""
rejectReason = 'invalidParameterDatatype'
class InvalidTag(RejectException):
"""While parsing a message, an invalid tag was encountered. Since an
invalid tag could confuse the parsing logic, any of the following Reject
Reasons may also be generated in response to a confirmed request
containing an invalid tag: INCONSISTENT_PARAMETERS,
INVALID_PARAMETER_DATA_TYPE, MISSING_REQUIRED_PARAMETER, and
TOO_MANY_ARGUMENTS.
"""
rejectReason = 'invalidTag'
class MissingRequiredParameter(RejectException):
"""Generated in response to a confirmed request APDU that is missing at
least one mandatory service argument. This condition could also elicit a
Reject PDU with a Reject Reason of INVALID_TAG.
"""
rejectReason = 'missingRequiredParameter'
class ParameterOutOfRange(RejectException):
"""Generated in response to a confirmed request APDU that conveys a
parameter whose value is outside the range defined for this service.
"""
rejectReason = 'parameterOutOfRange'
class TooManyArguments(RejectException):
"""Generated in response to a confirmed request APDU in which the total
number of service arguments is greater than specified for the service.
This condition could also elicit a Reject PDU with a Reject Reason of
INVALID_TAG.
"""
rejectReason = 'tooManyArguments'
class UndefinedEnumeration(RejectException):
"""Generated in response to a confirmed request APDU in which one or
more of the service parameters is decoded as an enumeration that is not
defined by the type specification of this parameter.
"""
rejectReason = 'undefinedEnumeration'
class UnrecognizedService(RejectException):
"""Generated in response to a confirmed request APDU in which the Service
Choice field specifies an unknown or unsupported service.
"""
rejectReason = 'unrecognizedService'
#
# Abort Exception Family
#
class AbortException(Exception):
"""Exceptions in this family correspond to abort reasons. If the
application raises one of these errors while processing a confirmed
service request, the stack will form an appropriate AbortPDU and
send it to the client.
"""
abortReason = None
def __init__(self, *args):
if not self.abortReason:
raise NotImplementedError("use a derived class")
# save the args
self.args = args
class AbortOther(AbortException):
"""This abort reason is returned for a reason other than any of those
for which an error code has not been explicitly defined.
"""
abortReason = 'other'
class AbortBufferOverflow(AbortException):
"""A buffer capacity has been exceeded.
"""
abortReason = 'bufferOverflow'
class InvalidAPDUInThisState(AbortException):
"""Generated in response to an APDU that is not expected in the present
state of the Transaction State Machine.
"""
abortReason = 'invalidApduInThisState'
class PreemptedByHigherPriorityTask(AbortException):
"""The transaction shall be aborted to permit higher priority processing.
"""
abortReason = 'preemptedByHigherPriorityTask'
class SegmentationNotSupported(AbortException):
"""Generated in response to an APDU that has its segmentation bit set to
TRUE when the receiving device does not support segmentation. It is also
generated when a BACnet-ComplexACK- PDU is large enough to require
segmentation but it cannot be transmitted because either the transmitting
device or the receiving device does not support segmentation.
"""
abortReason = 'segmentationNotSupported'
class SecurityError(AbortException):
"""The Transaction is aborted due to receipt of a security error.
"""
abortReason = 'securityError'
class InsufficientSecurity(AbortException):
"""The transaction is aborted due to receipt of a PDU secured differently
than the original PDU of the transaction.
"""
abortReason = 'insufficientSecurity'
class WindowSizeOutOfRange(AbortException):
"""A device receives a request that is segmented, or receives any segment
of a segmented request, where the Proposed Window Size field of the PDU
header is either zero or greater than 127.
"""
abortReason = 'windowSizeOutOfRange'
class ApplicationExceededReplyTime(AbortException):
"""A device receives a confirmed request but its application layer has not
responded within the published APDU Timeout period.
"""
abortReason = 'applicationExceededReplyTime'
class OutOfResources(AbortException):
"""A device receives a request but cannot start processing because it has
run out of some internal resource.
"""
abortReason = 'outOfResources'
class TSMTimeout(AbortException):
"""A transaction state machine timer exceeded the timeout applicable for
the current state, causing the transaction machine to abort the
transaction.
"""
abortReason = 'tsmTimeout'
class APDUTooLong(AbortException):
"""An APDU was received from the local application program whose overall
size exceeds the maximum transmittable length or exceeds the maximum number
of segments accepted by the server.
"""
abortReason = 'apduTooLong'
class ServerTimeout(AbortException):
"""BACpypes specific.
"""
abortReason = 'serverTimeout'
class NoResponse(AbortException):
"""BACpypes specific.
"""
abortReason = 'noResponse'

View File

@ -6,8 +6,9 @@
class ConfigurationError(ValueError):
""" This error is raised when there is a configuration problem such as
bindings between layers or required parameters that are missing. """
"""This error is raised when there is a configuration problem such as
bindings between layers or required parameters that are missing.
"""
def __init__(self, *args):
self.args = args
@ -18,7 +19,8 @@ class ConfigurationError(ValueError):
class EncodingError(ValueError):
""" This error is raised if there is a problem during encoding. """
"""This error is raised if there is a problem during encoding.
"""
def __init__(self, *args):
self.args = args
@ -29,7 +31,8 @@ class EncodingError(ValueError):
class DecodingError(ValueError):
""" This error is raised if there is a problem during decoding. """
"""This error is raised if there is a problem during decoding.
"""
def __init__(self, *args):
self.args = args
@ -40,11 +43,284 @@ class DecodingError(ValueError):
class ExecutionError(RuntimeError):
""" This error is raised for if there is an error during the execution of
a service or function at the application layer of stack and the error
translated into an ErrorPDU. """
"""This error is raised for if there is an error during the execution of
a service or function at the application layer of stack and the error
translated into an ErrorPDU.
"""
def __init__(self, errorClass, errorCode):
self.errorClass = errorClass
self.errorCode = errorCode
self.args = (errorClass, errorCode)
#
# Reject Exception Family
#
class RejectException(Exception):
"""Exceptions in this family correspond to reject reasons. If the
application raises one of these errors while processing a confirmed
service request, the stack will form an appropriate RejectPDU and
send it to the client.
"""
rejectReason = None
def __init__(self, *args):
if not self.rejectReason:
raise NotImplementedError("use a derived class")
# save the args
self.args = args
class RejectOther(RejectException):
"""Generated in response to a confirmed request APDU that contains a
syntax error for which an error code has not been explicitly defined.
"""
rejectReason = 'other'
class RejectBufferOverflow(RejectException):
"""A buffer capacity has been exceeded.
"""
rejectReason = 'bufferOverflow'
class InconsistentParameters(RejectException):
"""Generated in response to a confirmed request APDU that omits a
conditional service argument that should be present or contains a
conditional service argument that should not be present. This condition
could also elicit a Reject PDU with a Reject Reason of INVALID_TAG.
"""
rejectReason = 'inconsistentParameters'
class InvalidParameterDatatype(RejectException):
"""Generated in response to a confirmed request APDU in which the encoding
of one or more of the service parameters does not follow the correct type
specification. This condition could also elicit a Reject PDU with a Reject
Reason of INVALID_TAG.
"""
rejectReason = 'invalidParameterDatatype'
class InvalidTag(RejectException):
"""While parsing a message, an invalid tag was encountered. Since an
invalid tag could confuse the parsing logic, any of the following Reject
Reasons may also be generated in response to a confirmed request
containing an invalid tag: INCONSISTENT_PARAMETERS,
INVALID_PARAMETER_DATA_TYPE, MISSING_REQUIRED_PARAMETER, and
TOO_MANY_ARGUMENTS.
"""
rejectReason = 'invalidTag'
class MissingRequiredParameter(RejectException):
"""Generated in response to a confirmed request APDU that is missing at
least one mandatory service argument. This condition could also elicit a
Reject PDU with a Reject Reason of INVALID_TAG.
"""
rejectReason = 'missingRequiredParameter'
class ParameterOutOfRange(RejectException):
"""Generated in response to a confirmed request APDU that conveys a
parameter whose value is outside the range defined for this service.
"""
rejectReason = 'parameterOutOfRange'
class TooManyArguments(RejectException):
"""Generated in response to a confirmed request APDU in which the total
number of service arguments is greater than specified for the service.
This condition could also elicit a Reject PDU with a Reject Reason of
INVALID_TAG.
"""
rejectReason = 'tooManyArguments'
class UndefinedEnumeration(RejectException):
"""Generated in response to a confirmed request APDU in which one or
more of the service parameters is decoded as an enumeration that is not
defined by the type specification of this parameter.
"""
rejectReason = 'undefinedEnumeration'
class UnrecognizedService(RejectException):
"""Generated in response to a confirmed request APDU in which the Service
Choice field specifies an unknown or unsupported service.
"""
rejectReason = 'unrecognizedService'
#
# Abort Exception Family
#
class AbortException(Exception):
"""Exceptions in this family correspond to abort reasons. If the
application raises one of these errors while processing a confirmed
service request, the stack will form an appropriate AbortPDU and
send it to the client.
"""
abortReason = None
def __init__(self, *args):
if not self.abortReason:
raise NotImplementedError("use a derived class")
# save the args
self.args = args
class AbortOther(AbortException):
"""This abort reason is returned for a reason other than any of those
for which an error code has not been explicitly defined.
"""
abortReason = 'other'
class AbortBufferOverflow(AbortException):
"""A buffer capacity has been exceeded.
"""
abortReason = 'bufferOverflow'
class InvalidAPDUInThisState(AbortException):
"""Generated in response to an APDU that is not expected in the present
state of the Transaction State Machine.
"""
abortReason = 'invalidApduInThisState'
class PreemptedByHigherPriorityTask(AbortException):
"""The transaction shall be aborted to permit higher priority processing.
"""
abortReason = 'preemptedByHigherPriorityTask'
class SegmentationNotSupported(AbortException):
"""Generated in response to an APDU that has its segmentation bit set to
TRUE when the receiving device does not support segmentation. It is also
generated when a BACnet-ComplexACK- PDU is large enough to require
segmentation but it cannot be transmitted because either the transmitting
device or the receiving device does not support segmentation.
"""
abortReason = 'segmentationNotSupported'
class SecurityError(AbortException):
"""The Transaction is aborted due to receipt of a security error.
"""
abortReason = 'securityError'
class InsufficientSecurity(AbortException):
"""The transaction is aborted due to receipt of a PDU secured differently
than the original PDU of the transaction.
"""
abortReason = 'insufficientSecurity'
class WindowSizeOutOfRange(AbortException):
"""A device receives a request that is segmented, or receives any segment
of a segmented request, where the Proposed Window Size field of the PDU
header is either zero or greater than 127.
"""
abortReason = 'windowSizeOutOfRange'
class ApplicationExceededReplyTime(AbortException):
"""A device receives a confirmed request but its application layer has not
responded within the published APDU Timeout period.
"""
abortReason = 'applicationExceededReplyTime'
class OutOfResources(AbortException):
"""A device receives a request but cannot start processing because it has
run out of some internal resource.
"""
abortReason = 'outOfResources'
class TSMTimeout(AbortException):
"""A transaction state machine timer exceeded the timeout applicable for
the current state, causing the transaction machine to abort the
transaction.
"""
abortReason = 'tsmTimeout'
class APDUTooLong(AbortException):
"""An APDU was received from the local application program whose overall
size exceeds the maximum transmittable length or exceeds the maximum number
of segments accepted by the server.
"""
abortReason = 'apduTooLong'
class ServerTimeout(AbortException):
"""BACpypes specific.
"""
abortReason = 'serverTimeout'
class NoResponse(AbortException):
"""BACpypes specific.
"""
abortReason = 'noResponse'