Skip to content

Commit

Permalink
pyramid: Fix which package is the correct caller in _traced_init. (#830)
Browse files Browse the repository at this point in the history
  • Loading branch information
kenrobbins authored Apr 14, 2022
1 parent 9d14265 commit 4ad7592
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 5 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased](https://github.com/open-telemetry/opentelemetry-python/compare/v1.10.0-0.29b0...HEAD)

### Fixed
- `opentelemetry-instrumentation-pyramid` Fixed which package is the correct caller in _traced_init.
([#830](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/830))
- `opentelemetry-instrumentation-tornado` Fix Tornado errors mapping to 500
([#1048])(https://github.com/open-telemetry/opentelemetry-python-contrib/pull/1048)
- `opentelemetry-instrumentation-urllib` make span attributes available to sampler
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@
API
---
"""

import platform
from typing import Collection

from pyramid.config import Configurator
Expand All @@ -166,6 +166,11 @@
# from importing an unused symbol.
trace_tween_factory # pylint: disable=pointless-statement

if platform.python_implementation() == "PyPy":
CALLER_LEVELS = 3
else:
CALLER_LEVELS = 2


def _traced_init(wrapped, instance, args, kwargs):
settings = kwargs.get("settings", {})
Expand All @@ -185,10 +190,12 @@ def _traced_init(wrapped, instance, args, kwargs):
# to find the calling package. So if we let the original `__init__`
# function call it, our wrapper will mess things up.
if not kwargs.get("package", None):
# Get the package for the third frame up from this one.
# Default is `level=2` which will give us the package from `wrapt`
# instead of the desired package (the caller)
kwargs["package"] = caller_package(level=3)
# Get the package for the 2nd frame up from this one.
# Default is `level=2` one level down (in Configurator.__init__).
# We want the 3rd level from _there_. Since we are already 1 level above,
# we need the 2nd level up from here, which will give us the package from
# `wrapt` instead of the desired package (the caller)
kwargs["package"] = caller_package(level=CALLER_LEVELS)

wrapped(*args, **kwargs)
instance.include("opentelemetry.instrumentation.pyramid.callbacks")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,12 @@ def test_tween_list(self):
span_list = self.memory_exporter.get_finished_spans()
self.assertEqual(len(span_list), 1)

def test_registry_name_is_this_module(self):
config = Configurator()
self.assertEqual(
config.registry.__name__, __name__.rsplit(".", maxsplit=1)[0]
)


class TestWrappedWithOtherFramework(
InstrumentationTest, TestBase, WsgiTestBase
Expand Down

0 comments on commit 4ad7592

Please sign in to comment.