Source code for pyxs.exceptions

# -*- coding: utf-8 -*-
"""
    pyxs.exceptions
    ~~~~~~~~~~~~~~~

    This module implements a number of Python exceptions used by
    :mod:`pyxs` classes.

    :copyright: (c) 2011 by Selectel, see AUTHORS for more details.
"""

__all__ = [
    "InvalidOperation", "InvalidPayload", "InvalidPath", "InvalidPermission",
    "ConnectionError", "UnexpectedPacket"
]


class PyXSError(Exception):
    """Base class for all :mod:`pyxs` exceptions."""


[docs]class InvalidOperation(ValueError, PyXSError): """Exception raised when :class:`~pyxs._internal.Packet` is passed an operation, which isn't listed in :data:`~pyxs._internal.Op`. :param int operation: invalid operation value. """
[docs]class InvalidPayload(ValueError, PyXSError): """Exception raised when :class:`~pyxs.Packet` is initialized with payload, which exceeds 4096 bytes restriction or contains a trailing ``NULL``. :param bytes operation: invalid payload value. """
[docs]class InvalidPath(ValueError, PyXSError): """Exception raised when a path proccessed by a comand doesn't match the following constraints: * its length should not exceed 3072 or 2048 for absolute and relative path respectively. * it should only consist of ASCII alphanumerics and the four punctuation characters ``-/_@`` -- `hyphen`, `slash`, `underscore` and `atsign`. * it shouldn't have a trailing ``/``, except for the root path. :param bytes path: invalid path value. """
[docs]class InvalidPermission(ValueError, PyXSError): """Exception raised for permission which don't match the following format:: w<domid> write only r<domid> read only b<domid> both read and write n<domid> no access :param bytes perm: invalid permission value. """
[docs]class ConnectionError(PyXSError): """Exception raised for failures during socket operations."""
[docs]class UnexpectedPacket(ConnectionError): """Exception raised when recieved packet header doesn't match the header of the packet sent, for example if outgoing packet has ``op = Op.READ`` the incoming packet is expected to have ``op = Op.READ`` as well. """