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, } )
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, }, )
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', )
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")
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)
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)
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)
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)