Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sentry/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down
4 changes: 4 additions & 0 deletions sentry/web/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
40 changes: 2 additions & 38 deletions sentry/web/frontend/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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 = {
Expand Down
46 changes: 45 additions & 1 deletion sentry/web/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -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')

Expand Down Expand Up @@ -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)))