示例#1
0
 def set_refs(self, release, **values):
     # check if user exists, and then try to get refs based on version
     if values.get('owner', None):
         repo_project_option = ProjectOption.objects.get_value(
             project=self.project,
             key='heroku:repository',
         )
         deploy_project_option = ProjectOption.objects.get_value(
             project=self.project,
             key='heroku:environment',
             default='production',
         ) or 'production'
         if repo_project_option:
             try:
                 repository = Repository.objects.get(
                     organization_id=self.project.organization_id, name=repo_project_option
                 )
             except Repository.DoesNotExist:
                 logger.info(
                     'repository.missing',
                     extra={
                         'organization_id': self.project.organization_id,
                         'project_id': self.project.id,
                         'repository': repo_project_option,
                     }
                 )
             else:
                 release.set_refs(
                     refs=[{
                         'commit': release.version,
                         'repository': repository.name
                     }],
                     user=values['owner'],
                     fetch=True,
                 )
         # create deploy associated with release via ReleaseDeploysEndpoint
         endpoint = '/organizations/{}/releases/{}/deploys/'.format(
             self.project.organization.slug,
             release.version,
         )
         auth = ApiKey(
             organization=self.project.organization,
             scope_list=['project:write'],
         )
         client.post(
             endpoint,
             data={'environment': deploy_project_option},
             auth=auth,
         )
     else:
         logger.info(
             'owner.missing',
             extra={
                 'organization_id': self.project.organization_id,
                 'project_id': self.project.id,
             }
         )
示例#2
0
 def set_refs(self, release, **values):
     # check if user exists, and then try to get refs based on version
     if values.get("owner", None):
         repo_project_option = ProjectOption.objects.get_value(
             project=self.project, key="heroku:repository")
         deploy_project_option = (ProjectOption.objects.get_value(
             project=self.project,
             key="heroku:environment",
             default="production") or "production")
         if repo_project_option:
             try:
                 repository = Repository.objects.get(
                     organization_id=self.project.organization_id,
                     name=repo_project_option)
             except Repository.DoesNotExist:
                 logger.info(
                     "repository.missing",
                     extra={
                         "organization_id": self.project.organization_id,
                         "project_id": self.project.id,
                         "repository": repo_project_option,
                     },
                 )
             else:
                 release.set_refs(
                     refs=[{
                         "commit": release.version,
                         "repository": repository.name
                     }],
                     user=values["owner"],
                     fetch=True,
                 )
         # create deploy associated with release via ReleaseDeploysEndpoint
         endpoint = "/organizations/{}/releases/{}/deploys/".format(
             self.project.organization.slug, release.version)
         auth = ApiKey(organization=self.project.organization,
                       scope_list=["project:write"])
         client.post(endpoint,
                     data={"environment": deploy_project_option},
                     auth=auth)
     else:
         logger.info(
             "owner.missing",
             extra={
                 "organization_id": self.project.organization_id,
                 "project_id": self.project.id,
             },
         )
示例#3
0
    def _handle_builtin(self, request, project):
        endpoint = '/projects/{}/{}/releases/'.format(
            project.organization.slug,
            project.slug,
        )
        try:
            # Ideally the API client would support some kind of god-mode here
            # as we've already confirmed credentials and simply want to execute
            # the view code. Instead we hack around it with an ApiKey instance
            god = ApiKey(
                organization=project.organization,
                scopes=getattr(ApiKey.scopes, 'project:write'),
            )

            resp = client.post(
                endpoint,
                data=json.loads(request.body),
                auth=god,
            )
        except client.ApiError as exc:
            return HttpResponse(
                status=exc.status_code,
                content=exc.body,
                content_type='application/json',
            )
        return HttpResponse(
            status=resp.status_code,
            content=json.dumps(resp.data),
            content_type='application/json',
        )
示例#4
0
    def _handle_builtin(self, request, project):
        endpoint = "/projects/{}/{}/releases/".format(
            project.organization.slug, project.slug)

        try:
            data = json.loads(request.body)
        except json.JSONDecodeError as exc:
            return HttpResponse(
                status=400,
                content=json.dumps({"error": six.text_type(exc)}),
                content_type="application/json",
            )

        try:
            # Ideally the API client would support some kind of god-mode here
            # as we've already confirmed credentials and simply want to execute
            # the view code. Instead we hack around it with an ApiKey instance
            god = ApiKey(organization=project.organization,
                         scope_list=["project:write"])

            resp = client.post(endpoint, data=data, auth=god)
        except client.ApiError as exc:
            return HttpResponse(
                status=exc.status_code,
                content=json.dumps(exc.body),
                content_type="application/json",
            )
        return HttpResponse(status=resp.status_code,
                            content=json.dumps(resp.data),
                            content_type="application/json")
示例#5
0
    def post(self, request, organization):
        op = request.POST.get('op')
        team = request.POST.get('team')

        om = OrganizationMember.objects.get(
            user=request.user,
            organization=organization,
        )

        if op == 'leave':
            try:
                client.delete('/organizations/{}/members/{}/teams/{}/'.format(
                    organization.slug, om.id, team,
                ), request.user)
            except client.ApiError as exc:
                self.logger.exception('Unable to remove member from team: %s', unicode(exc))
                messages.add_message(
                    request, messages.ERROR,
                    'We were unable to remove you from the team.',
                )
            else:
                messages.add_message(
                    request, messages.SUCCESS,
                    'Your team membership has been deactivated.',
                )
        elif op == 'join':
            try:
                resp = client.post('/organizations/{}/members/{}/teams/{}/'.format(
                    organization.slug, om.id, team,
                ), request.user)
            except client.ApiError as exc:
                self.logger.exception('Unable to add member from team: %s', unicode(exc))
                messages.add_message(
                    request, messages.ERROR,
                    'We were unable to join the team.',
                )
            else:
                if resp.status_code == 202:
                    messages.add_message(
                        request, messages.SUCCESS,
                        'A request has been sent to join the team.',
                    )
                else:
                    messages.add_message(
                        request, messages.SUCCESS,
                        'Your team membership has been activated.',
                    )
        return HttpResponseRedirect(request.path)
示例#6
0
    def post(self, request, organization):
        op = request.POST.get('op')
        team = request.POST.get('team')

        om = OrganizationMember.objects.get(
            user=request.user,
            organization=organization,
        )

        if op == 'leave':
            try:
                client.delete('/organizations/{}/members/{}/teams/{}/'.format(
                    organization.slug, om.id, team,
                ), request.user)
            except client.ApiError as exc:
                self.logger.exception('Unable to remove member from team: %s', unicode(exc))
                messages.add_message(
                    request, messages.ERROR,
                    'We were unable to remove you from the team.',
                )
            else:
                messages.add_message(
                    request, messages.SUCCESS,
                    'Your team membership has been deactivated.',
                )
        elif op == 'join':
            try:
                resp = client.post('/organizations/{}/members/{}/teams/{}/'.format(
                    organization.slug, om.id, team,
                ), request.user)
            except client.ApiError as exc:
                self.logger.exception('Unable to add member from team: %s', unicode(exc))
                messages.add_message(
                    request, messages.ERROR,
                    'We were unable to join the team.',
                )
            else:
                if resp.status_code == 202:
                    messages.add_message(
                        request, messages.SUCCESS,
                        'A request has been sent to join the team.',
                    )
                else:
                    messages.add_message(
                        request, messages.SUCCESS,
                        'Your team membership has been activated.',
                    )
        return HttpResponseRedirect(request.path)
示例#7
0
    def handle(self, request):
        form = self.get_form(request)
        if form.is_valid():
            resp = client.post('/organizations/', data={
                'name': form.cleaned_data['name'],
                'defaultTeam': True,
            }, request=request)

            url = reverse('sentry-create-project', args=[resp.data['slug']])

            return HttpResponseRedirect(url)

        context = {
            'form': form,
        }

        return self.respond('sentry/create-organization.html', context)
示例#8
0
    def handle(self, request, organization):
        team_list = [
            t for t in Team.objects.get_for_user(
                organization=organization,
                user=request.user,
            ) if request.access.has_team_scope(t, self.required_scope)
        ]
        if not team_list:
            messages.error(request, ERR_NO_TEAMS)
            return self.redirect(
                reverse('sentry-organization-home', args=[organization.slug]))

        form = self.get_form(request, organization, team_list)
        if form.is_valid():
            team = form.cleaned_data.get('team', team_list[0])

            response = client.post('/teams/{}/{}/projects/'.format(
                organization.slug,
                team.slug,
            ),
                                   data={
                                       'name': form.cleaned_data['name'],
                                   },
                                   request=request)

            install_uri = absolute_uri('/{}/{}/settings/install/'.format(
                organization.slug,
                response.data['slug'],
            ))

            if 'signup' in request.GET:
                install_uri += '?signup'

            return self.redirect(install_uri)

        context = {
            'form': form,
        }

        return self.respond('sentry/create-project.html', context)
示例#9
0
    def handle(self, request, organization):
        team_list = [
            t for t in Team.objects.get_for_user(
                organization=organization,
                user=request.user,
            )
            if request.access.has_team_scope(t, self.required_scope)
        ]
        if not team_list:
            messages.error(request, ERR_NO_TEAMS)
            return self.redirect(reverse('sentry-organization-home', args=[organization.slug]))

        form = self.get_form(request, organization, team_list)
        if form.is_valid():
            team = form.cleaned_data.get('team', team_list[0])

            response = client.post('/teams/{}/{}/projects/'.format(
                organization.slug,
                team.slug,
            ), data={
                'name': form.cleaned_data['name'],
            }, request=request)

            install_uri = absolute_uri('/{}/{}/settings/install/'.format(
                organization.slug,
                response.data['slug'],
            ))

            if 'signup' in request.GET:
                install_uri += '?signup'

            return self.redirect(install_uri)

        context = {
            'form': form,
        }

        return self.respond('sentry/create-project.html', context)