# Path: stoq/plugins/base.py
# class BasePlugin(ABC):
#     def __init__(self, config: StoqConfigParser) -> None:
#         self.config = config
#         self.plugin_name = config.get('Core', 'Name', fallback=self.__class__.__name__)
#         self.__author__ = config.get('Documentation', 'Author', fallback='')
#         self.__version__ = config.get('Documentation', 'Version', fallback='')
#         self.__website__ = config.get('Documentation', 'Website', fallback='')
#         self.__description__ = config.get('Documentation', 'Description', fallback='')
#         self.log = logging.getLogger(f'stoq.{self.plugin_name}')


from asyncio import Queue
from abc import abstractmethod, ABC
from stoq.plugins import BasePlugin
    Example
    -------

    ::

        from asyncio import Queue
        from typing import Dict, Optional

        from stoq import Payload, PayloadMeta
        from stoq.plugins import ProviderPlugin
        from stoq.helpers import StoqConfigParser


        class ExampleProvider(ProviderPlugin):
            def __init__(self, config: StoqConfigParser) -> None:
                super().__init__(config)
                self.meta = config.get('options', 'meta', fallback='This msg will always be')

            async def ingest(self, queue: Queue) -> None:
                payload_meta = PayloadMeta(extra_data={'msg': self.meta})
                await queue.put(Payload(b'This is a payload', payload_meta=payload_meta))

    API
    ===

"""





# Path: stoq/plugins/base.py
# class BasePlugin(ABC):
#     def __init__(self, config: StoqConfigParser) -> None:
#         self.config = config
#         self.plugin_name = config.get('Core', 'Name', fallback=self.__class__.__name__)
#         self.__author__ = config.get('Documentation', 'Author', fallback='')
#         self.__version__ = config.get('Documentation', 'Version', fallback='')
#         self.__website__ = config.get('Documentation', 'Website', fallback='')
#         self.__description__ = config.get('Documentation', 'Description', fallback='')
#         self.log = logging.getLogger(f'stoq.{self.plugin_name}')


# Path: stoq/plugins/provider.py
from asyncio import Queue
from abc import abstractmethod, ABC
from stoq.plugins import BasePlugin

    Example
    -------

    ::

        from asyncio import Queue
        from typing import Dict, Optional

        from stoq import Payload, PayloadMeta
        from stoq.plugins import ProviderPlugin
        from stoq.helpers import StoqConfigParser


        class ExampleProvider(ProviderPlugin):
            def __init__(self, config: StoqConfigParser) -> None:
                super().__init__(config)
                self.meta = config.get('options', 'meta', fallback='This msg will always be')

            async def ingest(self, queue: Queue) -> None:
                payload_meta = PayloadMeta(extra_data={'msg': self.meta})
                await queue.put(Payload(b'This is a payload', payload_meta=payload_meta))

    API
    ===

"""





class ProviderPlugin(BasePlugin, ABC):