from xos.logger import Logger, logging

logger = Logger(level=logging.INFO)


class PseudowireProvider(object):

    def __init__(self, **args):
        pass

    # Methods to support creation
    #
    # Returns: handle
    #
    def create(self, port1, port2, vlanid, pseudowireservice):
        # Default method needs to be overriden
        logger.info("create called - should be overriden")

    # Method to support connection
    #
    def connect(self, handle):
        # Default method needs to be overriden
        logger.info("connect called - should be overriden")
        return None

    # Method to support disconnection
    #
    def disconnect(self, handle):
        # Default method needs to be overriden
        logger.info("discoconnect called - should be overriden")

    # Methods to support deletion
    #
    def delete(self, handle):
        # Default method needs to be overriden
        logger.info("delete called - should be overriden")