Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions apps/hosts/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class ChallengeHostTeam(TimeStampedModel):
team_url = models.CharField(max_length=1000, default="", blank=True)

def __str__(self):
return "{0}: {1}".format(self.team_name, self.created_by)
return f"{self.team_name}: {self.created_by}"

def get_all_challenge_host_email(self):
email_ids = ChallengeHost.objects.filter(team_name=self).values_list(
Expand Down Expand Up @@ -72,9 +72,7 @@ class ChallengeHost(TimeStampedModel):
permissions = models.CharField(max_length=30, choices=PERMISSION_OPTIONS)

def __str__(self):
return "{0}:{1}:{2}".format(
self.team_name, self.user, self.permissions
)
return f"{self.team_name}:{self.user}:{self.permissions}"

class Meta:
app_label = "hosts"
Expand Down
23 changes: 16 additions & 7 deletions apps/hosts/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,14 @@


class ChallengeHostTeamSerializer(serializers.ModelSerializer):
"""Serializer for the ChallengeHostTeam model."""

created_by = serializers.SlugRelatedField(
slug_field="username", queryset=User.objects.all()
)

def __init__(self, *args, **kwargs):
super(ChallengeHostTeamSerializer, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
context = kwargs.get("context")
if context:
request = context.get("request")
Expand All @@ -23,6 +24,7 @@ class Meta:


class ChallengeHostSerializer(serializers.ModelSerializer):
"""Serializer for the ChallengeHost model."""

status = serializers.ChoiceField(choices=ChallengeHost.STATUS_OPTIONS)
permissions = serializers.ChoiceField(
Expand All @@ -33,7 +35,7 @@ class ChallengeHostSerializer(serializers.ModelSerializer):
)

def __init__(self, *args, **kwargs):
super(ChallengeHostSerializer, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
context = kwargs.get("context")
if context:
challenge_host_team = context.get("challenge_host_team")
Expand All @@ -47,26 +49,30 @@ class Meta:


class InviteHostToTeamSerializer(serializers.Serializer):
"""Serializer for inviting a host to join a team."""

email = serializers.EmailField()

def __init__(self, *args, **kwargs):
super(InviteHostToTeamSerializer, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
context = kwargs.get("context")
if context:
self.challenge_host_team = context.get("challenge_host_team")
self.user = context.get("request").user

def validate_email(self, value):
"""Validate the email to ensure it
doesn't belong to the inviting user."""
if value == self.user.email:
raise serializers.ValidationError("A host cannot invite himself")
try:
User.objects.get(email=value)
except User.DoesNotExist:
raise serializers.ValidationError("User does not exist")
except User.DoesNotExist as exc:
raise serializers.ValidationError("User does not exist") from exc
return value

def save(self):
def save(self, **kwargs):
"""Create or get a ChallengeHost for the invited user."""
email = self.validated_data.get("email")
return ChallengeHost.objects.get_or_create(
user=User.objects.get(email=email),
Expand All @@ -77,6 +83,7 @@ def save(self):


class HostTeamDetailSerializer(serializers.ModelSerializer):
"""Serializer for detailed information about host teams."""

members = serializers.SerializerMethodField()
created_by = serializers.SlugRelatedField(
Expand All @@ -87,7 +94,9 @@ class Meta:
model = ChallengeHostTeam
fields = ("id", "team_name", "created_by", "members", "team_url")

def get_members(self, obj):
@staticmethod
def get_members(obj):
"""Get all members of a host team."""
hosts = ChallengeHost.objects.filter(team_name_id=obj.id)
serializer = ChallengeHostSerializer(hosts, many=True)
return serializer.data
10 changes: 7 additions & 3 deletions apps/hosts/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,21 @@
name="create_challenge_host_team",
),
url(
r"^challenge_host_team/(?P<challenge_host_team_pk>[0-9]+)/challenge_host$",
r"^challenge_host_team/"
r"(?P<challenge_host_team_pk>[0-9]+)/challenge_host$",
views.challenge_host_list,
name="get_challenge_host_list",
),
url(
r"^challenge_host_team/(?P<challenge_host_team_pk>[0-9]+)/challenge_host/(?P<pk>[0-9]+)$",
r"^challenge_host_team/"
r"(?P<challenge_host_team_pk>[0-9]+)/"
r"challenge_host/(?P<pk>[0-9]+)$",
views.challenge_host_detail,
name="get_challenge_host_details",
),
url(
r"^remove_self_from_challenge_host/(?P<challenge_host_team_pk>[0-9]+)$",
r"^remove_self_from_challenge_host/"
r"(?P<challenge_host_team_pk>[0-9]+)$",
views.remove_self_from_challenge_host_team,
name="remove_self_from_challenge_host_team",
),
Expand Down
Loading