mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 05:32:30 +08:00
Remove URL credentials (httpx integration) (#2020)
* Remove URL credentials (httpx) * Add CHANGELOG
This commit is contained in:
@ -22,6 +22,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Fixed
|
||||
|
||||
- `opentelemetry-instrumentation-httpx` Remove URL credentials
|
||||
([#2020](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/2020))
|
||||
- `opentelemetry-instrumentation-urllib`/`opentelemetry-instrumentation-urllib3` Fix metric descriptions to match semantic conventions
|
||||
([#1959](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1959))
|
||||
|
||||
|
@ -28,6 +28,7 @@ dependencies = [
|
||||
"opentelemetry-api ~= 1.12",
|
||||
"opentelemetry-instrumentation == 0.44b0.dev",
|
||||
"opentelemetry-semantic-conventions == 0.44b0.dev",
|
||||
"opentelemetry-util-http == 0.44b0.dev",
|
||||
]
|
||||
|
||||
[project.optional-dependencies]
|
||||
|
@ -206,6 +206,7 @@ from opentelemetry.semconv.trace import SpanAttributes
|
||||
from opentelemetry.trace import SpanKind, TracerProvider, get_tracer
|
||||
from opentelemetry.trace.span import Span
|
||||
from opentelemetry.trace.status import Status
|
||||
from opentelemetry.util.http import remove_url_credentials
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
@ -269,7 +270,7 @@ def _extract_parameters(args, kwargs):
|
||||
# In httpx >= 0.20.0, handle_request receives a Request object
|
||||
request: httpx.Request = args[0]
|
||||
method = request.method.encode()
|
||||
url = request.url
|
||||
url = remove_url_credentials(str(request.url))
|
||||
headers = request.headers
|
||||
stream = request.stream
|
||||
extensions = request.extensions
|
||||
|
@ -604,6 +604,13 @@ class TestSyncIntegration(BaseTestCases.BaseManualTest):
|
||||
return self.client.request(method, url, headers=headers)
|
||||
return client.request(method, url, headers=headers)
|
||||
|
||||
def test_credential_removal(self):
|
||||
new_url = "http://username:password@mock/status/200"
|
||||
self.perform_request(new_url)
|
||||
span = self.assert_span()
|
||||
|
||||
self.assertEqual(span.attributes[SpanAttributes.HTTP_URL], self.URL)
|
||||
|
||||
|
||||
class TestAsyncIntegration(BaseTestCases.BaseManualTest):
|
||||
response_hook = staticmethod(_async_response_hook)
|
||||
@ -664,6 +671,13 @@ class TestAsyncIntegration(BaseTestCases.BaseManualTest):
|
||||
)
|
||||
self.assert_span(num_spans=2)
|
||||
|
||||
def test_credential_removal(self):
|
||||
new_url = "http://username:password@mock/status/200"
|
||||
self.perform_request(new_url)
|
||||
span = self.assert_span()
|
||||
|
||||
self.assertEqual(span.attributes[SpanAttributes.HTTP_URL], self.URL)
|
||||
|
||||
|
||||
class TestSyncInstrumentationIntegration(BaseTestCases.BaseInstrumentorTest):
|
||||
def create_client(
|
||||
|
2
tox.ini
2
tox.ini
@ -386,7 +386,7 @@ commands_pre =
|
||||
|
||||
grpc: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-grpc[test]
|
||||
|
||||
falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
|
||||
falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid,tornado,starlette,fastapi,aiohttp,asgi,httpx{18,21},requests,urllib,urllib3v{1,2},wsgi: pip install {toxinidir}/util/opentelemetry-util-http[test]
|
||||
wsgi,falcon{1,2,3},flask{213,220},django{1,2,3,4},pyramid: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-wsgi[test]
|
||||
asgi,django{3,4},starlette,fastapi: pip install {toxinidir}/instrumentation/opentelemetry-instrumentation-asgi[test]
|
||||
|
||||
|
Reference in New Issue
Block a user