Browse Source

Remove magical settings and migrate internals to constants

David Cramer 11 years ago
parent
commit
1dfacde6f0

+ 9 - 0
CHANGES

@@ -25,6 +25,15 @@ Incompatible Changes
 - Nearly all data within an event now has a fixed max size. See client
   developer documentation for details.
 - Project keys are no longer created for individuals by default
+- LOG_LEVELS, DEFAULT_LOG_LEVEL, and DEFAULT_LOGGER_NAME are no longer configurable.
+- DEFAULT_ALERT_PROJECT_THRESHOLD and DEFAULT_ALERT_GROUP_THRESHOLD are no longer
+  configurable.
+- SENTRY_EMAIL_SUBJECT_PREFIX and SENTRY_SERVER_EMAIL are no longer used, and default to
+  the appropriate Django options.
+- SENTRY_CACHE_BACKEND is no longer configurable.
+- SENTRY_AUTH_PROVIDERS is now AUTH_PROVIDERS.
+- Existing account recovery tokens are no longer valid.
+- sentry.utils.router has been removed.
 
 Protocol Version 4
 ==================

+ 26 - 82
docs/config/index.rst

@@ -3,19 +3,6 @@ Configuration
 
 This document describes additional configuration options available to the Sentry server. If you are looking for documentation for the client, it is maintained in the `Raven <http://github.com/getsentry/raven-python>`_ project.
 
-.. note:: While the options below are labeled without the ``SENTRY_`` prefix, when you are configuring them via your ``settings.py`` you **must** specify the prefix.
-
-.. data:: SENTRY_KEY
-    :noindex:
-
-    The shared secret for global administration privileges via the API.
-
-    We recommend using Project API keys to maintain access, as using a shared key provides a potential security risk.
-
-    ::
-
-    	SENTRY_KEY = '0123456789abcde'
-
 .. data:: SENTRY_URL_PREFIX
     :noindex:
 
@@ -27,42 +14,6 @@ This document describes additional configuration options available to the Sentry
 
 		SENTRY_URL_PREFIX = 'http://sentry.example.com'
 
-.. data:: SENTRY_SAMPLE_DATA
-    :noindex:
-
-	.. versionadded:: 1.10.0
-
-	Controls sampling of data.
-
-	Defaults to ``True``.
-
-	If this is enabled, data will be sampled in a manner similar to the following:
-
-	* 50 messages stores ~50 results
-	* 1000 messages stores ~400 results
-	* 10000 messages stores ~900 results
-	* 100000 messages stores ~1800 results
-	* 1000000 messages stores ~3600 results
-	* 10000000 messages stores ~4500 results
-
-	::
-
-		SENTRY_SAMPLE_DATA = False
-
-.. data:: SENTRY_LOG_LEVELS
-    :noindex:
-
-    A list of log levels, with their numeric value, as well as their short name.
-
-    ::
-
-        LOG_LEVELS = (
-            (logging.DEBUG, 'debug'),
-            (logging.INFO, 'info'),
-            (logging.WARNING, 'warning'),
-            (logging.ERROR, 'error'),
-            (logging.FATAL, 'fatal'),
-        )
 
 Authentication
 --------------
@@ -149,39 +100,6 @@ Authentication
 .. _Mozilla developer docs: https://developer.mozilla.org/En/HTTP_access_control#Simple_requests
 
 
-Notifications
--------------
-
-As of the current release, Sentry now designates its notification processing to plugins. Specifically, the email
-notifications have been moved to the ``sentry.plugins.sentry_mail``. You'll need to add this plugin to your
-``INSTALLED_APPS`` if you wish to continue using email notifications.
-
-The following settings now act as default values for the ``sentry_mail`` plugin, and can be overwritten per-project
-by visiting the plugin configuration page for that project.
-
-.. data:: SENTRY_EMAIL_SUBJECT_PREFIX
-    :noindex:
-
-	The prefix to apply to outgoing emails.
-
-	Defaults to ``""``.
-
-	::
-
-		SENTRY_EMAIL_SUBJECT_PREFIX = '[Sentry] '
-
-
-.. data:: SENTRY_SERVER_EMAIL
-    :noindex:
-
-	The reply-to email address for outgoing mail.
-
-	Defaults to ``root@localhost``.
-
-	::
-
-		SENTRY_SERVER_EMAIL = 'sentry@example.com'
-
 Services
 --------
 
@@ -256,3 +174,29 @@ The following settings are available for the built-in UDP API server:
     ::
 
         SENTRY_UDP_PORT = 9001
+
+
+Data Sampling
+-------------
+
+.. data:: SENTRY_SAMPLE_DATA
+    :noindex:
+
+    .. versionadded:: 1.10.0
+
+    Controls sampling of data.
+
+    Defaults to ``True``.
+
+    If this is enabled, data will be sampled in a manner similar to the following:
+
+    * 50 messages stores ~50 results
+    * 1000 messages stores ~400 results
+    * 10000 messages stores ~900 results
+    * 100000 messages stores ~1800 results
+    * 1000000 messages stores ~3600 results
+    * 10000000 messages stores ~4500 results
+
+    ::
+
+        SENTRY_SAMPLE_DATA = False

+ 2 - 2
src/sentry/app.py

@@ -6,7 +6,7 @@ sentry.app
 :license: BSD, see LICENSE for more details.
 """
 
-from sentry.conf import settings
+from django.conf import settings
 from sentry.utils.imports import import_string
 from threading import local
 
@@ -20,5 +20,5 @@ def get_instance(path, options):
     cls = import_string(path)
     return cls(**options)
 
-buffer = get_instance(settings.BUFFER, settings.BUFFER_OPTIONS)
+buffer = get_instance(settings.SENTRY_BUFFER, settings.SENTRY_BUFFER_OPTIONS)
 env = State()

+ 2 - 2
src/sentry/buffer/redis.py

@@ -18,12 +18,12 @@ for package in ('nydus', 'redis'):
             'Missing %r package, which is required for Redis buffers' % (
                 package,))
 
+from django.conf import settings
 from django.db import models
 from django.utils.encoding import smart_str
 from hashlib import md5
 from nydus.db import create_cluster
 from sentry.buffer import Buffer
-from sentry.conf import settings
 from sentry.utils.compat import pickle
 
 
@@ -33,7 +33,7 @@ class RedisBuffer(Buffer):
     def __init__(self, **options):
         if not options:
             # inherit default options from REDIS_OPTIONS
-            options = settings.REDIS_OPTIONS
+            options = settings.SENTRY_REDIS_OPTIONS
 
         super(RedisBuffer, self).__init__(**options)
         options.setdefault('hosts', {

+ 0 - 170
src/sentry/conf/defaults.py

@@ -1,170 +0,0 @@
-"""
-sentry.conf.defaults
-~~~~~~~~~~~~~~~~~~~~
-
-Represents the default values for all Sentry settings.
-
-:copyright: (c) 2010-2013 by the Sentry Team, see AUTHORS for more details.
-:license: BSD, see LICENSE for more details.
-"""
-
-import logging
-import os
-import os.path
-
-MODULE_ROOT = os.path.dirname(__import__('sentry').__file__)
-
-# Allow local testing of Sentry even if DEBUG is enabled
-DEBUG = False
-
-FILTERS = (
-    'sentry.filters.StatusFilter',
-)
-
-KEY = None
-
-LOG_LEVELS = (
-    (logging.DEBUG, 'debug'),
-    (logging.INFO, 'info'),
-    (logging.WARNING, 'warning'),
-    (logging.ERROR, 'error'),
-    (logging.FATAL, 'fatal'),
-)
-
-DEFAULT_LOG_LEVEL = 'error'
-
-DEFAULT_LOGGER_NAME = 'root'
-
-# Absolute URL to the sentry root directory. Should not include a trailing slash.
-URL_PREFIX = ''
-
-# Allow access to Sentry without authentication.
-PUBLIC = False
-
-EMAIL_SUBJECT_PREFIX = ''
-
-INTERNAL_IPS = set()
-
-SERVER_EMAIL = 'root@localhost'
-
-LOGIN_URL = None
-
-PROJECT = 1
-
-# Only store a portion of all messages per unique group.
-SAMPLE_DATA = True
-
-# The following values control the sampling rates
-SAMPLE_RATES = (
-    (50, 1),
-    (1000, 2),
-    (10000, 10),
-    (100000, 50),
-    (1000000, 300),
-    (10000000, 2000),
-)
-
-MAX_SAMPLE_RATE = 10000
-
-SAMPLE_TIMES = (
-    (3600, 1),
-    (360, 10),
-    (60, 60),
-)
-
-MAX_SAMPLE_TIME = 10000
-
-# The number of events to display per page
-MESSAGES_PER_PAGE = 15
-
-# Web Service
-WEB_HOST = 'localhost'
-WEB_PORT = 9000
-WEB_OPTIONS = {
-    'workers': 3,
-}
-
-# UDP Service
-UDP_HOST = 'localhost'
-UDP_PORT = 9001
-
-# Queue (Kombu)
-QUEUE = {
-    'transport': 'kombu.transport.django.Transport',
-}
-
-# Should users without 'sentry.add_project' permissions be allowed
-# to create new projects
-ALLOW_PROJECT_CREATION = False
-
-# Should users without 'sentry.add_team' permissions be allowed
-# to create new projects
-ALLOW_TEAM_CREATION = False
-
-# Should users without superuser permissions be allowed to
-# make projects public
-ALLOW_PUBLIC_PROJECTS = True
-
-# Should users be allowed to register an account? If this is disabled
-# accounts can only be created when someone is invited or added
-# manually.
-ALLOW_REGISTRATION = True
-
-# Instructs Sentry to utilize it's internal search indexer on all incoming
-# events..
-USE_SEARCH = True
-
-# Enable trend results. These can be expensive and are calculated in real-time.
-# When disabled they will be replaced w/ a default priority sort.
-USE_TRENDING = True
-
-# Default sort option for the group stream
-DEFAULT_SORT_OPTION = 'date'
-
-# Default sort option for the search results
-SEARCH_DEFAULT_SORT_OPTION = 'date'
-
-# Default to not sending the Access-Control-Allow-Origin header on api/store
-ALLOW_ORIGIN = None
-
-# Enable scraping of javascript context for source code
-SCRAPE_JAVASCRIPT_CONTEXT = True
-
-# The alias for the cache backend (MUST be a compatible backend string for < 1.3)
-CACHE_BACKEND = 'dummy://'
-
-# The maximum number of events which can be requested as JSON
-MAX_JSON_RESULTS = 1000
-
-# Redis connection information (see Nydus documentation)
-REDIS_OPTIONS = {}
-
-# Buffer backend to use
-BUFFER = 'sentry.buffer.Buffer'
-BUFFER_OPTIONS = {}
-
-# Auth engines and the settings required for them to be listed
-AUTH_PROVIDERS = {
-    'twitter': ('TWITTER_CONSUMER_KEY', 'TWITTER_CONSUMER_SECRET'),
-    'facebook': ('FACEBOOK_APP_ID', 'FACEBOOK_API_SECRET'),
-    'github': ('GITHUB_APP_ID', 'GITHUB_API_SECRET'),
-    'google': ('GOOGLE_OAUTH2_CLIENT_ID', 'GOOGLE_OAUTH2_CLIENT_SECRET'),
-    'trello': ('TRELLO_API_KEY', 'TRELLO_API_SECRET'),
-    'bitbucket': ('BITBUCKET_CONSUMER_KEY', 'BITBUCKET_CONSUMER_SECRET'),
-}
-
-
-# Default alerting threshold values
-DEFAULT_ALERT_PROJECT_THRESHOLD = (500, 100)  # 500%, 100 events
-DEFAULT_ALERT_GROUP_THRESHOLD = (1000, 100)  # 1000%, 100 events
-
-RAVEN_JS_URL = 'd3nslu0hdya83q.cloudfront.net/dist/1.0/raven.min.js'
-
-# URI Prefixes for generating DSN URLs
-# (Defaults to URL_PREFIX by default)
-ENDPOINT = None
-PUBLIC_ENDPOINT = None
-
-# Early draft features. Not slated or public release yet.
-ENABLE_EXPLORE_CODE = False
-ENABLE_EXPLORE_USERS = False

+ 120 - 9
src/sentry/conf/server.py

@@ -69,6 +69,7 @@ if 'DATABASE_URL' in os.environ:
     if url.scheme == 'mysql':
         DATABASES['default']['ENGINE'] = 'django.db.backends.mysql'
 
+EMAIL_SUBJECT_PREFIX = '[Sentry] '
 
 # Local time zone for this installation. Choices can be found here:
 # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
@@ -227,6 +228,16 @@ SOCIAL_AUTH_PIPELINE = (
 
 SOCIAL_AUTH_CREATE_USERS = True
 
+# Auth engines and the settings required for them to be listed
+AUTH_PROVIDERS = {
+    'twitter': ('TWITTER_CONSUMER_KEY', 'TWITTER_CONSUMER_SECRET'),
+    'facebook': ('FACEBOOK_APP_ID', 'FACEBOOK_API_SECRET'),
+    'github': ('GITHUB_APP_ID', 'GITHUB_API_SECRET'),
+    'google': ('GOOGLE_OAUTH2_CLIENT_ID', 'GOOGLE_OAUTH2_CLIENT_SECRET'),
+    'trello': ('TRELLO_API_KEY', 'TRELLO_API_SECRET'),
+    'bitbucket': ('BITBUCKET_CONSUMER_KEY', 'BITBUCKET_CONSUMER_SECRET'),
+}
+
 import random
 
 SOCIAL_AUTH_DEFAULT_USERNAME = lambda: random.choice(['Darth Vader', 'Obi-Wan Kenobi', 'R2-D2', 'C-3PO', 'Yoda'])
@@ -261,15 +272,6 @@ CELERY_QUEUES = (
     Queue('update', routing_key='update'),
 )
 
-
-# Sentry and Raven configuration
-
-SENTRY_PUBLIC = False
-SENTRY_PROJECT = 1
-SENTRY_CACHE_BACKEND = 'default'
-
-EMAIL_SUBJECT_PREFIX = '[Sentry] '
-
 # Disable South in tests as it is sending incorrect create signals
 SOUTH_TESTS_MIGRATE = True
 
@@ -399,6 +401,115 @@ if os.path.exists(NPM_ROOT):
         },
     }
 
+# Sentry and Raven configuration
+
+SENTRY_PUBLIC = False
+SENTRY_PROJECT = 1
+SENTRY_CACHE_BACKEND = 'default'
+
+SENTRY_FILTERS = (
+    'sentry.filters.StatusFilter',
+)
+
+SENTRY_KEY = None
+
+# Absolute URL to the sentry root directory. Should not include a trailing slash.
+SENTRY_URL_PREFIX = ''
+
+# Allow access to Sentry without authentication.
+SENTRY_PUBLIC = False
+
+# Login url (defaults to LOGIN_URL)
+SENTRY_LOGIN_URL = None
+
+# Default project ID (for internal errors)
+SENTRY_PROJECT = 1
+
+# Only store a portion of all messages per unique group.
+SENTRY_SAMPLE_DATA = True
+
+# The following values control the sampling rates
+SENTRY_SAMPLE_RATES = (
+    (50, 1),
+    (1000, 2),
+    (10000, 10),
+    (100000, 50),
+    (1000000, 300),
+    (10000000, 2000),
+)
+SENTRY_MAX_SAMPLE_RATE = 10000
+SENTRY_SAMPLE_TIMES = (
+    (3600, 1),
+    (360, 10),
+    (60, 60),
+)
+SENTRY_MAX_SAMPLE_TIME = 10000
+
+# Web Service
+SENTRY_WEB_HOST = 'localhost'
+SENTRY_WEB_PORT = 9000
+SENTRY_WEB_OPTIONS = {
+    'workers': 3,
+}
+
+# UDP Service
+SENTRY_UDP_HOST = 'localhost'
+SENTRY_UDP_PORT = 9001
+
+# Queue (Kombu)
+SENTRY_QUEUE = {
+    'transport': 'kombu.transport.django.Transport',
+}
+
+# Should users without 'sentry.add_project' permissions be allowed
+# to create new projects
+SENTRY_ALLOW_PROJECT_CREATION = False
+
+# Should users without 'sentry.add_team' permissions be allowed
+# to create new projects
+SENTRY_ALLOW_TEAM_CREATION = False
+
+# Should users without superuser permissions be allowed to
+# make projects public
+SENTRY_ALLOW_PUBLIC_PROJECTS = True
+
+# Should users be allowed to register an account? If this is disabled
+# accounts can only be created when someone is invited or added
+# manually.
+SENTRY_ALLOW_REGISTRATION = True
+
+# Instructs Sentry to utilize it's internal search indexer on all incoming
+# events..
+SENTRY_USE_SEARCH = True
+
+# Enable trend results. These can be expensive and are calculated in real-time.
+# When disabled they will be replaced w/ a default priority sort.
+SENTRY_USE_TRENDING = True
+
+# Default to not sending the Access-Control-Allow-Origin header on api/store
+SENTRY_ALLOW_ORIGIN = None
+
+# Enable scraping of javascript context for source code
+SENTRY_SCRAPE_JAVASCRIPT_CONTEXT = True
+
+# Redis connection information (see Nydus documentation)
+SENTRY_REDIS_OPTIONS = {}
+
+# Buffer backend to use
+SENTRY_BUFFER = 'sentry.buffer.Buffer'
+SENTRY_BUFFER_OPTIONS = {}
+
+SENTRY_RAVEN_JS_URL = 'd3nslu0hdya83q.cloudfront.net/dist/1.0/raven.min.js'
+
+# URI Prefixes for generating DSN URLs
+# (Defaults to URL_PREFIX by default)
+SENTRY_ENDPOINT = None
+SENTRY_PUBLIC_ENDPOINT = None
+
+# Early draft features. Not slated or public release yet.
+SENTRY_ENABLE_EXPLORE_CODE = False
+SENTRY_ENABLE_EXPLORE_USERS = False
+
 # Configure celery
 import djcelery
 djcelery.setup_loader()

+ 0 - 48
src/sentry/conf/settings.py

@@ -1,48 +0,0 @@
-"""
-sentry.conf.settings
-~~~~~~~~~~~~~~~~~~~~
-
-:copyright: (c) 2010-2013 by the Sentry Team, see AUTHORS for more details.
-:license: BSD, see LICENSE for more details.
-"""
-
-from sentry.conf.defaults import *  # NOQA
-
-from django.conf import settings
-
-import hashlib
-
-# Some sane overrides to better mix with Django
-DEBUG = getattr(settings, 'DEBUG', False) and not getattr(settings, 'SENTRY_TESTING', False)
-KEY = getattr(settings, 'SENTRY_KEY', hashlib.md5(settings.SECRET_KEY).hexdigest())
-EMAIL_SUBJECT_PREFIX = getattr(settings, 'EMAIL_SUBJECT_PREFIX', EMAIL_SUBJECT_PREFIX)
-INTERNAL_IPS = getattr(settings, 'INTERNAL_IPS', INTERNAL_IPS)
-SERVER_EMAIL = getattr(settings, 'SERVER_EMAIL', SERVER_EMAIL)
-
-for k in dir(settings):
-    if k.startswith('SENTRY_'):
-        locals()[k.split('SENTRY_', 1)[1]] = getattr(settings, k)
-
-if locals().get('REMOTE_URL'):
-    if isinstance(REMOTE_URL, basestring):
-        SERVERS = [REMOTE_URL]
-    elif not isinstance(REMOTE_URL, (list, tuple)):
-        raise ValueError("Sentry setting 'REMOTE_URL' must be of type list.")
-
-if locals().get('REMOTE_TIMEOUT'):
-    TIMEOUT = REMOTE_TIMEOUT
-
-
-def get_all_languages():
-    results = []
-    for path in os.listdir(os.path.join(MODULE_ROOT, 'locale')):
-        if path.startswith('.'):
-            continue
-        results.append(path)
-    return results
-
-# Setup languages for only available locales
-LANGUAGE_MAP = dict(settings.LANGUAGES)
-LANGUAGES = [(k, LANGUAGE_MAP[k]) for k in get_all_languages() if k in LANGUAGE_MAP]
-
-LOG_LEVEL_REVERSE_MAP = dict((str(v), k) for k, v in LOG_LEVELS)

+ 44 - 0
src/sentry/constants.py

@@ -7,10 +7,24 @@ These settings act as the default (base) settings for the Sentry-provided web-se
 :copyright: (c) 2010-2013 by the Sentry Team, see AUTHORS for more details.
 :license: BSD, see LICENSE for more details.
 """
+import logging
+import os.path
 
+from django.conf import settings
 from django.utils.datastructures import SortedDict
 from django.utils.translation import ugettext_lazy as _
 
+
+def get_all_languages():
+    results = []
+    for path in os.listdir(os.path.join(MODULE_ROOT, 'locale')):
+        if path.startswith('.'):
+            continue
+        results.append(path)
+    return results
+
+MODULE_ROOT = os.path.dirname(__import__('sentry').__file__)
+
 SORT_OPTIONS = SortedDict((
     ('priority', _('Priority')),
     ('date', _('Last Seen')),
@@ -175,3 +189,33 @@ MAX_DICTIONARY_ITEMS = 50
 RESERVED_TEAM_SLUGS = (
     'admin', 'manage', 'login', 'account', 'register', 'api',
 )
+
+LOG_LEVELS = {
+    logging.DEBUG: 'debug',
+    logging.INFO: 'info',
+    logging.WARNING: 'warning',
+    logging.ERROR: 'error',
+    logging.FATAL: 'fatal',
+}
+DEFAULT_LOG_LEVEL = 'error'
+DEFAULT_LOGGER_NAME = 'root'
+
+# Default alerting threshold values
+DEFAULT_ALERT_PROJECT_THRESHOLD = (500, 100)  # 500%, 100 events
+DEFAULT_ALERT_GROUP_THRESHOLD = (1000, 100)  # 1000%, 100 events
+
+# The maximum number of events which can be requested as JSON
+MAX_JSON_RESULTS = 1000
+
+# Default paginator value
+EVENTS_PER_PAGE = 15
+
+# Default sort option for the group stream
+DEFAULT_SORT_OPTION = 'date'
+
+# Default sort option for the search results
+SEARCH_DEFAULT_SORT_OPTION = 'date'
+
+# Setup languages for only available locales
+LANGUAGE_MAP = dict(settings.LANGUAGES)
+LANGUAGES = [(k, LANGUAGE_MAP[k]) for k in get_all_languages() if k in LANGUAGE_MAP]

+ 7 - 5
src/sentry/coreapi.py

@@ -18,7 +18,7 @@ import zlib
 from django.utils.encoding import smart_str
 
 from sentry.app import env
-from sentry.conf import settings
+from sentry.constants import DEFAULT_LOG_LEVEL, LOG_LEVELS
 from sentry.exceptions import InvalidTimestamp
 from sentry.models import Project, ProjectKey
 from sentry.tasks.store import preprocess_event
@@ -30,6 +30,8 @@ from sentry.utils.strings import decompress, truncatechars
 
 logger = logging.getLogger('sentry.coreapi.errors')
 
+LOG_LEVEL_REVERSE_MAP = dict((v, k) for k, v in LOG_LEVELS.iteritems())
+
 MAX_CULPRIT_LENGTH = 200
 MAX_MESSAGE_LENGTH = 2048
 
@@ -342,17 +344,17 @@ def validate_data(project, data, client=None):
             log('Discarded invalid value for interface: %s', k,
                 **client_metadata(client, project, exception=e, extra={'value': value}))
 
-    level = data.get('level') or settings.DEFAULT_LOG_LEVEL
+    level = data.get('level') or DEFAULT_LOG_LEVEL
     if isinstance(level, basestring) and not level.isdigit():
         # assume it's something like 'warning'
         try:
-            data['level'] = settings.LOG_LEVEL_REVERSE_MAP[level]
+            data['level'] = LOG_LEVEL_REVERSE_MAP[level]
         except KeyError, e:
             logger.info(
                 'Discarded invalid logger value: %s', level,
                 **client_metadata(client, project, exception=e))
-            data['level'] = settings.LOG_LEVEL_REVERSE_MAP.get(
-                settings.DEFAULT_LOG_LEVEL, settings.DEFAULT_LOG_LEVEL)
+            data['level'] = LOG_LEVEL_REVERSE_MAP.get(
+                DEFAULT_LOG_LEVEL, DEFAULT_LOG_LEVEL)
 
     return data
 

+ 2 - 2
src/sentry/filters/helpers.py

@@ -13,8 +13,8 @@ __all__ = ('get_filters',)
 
 import logging
 
+from django.conf import settings
 from django.utils.translation import ugettext_lazy as _
-from sentry.conf import settings
 from sentry.filters.base import TagFilter
 from sentry.plugins import plugins
 from sentry.utils.safe import safe_execute
@@ -28,7 +28,7 @@ def get_filters(model=None, project=None):
     filter_list = []
 
     # Add builtins (specified with the FILTERS setting)
-    for class_path in settings.FILTERS:
+    for class_path in settings.SENTRY_FILTERS:
         if class_path not in FILTER_CACHE:
             module_name, class_name = class_path.rsplit('.', 1)
             try:

Some files were not shown because too many files changed in this diff