From dbb3bddd645e704d0cd94af5ba704ddeb23dec69 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Mon, 5 Oct 2020 10:12:51 +0200 Subject: [PATCH] Codechange: use openttd-helpers library for common functions --- bananas_server/__main__.py | 23 ++++----------- bananas_server/helpers/click.py | 41 --------------------------- bananas_server/helpers/sentry.py | 30 -------------------- bananas_server/index/github.py | 5 ++-- bananas_server/index/local.py | 4 +-- bananas_server/openttd/tcp_content.py | 5 ++-- bananas_server/storage/local.py | 5 ++-- bananas_server/storage/s3.py | 4 +-- bananas_server/web_routes.py | 4 +-- requirements.base | 1 + requirements.txt | 1 + 11 files changed, 23 insertions(+), 100 deletions(-) delete mode 100644 bananas_server/helpers/click.py delete mode 100644 bananas_server/helpers/sentry.py diff --git a/bananas_server/__main__.py b/bananas_server/__main__.py index 0336125..1041ca1 100644 --- a/bananas_server/__main__.py +++ b/bananas_server/__main__.py @@ -4,14 +4,12 @@ from aiohttp import web from aiohttp.web_log import AccessLogger +from openttd_helpers import click_helper +from openttd_helpers.logging_helper import click_logging +from openttd_helpers.sentry_helper import click_sentry from . import web_routes from .application.bananas_server import Application -from .helpers.click import ( - click_additional_options, - import_module, -) -from .helpers.sentry import click_sentry from .index.github import click_index_github from .index.local import click_index_local from .storage.local import click_storage_local @@ -21,8 +19,6 @@ log = logging.getLogger(__name__) -CONTEXT_SETTINGS = {"help_option_names": ["-h", "--help"]} - class ErrorOnlyAccessLogger(AccessLogger): def log(self, request, response, time): @@ -46,14 +42,7 @@ async def run_server(application, bind, port): return server -@click_additional_options -def click_logging(): - logging.basicConfig( - format="%(asctime)s %(levelname)-8s %(message)s", datefmt="%Y-%m-%d %H:%M:%S", level=logging.INFO - ) - - -@click.command(context_settings=CONTEXT_SETTINGS) +@click_helper.command() @click_logging # Should always be on top, as it initializes the logging @click_sentry @click.option( @@ -65,7 +54,7 @@ def click_logging(): "--storage", type=click.Choice(["local", "s3"], case_sensitive=False), required=True, - callback=import_module("bananas_server.storage", "Storage"), + callback=click_helper.import_module("bananas_server.storage", "Storage"), ) @click_storage_local @click_storage_s3 @@ -73,7 +62,7 @@ def click_logging(): "--index", type=click.Choice(["local", "github"], case_sensitive=False), required=True, - callback=import_module("bananas_server.index", "Index"), + callback=click_helper.import_module("bananas_server.index", "Index"), ) @click_index_local @click_index_github diff --git a/bananas_server/helpers/click.py b/bananas_server/helpers/click.py deleted file mode 100644 index b31f4f2..0000000 --- a/bananas_server/helpers/click.py +++ /dev/null @@ -1,41 +0,0 @@ -import importlib - - -def import_module(prefix, class_name): - def _callback(value): - value = value.lower() - module = importlib.import_module(f"{prefix}.{value}") - class_ = getattr(module, class_name) - return class_ - - def callback(ctx, param, value): - if isinstance(value, tuple): - return [_callback(v) for v in value] - else: - return _callback(value) - - return callback - - -def click_additional_options(additional_func): - def decorator(func): - additional_params = [] - for param in getattr(additional_func, "__click_params__", []): - additional_params.append(param.name) - - def inner_decorator(**kwargs): - additional_kwargs = {param: kwargs[param] for param in additional_params} - additional_func(**additional_kwargs) - - # Remove the kwargs that are consumed by the additional_func - [kwargs.pop(kwarg) for kwarg in additional_kwargs] - - func(**kwargs) - - inner_decorator.__click_params__ = getattr(func, "__click_params__", []) + getattr( - additional_func, "__click_params__", [] - ) - inner_decorator.__doc__ = func.__doc__ - return inner_decorator - - return decorator diff --git a/bananas_server/helpers/sentry.py b/bananas_server/helpers/sentry.py deleted file mode 100644 index c416e66..0000000 --- a/bananas_server/helpers/sentry.py +++ /dev/null @@ -1,30 +0,0 @@ -import click -import logging -import sentry_sdk - -from ..helpers.click import click_additional_options - -log = logging.getLogger(__name__) - - -@click_additional_options -@click.option("--sentry-dsn", help="Sentry DSN.") -@click.option( - "--sentry-environment", - help="Environment we are running in.", - default="development", -) -def click_sentry(sentry_dsn, sentry_environment): - if not sentry_dsn: - return - - # Release is expected to be in the file '.version' - with open(".version") as f: - release = f.readline().strip() - - sentry_sdk.init(sentry_dsn, release=release, environment=sentry_environment) - log.info( - "Sentry initialized with release='%s' and environment='%s'", - release, - sentry_environment, - ) diff --git a/bananas_server/index/github.py b/bananas_server/index/github.py index 73177d3..b19c9e5 100644 --- a/bananas_server/index/github.py +++ b/bananas_server/index/github.py @@ -5,8 +5,9 @@ import tempfile import os +from openttd_helpers import click_helper + from .local import Index as LocalIndex -from ..helpers.click import click_additional_options log = logging.getLogger(__name__) @@ -85,7 +86,7 @@ def reload(self, application): return super().reload(application) -@click_additional_options +@click_helper.extend @click.option( "--index-github-url", help="Repository URL on GitHub. (index=github only)", diff --git a/bananas_server/index/local.py b/bananas_server/index/local.py index 7ff4288..4135882 100644 --- a/bananas_server/index/local.py +++ b/bananas_server/index/local.py @@ -4,9 +4,9 @@ import yaml from collections import defaultdict +from openttd_helpers import click_helper from .schema import ContentEntry as ContentEntryTest -from ..helpers.click import click_additional_options from ..helpers.content_type import get_content_type_from_name from ..helpers.content_type import get_folder_name_from_content_type from ..openttd.protocol.enums import ContentType @@ -294,7 +294,7 @@ def reload(self, md5sum_mapping): ) -@click_additional_options +@click_helper.extend @click.option( "--index-local-folder", help="Folder to use for index storage. (index=local only)", diff --git a/bananas_server/openttd/tcp_content.py b/bananas_server/openttd/tcp_content.py index 47f14a2..981b0f9 100644 --- a/bananas_server/openttd/tcp_content.py +++ b/bananas_server/openttd/tcp_content.py @@ -2,6 +2,8 @@ import click import logging +from openttd_helpers import click_helper + from .protocol.exceptions import ( PacketInvalid, SocketClosed, @@ -10,7 +12,6 @@ from .protocol.write import SEND_MTU from .receive import OpenTTDProtocolReceive from .send import OpenTTDProtocolSend -from ..helpers.click import click_additional_options log = logging.getLogger(__name__) @@ -134,7 +135,7 @@ async def send_packet(self, data): self.transport.write(data) -@click_additional_options +@click_helper.extend @click.option( "--proxy-protocol", help="Enable Proxy Protocol (v1), and expect all incoming package to have this header.", diff --git a/bananas_server/storage/local.py b/bananas_server/storage/local.py index 4a40828..280a3d6 100644 --- a/bananas_server/storage/local.py +++ b/bananas_server/storage/local.py @@ -1,7 +1,8 @@ import click import os -from ..helpers.click import click_additional_options +from openttd_helpers import click_helper + from ..helpers.content_type import get_folder_name_from_content_type _folder = None @@ -60,7 +61,7 @@ def get_stream(self, content_entry): return Stream(filename, content_entry.filesize) -@click_additional_options +@click_helper.extend @click.option( "--storage-local-folder", help="Folder to use for storage. (storage=local only)", diff --git a/bananas_server/storage/s3.py b/bananas_server/storage/s3.py index 0fdfb14..1c332ad 100644 --- a/bananas_server/storage/s3.py +++ b/bananas_server/storage/s3.py @@ -1,10 +1,10 @@ import boto3 import click +from openttd_helpers import click_helper from urllib3.exceptions import ProtocolError from .exceptions import StreamReadError -from ..helpers.click import click_additional_options from ..helpers.content_type import get_folder_name_from_content_type _bucket_name = None @@ -115,7 +115,7 @@ def get_stream(self, content_entry): return Stream(response["Body"], response["ContentLength"]) -@click_additional_options +@click_helper.extend @click.option( "--storage-s3-bucket", help="Name of the bucket to upload the files. (storage=s3 only)", diff --git a/bananas_server/web_routes.py b/bananas_server/web_routes.py index e202b47..b25ca25 100644 --- a/bananas_server/web_routes.py +++ b/bananas_server/web_routes.py @@ -2,8 +2,8 @@ import logging from aiohttp import web +from openttd_helpers import click_helper -from .helpers.click import click_additional_options from .helpers.content_type import get_folder_name_from_content_type from .helpers.safe_filename import safe_filename @@ -79,7 +79,7 @@ async def fallback(request): return web.HTTPNotFound() -@click_additional_options +@click_helper.extend @click.option( "--reload-secret", help="Secret to allow an index reload. Always use this via an environment variable!", diff --git a/requirements.base b/requirements.base index 7ce72b6..1ae4381 100644 --- a/requirements.base +++ b/requirements.base @@ -4,5 +4,6 @@ click gitpython marshmallow marshmallow-enum +openttd-helpers PyYAML sentry-sdk diff --git a/requirements.txt b/requirements.txt index c29f97a..ac864de 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,6 +14,7 @@ jmespath==0.10.0 marshmallow==3.8.0 marshmallow-enum==1.5.1 multidict==4.7.6 +openttd-helpers==1.0.0 python-dateutil==2.8.1 PyYAML==5.3.1 s3transfer==0.3.3