1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
from dataclasses import asdict, dataclass
from typing import Optional, List
from sentry_sdk.tracing_utils import _should_be_included
import pytest
def id_function(val):
# type: (object) -> str
if isinstance(val, ShouldBeIncludedTestCase):
return val.id
@dataclass(frozen=True)
class ShouldBeIncludedTestCase:
id: str
is_sentry_sdk_frame: bool
namespace: Optional[str] = None
in_app_include: Optional[List[str]] = None
in_app_exclude: Optional[List[str]] = None
abs_path: Optional[str] = None
project_root: Optional[str] = None
@pytest.mark.parametrize(
"test_case, expected",
[
(
ShouldBeIncludedTestCase(
id="Frame from Sentry SDK",
is_sentry_sdk_frame=True,
),
False,
),
(
ShouldBeIncludedTestCase(
id="Frame from Django installed in virtualenv inside project root",
is_sentry_sdk_frame=False,
abs_path="/home/username/some_project/.venv/lib/python3.12/site-packages/django/db/models/sql/compiler",
project_root="/home/username/some_project",
namespace="django.db.models.sql.compiler",
in_app_include=["django"],
),
True,
),
(
ShouldBeIncludedTestCase(
id="Frame from project",
is_sentry_sdk_frame=False,
abs_path="/home/username/some_project/some_project/__init__.py",
project_root="/home/username/some_project",
namespace="some_project",
),
True,
),
(
ShouldBeIncludedTestCase(
id="Frame from project module in `in_app_exclude`",
is_sentry_sdk_frame=False,
abs_path="/home/username/some_project/some_project/exclude_me/some_module.py",
project_root="/home/username/some_project",
namespace="some_project.exclude_me.some_module",
in_app_exclude=["some_project.exclude_me"],
),
False,
),
(
ShouldBeIncludedTestCase(
id="Frame from system-wide installed Django",
is_sentry_sdk_frame=False,
abs_path="/usr/lib/python3.12/site-packages/django/db/models/sql/compiler",
project_root="/home/username/some_project",
namespace="django.db.models.sql.compiler",
),
False,
),
(
ShouldBeIncludedTestCase(
id="Frame from system-wide installed Django with `django` in `in_app_include`",
is_sentry_sdk_frame=False,
abs_path="/usr/lib/python3.12/site-packages/django/db/models/sql/compiler",
project_root="/home/username/some_project",
namespace="django.db.models.sql.compiler",
in_app_include=["django"],
),
True,
),
],
ids=id_function,
)
def test_should_be_included(test_case, expected):
# type: (ShouldBeIncludedTestCase, bool) -> None
"""Checking logic, see: https://github.com/getsentry/sentry-python/issues/3312"""
kwargs = asdict(test_case)
kwargs.pop("id")
assert _should_be_included(**kwargs) == expected
|