diff --git a/sentry/models.py b/sentry/models.py index f5063dc6837cd4..cdf6acdf141d31 100644 --- a/sentry/models.py +++ b/sentry/models.py @@ -101,6 +101,7 @@ def delete(self): # TODO: this doesnt clean up the index for model in (Event, Group, FilterValue, MessageFilterValue, MessageCountByMinute): model.objects.filter(project=self).delete() + super(Project, self).delete() def merge_to(self, project): for model in (Event, Group, MessageFilterValue, MessageCountByMinute): diff --git a/sentry/web/forms.py b/sentry/web/forms.py index 87e24421ced0fe..036b1737e69bb7 100644 --- a/sentry/web/forms.py +++ b/sentry/web/forms.py @@ -71,6 +71,10 @@ def clean(self): raise forms.ValidationError('You must select a project to migrate data') return data + def clean_project(self): + project_id = self.cleaned_data['project'] + return Project.objects.get(id=project_id) + class NewProjectForm(forms.ModelForm): class Meta: diff --git a/sentry/web/frontend/generic.py b/sentry/web/frontend/generic.py index da3bdf510042a4..e84d8de1e6fc42 100644 --- a/sentry/web/frontend/generic.py +++ b/sentry/web/frontend/generic.py @@ -14,16 +14,13 @@ from django.http import HttpResponseRedirect, Http404, HttpResponseNotModified, \ HttpResponse from djkombu.models import Queue -from django.template.loader import render_to_string -from django.template import RequestContext from sentry import environment from sentry.conf import settings -from sentry.models import Option from sentry.plugins import Plugin from sentry.web.decorators import login_required from sentry.web.helpers import get_project_list, render_to_response, \ - get_login_url + get_login_url, plugin_config @login_required @@ -36,39 +33,6 @@ def dashboard(request): return render_to_response('sentry/dashboard.html', request=request) -def _site_config(plugin, request): - """ - Configure the plugin site wide. - - returns a tuple composed of a redirection boolean and the content to - be displayed. - """ - - plugin_key = plugin.site_conf_title.lower() - initials = {} - for field in plugin.site_conf_form.base_fields: - key = '%s:%s' % (plugin_key, field) - value = Option.objects.get_value(key, None) - if value: - initials[field] = value - - form = plugin.site_conf_form( - request.POST or None, - initial=initials, - prefix=plugin_key - ) - if form.is_valid(): - for key, value in form.cleaned_data.iteritems(): - option_key = '%s:%s' % (plugin_key, key) - Option.objects.set_value(option_key, value) - - return ('redirect', None) - - return ('display', render_to_string(plugin.site_conf_template, { - 'form': form, - }, context_instance=RequestContext(request))) - - @login_required def status(request): from sentry.views import View @@ -78,7 +42,7 @@ def status(request): site_configs = [] for name, cls in Plugin.plugins.iteritems(): if hasattr(cls, 'site_conf_form'): - action, view = _site_config(cls, request) + action, view = plugin_config(cls, None, request) if action == 'redirect': return redirect(request.path) item = { diff --git a/sentry/web/helpers.py b/sentry/web/helpers.py index 6b69af6055ece0..e82db1b20d3dcc 100644 --- a/sentry/web/helpers.py +++ b/sentry/web/helpers.py @@ -15,7 +15,7 @@ from sentry.conf import settings from sentry.models import ProjectMember, Project, View, \ - MEMBER_USER + MEMBER_USER, Option, ProjectOption logger = logging.getLogger('sentry.errors') @@ -109,3 +109,47 @@ def render_to_response(template, context=None, request=None, status=200): response.status_code = status return response + + +def plugin_config(plugin, project, request): + """ + Configure the plugin site wide. + + returns a tuple composed of a redirection boolean and the content to + be displayed. + """ + + plugin_key = plugin.site_conf_title.lower() + if project: + form_class = plugin.project_conf_form + else: + form_class = plugin.site_conf_form + initials = {} + for field in form_class.base_fields: + key = '%s:%s' % (plugin_key, field) + if project: + value = ProjectOption.objects.get_value(project, key, None) + else: + value = Option.objects.get_value(key, None) + if value: + initials[field] = value + + form = form_class( + request.POST or None, + initial=initials, + prefix=plugin_key + ) + if form.is_valid(): + for field, value in form.cleaned_data.iteritems(): + key = '%s:%s' % (plugin_key, field) + if project: + ProjectOption.objects.set_value(project, key, value) + else: + Option.objects.set_value(key, value) + + return ('redirect', None) + + from django.template.loader import render_to_string + return ('display', render_to_string(plugin.site_conf_template, { + 'form': form, + }, context_instance=RequestContext(request)))