Esempio n. 1
0
    def view(self, request, group, **kwargs):
        has_auth_configured = self.has_auth_configured()
        if not (has_auth_configured and self.is_configured(project=group.project, request=request)):
            if self.auth_provider:
                required_auth_settings = settings.AUTH_PROVIDERS[self.auth_provider]
            else:
                required_auth_settings = None

            project = group.project

            return self.render(
                self.not_configured_template,
                {
                    "title": self.get_title(),
                    "project": group.project,
                    "has_auth_configured": has_auth_configured,
                    "required_auth_settings": required_auth_settings,
                    "plugin_link": "/settings/{}/projects/{}/plugins/{}/".format(
                        project.organization.slug, project.slug, self.slug
                    ),
                },
            )

        if self.needs_auth(project=group.project, request=request):
            return self.render(
                self.needs_auth_template, {"title": self.get_title(), "project": group.project}
            )

        if GroupMeta.objects.get_value(group, "%s:tid" % self.get_conf_key(), None):
            if self.can_unlink_issues and request.GET.get("unlink"):
                return self.handle_unlink_issue(request, group, **kwargs)
            return None

        prefix = self.get_conf_key()
        event = group.get_latest_event()

        op = request.POST.get("op", "create")

        create_form = self.get_new_issue_form(request, group, event)
        link_form = None
        if self.can_link_existing_issues:
            link_form = self.get_link_existing_issue_form(request, group, event)

        if op == "create":
            if create_form.is_valid():
                try:
                    issue_id = self.create_issue(
                        group=group, form_data=create_form.cleaned_data, request=request
                    )
                except forms.ValidationError as e:
                    create_form.errors["__all__"] = ["Error creating issue: %s" % e]

            if create_form.is_valid():
                GroupMeta.objects.set_value(group, "%s:tid" % prefix, issue_id)

                issue_information = {
                    "title": create_form.cleaned_data["title"],
                    "provider": self.get_title(),
                    "location": self.get_issue_url(group, issue_id),
                    "label": self.get_issue_label(group=group, issue_id=issue_id),
                }
                Activity.objects.create(
                    project=group.project,
                    group=group,
                    type=Activity.CREATE_ISSUE,
                    user=request.user,
                    data=issue_information,
                )

                issue_tracker_used.send_robust(
                    plugin=self,
                    project=group.project,
                    user=request.user,
                    sender=IssueTrackingPlugin,
                )
                return self.redirect(group.get_absolute_url())

        elif op == "link":
            if link_form.is_valid():
                try:
                    self.link_issue(group=group, form_data=link_form.cleaned_data, request=request)
                except forms.ValidationError as e:
                    link_form.errors["__all__"] = ["Error creating issue: %s" % e]

            if link_form.is_valid():
                issue_id = int(link_form.cleaned_data["issue_id"])
                GroupMeta.objects.set_value(group, "%s:tid" % prefix, issue_id)
                issue_information = {
                    "title": self.get_issue_title_by_id(request, group, issue_id),
                    "provider": self.get_title(),
                    "location": self.get_issue_url(group, issue_id),
                    "label": self.get_issue_label(group=group, issue_id=issue_id),
                }
                Activity.objects.create(
                    project=group.project,
                    group=group,
                    type=Activity.CREATE_ISSUE,
                    user=request.user,
                    data=issue_information,
                )

                return self.redirect(group.get_absolute_url())

        context = {
            "create_form": create_form,
            # pass in 'form' for legacy compat
            "form": create_form,
            "title": self.get_new_issue_title(),
            "read_only_fields": self.get_new_issue_read_only_fields(group=group),
            "can_link_existing_issues": self.can_link_existing_issues,
            "link_form": link_form,
            "op": op,
        }

        return self.render(self.create_issue_template, context)
Esempio n. 2
0
    def view(self, request, group, **kwargs):
        has_auth_configured = self.has_auth_configured()
        if not (has_auth_configured and self.is_configured(
                project=group.project, request=request)):
            if self.auth_provider:
                required_auth_settings = settings.AUTH_PROVIDERS[self.auth_provider]
            else:
                required_auth_settings = None

            return self.render(
                self.not_configured_template, {
                    'title': self.get_title(),
                    'project': group.project,
                    'has_auth_configured': has_auth_configured,
                    'required_auth_settings': required_auth_settings,
                }
            )

        if self.needs_auth(project=group.project, request=request):
            return self.render(
                self.needs_auth_template, {
                    'title': self.get_title(),
                    'project': group.project,
                }
            )

        if GroupMeta.objects.get_value(group, '%s:tid' % self.get_conf_key(), None):
            if self.can_unlink_issues and request.GET.get('unlink'):
                return self.handle_unlink_issue(request, group, **kwargs)
            return None

        prefix = self.get_conf_key()
        event = group.get_latest_event()
        Event.objects.bind_nodes([event], 'data')

        op = request.POST.get('op', 'create')

        create_form = self.get_new_issue_form(request, group, event)
        link_form = None
        if self.can_link_existing_issues:
            link_form = self.get_link_existing_issue_form(request, group, event)

        if op == 'create':
            if create_form.is_valid():
                try:
                    issue_id = self.create_issue(
                        group=group,
                        form_data=create_form.cleaned_data,
                        request=request,
                    )
                except forms.ValidationError as e:
                    create_form.errors['__all__'] = [u'Error creating issue: %s' % e]

            if create_form.is_valid():
                GroupMeta.objects.set_value(group, '%s:tid' % prefix, issue_id)

                issue_information = {
                    'title': create_form.cleaned_data['title'],
                    'provider': self.get_title(),
                    'location': self.get_issue_url(group, issue_id),
                    'label': self.get_issue_label(group=group, issue_id=issue_id),
                }
                Activity.objects.create(
                    project=group.project,
                    group=group,
                    type=Activity.CREATE_ISSUE,
                    user=request.user,
                    data=issue_information,
                )

                issue_tracker_used.send_robust(
                    plugin=self,
                    project=group.project,
                    user=request.user,
                    sender=IssueTrackingPlugin
                )
                return self.redirect(group.get_absolute_url())

        elif op == 'link':
            if link_form.is_valid():
                try:
                    self.link_issue(
                        group=group,
                        form_data=link_form.cleaned_data,
                        request=request,
                    )
                except forms.ValidationError as e:
                    link_form.errors['__all__'] = [u'Error creating issue: %s' % e]

            if link_form.is_valid():
                issue_id = int(link_form.cleaned_data['issue_id'])
                GroupMeta.objects.set_value(group, '%s:tid' % prefix, issue_id)
                issue_information = {
                    'title': self.get_issue_title_by_id(request, group, issue_id),
                    'provider': self.get_title(),
                    'location': self.get_issue_url(group, issue_id),
                    'label': self.get_issue_label(group=group, issue_id=issue_id),
                }
                Activity.objects.create(
                    project=group.project,
                    group=group,
                    type=Activity.CREATE_ISSUE,
                    user=request.user,
                    data=issue_information,
                )

                return self.redirect(group.get_absolute_url())

        context = {
            'create_form': create_form,
            # pass in 'form' for legacy compat
            'form': create_form,
            'title': self.get_new_issue_title(),
            'read_only_fields': self.get_new_issue_read_only_fields(group=group),
            'can_link_existing_issues': self.can_link_existing_issues,
            'link_form': link_form,
            'op': op
        }

        return self.render(self.create_issue_template, context)
Esempio n. 3
0
    def view(self, request, group, **kwargs):
        has_auth_configured = self.has_auth_configured()
        if not (has_auth_configured and self.is_configured(
                project=group.project, request=request)):
            if self.auth_provider:
                required_auth_settings = settings.AUTH_PROVIDERS[self.auth_provider]
            else:
                required_auth_settings = None

            return self.render(
                self.not_configured_template, {
                    'title': self.get_title(),
                    'project': group.project,
                    'has_auth_configured': has_auth_configured,
                    'required_auth_settings': required_auth_settings,
                }
            )

        if self.needs_auth(project=group.project, request=request):
            return self.render(
                self.needs_auth_template, {
                    'title': self.get_title(),
                    'project': group.project,
                }
            )

        if GroupMeta.objects.get_value(group, '%s:tid' % self.get_conf_key(), None):
            if self.can_unlink_issues and request.GET.get('unlink'):
                return self.handle_unlink_issue(request, group, **kwargs)
            return None

        prefix = self.get_conf_key()
        event = group.get_latest_event()
        Event.objects.bind_nodes([event], 'data')

        op = request.POST.get('op', 'create')

        create_form = self.get_new_issue_form(request, group, event)
        link_form = None
        if self.can_link_existing_issues:
            link_form = self.get_link_existing_issue_form(request, group, event)

        if op == 'create':
            if create_form.is_valid():
                try:
                    issue_id = self.create_issue(
                        group=group,
                        form_data=create_form.cleaned_data,
                        request=request,
                    )
                except forms.ValidationError as e:
                    create_form.errors['__all__'] = [u'Error creating issue: %s' % e]

            if create_form.is_valid():
                GroupMeta.objects.set_value(group, '%s:tid' % prefix, issue_id)

                issue_information = {
                    'title': create_form.cleaned_data['title'],
                    'provider': self.get_title(),
                    'location': self.get_issue_url(group, issue_id),
                    'label': self.get_issue_label(group=group, issue_id=issue_id),
                }
                Activity.objects.create(
                    project=group.project,
                    group=group,
                    type=Activity.CREATE_ISSUE,
                    user=request.user,
                    data=issue_information,
                )

                issue_tracker_used.send_robust(
                    plugin=self,
                    project=group.project,
                    user=request.user,
                    sender=IssueTrackingPlugin
                )
                return self.redirect(group.get_absolute_url())

        elif op == 'link':
            if link_form.is_valid():
                try:
                    self.link_issue(
                        group=group,
                        form_data=link_form.cleaned_data,
                        request=request,
                    )
                except forms.ValidationError as e:
                    link_form.errors['__all__'] = [u'Error creating issue: %s' % e]

            if link_form.is_valid():
                issue_id = int(link_form.cleaned_data['issue_id'])
                GroupMeta.objects.set_value(group, '%s:tid' % prefix, issue_id)
                issue_information = {
                    'title': self.get_issue_title_by_id(request, group, issue_id),
                    'provider': self.get_title(),
                    'location': self.get_issue_url(group, issue_id),
                    'label': self.get_issue_label(group=group, issue_id=issue_id),
                }
                Activity.objects.create(
                    project=group.project,
                    group=group,
                    type=Activity.CREATE_ISSUE,
                    user=request.user,
                    data=issue_information,
                )

                return self.redirect(group.get_absolute_url())

        context = {
            'create_form': create_form,
            # pass in 'form' for legacy compat
            'form': create_form,
            'title': self.get_new_issue_title(),
            'read_only_fields': self.get_new_issue_read_only_fields(group=group),
            'can_link_existing_issues': self.can_link_existing_issues,
            'link_form': link_form,
            'op': op
        }

        return self.render(self.create_issue_template, context)
Esempio n. 4
0
    def view_create(self, request, group, **kwargs):
        from sentry.models import GroupMeta  # Django 1.9 setup issue
        from sentry.models import Event  # Django 1.9 setup issue

        auth_errors = self.check_config_and_auth(request, group)
        if auth_errors:
            return Response(auth_errors, status=400)

        event = group.get_latest_event()
        if event is None:
            return Response({
                'message': 'Unable to create issues: there are '
                           'no events associated with this group',
            }, status=400)
        Event.objects.bind_nodes([event], 'data')
        try:
            fields = self.get_new_issue_fields(request, group, event, **kwargs)
        except Exception as e:
            return self.handle_api_error(e)
        if request.method == 'GET':
            return Response(fields)

        errors = self.validate_form(fields, request.data)
        if errors:
            return Response({'error_type': 'validation', 'errors': errors}, status=400)

        try:
            issue = self.create_issue(
                group=group,
                form_data=request.data,
                request=request,
            )
        except Exception as e:
            return self.handle_api_error(e)

        if not isinstance(issue, dict):
            issue = {'id': issue}

        issue_field_map = self.get_issue_field_map()
        for key, meta_name in six.iteritems(issue_field_map):
            if key in issue:
                GroupMeta.objects.set_value(group, meta_name, issue[key])
            else:
                GroupMeta.objects.unset_value(group, meta_name)

        issue_information = {
            'title': issue.get('title') or request.data.get('title') or self._get_issue_label_compat(group, issue),
            'provider': self.get_title(),
            'location': self._get_issue_url_compat(group, issue),
            'label': self._get_issue_label_compat(group, issue),
        }
        from sentry.models import Activity  # Django 1.9 setup issue
        Activity.objects.create(
            project=group.project,
            group=group,
            type=Activity.CREATE_ISSUE,
            user=request.user,
            data=issue_information,
        )

        issue_tracker_used.send_robust(
            plugin=self, project=group.project, user=request.user,
            sender=type(self)
        )
        return Response({'issue_url': self.get_issue_url(group, issue),
                         'link': self._get_issue_url_compat(group, issue),
                         'label': self._get_issue_label_compat(group, issue),
                         'id': issue['id']})
Esempio n. 5
0
    def view_create(self, request, group, **kwargs):
        auth_errors = self.check_config_and_auth(request, group)
        if auth_errors:
            return Response(auth_errors, status=400)

        event = group.get_latest_event()
        if event is None:
            return Response(
                {
                    "message":
                    "Unable to create issues: there are "
                    "no events associated with this group"
                },
                status=400,
            )
        Event.objects.bind_nodes([event], "data")
        try:
            fields = self.get_new_issue_fields(request, group, event, **kwargs)
        except Exception as e:
            return self.handle_api_error(e)
        if request.method == "GET":
            return Response(fields)

        errors = self.validate_form(fields, request.data)
        if errors:
            return Response({
                "error_type": "validation",
                "errors": errors
            },
                            status=400)

        try:
            issue = self.create_issue(group=group,
                                      form_data=request.data,
                                      request=request)
        except Exception as e:
            return self.handle_api_error(e)

        if not isinstance(issue, dict):
            issue = {"id": issue}

        issue_field_map = self.get_issue_field_map()
        for key, meta_name in six.iteritems(issue_field_map):
            if key in issue:
                GroupMeta.objects.set_value(group, meta_name, issue[key])
            else:
                GroupMeta.objects.unset_value(group, meta_name)

        issue_information = {
            "title":
            issue.get("title") or request.data.get("title")
            or self._get_issue_label_compat(group, issue),
            "provider":
            self.get_title(),
            "location":
            self._get_issue_url_compat(group, issue),
            "label":
            self._get_issue_label_compat(group, issue),
        }
        Activity.objects.create(
            project=group.project,
            group=group,
            type=Activity.CREATE_ISSUE,
            user=request.user,
            data=issue_information,
        )

        issue_tracker_used.send_robust(plugin=self,
                                       project=group.project,
                                       user=request.user,
                                       sender=type(self))
        return Response({
            "issue_url": self.get_issue_url(group, issue),
            "link": self._get_issue_url_compat(group, issue),
            "label": self._get_issue_label_compat(group, issue),
            "id": issue["id"],
        })
Esempio n. 6
0
    def view_create(self, request, group, **kwargs):
        auth_errors = self.check_config_and_auth(request, group)
        if auth_errors:
            return Response(auth_errors, status=400)

        event = group.get_latest_event()
        if event is None:
            return Response({
                'message': 'Unable to create issues: there are '
                           'no events associated with this group',
            }, status=400)
        Event.objects.bind_nodes([event], 'data')
        try:
            fields = self.get_new_issue_fields(request, group, event, **kwargs)
        except Exception as e:
            return self.handle_api_error(e)
        if request.method == 'GET':
            return Response(fields)

        errors = self.validate_form(fields, request.DATA)
        if errors:
            return Response({'error_type': 'validation', 'errors': errors}, status=400)

        try:
            issue = self.create_issue(
                group=group,
                form_data=request.DATA,
                request=request,
            )
        except Exception as e:
            return self.handle_api_error(e)

        if not isinstance(issue, dict):
            issue = {'id': issue}

        issue_field_map = self.get_issue_field_map()
        for key, meta_name in six.iteritems(issue_field_map):
            if key in issue:
                GroupMeta.objects.set_value(group, meta_name, issue[key])
            else:
                GroupMeta.objects.unset_value(group, meta_name)

        issue_information = {
            'title': issue.get('title') or request.DATA.get('title') or self._get_issue_label_compat(group, issue),
            'provider': self.get_title(),
            'location': self._get_issue_url_compat(group, issue),
            'label': self._get_issue_label_compat(group, issue),
        }
        Activity.objects.create(
            project=group.project,
            group=group,
            type=Activity.CREATE_ISSUE,
            user=request.user,
            data=issue_information,
        )

        issue_tracker_used.send_robust(
            plugin=self, project=group.project, user=request.user,
            sender=type(self)
        )
        return Response({'issue_url': self.get_issue_url(group, issue),
                         'link': self._get_issue_url_compat(group, issue),
                         'label': self._get_issue_label_compat(group, issue),
                         'id': issue['id']})