def test_get_single_event_for_open_prs(self): self.create_events() pr = models.PullRequest.objects.latest() latest_event = pr.events.latest() # 1. main PullRequest query # 2. latest() for each PullRequest # 3. jobs query below with self.assertNumQueries(3): info = EventsStatus.get_single_event_for_open_prs([pr.pk]) self.assertEqual(len(info), 1) # should only have the latest event self.assertEqual(info[0].pk, latest_event.pk) # pre, test, test1, merge self.assertEqual(info[0].jobs.count(), 4) last_modified = latest_event.last_modified + datetime.timedelta(0,10) with self.assertNumQueries(2): info = EventsStatus.get_single_event_for_open_prs([pr.pk], last_modified) self.assertEqual(len(info), 0) last_modified = latest_event.last_modified - datetime.timedelta(0,10) with self.assertNumQueries(2): info = EventsStatus.get_single_event_for_open_prs([pr.pk], last_modified) self.assertEqual(len(info), 1) self.assertEqual(info[0].pk, latest_event.pk)
def view_user(request, username): """ Render the user page based on username Input: request[django.http.HttpRequest] username[str]: Name of the user """ users = models.GitUser.objects.filter(name=username) if users.count() == 0: raise Http404('Bad username') repos = RepositoryStatus.get_user_repos_with_open_prs_status(username) pr_ids = [] for r in repos: for pr in r["prs"]: pr_ids.append(pr["id"]) event_list = EventsStatus.get_single_event_for_open_prs(pr_ids) evs_info = EventsStatus.multiline_events_info(event_list) data = { 'username': username, 'repos': repos, 'events': evs_info, "update_interval": settings.EVENT_PAGE_UPDATE_INTERVAL, } return render(request, 'ci/user.html', data)
def user_open_prs(request, username): """ Get the updates for the main page. """ users = models.GitUser.objects.filter(name=username) if users.count() == 0: return HttpResponseBadRequest('Bad username') if 'last_request' not in request.GET: return HttpResponseBadRequest('Missing parameters') this_request = TimeUtils.get_local_timestamp() last_request = int(float(request.GET['last_request'])) # in case it has decimals dt = timezone.localtime(timezone.make_aware(datetime.datetime.utcfromtimestamp(last_request))) repos = RepositoryStatus.get_user_repos_with_open_prs_status(username) repo_ids = [] pr_ids = [] for r in repos: repo_ids.append(r["id"]) for pr in r["prs"]: pr_ids.append(pr["id"]) event_list = EventsStatus.get_single_event_for_open_prs(pr_ids) evs_info = EventsStatus.multiline_events_info(event_list) ev_ids = [] for e in evs_info: ev_ids.append(e["id"]) # Now get the changed ones repos = RepositoryStatus.get_user_repos_with_open_prs_status(username, dt) evs_info = EventsStatus.multiline_events_info(event_list, dt) data = {'repos': repo_ids, 'prs': pr_ids, 'events': ev_ids, 'repo_status': repos, 'closed': [], 'last_request': this_request, 'changed_events': evs_info, } return JsonResponse(data)