from abc import ABCMeta, abstractmethod

import six


class SendError(Exception):
    """ A session send() error class """
    @property
    def result(self):
        return self._result

    def __init__(self, result, *args, **kwargs):
        super(SendError, self).__init__(*args, **kwargs)
        self._result = result


@six.add_metaclass(ABCMeta)
class SessionInterface(object):
    """ Session wrapper interface providing a session property and a send convenience method """

    @property
    @abstractmethod
    def session(self):
        pass

    @abstractmethod
    def send(self, req, ignore_errors=False, raise_on_errors=True, async_enable=False):
        pass