Some documentation
This commit is contained in:
parent
c8c5fefabc
commit
49a9fccbf3
4 changed files with 70 additions and 24 deletions
|
@ -11,29 +11,13 @@ from butterrobot.queue import q
|
|||
from butterrobot.db import ChannelQuery
|
||||
from butterrobot.config import SECRET_KEY, HOSTNAME
|
||||
from butterrobot.objects import Message, Channel
|
||||
from butterrobot.http import ExternalProxyFix
|
||||
from butterrobot.plugins import get_available_plugins
|
||||
from butterrobot.platforms import PLATFORMS, get_available_platforms
|
||||
from butterrobot.platforms.base import Platform
|
||||
from butterrobot.admin.blueprint import admin as admin_bp
|
||||
|
||||
|
||||
class ExternalProxyFix(object):
|
||||
"""
|
||||
Custom proxy helper to get the external hostname from the `X-External-Host` header
|
||||
used by one of the reverse proxies in front of this in production.
|
||||
It does nothing if the header is not present.
|
||||
"""
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
host = environ.get("HTTP_X_EXTERNAL_HOST", "")
|
||||
if host:
|
||||
environ["HTTP_HOST"] = host
|
||||
return self.app(environ, start_response)
|
||||
|
||||
|
||||
loop = asyncio.get_event_loop()
|
||||
logger = structlog.get_logger(__name__)
|
||||
app = Flask(__name__)
|
||||
|
|
15
butterrobot/http.py
Normal file
15
butterrobot/http.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
class ExternalProxyFix(object):
|
||||
"""
|
||||
Custom proxy helper to get the external hostname from the `X-External-Host` header
|
||||
used by one of the reverse proxies in front of this in production.
|
||||
It does nothing if the header is not present.
|
||||
"""
|
||||
|
||||
def __init__(self, app):
|
||||
self.app = app
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
host = environ.get("HTTP_X_EXTERNAL_HOST", "")
|
||||
if host:
|
||||
environ["HTTP_HOST"] = host
|
||||
return self.app(environ, start_response)
|
|
@ -1,4 +1,4 @@
|
|||
from abc import abstractclassmethod
|
||||
from abc import abstractmethod
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
|
@ -23,14 +23,45 @@ class Platform:
|
|||
|
||||
@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) -> 'Message':
|
||||
"""
|
||||
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) -> 'Channel':
|
||||
"""
|
||||
Extracts the Channel raw data from the message received in the incoming webhook.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
class PlatformMethods:
|
||||
@abstractclassmethod
|
||||
def send_message(cls, message):
|
||||
pass
|
||||
|
||||
@abstractclassmethod
|
||||
def reply_message(cls, message, reply_to):
|
||||
@classmethod
|
||||
@abstractmethod
|
||||
def send_message(cls, message: 'Message'):
|
||||
"""Method used to send a message via the platform"""
|
||||
pass
|
||||
|
|
16
tests/test_objects.py
Normal file
16
tests/test_objects.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
from butterrobot.objects import Channel, ChannelPlugin
|
||||
|
||||
|
||||
def test_channel_has_enabled_plugin_ok():
|
||||
channel = Channel(
|
||||
platform="debug",
|
||||
platform_channel_id="debug",
|
||||
channel_raw={},
|
||||
plugins={
|
||||
"enabled": ChannelPlugin(id=1, channel_id="test", plugin_id="enabled", enabled=True),
|
||||
"existant": ChannelPlugin(id=2, channel_id="test", plugin_id="existant"),
|
||||
}
|
||||
)
|
||||
assert not channel.has_enabled_plugin("non.existant")
|
||||
assert not channel.has_enabled_plugin("existant")
|
||||
assert channel.has_enabled_plugin("enabled")
|
Loading…
Add table
Add a link
Reference in a new issue