forked from GithubBackups/healthchecks
Prepare for the removal of Member.team_id
This commit is contained in:
parent
f357cd3305
commit
fba8806e97
@ -129,17 +129,19 @@ class Profile(models.Model):
|
|||||||
self.api_key_readonly = urlsafe_b64encode(os.urandom(24)).decode()
|
self.api_key_readonly = urlsafe_b64encode(os.urandom(24)).decode()
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
def checks_from_all_teams(self):
|
def checks_from_all_projects(self):
|
||||||
""" Return a queryset of checks from all teams we have access for. """
|
""" Return a queryset of checks from projects we have access to. """
|
||||||
|
|
||||||
team_ids = set(self.user.memberships.values_list("team_id", flat=True))
|
is_owner = models.Q(owner=self.user)
|
||||||
team_ids.add(self.id)
|
is_member = models.Q(member__user=self.user)
|
||||||
|
q = Project.objects.filter(is_owner | is_member)
|
||||||
|
project_ids = list(q.values_list("id", flat=True))
|
||||||
|
|
||||||
from hc.api.models import Check
|
from hc.api.models import Check
|
||||||
return Check.objects.filter(user__profile__id__in=team_ids)
|
return Check.objects.filter(project_id__in=project_ids)
|
||||||
|
|
||||||
def send_report(self, nag=False):
|
def send_report(self, nag=False):
|
||||||
checks = self.checks_from_all_teams()
|
checks = self.checks_from_all_projects()
|
||||||
|
|
||||||
# Has there been a ping in last 6 months?
|
# Has there been a ping in last 6 months?
|
||||||
result = checks.aggregate(models.Max("last_ping"))
|
result = checks.aggregate(models.Max("last_ping"))
|
||||||
@ -221,18 +223,6 @@ class Profile(models.Model):
|
|||||||
self.save()
|
self.save()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def set_next_nag_date(self):
|
|
||||||
""" Set next_nag_date for all members of this team. """
|
|
||||||
|
|
||||||
is_owner = models.Q(id=self.id)
|
|
||||||
is_member = models.Q(user__memberships__team=self)
|
|
||||||
q = Profile.objects.filter(is_owner | is_member)
|
|
||||||
q = q.exclude(nag_period=NO_NAG)
|
|
||||||
# Exclude profiles with next_nag_date already set
|
|
||||||
q = q.filter(next_nag_date__isnull=True)
|
|
||||||
|
|
||||||
q.update(next_nag_date=timezone.now() + models.F("nag_period"))
|
|
||||||
|
|
||||||
def get_own_project(self):
|
def get_own_project(self):
|
||||||
project = self.user.project_set.first()
|
project = self.user.project_set.first()
|
||||||
if project is None:
|
if project is None:
|
||||||
@ -261,6 +251,18 @@ class Project(models.Model):
|
|||||||
num_used = Check.objects.filter(project__owner=self.owner).count()
|
num_used = Check.objects.filter(project__owner=self.owner).count()
|
||||||
return self.owner_profile.check_limit - num_used
|
return self.owner_profile.check_limit - num_used
|
||||||
|
|
||||||
|
def set_next_nag_date(self):
|
||||||
|
""" Set next_nag_date on profiles of all members of this project. """
|
||||||
|
|
||||||
|
is_owner = models.Q(user=self.owner)
|
||||||
|
is_member = models.Q(user__memberships__project=self)
|
||||||
|
q = Profile.objects.filter(is_owner | is_member)
|
||||||
|
q = q.exclude(nag_period=NO_NAG)
|
||||||
|
# Exclude profiles with next_nag_date already set
|
||||||
|
q = q.filter(next_nag_date__isnull=True)
|
||||||
|
|
||||||
|
q.update(next_nag_date=timezone.now() + models.F("nag_period"))
|
||||||
|
|
||||||
|
|
||||||
class Member(models.Model):
|
class Member(models.Model):
|
||||||
team = models.ForeignKey(Profile, models.CASCADE)
|
team = models.ForeignKey(Profile, models.CASCADE)
|
||||||
|
@ -132,7 +132,7 @@ class ProfileTestCase(BaseTestCase):
|
|||||||
r = self.client.post("/accounts/profile/", form)
|
r = self.client.post("/accounts/profile/", form)
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
|
|
||||||
members = self.profile.member_set.all()
|
members = self.project.member_set.all()
|
||||||
self.assertEqual(members.count(), 2)
|
self.assertEqual(members.count(), 2)
|
||||||
|
|
||||||
frank_found = False
|
frank_found = False
|
||||||
|
@ -259,7 +259,7 @@ def profile(request):
|
|||||||
farewell_user.profile.current_project = None
|
farewell_user.profile.current_project = None
|
||||||
farewell_user.profile.save()
|
farewell_user.profile.save()
|
||||||
|
|
||||||
Member.objects.filter(team=profile,
|
Member.objects.filter(project=request.project,
|
||||||
user=farewell_user).delete()
|
user=farewell_user).delete()
|
||||||
|
|
||||||
ctx["team_member_removed"] = email
|
ctx["team_member_removed"] = email
|
||||||
@ -433,6 +433,7 @@ def unsubscribe_reports(request, username):
|
|||||||
def switch_team(request, target_username):
|
def switch_team(request, target_username):
|
||||||
try:
|
try:
|
||||||
target_team = Profile.objects.get(user__username=target_username)
|
target_team = Profile.objects.get(user__username=target_username)
|
||||||
|
target_project = target_team.get_own_project()
|
||||||
except Profile.DoesNotExist:
|
except Profile.DoesNotExist:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
@ -446,13 +447,14 @@ def switch_team(request, target_username):
|
|||||||
|
|
||||||
# Users can switch to teams they are members of.
|
# Users can switch to teams they are members of.
|
||||||
if not access_ok:
|
if not access_ok:
|
||||||
access_ok = request.user.memberships.filter(team=target_team).exists()
|
q = request.user.memberships.filter(project=target_project)
|
||||||
|
access_ok = q.exists()
|
||||||
|
|
||||||
if not access_ok:
|
if not access_ok:
|
||||||
return HttpResponseForbidden()
|
return HttpResponseForbidden()
|
||||||
|
|
||||||
request.profile.current_team = target_team
|
request.profile.current_team = target_team
|
||||||
request.profile.current_project = target_team.get_own_project()
|
request.profile.current_project = target_project
|
||||||
request.profile.save()
|
request.profile.save()
|
||||||
|
|
||||||
return redirect("hc-checks")
|
return redirect("hc-checks")
|
||||||
|
@ -21,7 +21,7 @@ def notify(flip_id, stdout):
|
|||||||
|
|
||||||
# Set dates for followup nags
|
# Set dates for followup nags
|
||||||
if flip.new_status == "down":
|
if flip.new_status == "down":
|
||||||
check.project.owner_profile.set_next_nag_date()
|
check.project.set_next_nag_date()
|
||||||
|
|
||||||
# Send notifications
|
# Send notifications
|
||||||
errors = flip.send_alerts()
|
errors = flip.send_alerts()
|
||||||
|
@ -70,7 +70,7 @@ def _get_check_for_user(request, code):
|
|||||||
if request.user.is_superuser:
|
if request.user.is_superuser:
|
||||||
q = Check.objects
|
q = Check.objects
|
||||||
else:
|
else:
|
||||||
q = request.profile.checks_from_all_teams()
|
q = request.profile.checks_from_all_projects()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return q.get(code=code)
|
return q.get(code=code)
|
||||||
@ -87,8 +87,8 @@ def _has_access(request, username):
|
|||||||
if request.user.is_superuser:
|
if request.user.is_superuser:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
mq = request.user.memberships
|
q = request.user.memberships
|
||||||
return mq.filter(team__user__username=username).exists()
|
return q.filter(project__owner__username=username).exists()
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
Loading…
x
Reference in New Issue
Block a user