* Added base admin login/logout flows * Ignore local database * Channel model * Admin interface for channels and plugins * Added database tests along with workflows * Added some docstrings * Ignore .coverage file * Creating plugins docs WIP * Documentation * Black everything * Some documentation * Coverage for the plugins package as well * DB Fixes * Absolute FROM in Dockerfile * Database and logging fixes * Slack: Support private channels * Added pre-commit * black'd * Fixed UserQuery.create * Fixed ChannelPluginQuery.create exists call * Added ChannelPlugin menu for debugging * Ignore sqlite databases * Updated contributing docs
67 lines
1.6 KiB
Python
67 lines
1.6 KiB
Python
from abc import abstractmethod
|
|
from dataclasses import dataclass
|
|
|
|
|
|
class Platform:
|
|
class PlatformError(Exception):
|
|
pass
|
|
|
|
class PlatformInitError(PlatformError):
|
|
pass
|
|
|
|
class PlatformAuthError(PlatformError):
|
|
pass
|
|
|
|
@dataclass
|
|
class PlatformAuthResponse(PlatformError):
|
|
"""
|
|
Used when the platform needs to make a response right away instead of async.
|
|
"""
|
|
|
|
data: dict
|
|
status_code: int = 200
|
|
|
|
@classmethod
|
|
def init(cls, app):
|
|
"""
|
|
Initialises the platform.
|
|
|
|
Used at the application launch to prepare anything required for
|
|
the platform to work..
|
|
|
|
It receives the flask application via parameter in case the platform
|
|
requires for custom webservice endpoints or configuration.
|
|
"""
|
|
pass
|
|
|
|
@classmethod
|
|
@abstractmethod
|
|
def parse_incoming_message(cls, request):
|
|
"""
|
|
Parses the incoming request and returns a :class:`butterrobot.objects.Message` instance.
|
|
"""
|
|
pass
|
|
|
|
@classmethod
|
|
@abstractmethod
|
|
def parse_channel_name_from_raw(cls, channel_raw) -> str:
|
|
"""
|
|
Extracts the Channel name from :class:`butterrobot.objects.Channel.channel_raw`.
|
|
"""
|
|
pass
|
|
|
|
@classmethod
|
|
@abstractmethod
|
|
def parse_channel_from_message(cls, channel_raw):
|
|
"""
|
|
Extracts the Channel raw data from the message received in the incoming webhook.
|
|
"""
|
|
pass
|
|
|
|
|
|
class PlatformMethods:
|
|
@classmethod
|
|
@abstractmethod
|
|
def send_message(cls, message):
|
|
"""Method used to send a message via the platform"""
|
|
pass
|