Skip to content
Open
Changes from 6 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions python/arcticdb/storage_fixtures/s3.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,13 @@
from typing import Optional, Any, Type

import werkzeug
from werkzeug.serving import WSGIRequestHandler
import botocore.exceptions
from moto.server import DomainDispatcherApplication, create_backend_app

from arcticdb.storage_fixtures.azure import AzureStorageFixtureFactory
from arcticdb.util.logger import get_logger
from arcticdb.util.utils import strtobool

from .api import *
from .utils import (
Expand Down Expand Up @@ -56,6 +58,36 @@
logger = logging.getLogger("S3 Storage Fixture")


def _configure_moto_server_logging(verbose: bool) -> None:
if verbose:
return

werkzeug_logger = logging.getLogger("werkzeug")
werkzeug_logger.propagate = False
werkzeug_logger.setLevel(logging.ERROR)


def _suppress_moto_server_stdio(verbose: bool) -> None:
if verbose:
return

with open(os.devnull, "w") as devnull:
os.dup2(devnull.fileno(), sys.stdout.fileno())
os.dup2(devnull.fileno(), sys.stderr.fileno())


class _QuietMotoRequestHandler(WSGIRequestHandler):
def log(self, type, message, *args):
return

def log_request(self, code="-", size="-"):
return

def log_error(self, format, *args):
Comment thread
G-D-Petrov marked this conversation as resolved.
super().log_error(format, *args)
return


class Key:
def __init__(self, *, id: str, secret: str, user_name: str):
self.id = id
Expand Down Expand Up @@ -769,22 +801,32 @@ def __call__(self, environ, start_response):


def run_s3_server(port, key_file, cert_file):
verbose = strtobool("ARCTICDB_MOTO_VERBOSE")
Comment thread
G-D-Petrov marked this conversation as resolved.
Outdated
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude is right about this one, strtobool only converts to true/false but does not read the env. So you'd have to os.environ.get first

_configure_moto_server_logging(verbose)
Comment thread
G-D-Petrov marked this conversation as resolved.
_suppress_moto_server_stdio(verbose)
request_handler = None if verbose else _QuietMotoRequestHandler
werkzeug.run_simple(
"0.0.0.0",
port,
HostDispatcherApplication(create_backend_app),
threaded=True,
ssl_context=(cert_file, key_file) if cert_file and key_file else None,
request_handler=request_handler,
)


def run_gcp_server(port, key_file, cert_file):
verbose = strtobool("ARCTICDB_MOTO_VERBOSE")
Comment thread
G-D-Petrov marked this conversation as resolved.
Outdated
_configure_moto_server_logging(verbose)
_suppress_moto_server_stdio(verbose)
request_handler = None if verbose else _QuietMotoRequestHandler
werkzeug.run_simple(
"0.0.0.0",
port,
GcpHostDispatcherApplication(create_backend_app),
threaded=True,
ssl_context=(cert_file, key_file) if cert_file and key_file else None,
request_handler=request_handler,
)


Expand Down
Loading