From 02b36564263fb39166c4ed8307407929fd5827bf Mon Sep 17 00:00:00 2001 From: Benjamin Wohlwend Date: Wed, 9 Jun 2021 16:29:42 +0200 Subject: [PATCH] make sure Starlette's make_apm_client works without providing a config dict closes #1160 --- elasticapm/contrib/starlette/__init__.py | 4 +++- tests/contrib/asyncio/starlette_tests.py | 17 ++++++++++++++++- tests/fixtures.py | 4 ++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/elasticapm/contrib/starlette/__init__.py b/elasticapm/contrib/starlette/__init__.py index 1fc8478fa..c6678e647 100644 --- a/elasticapm/contrib/starlette/__init__.py +++ b/elasticapm/contrib/starlette/__init__.py @@ -31,6 +31,8 @@ from __future__ import absolute_import +from typing import Dict, Optional + import starlette from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint from starlette.requests import Request @@ -50,7 +52,7 @@ logger = get_logger("elasticapm.errors.client") -def make_apm_client(config: dict, client_cls=Client, **defaults) -> Client: +def make_apm_client(config: Optional[Dict] = None, client_cls=Client, **defaults) -> Client: """Builds ElasticAPM client. Args: diff --git a/tests/contrib/asyncio/starlette_tests.py b/tests/contrib/asyncio/starlette_tests.py index a93b1e428..00c45d318 100644 --- a/tests/contrib/asyncio/starlette_tests.py +++ b/tests/contrib/asyncio/starlette_tests.py @@ -30,6 +30,8 @@ import pytest # isort:skip +from tests.fixtures import TempStoreClient + starlette = pytest.importorskip("starlette") # isort:skip import types @@ -43,7 +45,7 @@ import elasticapm from elasticapm import async_capture_span from elasticapm.conf import constants -from elasticapm.contrib.starlette import ElasticAPM +from elasticapm.contrib.starlette import ElasticAPM, make_apm_client from elasticapm.utils import wrapt from elasticapm.utils.disttracing import TraceParent @@ -367,3 +369,16 @@ def test_capture_body_error(app, elasticapm_client): client = TestClient(app) with pytest.raises(ValueError): response = client.post("/raise-exception", data="[0, 1]") + + +def test_make_client_with_config(): + c = make_apm_client(config={"SERVICE_NAME": "foo"}, client_cls=TempStoreClient) + c.close() + assert c.config.service_name == "foo" + + +def test_make_client_without_config(): + with mock.patch.dict("os.environ", {"ELASTIC_APM_SERVICE_NAME": "foo"}): + c = make_apm_client(client_cls=TempStoreClient) + c.close() + assert c.config.service_name == "foo" diff --git a/tests/fixtures.py b/tests/fixtures.py index 82456a5da..df0de8972 100644 --- a/tests/fixtures.py +++ b/tests/fixtures.py @@ -331,9 +331,9 @@ def get_config(self, current_version=None, keys=None): class TempStoreClient(Client): - def __init__(self, **inline): + def __init__(self, config=None, **inline): inline.setdefault("transport_class", "tests.fixtures.DummyTransport") - super(TempStoreClient, self).__init__(**inline) + super(TempStoreClient, self).__init__(config, **inline) @property def events(self):