mirror of
https://github.com/Tech-Workers-Coalition-Italia/mobilizon-reshare.git
synced 2025-02-14 18:50:37 +01:00
75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
import inspect
|
|
import logging
|
|
|
|
from abc import ABC, abstractmethod
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class AbstractPublisher(ABC):
|
|
"""
|
|
Generic publisher class.
|
|
|
|
Shall be inherited from specific subclasses that will manage validation
|
|
process for events and credentials, text formatting, posting, etc.
|
|
|
|
Class attributes:
|
|
- ``credentials``: a ``dict`` containing every useful info that the
|
|
current publisher will need to correctly login to its platform
|
|
- ``event``: a ``dict`` containing every useful info from the event
|
|
"""
|
|
|
|
# TODO: will the actual event be managed by its own class?
|
|
def __init__(self, credentials: dict, event: dict):
|
|
self.credentials = credentials
|
|
self.event = event
|
|
|
|
def __repr__(self):
|
|
return type(self).__name__
|
|
|
|
__str__ = __repr__
|
|
|
|
@abstractmethod
|
|
def post(self) -> bool:
|
|
"""
|
|
Publishes the actual post on social media using ``data`` info.
|
|
:return: True or False according to whether publisher was able to
|
|
complete its task
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
@abstractmethod
|
|
def validate_credentials(self) -> bool:
|
|
"""
|
|
Validates credentials.
|
|
:return: True or False according to whether credentials are valid.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
@abstractmethod
|
|
def validate_event(self) -> bool:
|
|
"""
|
|
Validates publisher's event.
|
|
:return: True or False according to whether event is valid.
|
|
"""
|
|
raise NotImplementedError
|
|
|
|
def log_debug(self, msg, *args, **kwargs):
|
|
self.__log(logging.DEBUG, msg, *args, **kwargs)
|
|
|
|
def log_info(self, msg, *args, **kwargs):
|
|
self.__log(logging.INFO, msg, *args, **kwargs)
|
|
|
|
def log_warning(self, msg, *args, **kwargs):
|
|
self.__log(logging.WARNING, msg, *args, **kwargs)
|
|
|
|
def log_error(self, msg, *args, **kwargs):
|
|
self.__log(logging.ERROR, msg, *args, **kwargs)
|
|
|
|
def log_critical(self, msg, *args, **kwargs):
|
|
self.__log(logging.CRITICAL, msg, *args, **kwargs)
|
|
|
|
def __log(self, level, msg, *args, **kwargs):
|
|
method = inspect.currentframe().f_back.f_back.f_code.co_name
|
|
logger.log(level, f"{self}.{method}(): {msg}", *args, **kwargs)
|