mirror of
https://github.com/open-telemetry/opentelemetry-python-contrib.git
synced 2025-07-30 05:32:30 +08:00
Fix UnboundLocalError local variable 'start' referenced before assignment (#1889)
Co-authored-by: Pablo Collins <pablo.collins@gmail.com>
This commit is contained in:
@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- `opentelemetry-instrumentation-asgi` Fix UnboundLocalError local variable 'start' referenced before assignment
|
||||||
|
([#1889](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1889))
|
||||||
|
|
||||||
## Version 1.19.0/0.40b0 (2023-07-13)
|
## Version 1.19.0/0.40b0 (2023-07-13)
|
||||||
- `opentelemetry-instrumentation-asgi` Add `http.server.request.size` metric
|
- `opentelemetry-instrumentation-asgi` Add `http.server.request.size` metric
|
||||||
([#1867](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1867))
|
([#1867](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1867))
|
||||||
|
@ -538,6 +538,7 @@ class OpenTelemetryMiddleware:
|
|||||||
receive: An awaitable callable yielding dictionaries
|
receive: An awaitable callable yielding dictionaries
|
||||||
send: An awaitable callable taking a single dictionary as argument.
|
send: An awaitable callable taking a single dictionary as argument.
|
||||||
"""
|
"""
|
||||||
|
start = default_timer()
|
||||||
if scope["type"] not in ("http", "websocket"):
|
if scope["type"] not in ("http", "websocket"):
|
||||||
return await self.app(scope, receive, send)
|
return await self.app(scope, receive, send)
|
||||||
|
|
||||||
@ -591,7 +592,6 @@ class OpenTelemetryMiddleware:
|
|||||||
send,
|
send,
|
||||||
duration_attrs,
|
duration_attrs,
|
||||||
)
|
)
|
||||||
start = default_timer()
|
|
||||||
|
|
||||||
await self.app(scope, otel_receive, otel_send)
|
await self.app(scope, otel_receive, otel_send)
|
||||||
finally:
|
finally:
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
# pylint: disable=too-many-lines
|
# pylint: disable=too-many-lines
|
||||||
|
|
||||||
|
import asyncio
|
||||||
import sys
|
import sys
|
||||||
import unittest
|
import unittest
|
||||||
from timeit import default_timer
|
from timeit import default_timer
|
||||||
@ -796,5 +797,38 @@ class TestWrappedApplication(AsgiTestBase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class TestAsgiApplicationRaisingError(AsgiTestBase):
|
||||||
|
def tearDown(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
@mock.patch(
|
||||||
|
"opentelemetry.instrumentation.asgi.collect_custom_request_headers_attributes",
|
||||||
|
side_effect=ValueError("whatever"),
|
||||||
|
)
|
||||||
|
def test_asgi_issue_1883(
|
||||||
|
self, mock_collect_custom_request_headers_attributes
|
||||||
|
):
|
||||||
|
"""
|
||||||
|
Test that exception UnboundLocalError local variable 'start' referenced before assignment is not raised
|
||||||
|
See https://github.com/open-telemetry/opentelemetry-python-contrib/issues/1883
|
||||||
|
"""
|
||||||
|
app = otel_asgi.OpenTelemetryMiddleware(simple_asgi)
|
||||||
|
self.seed_app(app)
|
||||||
|
self.send_default_request()
|
||||||
|
try:
|
||||||
|
asyncio.get_event_loop().run_until_complete(
|
||||||
|
self.communicator.stop()
|
||||||
|
)
|
||||||
|
except ValueError as exc_info:
|
||||||
|
self.assertEqual(exc_info.args[0], "whatever")
|
||||||
|
except Exception as exc_info: # pylint: disable=W0703
|
||||||
|
self.fail(
|
||||||
|
"expecting ValueError('whatever'), received instead: "
|
||||||
|
+ str(exc_info)
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
self.fail("expecting ValueError('whatever')")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Reference in New Issue
Block a user