Skip to content

feat(explorer): Expose export-indexes via public org seer RPC#113227

Merged
shruthilayaj merged 9 commits intomasterfrom
shruthi/feat/export-explorer-indexes
Apr 17, 2026
Merged

feat(explorer): Expose export-indexes via public org seer RPC#113227
shruthilayaj merged 9 commits intomasterfrom
shruthi/feat/export-explorer-indexes

Conversation

@shruthilayaj
Copy link
Copy Markdown
Member

@shruthilayaj shruthilayaj commented Apr 16, 2026

Companion to https://github.com/getsentry/seer/pull/5832 (Seer-side PR).

Adds the Sentry side of the explorer index export feature for eval DB seeding.

Changes:

  • signed_seer_api.py: Add ExplorerExportIndexesRequest TypedDict and make_explorer_export_indexes_request(). viewer_context is a required (non-optional) parameter — callers must always supply it so Seer's org authorization check is guaranteed to pass.
  • seer/explorer/snapshot.py: New export_explorer_indexes(org_id) function that proxies to Seer's /v1/automation/explorer/export-indexes endpoint.
  • organization_seer_rpc.py: Register export_explorer_indexes in public_org_seer_method_registry via map_org_id_param, exposing it at /api/0/organizations/{org}/seer-rpc/export_explorer_indexes/.

How org scoping works:
The organization_id is always injected from the validated URL org — any caller-supplied org_id in args is stripped before dispatch. map_org_id_param maps it to org_id before calling the function, which passes it in both the request body and as the viewer context. Seer enforces that ctx.organization_id == data.org_id server-side.

Usage (from a Seer eval script):

POST /api/0/organizations/{org}/seer-rpc/export_explorer_indexes/
Authorization: Bearer <token>
{"args": {}}

Add ExplorerExportIndexesRequest TypedDict and
make_explorer_export_indexes_request() to signed_seer_api.py, with
viewer_context as a required parameter so org scoping is always
enforced by the Seer endpoint.

Add export_explorer_indexes() in sentry/seer/explorer/snapshot.py that
proxies to Seer's /v1/automation/explorer/export-indexes endpoint and
register it in public_org_seer_method_registry so it's accessible via
/api/0/organizations/{org}/seer-rpc/export_explorer_indexes/.

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions github-actions bot added the Scope: Backend Automatically applied to PRs that change backend components label Apr 16, 2026
@github-actions
Copy link
Copy Markdown
Contributor

Backend Test Failures

Failures on 68975eb in this run:

tests/sentry/seer/endpoints/test_organization_seer_rpc.py::TestOrganizationSeerRpcEndpoint::test_export_explorer_indexeslog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/sentry/seer/endpoints/test_organization_seer_rpc.py:185: in test_export_explorer_indexes
    assert response.status_code == 200
E   assert 500 == 200
E    +  where 500 = <Response status_code=500, "application/json">.status_code
tests/sentry/seer/endpoints/test_organization_seer_rpc.py::TestOrganizationSeerRpcEndpoint::test_export_explorer_indexes_ignores_caller_supplied_org_idlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/sentry/seer/endpoints/test_organization_seer_rpc.py:203: in test_export_explorer_indexes_ignores_caller_supplied_org_id
    assert response.status_code == 200
E   assert 500 == 200
E    +  where 500 = <Response status_code=500, "application/json">.status_code

Co-Authored-By: Claude <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

Backend Test Failures

Failures on 7cf9abd in this run:

tests/sentry/seer/endpoints/test_organization_seer_rpc.py::TestOrganizationSeerRpcEndpoint::test_export_explorer_indexeslog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/sentry/seer/endpoints/test_organization_seer_rpc.py:185: in test_export_explorer_indexes
    assert response.status_code == 200
E   assert 500 == 200
E    +  where 500 = <Response status_code=500, "application/json">.status_code
tests/sentry/seer/endpoints/test_organization_seer_rpc.py::TestOrganizationSeerRpcEndpoint::test_export_explorer_indexes_ignores_caller_supplied_org_idlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
tests/sentry/seer/endpoints/test_organization_seer_rpc.py:203: in test_export_explorer_indexes_ignores_caller_supplied_org_id
    assert response.status_code == 200
E   assert 500 == 200
E    +  where 500 = <Response status_code=500, "application/json">.status_code

@shruthilayaj shruthilayaj marked this pull request as ready for review April 17, 2026 14:32
@shruthilayaj shruthilayaj requested a review from a team as a code owner April 17, 2026 14:32
Comment on lines +26 to +27
if response.status >= 400:
raise SeerApiError("Seer export-indexes request failed", response.status)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: SeerApiError from export_explorer_indexes is not handled, causing it to be caught by a generic handler and returned as a ValidationError (HTTP 400).
Severity: MEDIUM

Suggested Fix

Explicitly catch the SeerApiError in the OrganizationSeerRpcEndpoint.post() method and return a more appropriate HTTP status and error message, similar to how it is handled in other Seer-related endpoints.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: src/sentry/seer/explorer/snapshot.py#L26-L27

Potential issue: The `export_explorer_indexes` function raises a `SeerApiError` if the
Seer service returns a 4xx or 5xx status. However, the calling
`OrganizationSeerRpcEndpoint.post()` method does not explicitly handle this exception
type. As a result, the exception is caught by a generic `except Exception` block, which
converts it into a `ValidationError`, returning an HTTP 400 status to the client. This
masks the original error from Seer (e.g., 401, 404, 500), hindering proper client-side
error handling and making debugging difficult. Other similar endpoints explicitly catch
`SeerApiError`, suggesting this was an oversight.

Did we get this right? 👍 / 👎 to inform future reviews.

Comment thread tests/sentry/seer/endpoints/test_organization_seer_rpc.py Outdated
"get_comparative_attribute_distributions": get_comparative_attribute_distributions,
#
# Explorer eval tooling
"export_explorer_indexes": map_org_id_param(export_explorer_indexes),
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: The RPC endpoint's generic exception handler converts upstream SeerApiError exceptions, including 5xx server errors, into a client-side ValidationError (HTTP 400), masking the original error's nature.
Severity: MEDIUM

Suggested Fix

In organization_seer_rpc.py, add a specific except block for SeerApiError before the generic Exception handler. This new block should inspect the status code within the SeerApiError. If it's a 5xx error, raise an appropriate exception that maps to a 5xx HTTP status. If it's a 4xx error, it can be converted to a ValidationError or ParseError as appropriate. This will ensure that upstream server errors are correctly propagated to the client.

Prompt for AI Agent
Review the code at the location below. A potential bug has been identified by an AI
agent. Verify if this is a real issue. If it is, propose a fix; if not, explain why it's
not valid.

Location: src/sentry/seer/endpoints/organization_seer_rpc.py#L125

Potential issue: The RPC endpoint's generic exception handler incorrectly handles errors
from the upstream Seer service. Specifically, when the `export_explorer_indexes`
function raises a `SeerApiError` due to an upstream failure (e.g., a 5xx server error),
the exception is caught and converted into a `ValidationError`. This results in the RPC
endpoint returning an HTTP 400 (Bad Request) to the original caller, incorrectly
signaling a client-side error instead of propagating the upstream server-side failure.
This masks the true nature of the problem, complicates debugging, and leads to
inconsistent error handling between test and production environments.

…ule-level name

The registry holds a map_org_id_param closure that captured the original
export_explorer_indexes function object at import time. Patching the
module-level name in the importer had no effect on the closure, so the
real function ran and the mock was never invoked.

Patch sentry.seer.explorer.snapshot.make_explorer_export_indexes_request
instead, which is resolved at call time inside export_explorer_indexes.
Update mock setup to return a response-like object with .status and
.json() matching what export_explorer_indexes actually calls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Apr 17, 2026

Backend Test Failures

Failures on 4a90b58 in this run:

tests/sentry/autofix/test_webhooks.py::AutofixPrWebhookTest::test_closedlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (53 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_console_platform_enabledlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_console_platform_not_enabledlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/autofix/test_webhooks.py::AutofixPrWebhookTest::test_no_runlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (53 more lines)
tests/sentry/autofix/test_webhooks.py::AutofixPrWebhookTest::test_no_settings_github_app_id_setlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (53 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_generated_slug_not_entirely_numericlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/deletions/test_alert_rule.py::DeleteAlertRuleTest::test_simplelog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (49 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_invalid_numeric_sluglog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/deletions/test_group.py::DeleteGroupTest::test_delete_groups_delete_grouping_records_by_hashlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_project_autofix_tuning_not_set_if_org_option_not_set_in_dblog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_similarity_project_option_invalidlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/deletions/test_group.py::DeleteGroupTest::test_delete_project_group_hashes_all_including_orphanslog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/core/endpoints/test_team_projects.py::TeamProjectsCreateTest::test_without_default_rules_disable_member_project_creationlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (55 more lines)
tests/sentry/deletions/test_group.py::DeleteGroupTest::test_grouphistory_relationlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/event_manager/grouping/test_seer_grouping.py::SeerEventManagerGroupingTest::test_bypasses_seer_if_group_foundlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/event_manager/test_severity.py::TestGetEventSeverity::test_unusable_event_titlelog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/event_manager/grouping/test_seer_grouping.py::SeerEventManagerGroupingTest::test_calls_seer_if_no_group_foundlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/event_manager/test_severity.py::TestGetEventSeverity::test_uses_exceptionlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/event_manager/grouping/test_seer_grouping.py::StoredSeerMetadataTest::test_event_not_sent_to_seerlog
[gw0] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send_signal()
src/sentry/hybridcloud/models/outbox.py:474: in send_signal
    process_control_outbox.send(
.venv/lib/python3.13/site-packages/django/dispatch/dispatcher.py:189: in send
    response = receiver(signal=self, sender=sender, **named)
src/sentry/hybridcloud/outbox/category.py:118: in receiver
    maybe_instance.handle_async_replication(
src/sentry/models/organizationslugreservation.py:79: in handle_async_replication
    cell_replica_service.upsert_replicated_org_slug_reservation(
src/sentry/hybridcloud/rpc/service.py:355: in remote_method
    return dispatch_remote_call(
src/sentry/hybridcloud/rpc/service.py:493: in dispatch_remote_call
    return remote_silo_call.dispatch(use_test_client)
src/sentry/hybridcloud/rpc/service.py:528: in dispatch
    serial_response = self._send_to_remote_silo(use_test_client)
src/sentry/hybridcloud/rpc/service.py:585: in _send_to_remote_silo
    signature = generate_request_signature(self.path, data)
src/sentry/hybridcloud/rpc/service.py:522: in path
    return django.urls.reverse(
.venv/lib/python3.13/site-packages/django/urls/base.py:98: in reverse
    resolved_url = resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:749: in _reverse_with_prefix
    self._populate()
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:548: in _populate
    for url_pattern in reversed(self.url_patterns):
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:718: in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
.venv/lib/python3.13/site-packages/django/utils/functional.py:47: in __get__
    res = instance.__dict__[self.name] = self.func(instance)
.venv/lib/python3.13/site-packages/django/urls/resolvers.py:711: in urlconf_module
    return import_module(self.urlconf_name)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/conf/urls.py:3: in <module>
    from sentry.web.urls import urlpatterns
src/sentry/web/urls.py:178: in <module>
    include("sentry.api.urls"),
.venv/lib/python3.13/site-packages/django/urls/conf.py:39: in include
    urlconf_module = import_module(urlconf_module)
/opt/hostedtoolcache/Python/3.13.1/x64/lib/python3.13/importlib/__init__.py:88: in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
src/sentry/api/urls.py:553: in <module>
    from sentry.seer.endpoints.organization_seer_rpc import OrganizationSeerRpcEndpoint
src/sentry/seer/endpoints/organization_seer_rpc.py:53: in <module>
    from sentry.seer.explorer.snapshot_indexes import export_explorer_indexes
E   ModuleNotFoundError: No module named 'sentry.seer.explorer.snapshot_indexes'
... (63 more lines)
tests/sentry/event_manager/test_severity.py::TestEventManagerSeverity::test_flag_offlog
[gw1] linux -- Python 3.13.1 /home/runner/work/sentry/sentry/.venv/bin/python3
src/sentry/hybridcloud/models/outbox.py:313: in process
    coalesced.send

... (truncated due to GitHub comment size limit)

Comment thread src/sentry/seer/explorer/snapshot_indexes.py Outdated
Co-authored-by: sentry-warden[bot] <258096371+sentry-warden[bot]@users.noreply.github.com>
Copy link
Copy Markdown
Contributor

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit a54eb70. Configure here.


try:
return response.json()
except JSONDecodeError:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wrong JSONDecodeError type caught for urllib3 response

Medium Severity

The except JSONDecodeError block will never execute. JSONDecodeError is imported from sentry.utils.json, which is simplejson.JSONDecodeError. However, response.json() on a urllib3 BaseHTTPResponse uses the standard library's json.loads() internally, which raises json.JSONDecodeError — a completely different class that is not a subclass of simplejson.JSONDecodeError. If Seer returns invalid JSON, the exception propagates uncaught past this handler, bypassing the logger.exception call and the descriptive SeerApiError. The existing codebase pattern (e.g. in anomaly_detection/delete_rule.py) avoids this by manually decoding response.data and using sentry.utils.json.loads().

Additional Locations (1)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit a54eb70. Configure here.

@shruthilayaj shruthilayaj merged commit a851e32 into master Apr 17, 2026
58 checks passed
@shruthilayaj shruthilayaj deleted the shruthi/feat/export-explorer-indexes branch April 17, 2026 20:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Scope: Backend Automatically applied to PRs that change backend components

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants