def manage_project(request, project): result = plugins.first('has_perm', request.user, 'edit_project', project) if result is False and not request.user.has_perm('sentry.can_change_project'): return HttpResponseRedirect(reverse('sentry')) # XXX: We probably shouldnt allow changing the team unless they're the project owner team_list = Team.objects.get_for_user(project.owner or request.user, MEMBER_OWNER) if request.user.has_perm('sentry.can_change_project'): form_cls = EditProjectAdminForm else: form_cls = EditProjectForm form = form_cls(request, team_list, request.POST or None, instance=project, initial={ 'origins': '\n'.join(get_option('sentry:origins', project) or []), 'owner': project.owner, }) if form.is_valid(): project = form.save() set_option('sentry:origins', form.cleaned_data.get('origins') or [], project) return HttpResponseRedirect(request.path + '?success=1') context = csrf(request) context.update({ 'can_remove_project': can_remove_project(request.user, project), 'page': 'details', 'form': form, 'project': project, 'TEAM_LIST': team_list.values(), 'SECTION': 'settings', }) return render_to_response('sentry/projects/manage.html', context, request)
def test_update_is_not_available(self): set_option('sentry:latest_version', '5.5.1') with mock.patch('sentry.get_version') as get_version: get_version.return_value = '5.5.0' resp = self.client.get(self.path) assert self.UPDATE_MESSAGE in resp.content
def test_set_sentry_version_old(self, get_version): set_option(self.KEY, self.NEW) get_version.return_value = self.CURRENT set_sentry_version(latest=self.OLD) self.assertEqual(Option.objects.get_value(key=self.KEY), self.NEW)
def test_set_sentry_version_old(self): set_option(self.KEY, self.NEW) with mock.patch('sentry.get_version') as get_version: get_version.return_value = self.CURRENT set_sentry_version(latest=self.OLD) self.assertEqual(Option.objects.get_value(key=self.KEY), self.NEW)
def set_option(self, key, value, project=None, user=None): """ Updates the value of an option in your plugins keyspace. If ``project`` is passed, it will limit the scope to that project's keyspace. >>> plugin.set_option('my_option', 'http://example.com') """ from sentry.plugins.helpers import set_option return set_option(self._get_option_key(key), value, project, user)
def manage_project(request, project): result = plugins.first("has_perm", request.user, "edit_project", project) if result is False and not request.user.has_perm("sentry.can_change_project"): return HttpResponseRedirect(reverse("sentry")) team_list = Team.objects.get_for_user(request.user, MEMBER_OWNER) if request.user.has_perm("sentry.can_change_project"): form_cls = EditProjectAdminForm else: form_cls = EditProjectForm form = form_cls( request, team_list, request.POST or None, instance=project, initial={"origins": "\n".join(get_option("sentry:origins", project) or []), "owner": project.owner}, ) if form.is_valid(): project = form.save() set_option("sentry:origins", form.cleaned_data.get("origins") or [], project) return HttpResponseRedirect(request.path + "?success=1") if not project.team: member_list = [] else: member_list = [(tm, tm.user) for tm in project.team.member_set.select_related("user")] context = csrf(request) context.update( { "can_remove_project": can_remove_project(request.user, project), "page": "details", "form": form, "project": project, "member_list": member_list, "TEAM_LIST": team_list.values(), } ) return render_to_response("sentry/projects/manage.html", context, request)
def manage_project(request, team, project): result = plugins.first('has_perm', request.user, 'edit_project', project) if result is False and not request.user.has_perm('sentry.can_change_project'): return HttpResponseRedirect(reverse('sentry')) # XXX: We probably shouldnt allow changing the team unless they're the project owner team_list = Team.objects.get_for_user(project.owner or request.user, MEMBER_OWNER) can_admin_project = request.user == project.owner or request.user.has_perm('sentry.can_change_project') if can_admin_project: form_cls = EditProjectAdminForm else: form_cls = EditProjectForm form = form_cls(request, team_list, request.POST or None, instance=project, initial={ 'origins': '\n'.join(get_option('sentry:origins', project) or []), 'owner': project.owner, }) if form.is_valid(): project = form.save() set_option('sentry:origins', form.cleaned_data.get('origins') or [], project) messages.add_message(request, messages.SUCCESS, _('Changes to your project were saved.')) return HttpResponseRedirect(reverse('sentry-manage-project', args=[team.slug, project.slug])) context = csrf(request) context.update({ 'team': team, 'can_remove_project': can_remove_project(request.user, project), 'page': 'details', 'form': form, 'project': project, 'SECTION': 'team', 'SUBSECTION': 'projects' }) return render_to_response('sentry/projects/manage.html', context, request)
def manage_project(request, project): result = plugins.first('has_perm', request.user, 'edit_project', project) if result is False and not request.user.has_perm('sentry.can_change_project'): return HttpResponseRedirect(reverse('sentry')) team_list = Team.objects.get_for_user(request.user, MEMBER_OWNER) if request.user.has_perm('sentry.can_change_project'): form_cls = EditProjectAdminForm else: form_cls = EditProjectForm form = form_cls(request, team_list, request.POST or None, instance=project, initial={ 'origins': '\n'.join(get_option('sentry:origins', project) or []), 'owner': project.owner, }) if form.is_valid(): project = form.save() set_option('sentry:origins', form.cleaned_data.get('origins') or [], project) return HttpResponseRedirect(request.path + '?success=1') if not project.team: member_list = [] else: member_list = [(tm, tm.user) for tm in project.team.member_set.select_related('user')] context = csrf(request) context.update({ 'can_remove_project': can_remove_project(request.user, project), 'page': 'details', 'form': form, 'project': project, 'member_list': member_list, 'TEAM_LIST': team_list.values(), }) return render_to_response('sentry/projects/manage.html', context, request)
def test_set_option_without_project(self): with mock.patch('sentry.models.Option.objects.set_value') as set_value: set_option('key', 'value') set_value.assert_called_once_with('key', 'value')
def test_set_option_with_project(self): with mock.patch('sentry.models.ProjectOption.objects.set_value') as set_value: project = mock.Mock() set_option('key', 'value', project) set_value.assert_called_once_with(project, 'key', 'value')
def test_set_option_with_project(self): with mock.patch("sentry.models.ProjectOption.objects.set_value") as set_value: project = mock.Mock() set_option("key", "value", project) set_value.assert_called_once_with(project, "key", "value")