Created
March 9, 2023 21:07
-
-
Save evanpurkhiser/be1a84e7d869480d188ec7ff71f18f19 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| commit 66a8ed628e9bb6958b5a5aa2d362c380964caa03 | |
| Author: Evan Purkhiser <[email protected]> | |
| Date: Wed Mar 8 17:05:15 2023 -0800 | |
| ref(py): Group URLs into blocks for easier readability | |
| diff --git a/src/sentry/api/urls.py b/src/sentry/api/urls.py | |
| index 70b0edbaa3..89a17dd8aa 100644 | |
| --- a/src/sentry/api/urls.py | |
| +++ b/src/sentry/api/urls.py | |
| @@ -621,54 +621,1804 @@ GROUP_URLS = [ | |
| ), | |
| ] | |
| +AUTH_URLS = [ | |
| + url( | |
| + r"^$", | |
| + AuthIndexEndpoint.as_view(), | |
| + name="sentry-api-0-auth", | |
| + ), | |
| + url( | |
| + r"^config/$", | |
| + AuthConfigEndpoint.as_view(), | |
| + name="sentry-api-0-auth-config", | |
| + ), | |
| + url( | |
| + r"^login/$", | |
| + AuthLoginEndpoint.as_view(), | |
| + name="sentry-api-0-auth-login", | |
| + ), | |
| +] | |
| + | |
| +BROADCAST_URLS = [ | |
| + url( | |
| + r"^$", | |
| + BroadcastIndexEndpoint.as_view(), | |
| + name="sentry-api-0-broadcast-index", | |
| + ), | |
| + url( | |
| + r"^(?P<broadcast_id>[^\/]+)/$", | |
| + BroadcastDetailsEndpoint.as_view(), | |
| + ), | |
| +] | |
| + | |
| +RELAY_URLS = [ | |
| + url( | |
| + r"^$", | |
| + RelayIndexEndpoint.as_view(), | |
| + name="sentry-api-0-relays-index", | |
| + ), | |
| + url( | |
| + r"^register/challenge/$", | |
| + RelayRegisterChallengeEndpoint.as_view(), | |
| + name="sentry-api-0-relay-register-challenge", | |
| + ), | |
| + url( | |
| + r"^register/response/$", | |
| + RelayRegisterResponseEndpoint.as_view(), | |
| + name="sentry-api-0-relay-register-response", | |
| + ), | |
| + url( | |
| + r"^projectconfigs/$", | |
| + RelayProjectConfigsEndpoint.as_view(), | |
| + name="sentry-api-0-relay-projectconfigs", | |
| + ), | |
| + url( | |
| + r"^projectids/$", | |
| + RelayProjectIdsEndpoint.as_view(), | |
| + name="sentry-api-0-relay-projectids", | |
| + ), | |
| + url( | |
| + r"^publickeys/$", | |
| + RelayPublicKeysEndpoint.as_view(), | |
| + name="sentry-api-0-relay-publickeys", | |
| + ), | |
| + url( | |
| + r"^live/$", | |
| + RelayHealthCheck.as_view(), | |
| + name="sentry-api-0-relays-healthcheck", | |
| + ), | |
| + url( | |
| + r"^(?P<relay_id>[^\/]+)/$", | |
| + RelayDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-relays-details", | |
| + ), | |
| +] | |
| + | |
| +USER_URLS = [ | |
| + url( | |
| + r"^$", | |
| + UserIndexEndpoint.as_view(), | |
| + name="sentry-api-0-user-index", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/$", | |
| + UserDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/avatar/$", | |
| + UserAvatarEndpoint.as_view(), | |
| + name="sentry-api-0-user-avatar", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/authenticators/$", | |
| + UserAuthenticatorIndexEndpoint.as_view(), | |
| + name="sentry-api-0-user-authenticator-index", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/authenticators/(?P<interface_id>[^\/]+)/enroll/$", | |
| + UserAuthenticatorEnrollEndpoint.as_view(), | |
| + name="sentry-api-0-user-authenticator-enroll", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/(?P<interface_device_id>[^\/]+)/$", | |
| + UserAuthenticatorDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-authenticator-device-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/$", | |
| + UserAuthenticatorDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-authenticator-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/emails/$", | |
| + UserEmailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-emails", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/emails/confirm/$", | |
| + UserEmailsConfirmEndpoint.as_view(), | |
| + name="sentry-api-0-user-emails-confirm", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/identities/(?P<identity_id>[^\/]+)/$", | |
| + UserIdentityDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-identity-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/identities/$", | |
| + UserIdentityEndpoint.as_view(), | |
| + name="sentry-api-0-user-identity", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/ips/$", | |
| + UserIPsEndpoint.as_view(), | |
| + name="sentry-api-0-user-ips", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/organizations/$", | |
| + UserOrganizationsEndpoint.as_view(), | |
| + name="sentry-api-0-user-organizations", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/notification-settings/$", | |
| + UserNotificationSettingsDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-notification-settings", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/notifications/$", | |
| + UserNotificationDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-notifications", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/notifications/(?P<notification_type>[^\/]+)/$", | |
| + UserNotificationFineTuningEndpoint.as_view(), | |
| + name="sentry-api-0-user-notifications-fine-tuning", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/password/$", | |
| + UserPasswordEndpoint.as_view(), | |
| + name="sentry-api-0-user-password", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/permissions/$", | |
| + UserPermissionsEndpoint.as_view(), | |
| + name="sentry-api-0-user-permissions", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/permissions/config/$", | |
| + UserPermissionsConfigEndpoint.as_view(), | |
| + name="sentry-api-0-user-permissions-config", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/permissions/(?P<permission_name>[^\/]+)/$", | |
| + UserPermissionDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-permission-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/roles/$", | |
| + UserUserRolesEndpoint.as_view(), | |
| + name="sentry-api-0-user-userroles", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/roles/(?P<role_name>[^\/]+)/$", | |
| + UserUserRoleDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-userrole-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/social-identities/$", | |
| + UserSocialIdentitiesIndexEndpoint.as_view(), | |
| + name="sentry-api-0-user-social-identities-index", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/social-identities/(?P<identity_id>[^\/]+)/$", | |
| + UserSocialIdentityDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-social-identity-details", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/subscriptions/$", | |
| + UserSubscriptionsEndpoint.as_view(), | |
| + name="sentry-api-0-user-subscriptions", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/organization-integrations/$", | |
| + UserOrganizationIntegrationsEndpoint.as_view(), | |
| + name="sentry-api-0-user-organization-integrations", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/user-identities/$", | |
| + UserIdentityConfigEndpoint.as_view(), | |
| + name="sentry-api-0-user-identity-config", | |
| + ), | |
| + url( | |
| + r"^(?P<user_id>[^\/]+)/user-identities/(?P<category>[\w-]+)/(?P<identity_id>[^\/]+)/$", | |
| + UserIdentityConfigDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-user-identity-config-details", | |
| + ), | |
| +] | |
| + | |
| +USER_ROLE_URLS = [ | |
| + url( | |
| + r"^$", | |
| + UserRolesEndpoint.as_view(), | |
| + name="sentry-api-0-userroles", | |
| + ), | |
| + url( | |
| + r"^(?P<role_name>[^\/]+)/$", | |
| + UserRoleDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-userroles-details", | |
| + ), | |
| +] | |
| + | |
| +ORGANIZATION_URLS = [ | |
| + url( | |
| + r"^$", | |
| + OrganizationIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organizations", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/$", | |
| + OrganizationDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-details", | |
| + ), | |
| + # Alert Rules | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/alert-rules/available-actions/$", | |
| + OrganizationAlertRuleAvailableActionIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-alert-rule-available-actions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$", | |
| + OrganizationAlertRuleDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-alert-rule-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/alert-rules/$", | |
| + OrganizationAlertRuleIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-alert-rules", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/combined-rules/$", | |
| + OrganizationCombinedRuleIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-combined-rules", | |
| + ), | |
| + # Data Export | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/data-export/$", | |
| + DataExportEndpoint.as_view(), | |
| + name="sentry-api-0-organization-data-export", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/data-export/(?P<data_export_id>[^\/]+)/$", | |
| + DataExportDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-data-export-details", | |
| + ), | |
| + # Incidents | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/activity/$", | |
| + OrganizationIncidentActivityIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-activity", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/$", | |
| + OrganizationIncidentCommentIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-comments", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/(?P<activity_id>[^\/]+)/$", | |
| + OrganizationIncidentCommentDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-comment-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/$", | |
| + OrganizationIncidentDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/$", | |
| + OrganizationIncidentIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/seen/$", | |
| + OrganizationIncidentSeenEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-seen", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/subscriptions/$", | |
| + OrganizationIncidentSubscriptionIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-incident-subscription-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/chunk-upload/$", | |
| + ChunkUploadEndpoint.as_view(), | |
| + name="sentry-api-0-chunk-upload", | |
| + ), | |
| + # Code Path Mappings | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/code-mappings/$", | |
| + OrganizationCodeMappingsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-code-mappings", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/derive-code-mappings/$", | |
| + OrganizationDeriveCodeMappingsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-derive-code-mappings", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/$", | |
| + OrganizationCodeMappingDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-code-mapping-details", | |
| + ), | |
| + # Codeowners | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/codeowners/$", | |
| + OrganizationCodeMappingCodeOwnersEndpoint.as_view(), | |
| + name="sentry-api-0-organization-code-mapping-codeowners", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/codeowners-associations/$", | |
| + OrganizationCodeOwnersAssociationsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-codeowners-associations", | |
| + ), | |
| + # Discover | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/discover/homepage/$", | |
| + DiscoverHomepageQueryEndpoint.as_view(), | |
| + name="sentry-api-0-discover-homepage-query", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/discover/saved/$", | |
| + DiscoverSavedQueriesEndpoint.as_view(), | |
| + name="sentry-api-0-discover-saved-queries", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/$", | |
| + DiscoverSavedQueryDetailEndpoint.as_view(), | |
| + name="sentry-api-0-discover-saved-query-detail", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/visit/$", | |
| + DiscoverSavedQueryVisitEndpoint.as_view(), | |
| + name="sentry-api-0-discover-saved-query-visit", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/key-transactions/$", | |
| + KeyTransactionEndpoint.as_view(), | |
| + name="sentry-api-0-organization-key-transactions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/key-transactions-list/$", | |
| + KeyTransactionListEndpoint.as_view(), | |
| + name="sentry-api-0-organization-key-transactions-list", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/related-issues/$", | |
| + OrganizationEventsRelatedIssuesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-related-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/project-transaction-threshold-override/$", | |
| + ProjectTransactionThresholdOverrideEndpoint.as_view(), | |
| + name="sentry-api-0-organization-project-transaction-threshold-override", | |
| + ), | |
| + # Dashboards | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/dashboards/$", | |
| + OrganizationDashboardsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-dashboards", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/dashboards/widgets/$", | |
| + OrganizationDashboardWidgetDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-dashboard-widget-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/$", | |
| + OrganizationDashboardDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-dashboard-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/visit/$", | |
| + OrganizationDashboardVisitEndpoint.as_view(), | |
| + name="sentry-api-0-organization-dashboard-visit", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/shortids/(?P<short_id>[^\/]+)/$", | |
| + ShortIdLookupEndpoint.as_view(), | |
| + name="sentry-api-0-short-id-lookup", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/eventids/(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + EventIdLookupEndpoint.as_view(), | |
| + name="sentry-api-0-event-id-lookup", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/data-scrubbing-selector-suggestions/$", | |
| + DataScrubbingSelectorSuggestionsEndpoint.as_view(), | |
| + name="sentry-api-0-data-scrubbing-selector-suggestions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/slugs/$", | |
| + SlugsUpdateEndpoint.as_view(), | |
| + name="sentry-api-0-short-ids-update", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/access-requests/$", | |
| + OrganizationAccessRequestDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-access-requests", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/access-requests/(?P<request_id>\d+)/$", | |
| + OrganizationAccessRequestDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-access-request-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/activity/$", | |
| + OrganizationActivityEndpoint.as_view(), | |
| + name="sentry-api-0-organization-activity", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/api-keys/$", | |
| + OrganizationApiKeyIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-api-key-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/api-keys/(?P<api_key_id>[^\/]+)/$", | |
| + OrganizationApiKeyDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-api-key-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/audit-logs/$", | |
| + OrganizationAuditLogsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-audit-logs", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/auth-provider/$", | |
| + OrganizationAuthProviderDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-auth-provider", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/auth-providers/$", | |
| + OrganizationAuthProvidersEndpoint.as_view(), | |
| + name="sentry-api-0-organization-auth-providers", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/auth-provider/send-reminders/$", | |
| + OrganizationAuthProviderSendRemindersEndpoint.as_view(), | |
| + name="sentry-api-0-organization-auth-provider-send-reminders", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/avatar/$", | |
| + OrganizationAvatarEndpoint.as_view(), | |
| + name="sentry-api-0-organization-avatar", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/artifactbundle/assemble/$", | |
| + OrganizationArtifactBundleAssembleEndpoint.as_view(), | |
| + name="sentry-api-0-organization-artifactbundle-assemble", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/config/integrations/$", | |
| + OrganizationConfigIntegrationsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-config-integrations", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/config/repos/$", | |
| + OrganizationConfigRepositoriesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-config-repositories", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/sdk-updates/$", | |
| + OrganizationSdkUpdatesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-sdk-updates", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events/$", | |
| + OrganizationEventsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events/(?P<project_slug>[^\/]+):(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + OrganizationEventDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-event-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-stats/$", | |
| + OrganizationEventsStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-geo/$", | |
| + OrganizationEventsGeoEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-geo", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-facets/$", | |
| + OrganizationEventsFacetsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-facets", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-facets-performance/$", | |
| + OrganizationEventsFacetsPerformanceEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-facets-performance", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-facets-performance-histogram/$", | |
| + OrganizationEventsFacetsPerformanceHistogramEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-facets-performance-histogram", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-span-ops/$", | |
| + OrganizationEventsSpanOpsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-span-ops", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-spans/$", | |
| + OrganizationEventsSpansExamplesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-spans", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-spans-performance/$", | |
| + OrganizationEventsSpansPerformanceEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-spans-performance", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-spans-stats/$", | |
| + OrganizationEventsSpansStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-spans-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-meta/$", | |
| + OrganizationEventsMetaEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-meta", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/metrics-compatibility/$", | |
| + OrganizationMetricsCompatibility.as_view(), | |
| + name="sentry-api-0-organization-metrics-compatibility", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/metrics-compatibility-sums/$", | |
| + OrganizationMetricsCompatibilitySums.as_view(), | |
| + name="sentry-api-0-organization-metrics-compatibility-sums", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-histogram/$", | |
| + OrganizationEventsHistogramEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-histogram", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-spans-histogram/$", | |
| + OrganizationEventsSpansHistogramEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-spans-histogram", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-trends/$", | |
| + OrganizationEventsTrendsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-trends", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-vitals/$", | |
| + OrganizationEventsVitalsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-vitals", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-has-measurements/$", | |
| + OrganizationEventsHasMeasurementsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-has-measurements", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-trends-stats/$", | |
| + OrganizationEventsTrendsStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-trends-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-trace-light/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + OrganizationEventsTraceLightEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-trace-light", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-trace/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + OrganizationEventsTraceEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-trace", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/events-trace-meta/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + OrganizationEventsTraceMetaEndpoint.as_view(), | |
| + name="sentry-api-0-organization-events-trace-meta", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/measurements-meta/$", | |
| + OrganizationMeasurementsMeta.as_view(), | |
| + name="sentry-api-0-organization-measurements-meta", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/issues/$", | |
| + OrganizationGroupIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-group-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/issues-count/$", | |
| + OrganizationIssuesCountEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/issues-stats/$", | |
| + OrganizationGroupIndexStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-group-index-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?:issues|groups)/", | |
| + include(GROUP_URLS), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/integrations/$", | |
| + OrganizationIntegrationsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-integrations", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/$", | |
| + OrganizationIntegrationDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-integration-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/repos/$", | |
| + OrganizationIntegrationReposEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/issues/$", | |
| + OrganizationIntegrationIssuesEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/serverless-functions/$", | |
| + OrganizationIntegrationServerlessFunctionsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-integration-serverless-functions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/members/$", | |
| + OrganizationMemberIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-member-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/external-users/$", | |
| + ExternalUserEndpoint.as_view(), | |
| + name="sentry-api-0-organization-external-user", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/external-users/(?P<external_user_id>[^\/]+)/$", | |
| + ExternalUserDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-external-user-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/integration-requests/$", | |
| + OrganizationIntegrationRequestEndpoint.as_view(), | |
| + name="sentry-api-0-organization-integration-request", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/invite-requests/$", | |
| + OrganizationInviteRequestIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-invite-request-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/invite-requests/(?P<member_id>[^\/]+)/$", | |
| + OrganizationInviteRequestDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-invite-request-detail", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/monitors/$", | |
| + OrganizationMonitorsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-monitors", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/$", | |
| + OrganizationMonitorDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-monitor-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/stats/$", | |
| + OrganizationMonitorStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-monitor-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/checkins/(?P<checkin_id>[^\/]+)/attachment/$", | |
| + OrganizationMonitorCheckInAttachmentEndpoint.as_view(), | |
| + name="sentry-api-0-organization-monitor-check-in-attachment", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/pinned-searches/$", | |
| + OrganizationPinnedSearchEndpoint.as_view(), | |
| + name="sentry-api-0-organization-pinned-searches", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/recent-searches/$", | |
| + OrganizationRecentSearchesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-recent-searches", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/searches/(?P<search_id>[^\/]+)/$", | |
| + OrganizationSearchDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-search-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/searches/$", | |
| + OrganizationSearchesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-searches", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/sessions/$", | |
| + OrganizationSessionsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-sessions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/users/issues/$", | |
| + OrganizationUserIssuesSearchEndpoint.as_view(), | |
| + name="sentry-api-0-organization-issue-search", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$", | |
| + OrganizationIssuesResolvedInReleaseEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-resolved", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/$", | |
| + OrganizationMemberDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-member-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/unreleased-commits/$", | |
| + OrganizationMemberUnreleasedCommitsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-member-unreleased-commits", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$", | |
| + OrganizationMemberTeamDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-member-team-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/onboarding-continuation-email/$", | |
| + OrganizationOnboardingContinuationEmail.as_view(), | |
| + name="sentry-api-0-organization-onboarding-continuation-email", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/processingissues/$", | |
| + OrganizationProcessingIssuesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-processing-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/projects/$", | |
| + OrganizationProjectsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-projects", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/projects-count/$", | |
| + OrganizationProjectsCountEndpoint.as_view(), | |
| + name="sentry-api-0-organization-projects-count", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/sent-first-event/$", | |
| + OrganizationProjectsSentFirstEventEndpoint.as_view(), | |
| + name="sentry-api-0-organization-sent-first-event", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/repos/$", | |
| + OrganizationRepositoriesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-repositories", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/$", | |
| + OrganizationRepositoryDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-repository-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/commits/$", | |
| + OrganizationRepositoryCommitsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-repository-commits", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/plugins/$", | |
| + OrganizationPluginsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-plugins", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/plugins/configs/$", | |
| + OrganizationPluginsConfigsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-plugins-configs", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/$", | |
| + OrganizationReleasesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-releases", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/stats/$", | |
| + OrganizationReleasesStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-releases-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/$", | |
| + OrganizationReleaseDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/meta/$", | |
| + OrganizationReleaseMetaEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-meta", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/assemble/$", | |
| + OrganizationReleaseAssembleEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-assemble", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$", | |
| + OrganizationReleaseFilesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-files", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$", | |
| + OrganizationReleaseFileDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-file-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commitfiles/$", | |
| + CommitFileChangeEndpoint.as_view(), | |
| + name="sentry-api-0-release-commitfilechange", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/deploys/$", | |
| + ReleaseDeploysEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-deploys", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$", | |
| + OrganizationReleaseCommitsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-commits", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/previous-with-commits/$", | |
| + OrganizationReleasePreviousCommitsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-release-previous-with-commits", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/user-feedback/$", | |
| + OrganizationUserReportsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-user-feedback", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/user-teams/$", | |
| + OrganizationUserTeamsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-user-teams", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/users/$", | |
| + OrganizationUsersEndpoint.as_view(), | |
| + name="sentry-api-0-organization-users", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/users/(?P<user_id>[^\/]+)/$", | |
| + OrganizationUserDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-user-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/sentry-app-installations/$", | |
| + SentryAppInstallationsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-installations", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/sentry-apps/$", | |
| + OrganizationSentryAppsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-sentry-apps", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/stats/$", | |
| + OrganizationStatsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/stats_v2/$", | |
| + OrganizationStatsEndpointV2.as_view(), | |
| + name="sentry-api-0-organization-stats-v2", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/teams/$", | |
| + OrganizationTeamsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-teams", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/tags/$", | |
| + OrganizationTagsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-tags", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$", | |
| + OrganizationTagKeyValuesEndpoint.as_view(), | |
| + name="sentry-api-0-organization-tagkey-values", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/onboarding-tasks/$", | |
| + OrganizationOnboardingTaskEndpoint.as_view(), | |
| + name="sentry-api-0-organization-onboardingtasks", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/environments/$", | |
| + OrganizationEnvironmentsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-environments", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/broadcasts/$", | |
| + BroadcastIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-broadcasts", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/join-request/$", | |
| + OrganizationJoinRequestEndpoint.as_view(), | |
| + name="sentry-api-0-organization-join-request", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/transaction-anomaly-detection/$", | |
| + OrganizationTransactionAnomalyDetectionEndpoint.as_view(), | |
| + name="sentry-api-0-organization-transaction-anomaly-detection", | |
| + ), | |
| + # relay usage | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/relay_usage/$", | |
| + OrganizationRelayUsage.as_view(), | |
| + name="sentry-api-0-organization-relay-usage", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/replays/$", | |
| + OrganizationReplayIndexEndpoint.as_view(), | |
| + name="sentry-api-0-organization-replay-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/replay-count/$", | |
| + OrganizationReplayCountEndpoint.as_view(), | |
| + name="sentry-api-0-organization-replay-count", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/replays-events-meta/$", | |
| + OrganizationReplayEventsMetaEndpoint.as_view(), | |
| + name="sentry-api-0-organization-replay-events-meta", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/functions/$", | |
| + OrganizationSentryFunctionEndpoint.as_view(), | |
| + name="sentry-api-0-organization-sentry-functions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/functions/(?P<function_slug>[^\/]+)/$", | |
| + OrganizationSentryFunctionDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-sentry-function-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/request-project-creation/$", | |
| + OrganizationRequestProjectCreation.as_view(), | |
| + name="sentry-api-0-organization-request-project-creation", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/scim/v2/", | |
| + include( | |
| + [ | |
| + url( | |
| + r"^Users$", | |
| + OrganizationSCIMMemberIndex.as_view(), | |
| + name="sentry-api-0-organization-scim-member-index", | |
| + ), | |
| + url( | |
| + r"^Users/(?P<member_id>\d+)$", | |
| + OrganizationSCIMMemberDetails.as_view(), | |
| + name="sentry-api-0-organization-scim-member-details", | |
| + ), | |
| + url( | |
| + r"^Groups$", | |
| + OrganizationSCIMTeamIndex.as_view(), | |
| + name="sentry-api-0-organization-scim-team-index", | |
| + ), | |
| + url( | |
| + r"^Groups/(?P<team_id>\d+)$", | |
| + OrganizationSCIMTeamDetails.as_view(), | |
| + name="sentry-api-0-organization-scim-team-details", | |
| + ), | |
| + url( | |
| + r"^Schemas$", | |
| + OrganizationSCIMSchemaIndex.as_view(), | |
| + name="sentry-api-0-organization-scim-schema-index", | |
| + ), | |
| + ] | |
| + ), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/metrics/meta/$", | |
| + OrganizationMetricsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-metrics-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/metrics/meta/(?P<metric_name>[^/]+)/$", | |
| + OrganizationMetricDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-metric-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/metrics/data/$", | |
| + OrganizationMetricsDataEndpoint.as_view(), | |
| + name="sentry-api-0-organization-metrics-data", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/metrics/tags/$", | |
| + OrganizationMetricsTagsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-metrics-tags", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/metrics/tags/(?P<tag_name>[^/]+)/$", | |
| + OrganizationMetricsTagDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-organization-metrics-tag-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/profiling/", | |
| + include( | |
| + [ | |
| + url( | |
| + r"^filters/$", | |
| + OrganizationProfilingFiltersEndpoint.as_view(), | |
| + name="sentry-api-0-organization-profiling-filters", | |
| + ), | |
| + ], | |
| + ), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/client-state/$", | |
| + ClientStateListEndpoint.as_view(), | |
| + name="sentry-api-0-organization-client-state-list", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/client-state/(?P<category>[^\/]+)/$", | |
| + ClientStateEndpoint.as_view(), | |
| + name="sentry-api-0-organization-client-state", | |
| + ), | |
| +] | |
| + | |
| +PROJECT_URLS = [ | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/rule-conditions/$", | |
| + ProjectAgnosticRuleConditionsEndpoint.as_view(), | |
| + name="sentry-api-0-project-agnostic-rule-conditions", | |
| + ), | |
| + url( | |
| + r"^$", | |
| + ProjectIndexEndpoint.as_view(), | |
| + name="sentry-api-0-projects", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/$", | |
| + ProjectDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$", | |
| + ProjectAlertRuleDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-alert-rule-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/$", | |
| + ProjectAlertRuleIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-alert-rules", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rule-task/(?P<task_uuid>[^\/]+)/$", | |
| + ProjectAlertRuleTaskDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-alert-rule-task-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/combined-rules/$", | |
| + ProjectCombinedRuleIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-combined-rules", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/avatar/$", | |
| + ProjectAvatarEndpoint.as_view(), | |
| + name="sentry-api-0-project-avatar", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample/$", | |
| + ProjectCreateSampleEndpoint.as_view(), | |
| + name="sentry-api-0-project-create-sample", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample-transaction/$", | |
| + ProjectCreateSampleTransactionEndpoint.as_view(), | |
| + name="sentry-api-0-project-create-sample-transaction", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/docs/(?P<platform>[\w-]+)/$", | |
| + ProjectDocsPlatformEndpoint.as_view(), | |
| + name="sentry-api-0-project-docs-platform", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/$", | |
| + ProjectEnvironmentsEndpoint.as_view(), | |
| + name="sentry-api-0-project-environments", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/(?P<environment>[^/]+)/$", | |
| + ProjectEnvironmentDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-environment-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/platforms/$", | |
| + ProjectPlatformsEndpoint.as_view(), | |
| + name="sentry-api-0-project-platform-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/$", | |
| + ProjectEventsEndpoint.as_view(), | |
| + name="sentry-api-0-project-events", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>(?:\d+|[A-Fa-f0-9]{32}))/$", | |
| + ProjectEventDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-event-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/grouping-info/$", | |
| + EventGroupingInfoEndpoint.as_view(), | |
| + name="sentry-api-0-event-grouping-info", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/apple-crash-report$", | |
| + EventAppleCrashReportEndpoint.as_view(), | |
| + name="sentry-api-0-event-apple-crash-report", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/$", | |
| + EventAttachmentsEndpoint.as_view(), | |
| + name="sentry-api-0-event-attachments", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/reprocessable/$", | |
| + EventReprocessableEndpoint.as_view(), | |
| + name="sentry-api-0-event-attachments", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/(?P<attachment_id>[\w-]+)/$", | |
| + EventAttachmentDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-event-attachment-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/committers/$", | |
| + EventFileCommittersEndpoint.as_view(), | |
| + name="sentry-api-0-event-file-committers", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/json/$", | |
| + EventJsonEndpoint.as_view(), | |
| + name="sentry-api-0-event-json", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/owners/$", | |
| + EventOwnersEndpoint.as_view(), | |
| + name="sentry-api-0-event-owners", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/source-map-debug/$", | |
| + SourceMapDebugEndpoint.as_view(), | |
| + name="sentry-api-0-event-source-map-debug", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/$", | |
| + DebugFilesEndpoint.as_view(), | |
| + name="sentry-api-0-dsym-files", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/source-maps/$", | |
| + SourceMapsEndpoint.as_view(), | |
| + name="sentry-api-0-source-maps", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/difs/assemble/$", | |
| + DifAssembleEndpoint.as_view(), | |
| + name="sentry-api-0-assemble-dif-files", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/unknown/$", | |
| + UnknownDebugFilesEndpoint.as_view(), | |
| + name="sentry-api-0-unknown-dsym-files", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/associate/$", | |
| + AssociateDSymFilesEndpoint.as_view(), | |
| + name="sentry-api-0-associate-dsym-files", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/$", | |
| + ProjectFiltersEndpoint.as_view(), | |
| + name="sentry-api-0-project-filters", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/(?P<filter_id>[\w-]+)/$", | |
| + ProjectFilterDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-filters", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/$", | |
| + ProjectServiceHooksEndpoint.as_view(), | |
| + name="sentry-api-0-service-hooks", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/$", | |
| + ProjectServiceHookDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-service-hook-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/stats/$", | |
| + ProjectServiceHookStatsEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/$", | |
| + ProjectGroupIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-group-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/stats/$", | |
| + ProjectGroupStatsEndpoint.as_view(), | |
| + name="sentry-api-0-project-group-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/$", | |
| + ProjectKeysEndpoint.as_view(), | |
| + name="sentry-api-0-project-keys", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/$", | |
| + ProjectKeyDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-key-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/stats/$", | |
| + ProjectKeyStatsEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^/]+)/members/$", | |
| + ProjectMemberIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-member-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/$", | |
| + ProjectReleasesEndpoint.as_view(), | |
| + name="sentry-api-0-project-releases", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/commits/$", | |
| + ProjectCommitsEndpoint.as_view(), | |
| + name="sentry-api-0-project-commits", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/token/$", | |
| + ProjectReleasesTokenEndpoint.as_view(), | |
| + name="sentry-api-0-project-releases-token", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/completion/$", | |
| + ProjectReleaseSetupCompletionEndpoint.as_view(), | |
| + name="sentry-api-0-project-releases-completion-status", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/$", | |
| + ProjectReleaseDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-release-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$", | |
| + ProjectReleaseCommitsEndpoint.as_view(), | |
| + name="sentry-api-0-project-release-commits", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/repositories/$", | |
| + ProjectReleaseRepositories.as_view(), | |
| + name="sentry-api-0-project-release-repositories", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$", | |
| + ProjectIssuesResolvedInReleaseEndpoint.as_view(), | |
| + name="sentry-api-0-project-release-resolved", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/stats/$", | |
| + ProjectReleaseStatsEndpoint.as_view(), | |
| + name="sentry-api-0-project-release-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$", | |
| + ProjectReleaseFilesEndpoint.as_view(), | |
| + name="sentry-api-0-project-release-files", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$", | |
| + ProjectReleaseFileDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-release-file-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/$", | |
| + ProjectRulesEndpoint.as_view(), | |
| + name="sentry-api-0-project-rules", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/$", | |
| + ProjectReplayDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-replay-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/$", | |
| + ProjectReplayRecordingSegmentIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-replay-recording-segment-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/(?P<segment_id>\d+)/$", | |
| + ProjectReplayRecordingSegmentDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-replay-recording-segment-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/configuration/$", | |
| + ProjectRulesConfigurationEndpoint.as_view(), | |
| + name="sentry-api-0-project-rules-configuration", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/$", | |
| + ProjectRuleDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-rule-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/preview$", | |
| + ProjectRulePreviewEndpoint.as_view(), | |
| + name="sentry-api-0-project-rule-preview", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-actions/$", | |
| + ProjectRuleActionsEndpoint.as_view(), | |
| + name="sentry-api-0-project-rule-actions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/group-history/$", | |
| + ProjectRuleGroupHistoryIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-rule-group-history-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/stats/$", | |
| + ProjectRuleStatsIndexEndpoint.as_view(), | |
| + name="sentry-api-0-project-rule-stats-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-task/(?P<task_uuid>[^\/]+)/$", | |
| + ProjectRuleTaskDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-rule-task-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stats/$", | |
| + ProjectStatsEndpoint.as_view(), | |
| + name="sentry-api-0-project-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/$", | |
| + ProjectTagsEndpoint.as_view(), | |
| + name="sentry-api-0-project-tags", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/$", | |
| + ProjectTagKeyDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-tagkey-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$", | |
| + ProjectTagKeyValuesEndpoint.as_view(), | |
| + name="sentry-api-0-project-tagkey-values", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/$", | |
| + ProjectTeamsEndpoint.as_view(), | |
| + name="sentry-api-0-project-teams", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$", | |
| + ProjectTeamDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-team-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transfer/$", | |
| + ProjectTransferEndpoint.as_view(), | |
| + name="sentry-api-0-project-transfer", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/$", | |
| + ProjectUsersEndpoint.as_view(), | |
| + name="sentry-api-0-project-users", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/(?P<user_hash>[^/]+)/$", | |
| + ProjectUserDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-user-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:user-feedback|user-reports)/$", | |
| + ProjectUserReportsEndpoint.as_view(), | |
| + name="sentry-api-0-project-user-reports", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/user-stats/$", | |
| + ProjectUserStatsEndpoint.as_view(), | |
| + name="sentry-api-0-project-userstats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/$", | |
| + ProjectProcessingIssuesEndpoint.as_view(), | |
| + name="sentry-api-0-project-processing-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/fix$", | |
| + ProjectProcessingIssuesFixEndpoint.as_view(), | |
| + name="sentry-api-0-project-fix-processing-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/reprocessing/$", | |
| + ProjectReprocessingEndpoint.as_view(), | |
| + name="sentry-api-0-project-reprocessing", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/discard/$", | |
| + ProjectProcessingIssuesDiscardEndpoint.as_view(), | |
| + name="sentry-api-0-project-discard-processing-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/ownership/$", | |
| + ProjectOwnershipEndpoint.as_view(), | |
| + name="sentry-api-0-project-ownership", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/$", | |
| + ProjectCodeOwnersEndpoint.as_view(), | |
| + name="sentry-api-0-project-codeowners", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/(?P<codeowners_id>[^\/]+)/$", | |
| + ProjectCodeOwnersDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-codeowners-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transaction-threshold/configure/$", | |
| + ProjectTransactionThresholdEndpoint.as_view(), | |
| + name="sentry-api-0-project-transaction-threshold", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/performance-issues/configure/$", | |
| + ProjectPerformanceIssueSettingsEndpoint.as_view(), | |
| + name="sentry-api-0-project-performance-issue-settings", | |
| + ), | |
| + # Load plugin project urls | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/$", | |
| + ProjectPluginsEndpoint.as_view(), | |
| + name="sentry-api-0-project-plugins", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/(?P<plugin_id>[^\/]+)/$", | |
| + ProjectPluginDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-project-plugin-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/cluster-transaction-names/$", | |
| + ProjectTransactionNamesCluster.as_view(), | |
| + name="sentry-api-0-organization-project-cluster-transaction-names", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins?/", | |
| + include("sentry.plugins.base.project_api_urls"), | |
| + ), | |
| + # Tombstone | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/$", | |
| + GroupTombstoneEndpoint.as_view(), | |
| + name="sentry-api-0-group-tombstones", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/(?P<tombstone_id>\d+)/$", | |
| + GroupTombstoneDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-group-tombstone-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stacktrace-link/$", | |
| + ProjectStacktraceLinkEndpoint.as_view(), | |
| + name="sentry-api-0-project-stacktrace-link", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/repo-path-parsing/$", | |
| + ProjectRepoPathParsingEndpoint.as_view(), | |
| + name="sentry-api-0-project-repo-path-parsing", | |
| + ), | |
| + # Grouping configs | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/grouping-configs/$", | |
| + ProjectGroupingConfigsEndpoint.as_view(), | |
| + name="sentry-api-0-project-grouping-configs", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/$", | |
| + AppStoreConnectCreateCredentialsEndpoint.as_view(), | |
| + name="sentry-api-0-project-appstoreconnect-credentials-create", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/apps/$", | |
| + AppStoreConnectAppsEndpoint.as_view(), | |
| + name="sentry-api-0-project-appstoreconnect-apps", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/status/$", | |
| + AppStoreConnectStatusEndpoint.as_view(), | |
| + name="sentry-api-0-project-appstoreconnect-status", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/$", | |
| + AppStoreConnectUpdateCredentialsEndpoint.as_view(), | |
| + name="sentry-api-0-project-appstoreconnect-credentials-update", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/refresh/$", | |
| + AppStoreConnectRefreshEndpoint.as_view(), | |
| + name="sentry-api-0-project-appstoreconnect-refresh", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/functions/$", | |
| + ProjectProfilingFunctionsEndpoint.as_view(), | |
| + name="sentry-api-0-project-profiling-functions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + ProjectProfilingProfileEndpoint.as_view(), | |
| + name="sentry-api-0-project-profiling-profile", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/raw_profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + ProjectProfilingRawProfileEndpoint.as_view(), | |
| + name="sentry-api-0-project-profiling-raw-profile", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/flamegraph/$", | |
| + ProjectProfilingFlamegraphEndpoint.as_view(), | |
| + name="sentry-api-0-project-profiling-flamegraph", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/transactions/(?P<transaction_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| + ProjectProfilingTransactionIDProfileIDEndpoint.as_view(), | |
| + name="sentry-api-0-project-profiling-transactions", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/dynamic-sampling/distribution/$", | |
| + ProjectDynamicSamplingDistributionEndpoint.as_view(), | |
| + name="sentry-api-0-project-dynamic-sampling-distribution", | |
| + ), | |
| +] | |
| + | |
| +TEAM_URLS = [ | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/$", | |
| + TeamDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-team-details", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issues/old/$", | |
| + TeamGroupsOldEndpoint.as_view(), | |
| + name="sentry-api-0-team-oldest-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/release-count/$", | |
| + TeamReleaseCountEndpoint.as_view(), | |
| + name="sentry-api-0-team-release-count", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/time-to-resolution/$", | |
| + TeamTimeToResolutionEndpoint.as_view(), | |
| + name="sentry-api-0-team-time-to-resolution", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/unresolved-issue-age/$", | |
| + TeamUnresolvedIssueAgeEndpoint.as_view(), | |
| + name="sentry-api-0-team-unresolved-issue-age", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered/$", | |
| + TeamAlertsTriggeredTotalsEndpoint.as_view(), | |
| + name="sentry-api-0-team-alerts-triggered", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered-index/$", | |
| + TeamAlertsTriggeredIndexEndpoint.as_view(), | |
| + name="sentry-api-0-team-alerts-triggered-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issue-breakdown/$", | |
| + TeamIssueBreakdownEndpoint.as_view(), | |
| + name="sentry-api-0-team-issue-breakdown", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/all-unresolved-issues/$", | |
| + TeamAllUnresolvedIssuesEndpoint.as_view(), | |
| + name="sentry-api-0-team-all-unresolved-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/notification-settings/$", | |
| + TeamNotificationSettingsDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-team-notification-settings", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/members/$", | |
| + TeamMembersEndpoint.as_view(), | |
| + name="sentry-api-0-team-members", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/projects/$", | |
| + TeamProjectsEndpoint.as_view(), | |
| + name="sentry-api-0-team-project-index", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/stats/$", | |
| + TeamStatsEndpoint.as_view(), | |
| + name="sentry-api-0-team-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/avatar/$", | |
| + TeamAvatarEndpoint.as_view(), | |
| + name="sentry-api-0-team-avatar", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/$", | |
| + ExternalTeamEndpoint.as_view(), | |
| + name="sentry-api-0-external-team", | |
| + ), | |
| + url( | |
| + r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/(?P<external_team_id>[^\/]+)/$", | |
| + ExternalTeamDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-external-team-details", | |
| + ), | |
| +] | |
| + | |
| +SENTRY_APP_URLS = [ | |
| + url( | |
| + r"^$", | |
| + SentryAppsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-apps", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/$", | |
| + SentryAppDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-details", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/features/$", | |
| + SentryAppFeaturesEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-features", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/components/$", | |
| + SentryAppComponentsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-components", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/avatar/$", | |
| + SentryAppAvatarEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-avatar", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/api-tokens/$", | |
| + SentryInternalAppTokensEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-internal-app-tokens", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/api-tokens/(?P<api_token>[^\/]+)/$", | |
| + SentryInternalAppTokenDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-internal-app-token-details", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/stats/$", | |
| + SentryAppStatsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-stats", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/requests/$", | |
| + SentryAppRequestsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-requests", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/interaction/$", | |
| + SentryAppInteractionEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-interaction", | |
| + ), | |
| + url( | |
| + r"^(?P<sentry_app_slug>[^\/]+)/publish-request/$", | |
| + SentryAppPublishRequestEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-publish-request", | |
| + ), | |
| +] | |
| + | |
| +SENTRY_APP_INSTALLATION_URLS = [ | |
| + url( | |
| + r"^(?P<uuid>[^\/]+)/$", | |
| + SentryAppInstallationDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-installation-details", | |
| + ), | |
| + url( | |
| + r"^(?P<uuid>[^\/]+)/external-requests/$", | |
| + SentryAppInstallationExternalRequestsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-installation-external-requests", | |
| + ), | |
| + url( | |
| + r"^(?P<uuid>[^\/]+)/external-issue-actions/$", | |
| + SentryAppInstallationExternalIssueActionsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-installation-external-issue-actions", | |
| + ), | |
| + url( | |
| + r"^(?P<uuid>[^\/]+)/external-issues/$", | |
| + SentryAppInstallationExternalIssuesEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-installation-external-issues", | |
| + ), | |
| + url( | |
| + r"^(?P<uuid>[^\/]+)/external-issues/(?P<external_issue_id>[^\/]+)/$", | |
| + SentryAppInstallationExternalIssueDetailsEndpoint.as_view(), | |
| + name="sentry-api-0-sentry-app-installation-external-issue-details", | |
| + ), | |
| +] | |
| + | |
| +INTERNAL_URLS = [ | |
| + url( | |
| + r"^health/$", | |
| + SystemHealthEndpoint.as_view(), | |
| + name="sentry-api-0-system-health", | |
| + ), | |
| + url( | |
| + r"^options/$", | |
| + SystemOptionsEndpoint.as_view(), | |
| + name="sentry-api-0-system-options", | |
| + ), | |
| + url( | |
| + r"^beacon/$", | |
| + InternalBeaconEndpoint.as_view(), | |
| + name="sentry-api-0-internal-beacon", | |
| + ), | |
| + url( | |
| + r"^quotas/$", | |
| + InternalQuotasEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^queue/tasks/$", | |
| + InternalQueueTasksEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^stats/$", | |
| + InternalStatsEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^warnings/$", | |
| + InternalWarningsEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^packages/$", | |
| + InternalPackagesEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^environment/$", | |
| + InternalEnvironmentEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^mail/$", | |
| + InternalMailEndpoint.as_view(), | |
| + ), | |
| + url( | |
| + r"^project-config/$", | |
| + AdminRelayProjectConfigsEndpoint.as_view(), | |
| + name="sentry-api-0-internal-project-config", | |
| + ), | |
| +] | |
| + | |
| urlpatterns = [ | |
| # Relay | |
| url( | |
| r"^relays/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^$", | |
| - RelayIndexEndpoint.as_view(), | |
| - name="sentry-api-0-relays-index", | |
| - ), | |
| - url( | |
| - r"^register/challenge/$", | |
| - RelayRegisterChallengeEndpoint.as_view(), | |
| - name="sentry-api-0-relay-register-challenge", | |
| - ), | |
| - url( | |
| - r"^register/response/$", | |
| - RelayRegisterResponseEndpoint.as_view(), | |
| - name="sentry-api-0-relay-register-response", | |
| - ), | |
| - url( | |
| - r"^projectconfigs/$", | |
| - RelayProjectConfigsEndpoint.as_view(), | |
| - name="sentry-api-0-relay-projectconfigs", | |
| - ), | |
| - url( | |
| - r"^projectids/$", | |
| - RelayProjectIdsEndpoint.as_view(), | |
| - name="sentry-api-0-relay-projectids", | |
| - ), | |
| - url( | |
| - r"^publickeys/$", | |
| - RelayPublicKeysEndpoint.as_view(), | |
| - name="sentry-api-0-relay-publickeys", | |
| - ), | |
| - url( | |
| - r"^live/$", | |
| - RelayHealthCheck.as_view(), | |
| - name="sentry-api-0-relays-healthcheck", | |
| - ), | |
| - url( | |
| - r"^(?P<relay_id>[^\/]+)/$", | |
| - RelayDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-relays-details", | |
| - ), | |
| - ] | |
| - ), | |
| + include(RELAY_URLS), | |
| ), | |
| # Api Data | |
| url( | |
| @@ -704,25 +2454,7 @@ urlpatterns = [ | |
| # Auth | |
| url( | |
| r"^auth/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^$", | |
| - AuthIndexEndpoint.as_view(), | |
| - name="sentry-api-0-auth", | |
| - ), | |
| - url( | |
| - r"^config/$", | |
| - AuthConfigEndpoint.as_view(), | |
| - name="sentry-api-0-auth-config", | |
| - ), | |
| - url( | |
| - r"^login/$", | |
| - AuthLoginEndpoint.as_view(), | |
| - name="sentry-api-0-auth-login", | |
| - ), | |
| - ] | |
| - ), | |
| + include(AUTH_URLS), | |
| ), | |
| # List Authenticators | |
| url( | |
| @@ -732,13 +2464,8 @@ urlpatterns = [ | |
| ), | |
| # Broadcasts | |
| url( | |
| - r"^broadcasts/$", | |
| - BroadcastIndexEndpoint.as_view(), | |
| - name="sentry-api-0-broadcast-index", | |
| - ), | |
| - url( | |
| - r"^broadcasts/(?P<broadcast_id>[^\/]+)/$", | |
| - BroadcastDetailsEndpoint.as_view(), | |
| + r"^broadcasts/", | |
| + include(BROADCAST_URLS), | |
| ), | |
| # Project transfer | |
| url( | |
| @@ -796,1636 +2523,37 @@ urlpatterns = [ | |
| # Users | |
| url( | |
| r"^users/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^$", | |
| - UserIndexEndpoint.as_view(), | |
| - name="sentry-api-0-user-index", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/$", | |
| - UserDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/avatar/$", | |
| - UserAvatarEndpoint.as_view(), | |
| - name="sentry-api-0-user-avatar", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/authenticators/$", | |
| - UserAuthenticatorIndexEndpoint.as_view(), | |
| - name="sentry-api-0-user-authenticator-index", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/authenticators/(?P<interface_id>[^\/]+)/enroll/$", | |
| - UserAuthenticatorEnrollEndpoint.as_view(), | |
| - name="sentry-api-0-user-authenticator-enroll", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/(?P<interface_device_id>[^\/]+)/$", | |
| - UserAuthenticatorDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-authenticator-device-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/authenticators/(?P<auth_id>[^\/]+)/$", | |
| - UserAuthenticatorDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-authenticator-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/emails/$", | |
| - UserEmailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-emails", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/emails/confirm/$", | |
| - UserEmailsConfirmEndpoint.as_view(), | |
| - name="sentry-api-0-user-emails-confirm", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/identities/(?P<identity_id>[^\/]+)/$", | |
| - UserIdentityDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-identity-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/identities/$", | |
| - UserIdentityEndpoint.as_view(), | |
| - name="sentry-api-0-user-identity", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/ips/$", | |
| - UserIPsEndpoint.as_view(), | |
| - name="sentry-api-0-user-ips", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/organizations/$", | |
| - UserOrganizationsEndpoint.as_view(), | |
| - name="sentry-api-0-user-organizations", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/notification-settings/$", | |
| - UserNotificationSettingsDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-notification-settings", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/notifications/$", | |
| - UserNotificationDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-notifications", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/notifications/(?P<notification_type>[^\/]+)/$", | |
| - UserNotificationFineTuningEndpoint.as_view(), | |
| - name="sentry-api-0-user-notifications-fine-tuning", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/password/$", | |
| - UserPasswordEndpoint.as_view(), | |
| - name="sentry-api-0-user-password", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/permissions/$", | |
| - UserPermissionsEndpoint.as_view(), | |
| - name="sentry-api-0-user-permissions", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/permissions/config/$", | |
| - UserPermissionsConfigEndpoint.as_view(), | |
| - name="sentry-api-0-user-permissions-config", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/permissions/(?P<permission_name>[^\/]+)/$", | |
| - UserPermissionDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-permission-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/roles/$", | |
| - UserUserRolesEndpoint.as_view(), | |
| - name="sentry-api-0-user-userroles", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/roles/(?P<role_name>[^\/]+)/$", | |
| - UserUserRoleDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-userrole-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/social-identities/$", | |
| - UserSocialIdentitiesIndexEndpoint.as_view(), | |
| - name="sentry-api-0-user-social-identities-index", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/social-identities/(?P<identity_id>[^\/]+)/$", | |
| - UserSocialIdentityDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-social-identity-details", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/subscriptions/$", | |
| - UserSubscriptionsEndpoint.as_view(), | |
| - name="sentry-api-0-user-subscriptions", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/organization-integrations/$", | |
| - UserOrganizationIntegrationsEndpoint.as_view(), | |
| - name="sentry-api-0-user-organization-integrations", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/user-identities/$", | |
| - UserIdentityConfigEndpoint.as_view(), | |
| - name="sentry-api-0-user-identity-config", | |
| - ), | |
| - url( | |
| - r"^(?P<user_id>[^\/]+)/user-identities/(?P<category>[\w-]+)/(?P<identity_id>[^\/]+)/$", | |
| - UserIdentityConfigDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-user-identity-config-details", | |
| - ), | |
| - ] | |
| - ), | |
| + include(USER_URLS), | |
| ), | |
| # UserRoles | |
| url( | |
| r"^userroles/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^$", | |
| - UserRolesEndpoint.as_view(), | |
| - name="sentry-api-0-userroles", | |
| - ), | |
| - url( | |
| - r"^(?P<role_name>[^\/]+)/$", | |
| - UserRoleDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-userroles-details", | |
| - ), | |
| - ] | |
| - ), | |
| + include(USER_ROLE_URLS), | |
| ), | |
| # Organizations | |
| url( | |
| r"^organizations/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^$", | |
| - OrganizationIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organizations", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/$", | |
| - OrganizationDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-details", | |
| - ), | |
| - # Alert Rules | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/alert-rules/available-actions/$", | |
| - OrganizationAlertRuleAvailableActionIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-alert-rule-available-actions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$", | |
| - OrganizationAlertRuleDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-alert-rule-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/alert-rules/$", | |
| - OrganizationAlertRuleIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-alert-rules", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/combined-rules/$", | |
| - OrganizationCombinedRuleIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-combined-rules", | |
| - ), | |
| - # Data Export | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/data-export/$", | |
| - DataExportEndpoint.as_view(), | |
| - name="sentry-api-0-organization-data-export", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/data-export/(?P<data_export_id>[^\/]+)/$", | |
| - DataExportDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-data-export-details", | |
| - ), | |
| - # Incidents | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/activity/$", | |
| - OrganizationIncidentActivityIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-activity", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/$", | |
| - OrganizationIncidentCommentIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-comments", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/comments/(?P<activity_id>[^\/]+)/$", | |
| - OrganizationIncidentCommentDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-comment-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/$", | |
| - OrganizationIncidentDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/$", | |
| - OrganizationIncidentIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/seen/$", | |
| - OrganizationIncidentSeenEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-seen", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/incidents/(?P<incident_identifier>[^\/]+)/subscriptions/$", | |
| - OrganizationIncidentSubscriptionIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-incident-subscription-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/chunk-upload/$", | |
| - ChunkUploadEndpoint.as_view(), | |
| - name="sentry-api-0-chunk-upload", | |
| - ), | |
| - # Code Path Mappings | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/code-mappings/$", | |
| - OrganizationCodeMappingsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-code-mappings", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/derive-code-mappings/$", | |
| - OrganizationDeriveCodeMappingsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-derive-code-mappings", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/$", | |
| - OrganizationCodeMappingDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-code-mapping-details", | |
| - ), | |
| - # Codeowners | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/code-mappings/(?P<config_id>[^\/]+)/codeowners/$", | |
| - OrganizationCodeMappingCodeOwnersEndpoint.as_view(), | |
| - name="sentry-api-0-organization-code-mapping-codeowners", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/codeowners-associations/$", | |
| - OrganizationCodeOwnersAssociationsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-codeowners-associations", | |
| - ), | |
| - # Discover | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/discover/homepage/$", | |
| - DiscoverHomepageQueryEndpoint.as_view(), | |
| - name="sentry-api-0-discover-homepage-query", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/discover/saved/$", | |
| - DiscoverSavedQueriesEndpoint.as_view(), | |
| - name="sentry-api-0-discover-saved-queries", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/$", | |
| - DiscoverSavedQueryDetailEndpoint.as_view(), | |
| - name="sentry-api-0-discover-saved-query-detail", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/discover/saved/(?P<query_id>\d+)/visit/$", | |
| - DiscoverSavedQueryVisitEndpoint.as_view(), | |
| - name="sentry-api-0-discover-saved-query-visit", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/key-transactions/$", | |
| - KeyTransactionEndpoint.as_view(), | |
| - name="sentry-api-0-organization-key-transactions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/key-transactions-list/$", | |
| - KeyTransactionListEndpoint.as_view(), | |
| - name="sentry-api-0-organization-key-transactions-list", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/related-issues/$", | |
| - OrganizationEventsRelatedIssuesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-related-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/project-transaction-threshold-override/$", | |
| - ProjectTransactionThresholdOverrideEndpoint.as_view(), | |
| - name="sentry-api-0-organization-project-transaction-threshold-override", | |
| - ), | |
| - # Dashboards | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/dashboards/$", | |
| - OrganizationDashboardsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-dashboards", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/dashboards/widgets/$", | |
| - OrganizationDashboardWidgetDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-dashboard-widget-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/$", | |
| - OrganizationDashboardDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-dashboard-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/dashboards/(?P<dashboard_id>[^\/]+)/visit/$", | |
| - OrganizationDashboardVisitEndpoint.as_view(), | |
| - name="sentry-api-0-organization-dashboard-visit", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/shortids/(?P<short_id>[^\/]+)/$", | |
| - ShortIdLookupEndpoint.as_view(), | |
| - name="sentry-api-0-short-id-lookup", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/eventids/(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - EventIdLookupEndpoint.as_view(), | |
| - name="sentry-api-0-event-id-lookup", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/data-scrubbing-selector-suggestions/$", | |
| - DataScrubbingSelectorSuggestionsEndpoint.as_view(), | |
| - name="sentry-api-0-data-scrubbing-selector-suggestions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/slugs/$", | |
| - SlugsUpdateEndpoint.as_view(), | |
| - name="sentry-api-0-short-ids-update", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/access-requests/$", | |
| - OrganizationAccessRequestDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-access-requests", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/access-requests/(?P<request_id>\d+)/$", | |
| - OrganizationAccessRequestDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-access-request-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/activity/$", | |
| - OrganizationActivityEndpoint.as_view(), | |
| - name="sentry-api-0-organization-activity", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/api-keys/$", | |
| - OrganizationApiKeyIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-api-key-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/api-keys/(?P<api_key_id>[^\/]+)/$", | |
| - OrganizationApiKeyDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-api-key-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/audit-logs/$", | |
| - OrganizationAuditLogsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-audit-logs", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/auth-provider/$", | |
| - OrganizationAuthProviderDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-auth-provider", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/auth-providers/$", | |
| - OrganizationAuthProvidersEndpoint.as_view(), | |
| - name="sentry-api-0-organization-auth-providers", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/auth-provider/send-reminders/$", | |
| - OrganizationAuthProviderSendRemindersEndpoint.as_view(), | |
| - name="sentry-api-0-organization-auth-provider-send-reminders", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/avatar/$", | |
| - OrganizationAvatarEndpoint.as_view(), | |
| - name="sentry-api-0-organization-avatar", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/artifactbundle/assemble/$", | |
| - OrganizationArtifactBundleAssembleEndpoint.as_view(), | |
| - name="sentry-api-0-organization-artifactbundle-assemble", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/config/integrations/$", | |
| - OrganizationConfigIntegrationsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-config-integrations", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/config/repos/$", | |
| - OrganizationConfigRepositoriesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-config-repositories", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/sdk-updates/$", | |
| - OrganizationSdkUpdatesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-sdk-updates", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events/$", | |
| - OrganizationEventsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events/(?P<project_slug>[^\/]+):(?P<event_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - OrganizationEventDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-event-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-stats/$", | |
| - OrganizationEventsStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-geo/$", | |
| - OrganizationEventsGeoEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-geo", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-facets/$", | |
| - OrganizationEventsFacetsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-facets", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-facets-performance/$", | |
| - OrganizationEventsFacetsPerformanceEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-facets-performance", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-facets-performance-histogram/$", | |
| - OrganizationEventsFacetsPerformanceHistogramEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-facets-performance-histogram", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-span-ops/$", | |
| - OrganizationEventsSpanOpsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-span-ops", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-spans/$", | |
| - OrganizationEventsSpansExamplesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-spans", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-spans-performance/$", | |
| - OrganizationEventsSpansPerformanceEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-spans-performance", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-spans-stats/$", | |
| - OrganizationEventsSpansStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-spans-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-meta/$", | |
| - OrganizationEventsMetaEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-meta", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/metrics-compatibility/$", | |
| - OrganizationMetricsCompatibility.as_view(), | |
| - name="sentry-api-0-organization-metrics-compatibility", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/metrics-compatibility-sums/$", | |
| - OrganizationMetricsCompatibilitySums.as_view(), | |
| - name="sentry-api-0-organization-metrics-compatibility-sums", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-histogram/$", | |
| - OrganizationEventsHistogramEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-histogram", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-spans-histogram/$", | |
| - OrganizationEventsSpansHistogramEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-spans-histogram", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-trends/$", | |
| - OrganizationEventsTrendsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-trends", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-vitals/$", | |
| - OrganizationEventsVitalsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-vitals", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-has-measurements/$", | |
| - OrganizationEventsHasMeasurementsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-has-measurements", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-trends-stats/$", | |
| - OrganizationEventsTrendsStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-trends-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-trace-light/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - OrganizationEventsTraceLightEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-trace-light", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-trace/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - OrganizationEventsTraceEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-trace", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/events-trace-meta/(?P<trace_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - OrganizationEventsTraceMetaEndpoint.as_view(), | |
| - name="sentry-api-0-organization-events-trace-meta", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/measurements-meta/$", | |
| - OrganizationMeasurementsMeta.as_view(), | |
| - name="sentry-api-0-organization-measurements-meta", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/issues/$", | |
| - OrganizationGroupIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-group-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/issues-count/$", | |
| - OrganizationIssuesCountEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/issues-stats/$", | |
| - OrganizationGroupIndexStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-group-index-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?:issues|groups)/", | |
| - include(GROUP_URLS), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/integrations/$", | |
| - OrganizationIntegrationsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-integrations", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/$", | |
| - OrganizationIntegrationDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-integration-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/repos/$", | |
| - OrganizationIntegrationReposEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/issues/$", | |
| - OrganizationIntegrationIssuesEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/integrations/(?P<integration_id>[^\/]+)/serverless-functions/$", | |
| - OrganizationIntegrationServerlessFunctionsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-integration-serverless-functions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/members/$", | |
| - OrganizationMemberIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-member-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/external-users/$", | |
| - ExternalUserEndpoint.as_view(), | |
| - name="sentry-api-0-organization-external-user", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/external-users/(?P<external_user_id>[^\/]+)/$", | |
| - ExternalUserDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-external-user-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/integration-requests/$", | |
| - OrganizationIntegrationRequestEndpoint.as_view(), | |
| - name="sentry-api-0-organization-integration-request", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/invite-requests/$", | |
| - OrganizationInviteRequestIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-invite-request-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/invite-requests/(?P<member_id>[^\/]+)/$", | |
| - OrganizationInviteRequestDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-invite-request-detail", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/monitors/$", | |
| - OrganizationMonitorsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-monitors", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/$", | |
| - OrganizationMonitorDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-monitor-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/stats/$", | |
| - OrganizationMonitorStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-monitor-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/monitors/(?P<monitor_id>[^\/]+)/checkins/(?P<checkin_id>[^\/]+)/attachment/$", | |
| - OrganizationMonitorCheckInAttachmentEndpoint.as_view(), | |
| - name="sentry-api-0-organization-monitor-check-in-attachment", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/pinned-searches/$", | |
| - OrganizationPinnedSearchEndpoint.as_view(), | |
| - name="sentry-api-0-organization-pinned-searches", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/recent-searches/$", | |
| - OrganizationRecentSearchesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-recent-searches", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/searches/(?P<search_id>[^\/]+)/$", | |
| - OrganizationSearchDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-search-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/searches/$", | |
| - OrganizationSearchesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-searches", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/sessions/$", | |
| - OrganizationSessionsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-sessions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/users/issues/$", | |
| - OrganizationUserIssuesSearchEndpoint.as_view(), | |
| - name="sentry-api-0-organization-issue-search", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$", | |
| - OrganizationIssuesResolvedInReleaseEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-resolved", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/$", | |
| - OrganizationMemberDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-member-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/unreleased-commits/$", | |
| - OrganizationMemberUnreleasedCommitsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-member-unreleased-commits", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/members/(?P<member_id>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$", | |
| - OrganizationMemberTeamDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-member-team-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/onboarding-continuation-email/$", | |
| - OrganizationOnboardingContinuationEmail.as_view(), | |
| - name="sentry-api-0-organization-onboarding-continuation-email", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/processingissues/$", | |
| - OrganizationProcessingIssuesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-processing-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/projects/$", | |
| - OrganizationProjectsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-projects", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/projects-count/$", | |
| - OrganizationProjectsCountEndpoint.as_view(), | |
| - name="sentry-api-0-organization-projects-count", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/sent-first-event/$", | |
| - OrganizationProjectsSentFirstEventEndpoint.as_view(), | |
| - name="sentry-api-0-organization-sent-first-event", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/repos/$", | |
| - OrganizationRepositoriesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-repositories", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/$", | |
| - OrganizationRepositoryDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-repository-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/repos/(?P<repo_id>[^\/]+)/commits/$", | |
| - OrganizationRepositoryCommitsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-repository-commits", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/plugins/$", | |
| - OrganizationPluginsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-plugins", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/plugins/configs/$", | |
| - OrganizationPluginsConfigsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-plugins-configs", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/$", | |
| - OrganizationReleasesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-releases", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/stats/$", | |
| - OrganizationReleasesStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-releases-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/$", | |
| - OrganizationReleaseDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/meta/$", | |
| - OrganizationReleaseMetaEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-meta", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/assemble/$", | |
| - OrganizationReleaseAssembleEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-assemble", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$", | |
| - OrganizationReleaseFilesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-files", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$", | |
| - OrganizationReleaseFileDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-file-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commitfiles/$", | |
| - CommitFileChangeEndpoint.as_view(), | |
| - name="sentry-api-0-release-commitfilechange", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/deploys/$", | |
| - ReleaseDeploysEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-deploys", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$", | |
| - OrganizationReleaseCommitsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-commits", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/releases/(?P<version>[^/]+)/previous-with-commits/$", | |
| - OrganizationReleasePreviousCommitsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-release-previous-with-commits", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/user-feedback/$", | |
| - OrganizationUserReportsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-user-feedback", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/user-teams/$", | |
| - OrganizationUserTeamsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-user-teams", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/users/$", | |
| - OrganizationUsersEndpoint.as_view(), | |
| - name="sentry-api-0-organization-users", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/users/(?P<user_id>[^\/]+)/$", | |
| - OrganizationUserDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-user-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/sentry-app-installations/$", | |
| - SentryAppInstallationsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-installations", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/sentry-apps/$", | |
| - OrganizationSentryAppsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-sentry-apps", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/stats/$", | |
| - OrganizationStatsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/stats_v2/$", | |
| - OrganizationStatsEndpointV2.as_view(), | |
| - name="sentry-api-0-organization-stats-v2", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/teams/$", | |
| - OrganizationTeamsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-teams", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/tags/$", | |
| - OrganizationTagsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-tags", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$", | |
| - OrganizationTagKeyValuesEndpoint.as_view(), | |
| - name="sentry-api-0-organization-tagkey-values", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/onboarding-tasks/$", | |
| - OrganizationOnboardingTaskEndpoint.as_view(), | |
| - name="sentry-api-0-organization-onboardingtasks", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/environments/$", | |
| - OrganizationEnvironmentsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-environments", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/broadcasts/$", | |
| - BroadcastIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-broadcasts", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/join-request/$", | |
| - OrganizationJoinRequestEndpoint.as_view(), | |
| - name="sentry-api-0-organization-join-request", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/transaction-anomaly-detection/$", | |
| - OrganizationTransactionAnomalyDetectionEndpoint.as_view(), | |
| - name="sentry-api-0-organization-transaction-anomaly-detection", | |
| - ), | |
| - # relay usage | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/relay_usage/$", | |
| - OrganizationRelayUsage.as_view(), | |
| - name="sentry-api-0-organization-relay-usage", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/replays/$", | |
| - OrganizationReplayIndexEndpoint.as_view(), | |
| - name="sentry-api-0-organization-replay-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/replay-count/$", | |
| - OrganizationReplayCountEndpoint.as_view(), | |
| - name="sentry-api-0-organization-replay-count", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/replays-events-meta/$", | |
| - OrganizationReplayEventsMetaEndpoint.as_view(), | |
| - name="sentry-api-0-organization-replay-events-meta", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/functions/$", | |
| - OrganizationSentryFunctionEndpoint.as_view(), | |
| - name="sentry-api-0-organization-sentry-functions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/functions/(?P<function_slug>[^\/]+)/$", | |
| - OrganizationSentryFunctionDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-sentry-function-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/request-project-creation/$", | |
| - OrganizationRequestProjectCreation.as_view(), | |
| - name="sentry-api-0-organization-request-project-creation", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/scim/v2/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^Users$", | |
| - OrganizationSCIMMemberIndex.as_view(), | |
| - name="sentry-api-0-organization-scim-member-index", | |
| - ), | |
| - url( | |
| - r"^Users/(?P<member_id>\d+)$", | |
| - OrganizationSCIMMemberDetails.as_view(), | |
| - name="sentry-api-0-organization-scim-member-details", | |
| - ), | |
| - url( | |
| - r"^Groups$", | |
| - OrganizationSCIMTeamIndex.as_view(), | |
| - name="sentry-api-0-organization-scim-team-index", | |
| - ), | |
| - url( | |
| - r"^Groups/(?P<team_id>\d+)$", | |
| - OrganizationSCIMTeamDetails.as_view(), | |
| - name="sentry-api-0-organization-scim-team-details", | |
| - ), | |
| - url( | |
| - r"^Schemas$", | |
| - OrganizationSCIMSchemaIndex.as_view(), | |
| - name="sentry-api-0-organization-scim-schema-index", | |
| - ), | |
| - ] | |
| - ), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/metrics/meta/$", | |
| - OrganizationMetricsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-metrics-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/metrics/meta/(?P<metric_name>[^/]+)/$", | |
| - OrganizationMetricDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-metric-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/metrics/data/$", | |
| - OrganizationMetricsDataEndpoint.as_view(), | |
| - name="sentry-api-0-organization-metrics-data", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/metrics/tags/$", | |
| - OrganizationMetricsTagsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-metrics-tags", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/metrics/tags/(?P<tag_name>[^/]+)/$", | |
| - OrganizationMetricsTagDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-organization-metrics-tag-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/profiling/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^filters/$", | |
| - OrganizationProfilingFiltersEndpoint.as_view(), | |
| - name="sentry-api-0-organization-profiling-filters", | |
| - ), | |
| - ], | |
| - ), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/client-state/$", | |
| - ClientStateListEndpoint.as_view(), | |
| - name="sentry-api-0-organization-client-state-list", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/client-state/(?P<category>[^\/]+)/$", | |
| - ClientStateEndpoint.as_view(), | |
| - name="sentry-api-0-organization-client-state", | |
| - ), | |
| - ] | |
| - ), | |
| - ), | |
| - # Toplevel app installs | |
| - url( | |
| - r"^sentry-app-installations/(?P<uuid>[^\/]+)/$", | |
| - SentryAppInstallationDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-installation-details", | |
| - ), | |
| - url( | |
| - r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-requests/$", | |
| - SentryAppInstallationExternalRequestsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-installation-external-requests", | |
| - ), | |
| - url( | |
| - r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-issue-actions/$", | |
| - SentryAppInstallationExternalIssueActionsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-installation-external-issue-actions", | |
| - ), | |
| - url( | |
| - r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-issues/$", | |
| - SentryAppInstallationExternalIssuesEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-installation-external-issues", | |
| - ), | |
| - url( | |
| - r"^sentry-app-installations/(?P<uuid>[^\/]+)/external-issues/(?P<external_issue_id>[^\/]+)/$", | |
| - SentryAppInstallationExternalIssueDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-installation-external-issue-details", | |
| + include(ORGANIZATION_URLS), | |
| ), | |
| # Teams | |
| url( | |
| r"^teams/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/$", | |
| - TeamDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-team-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issues/old/$", | |
| - TeamGroupsOldEndpoint.as_view(), | |
| - name="sentry-api-0-team-oldest-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/release-count/$", | |
| - TeamReleaseCountEndpoint.as_view(), | |
| - name="sentry-api-0-team-release-count", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/time-to-resolution/$", | |
| - TeamTimeToResolutionEndpoint.as_view(), | |
| - name="sentry-api-0-team-time-to-resolution", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/unresolved-issue-age/$", | |
| - TeamUnresolvedIssueAgeEndpoint.as_view(), | |
| - name="sentry-api-0-team-unresolved-issue-age", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered/$", | |
| - TeamAlertsTriggeredTotalsEndpoint.as_view(), | |
| - name="sentry-api-0-team-alerts-triggered", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/alerts-triggered-index/$", | |
| - TeamAlertsTriggeredIndexEndpoint.as_view(), | |
| - name="sentry-api-0-team-alerts-triggered-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/issue-breakdown/$", | |
| - TeamIssueBreakdownEndpoint.as_view(), | |
| - name="sentry-api-0-team-issue-breakdown", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/all-unresolved-issues/$", | |
| - TeamAllUnresolvedIssuesEndpoint.as_view(), | |
| - name="sentry-api-0-team-all-unresolved-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/notification-settings/$", | |
| - TeamNotificationSettingsDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-team-notification-settings", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/members/$", | |
| - TeamMembersEndpoint.as_view(), | |
| - name="sentry-api-0-team-members", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/projects/$", | |
| - TeamProjectsEndpoint.as_view(), | |
| - name="sentry-api-0-team-project-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/stats/$", | |
| - TeamStatsEndpoint.as_view(), | |
| - name="sentry-api-0-team-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/avatar/$", | |
| - TeamAvatarEndpoint.as_view(), | |
| - name="sentry-api-0-team-avatar", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/$", | |
| - ExternalTeamEndpoint.as_view(), | |
| - name="sentry-api-0-external-team", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<team_slug>[^\/]+)/external-teams/(?P<external_team_id>[^\/]+)/$", | |
| - ExternalTeamDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-external-team-details", | |
| - ), | |
| - ] | |
| - ), | |
| + include(TEAM_URLS), | |
| ), | |
| # Projects | |
| url( | |
| r"^projects/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/rule-conditions/$", | |
| - ProjectAgnosticRuleConditionsEndpoint.as_view(), | |
| - name="sentry-api-0-project-agnostic-rule-conditions", | |
| - ), | |
| - url( | |
| - r"^$", | |
| - ProjectIndexEndpoint.as_view(), | |
| - name="sentry-api-0-projects", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/$", | |
| - ProjectDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/(?P<alert_rule_id>[^\/]+)/$", | |
| - ProjectAlertRuleDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-alert-rule-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rules/$", | |
| - ProjectAlertRuleIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-alert-rules", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/alert-rule-task/(?P<task_uuid>[^\/]+)/$", | |
| - ProjectAlertRuleTaskDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-alert-rule-task-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/combined-rules/$", | |
| - ProjectCombinedRuleIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-combined-rules", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/avatar/$", | |
| - ProjectAvatarEndpoint.as_view(), | |
| - name="sentry-api-0-project-avatar", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample/$", | |
| - ProjectCreateSampleEndpoint.as_view(), | |
| - name="sentry-api-0-project-create-sample", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/create-sample-transaction/$", | |
| - ProjectCreateSampleTransactionEndpoint.as_view(), | |
| - name="sentry-api-0-project-create-sample-transaction", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/docs/(?P<platform>[\w-]+)/$", | |
| - ProjectDocsPlatformEndpoint.as_view(), | |
| - name="sentry-api-0-project-docs-platform", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/$", | |
| - ProjectEnvironmentsEndpoint.as_view(), | |
| - name="sentry-api-0-project-environments", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/environments/(?P<environment>[^/]+)/$", | |
| - ProjectEnvironmentDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-environment-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/platforms/$", | |
| - ProjectPlatformsEndpoint.as_view(), | |
| - name="sentry-api-0-project-platform-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/$", | |
| - ProjectEventsEndpoint.as_view(), | |
| - name="sentry-api-0-project-events", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>(?:\d+|[A-Fa-f0-9]{32}))/$", | |
| - ProjectEventDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-event-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/grouping-info/$", | |
| - EventGroupingInfoEndpoint.as_view(), | |
| - name="sentry-api-0-event-grouping-info", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/apple-crash-report$", | |
| - EventAppleCrashReportEndpoint.as_view(), | |
| - name="sentry-api-0-event-apple-crash-report", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/$", | |
| - EventAttachmentsEndpoint.as_view(), | |
| - name="sentry-api-0-event-attachments", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/reprocessable/$", | |
| - EventReprocessableEndpoint.as_view(), | |
| - name="sentry-api-0-event-attachments", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/attachments/(?P<attachment_id>[\w-]+)/$", | |
| - EventAttachmentDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-event-attachment-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/committers/$", | |
| - EventFileCommittersEndpoint.as_view(), | |
| - name="sentry-api-0-event-file-committers", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/json/$", | |
| - EventJsonEndpoint.as_view(), | |
| - name="sentry-api-0-event-json", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/owners/$", | |
| - EventOwnersEndpoint.as_view(), | |
| - name="sentry-api-0-event-owners", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/events/(?P<event_id>[\w-]+)/source-map-debug/$", | |
| - SourceMapDebugEndpoint.as_view(), | |
| - name="sentry-api-0-event-source-map-debug", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/$", | |
| - DebugFilesEndpoint.as_view(), | |
| - name="sentry-api-0-dsym-files", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/source-maps/$", | |
| - SourceMapsEndpoint.as_view(), | |
| - name="sentry-api-0-source-maps", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/difs/assemble/$", | |
| - DifAssembleEndpoint.as_view(), | |
| - name="sentry-api-0-assemble-dif-files", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/unknown/$", | |
| - UnknownDebugFilesEndpoint.as_view(), | |
| - name="sentry-api-0-unknown-dsym-files", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/files/dsyms/associate/$", | |
| - AssociateDSymFilesEndpoint.as_view(), | |
| - name="sentry-api-0-associate-dsym-files", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/$", | |
| - ProjectFiltersEndpoint.as_view(), | |
| - name="sentry-api-0-project-filters", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/filters/(?P<filter_id>[\w-]+)/$", | |
| - ProjectFilterDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-filters", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/$", | |
| - ProjectServiceHooksEndpoint.as_view(), | |
| - name="sentry-api-0-service-hooks", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/$", | |
| - ProjectServiceHookDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-service-hook-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/hooks/(?P<hook_id>[^\/]+)/stats/$", | |
| - ProjectServiceHookStatsEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/$", | |
| - ProjectGroupIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-group-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:issues|groups)/stats/$", | |
| - ProjectGroupStatsEndpoint.as_view(), | |
| - name="sentry-api-0-project-group-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/$", | |
| - ProjectKeysEndpoint.as_view(), | |
| - name="sentry-api-0-project-keys", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/$", | |
| - ProjectKeyDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-key-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/keys/(?P<key_id>[^\/]+)/stats/$", | |
| - ProjectKeyStatsEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^/]+)/members/$", | |
| - ProjectMemberIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-member-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/$", | |
| - ProjectReleasesEndpoint.as_view(), | |
| - name="sentry-api-0-project-releases", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/commits/$", | |
| - ProjectCommitsEndpoint.as_view(), | |
| - name="sentry-api-0-project-commits", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/token/$", | |
| - ProjectReleasesTokenEndpoint.as_view(), | |
| - name="sentry-api-0-project-releases-token", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/completion/$", | |
| - ProjectReleaseSetupCompletionEndpoint.as_view(), | |
| - name="sentry-api-0-project-releases-completion-status", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/$", | |
| - ProjectReleaseDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-release-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/commits/$", | |
| - ProjectReleaseCommitsEndpoint.as_view(), | |
| - name="sentry-api-0-project-release-commits", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/repositories/$", | |
| - ProjectReleaseRepositories.as_view(), | |
| - name="sentry-api-0-project-release-repositories", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/resolved/$", | |
| - ProjectIssuesResolvedInReleaseEndpoint.as_view(), | |
| - name="sentry-api-0-project-release-resolved", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/stats/$", | |
| - ProjectReleaseStatsEndpoint.as_view(), | |
| - name="sentry-api-0-project-release-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/$", | |
| - ProjectReleaseFilesEndpoint.as_view(), | |
| - name="sentry-api-0-project-release-files", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/releases/(?P<version>[^/]+)/files/(?P<file_id>[^/]+)/$", | |
| - ProjectReleaseFileDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-release-file-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/$", | |
| - ProjectRulesEndpoint.as_view(), | |
| - name="sentry-api-0-project-rules", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/$", | |
| - ProjectReplayDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-replay-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/$", | |
| - ProjectReplayRecordingSegmentIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-replay-recording-segment-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^/]+)/(?P<project_slug>[^\/]+)/replays/(?P<replay_id>[\w-]+)/recording-segments/(?P<segment_id>\d+)/$", | |
| - ProjectReplayRecordingSegmentDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-replay-recording-segment-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/configuration/$", | |
| - ProjectRulesConfigurationEndpoint.as_view(), | |
| - name="sentry-api-0-project-rules-configuration", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/$", | |
| - ProjectRuleDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-rule-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/preview$", | |
| - ProjectRulePreviewEndpoint.as_view(), | |
| - name="sentry-api-0-project-rule-preview", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-actions/$", | |
| - ProjectRuleActionsEndpoint.as_view(), | |
| - name="sentry-api-0-project-rule-actions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/group-history/$", | |
| - ProjectRuleGroupHistoryIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-rule-group-history-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rules/(?P<rule_id>[^\/]+)/stats/$", | |
| - ProjectRuleStatsIndexEndpoint.as_view(), | |
| - name="sentry-api-0-project-rule-stats-index", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/rule-task/(?P<task_uuid>[^\/]+)/$", | |
| - ProjectRuleTaskDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-rule-task-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stats/$", | |
| - ProjectStatsEndpoint.as_view(), | |
| - name="sentry-api-0-project-stats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/$", | |
| - ProjectTagsEndpoint.as_view(), | |
| - name="sentry-api-0-project-tags", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/$", | |
| - ProjectTagKeyDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-tagkey-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tags/(?P<key>[^/]+)/values/$", | |
| - ProjectTagKeyValuesEndpoint.as_view(), | |
| - name="sentry-api-0-project-tagkey-values", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/$", | |
| - ProjectTeamsEndpoint.as_view(), | |
| - name="sentry-api-0-project-teams", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/teams/(?P<team_slug>[^\/]+)/$", | |
| - ProjectTeamDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-team-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transfer/$", | |
| - ProjectTransferEndpoint.as_view(), | |
| - name="sentry-api-0-project-transfer", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/$", | |
| - ProjectUsersEndpoint.as_view(), | |
| - name="sentry-api-0-project-users", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/users/(?P<user_hash>[^/]+)/$", | |
| - ProjectUserDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-user-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/(?:user-feedback|user-reports)/$", | |
| - ProjectUserReportsEndpoint.as_view(), | |
| - name="sentry-api-0-project-user-reports", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/user-stats/$", | |
| - ProjectUserStatsEndpoint.as_view(), | |
| - name="sentry-api-0-project-userstats", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/$", | |
| - ProjectProcessingIssuesEndpoint.as_view(), | |
| - name="sentry-api-0-project-processing-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/fix$", | |
| - ProjectProcessingIssuesFixEndpoint.as_view(), | |
| - name="sentry-api-0-project-fix-processing-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/reprocessing/$", | |
| - ProjectReprocessingEndpoint.as_view(), | |
| - name="sentry-api-0-project-reprocessing", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/processingissues/discard/$", | |
| - ProjectProcessingIssuesDiscardEndpoint.as_view(), | |
| - name="sentry-api-0-project-discard-processing-issues", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/ownership/$", | |
| - ProjectOwnershipEndpoint.as_view(), | |
| - name="sentry-api-0-project-ownership", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/$", | |
| - ProjectCodeOwnersEndpoint.as_view(), | |
| - name="sentry-api-0-project-codeowners", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/codeowners/(?P<codeowners_id>[^\/]+)/$", | |
| - ProjectCodeOwnersDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-codeowners-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/transaction-threshold/configure/$", | |
| - ProjectTransactionThresholdEndpoint.as_view(), | |
| - name="sentry-api-0-project-transaction-threshold", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/performance-issues/configure/$", | |
| - ProjectPerformanceIssueSettingsEndpoint.as_view(), | |
| - name="sentry-api-0-project-performance-issue-settings", | |
| - ), | |
| - # Load plugin project urls | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/$", | |
| - ProjectPluginsEndpoint.as_view(), | |
| - name="sentry-api-0-project-plugins", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins/(?P<plugin_id>[^\/]+)/$", | |
| - ProjectPluginDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-project-plugin-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/cluster-transaction-names/$", | |
| - ProjectTransactionNamesCluster.as_view(), | |
| - name="sentry-api-0-organization-project-cluster-transaction-names", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/plugins?/", | |
| - include("sentry.plugins.base.project_api_urls"), | |
| - ), | |
| - # Tombstone | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/$", | |
| - GroupTombstoneEndpoint.as_view(), | |
| - name="sentry-api-0-group-tombstones", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/tombstones/(?P<tombstone_id>\d+)/$", | |
| - GroupTombstoneDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-group-tombstone-details", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/stacktrace-link/$", | |
| - ProjectStacktraceLinkEndpoint.as_view(), | |
| - name="sentry-api-0-project-stacktrace-link", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/repo-path-parsing/$", | |
| - ProjectRepoPathParsingEndpoint.as_view(), | |
| - name="sentry-api-0-project-repo-path-parsing", | |
| - ), | |
| - # Grouping configs | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/grouping-configs/$", | |
| - ProjectGroupingConfigsEndpoint.as_view(), | |
| - name="sentry-api-0-project-grouping-configs", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/$", | |
| - AppStoreConnectCreateCredentialsEndpoint.as_view(), | |
| - name="sentry-api-0-project-appstoreconnect-credentials-create", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/apps/$", | |
| - AppStoreConnectAppsEndpoint.as_view(), | |
| - name="sentry-api-0-project-appstoreconnect-apps", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/status/$", | |
| - AppStoreConnectStatusEndpoint.as_view(), | |
| - name="sentry-api-0-project-appstoreconnect-status", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/$", | |
| - AppStoreConnectUpdateCredentialsEndpoint.as_view(), | |
| - name="sentry-api-0-project-appstoreconnect-credentials-update", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/appstoreconnect/(?P<credentials_id>[^\/]+)/refresh/$", | |
| - AppStoreConnectRefreshEndpoint.as_view(), | |
| - name="sentry-api-0-project-appstoreconnect-refresh", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/functions/$", | |
| - ProjectProfilingFunctionsEndpoint.as_view(), | |
| - name="sentry-api-0-project-profiling-functions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - ProjectProfilingProfileEndpoint.as_view(), | |
| - name="sentry-api-0-project-profiling-profile", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/raw_profiles/(?P<profile_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - ProjectProfilingRawProfileEndpoint.as_view(), | |
| - name="sentry-api-0-project-profiling-raw-profile", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/flamegraph/$", | |
| - ProjectProfilingFlamegraphEndpoint.as_view(), | |
| - name="sentry-api-0-project-profiling-flamegraph", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/profiling/transactions/(?P<transaction_id>(?:\d+|[A-Fa-f0-9-]{32,36}))/$", | |
| - ProjectProfilingTransactionIDProfileIDEndpoint.as_view(), | |
| - name="sentry-api-0-project-profiling-transactions", | |
| - ), | |
| - url( | |
| - r"^(?P<organization_slug>[^\/]+)/(?P<project_slug>[^\/]+)/dynamic-sampling/distribution/$", | |
| - ProjectDynamicSamplingDistributionEndpoint.as_view(), | |
| - name="sentry-api-0-project-dynamic-sampling-distribution", | |
| - ), | |
| - ] | |
| - ), | |
| + include(PROJECT_URLS), | |
| + ), | |
| + # Toplevel app installs | |
| + url( | |
| + r"^sentry-app-installations/", | |
| + include(SENTRY_APP_INSTALLATION_URLS), | |
| + ), | |
| + # Groups / Issues | |
| + url( | |
| + r"^(?:issues|groups)/", | |
| + include(GROUP_URLS), | |
| ), | |
| # Profiling - This is a temporary endpoint to easily go from a project id + profile id to a flamechart. | |
| # It will be removed in the near future. | |
| @@ -2434,11 +2562,6 @@ urlpatterns = [ | |
| ProjectProfilingEventEndpoint.as_view(), | |
| name="sentry-api-0-profiling-project-profile", | |
| ), | |
| - # Groups | |
| - url( | |
| - r"^(?:issues|groups)/", | |
| - include(GROUP_URLS), | |
| - ), | |
| # TODO: include in the /organizations/ route tree + remove old dupe once hybrid cloud launches | |
| url( | |
| r"^organizations/(?P<organization_slug>[^\/]+)/issues/(?P<issue_id>[^\/]+)/participants/$", | |
| @@ -2463,74 +2586,23 @@ urlpatterns = [ | |
| ), | |
| # Sentry Apps | |
| url( | |
| - r"^sentry-apps/$", | |
| - SentryAppsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-apps", | |
| + r"^sentry-apps/", | |
| + include(SENTRY_APP_URLS), | |
| ), | |
| url( | |
| r"^sentry-apps-stats/$", | |
| SentryAppsStatsEndpoint.as_view(), | |
| name="sentry-api-0-sentry-apps-stats", | |
| ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/$", | |
| - SentryAppDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-details", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/features/$", | |
| - SentryAppFeaturesEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-features", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/components/$", | |
| - SentryAppComponentsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-components", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/avatar/$", | |
| - SentryAppAvatarEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-avatar", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/api-tokens/$", | |
| - SentryInternalAppTokensEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-internal-app-tokens", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/api-tokens/(?P<api_token>[^\/]+)/$", | |
| - SentryInternalAppTokenDetailsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-internal-app-token-details", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/stats/$", | |
| - SentryAppStatsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-stats", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/requests/$", | |
| - SentryAppRequestsEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-requests", | |
| - ), | |
| - url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/interaction/$", | |
| - SentryAppInteractionEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-interaction", | |
| - ), | |
| - url( | |
| - r"^organizations/(?P<organization_slug>[^\/]+)/sentry-app-components/$", | |
| - OrganizationSentryAppComponentsEndpoint.as_view(), | |
| - name="sentry-api-0-org-sentry-app-components", | |
| - ), | |
| url( | |
| r"^sentry-app-installations/(?P<uuid>[^\/]+)/authorizations/$", | |
| SentryAppAuthorizationsEndpoint.as_view(), | |
| name="sentry-api-0-sentry-app-authorizations", | |
| ), | |
| url( | |
| - r"^sentry-apps/(?P<sentry_app_slug>[^\/]+)/publish-request/$", | |
| - SentryAppPublishRequestEndpoint.as_view(), | |
| - name="sentry-api-0-sentry-app-publish-request", | |
| + r"^organizations/(?P<organization_slug>[^\/]+)/sentry-app-components/$", | |
| + OrganizationSentryAppComponentsEndpoint.as_view(), | |
| + name="sentry-api-0-org-sentry-app-components", | |
| ), | |
| # Document Integrations | |
| url( | |
| @@ -2572,60 +2644,6 @@ urlpatterns = [ | |
| BuiltinSymbolSourcesEndpoint.as_view(), | |
| name="sentry-api-0-builtin-symbol-sources", | |
| ), | |
| - # Internal | |
| - url( | |
| - r"^internal/", | |
| - include( | |
| - [ | |
| - url( | |
| - r"^health/$", SystemHealthEndpoint.as_view(), name="sentry-api-0-system-health" | |
| - ), | |
| - url( | |
| - r"^options/$", | |
| - SystemOptionsEndpoint.as_view(), | |
| - name="sentry-api-0-system-options", | |
| - ), | |
| - url( | |
| - r"^beacon/$", | |
| - InternalBeaconEndpoint.as_view(), | |
| - name="sentry-api-0-internal-beacon", | |
| - ), | |
| - url( | |
| - r"^quotas/$", | |
| - InternalQuotasEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^queue/tasks/$", | |
| - InternalQueueTasksEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^stats/$", | |
| - InternalStatsEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^warnings/$", | |
| - InternalWarningsEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^packages/$", | |
| - InternalPackagesEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^environment/$", | |
| - InternalEnvironmentEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^mail/$", | |
| - InternalMailEndpoint.as_view(), | |
| - ), | |
| - url( | |
| - r"^project-config/$", | |
| - AdminRelayProjectConfigsEndpoint.as_view(), | |
| - name="sentry-api-0-internal-project-config", | |
| - ), | |
| - ] | |
| - ), | |
| - ), | |
| # Project Wizard | |
| url( | |
| r"^wizard/$", | |
| @@ -2637,6 +2655,11 @@ urlpatterns = [ | |
| SetupWizard.as_view(), | |
| name="sentry-api-0-project-wizard", | |
| ), | |
| + # Internal | |
| + url( | |
| + r"^internal/", | |
| + include(INTERNAL_URLS), | |
| + ), | |
| # Catch all | |
| url( | |
| r"^$", |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment