def process_request(self, request): projects = get_project_settings() host = request.get_host() try: regex, (project_name, project_suffix, project_settings) = projects[request.META['HTTP_X_PROJECT']] except KeyError: logger.warning("X-Project not set in the request headers, falling back to regexp resolution!") for regex, (project_name, project_suffix, project_settings) in projects.values(): if regex.search(host): break else: if projects: return HttpResponseServerError("No project found for the given host: %s" % host) project_suffix = project_name = None if project_suffix: project = '%s.%s' % (project_name, project_suffix) else: project = project_name # Settings and urls override: from raven.contrib.django.models import client from .urls import get_urls settings.clear(project_settings) settings.PROJECT_NAME, settings.PROJECT_SUFFIX = project_name, project_suffix settings.PROJECT = project client.set_dsn(settings.RAVEN_CONFIG['dsn']) urlpatterns = get_urls(settings.PROJECT_NAME, settings.PROJECT_SUFFIX) request.urlconf = urlpatterns
def on_task_postrun(sender, **kwargs): if not getattr(sender.run, '_django_task', False): return if not getattr(sender.request, 'is_eager', False): original_settings = getattr(sender.request, 'original_settings', None) # Restore settings: try: from raven.contrib.django.models import client except ImportError: pass else: client.set_dsn(settings.RAVEN_CONFIG['dsn']) settings.clear(original_settings)
def on_task_prerun(sender, **kwargs): if not getattr(sender.run, '_django_task', False): return local_settings = kwargs['kwargs'].pop('local_settings', None) if not isinstance(local_settings, dict): warnings.warn("%s.%s task must be called with a valid local_settings named argument" % (sender.run.__module__, sender.run.__name__)) return if not getattr(sender.request, 'is_eager', False): # Setup settings: try: from raven.contrib.django.models import client except ImportError: pass else: # setting here client.set_dsn(settings.RAVEN_CONFIG['dsn']) sender.request.original_settings = settings.load() local_settings = hydrate(local_settings) settings.clear(local_settings)
def process_response(self, request, response): from raven.contrib.django.models import client settings.clear() # If not running tests, cleanup settings (requires patch #12737-thread_local_settings.diff): client.set_dsn(settings.RAVEN_CONFIG['dsn']) return response