Skip to content
Snippets Groups Projects
Commit 278cf7a2 authored by Samuel GAIST's avatar Samuel GAIST Committed by Flavio TARSETTI
Browse files

[team][all] Pre-commit cleanup

parent b1803f2d
No related branches found
No related tags found
2 merge requests!364Cleanup team,!342Django 3 migration
Pipeline #42677 passed
...@@ -29,7 +29,9 @@ from django.contrib import admin ...@@ -29,7 +29,9 @@ from django.contrib import admin
from .models import Team from .models import Team
class TeamAdmin(admin.ModelAdmin): class TeamAdmin(admin.ModelAdmin):
filter_horizontal = ['members'] filter_horizontal = ["members"]
admin.site.register(Team, TeamAdmin) admin.site.register(Team, TeamAdmin)
...@@ -26,24 +26,22 @@ ...@@ -26,24 +26,22 @@
############################################################################### ###############################################################################
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from django.db.models import Q from django.db.models import Q
from django.shortcuts import get_object_or_404
from rest_framework import exceptions as drf_exceptions
from rest_framework import generics from rest_framework import generics
from rest_framework import permissions from rest_framework import permissions
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework.reverse import reverse from rest_framework.reverse import reverse
from rest_framework import exceptions as drf_exceptions
from ..common.mixins import CommonContextMixin
from .models import Team
from .permissions import HasPrivacyLevel
from .permissions import IsOwner
from .serializers import FullTeamSerializer from .serializers import FullTeamSerializer
from .serializers import SimpleTeamSerializer from .serializers import SimpleTeamSerializer
from .serializers import TeamCreationSerializer from .serializers import TeamCreationSerializer
from .serializers import TeamUpdateSerializer from .serializers import TeamUpdateSerializer
from .models import Team
from .permissions import IsOwner, HasPrivacyLevel
from ..common.mixins import CommonContextMixin
# ---------------------------------------------------------- # ----------------------------------------------------------
......
...@@ -25,15 +25,19 @@ ...@@ -25,15 +25,19 @@
# # # #
############################################################################### ###############################################################################
from ..common.apps import CommonAppConfig
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from ..common.apps import CommonAppConfig
class TeamConfig(CommonAppConfig): class TeamConfig(CommonAppConfig):
name = 'beat.web.team' name = "beat.web.team"
verbose_name = _('Team') verbose_name = _("Team")
def ready(self): def ready(self):
super(TeamConfig, self).ready() super(TeamConfig, self).ready()
from .signals.handlers import on_added_to_team
from actstream import registry from actstream import registry
registry.register(self.get_model('Team'))
from .signals.handlers import on_added_to_team # noqa: F401
registry.register(self.get_model("Team"))
...@@ -25,10 +25,10 @@ ...@@ -25,10 +25,10 @@
# # # #
############################################################################### ###############################################################################
from django.contrib.auth.models import User
from django.db import models from django.db import models
from django.db.models import Q from django.db.models import Q
from django.urls import reverse from django.urls import reverse
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
......
...@@ -29,6 +29,7 @@ from rest_framework import permissions ...@@ -29,6 +29,7 @@ from rest_framework import permissions
from .models import Team from .models import Team
class IsOwner(permissions.BasePermission): class IsOwner(permissions.BasePermission):
""" """
The logged in user should also be the owner The logged in user should also be the owner
...@@ -37,6 +38,7 @@ class IsOwner(permissions.BasePermission): ...@@ -37,6 +38,7 @@ class IsOwner(permissions.BasePermission):
def has_object_permission(self, request, view, obj): def has_object_permission(self, request, view, obj):
return obj.owner == request.user return obj.owner == request.user
class HasPrivacyLevel(permissions.BasePermission): class HasPrivacyLevel(permissions.BasePermission):
""" """
Check whether the user has enough rights to view the team Check whether the user has enough rights to view the team
...@@ -49,7 +51,9 @@ class HasPrivacyLevel(permissions.BasePermission): ...@@ -49,7 +51,9 @@ class HasPrivacyLevel(permissions.BasePermission):
elif obj.privacy_level == Team.PRIVATE: elif obj.privacy_level == Team.PRIVATE:
return False return False
elif obj.privacy_level == Team.MEMBERS and obj.members.filter(username=request.user.username): elif obj.privacy_level == Team.MEMBERS and obj.members.filter(
username=request.user.username
):
return True return True
else: else:
......
...@@ -26,16 +26,14 @@ ...@@ -26,16 +26,14 @@
############################################################################### ###############################################################################
from django.contrib.auth.models import User from django.contrib.auth.models import User
from rest_framework.reverse import reverse
from rest_framework import serializers from rest_framework import serializers
from rest_framework.reverse import reverse
from ..common.models import Contribution from ..common.models import Contribution
from .models import Team from .models import Team
from .signals import added_to_team from .signals import added_to_team
#---------------------------------------------------------- # ----------------------------------------------------------
class BasicTeamSerializer(serializers.ModelSerializer): class BasicTeamSerializer(serializers.ModelSerializer):
...@@ -48,91 +46,92 @@ class BasicTeamSerializer(serializers.ModelSerializer): ...@@ -48,91 +46,92 @@ class BasicTeamSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = Team model = Team
fields = ['short_description', 'is_owner', 'accessibility'] fields = ["short_description", "is_owner", "accessibility"]
def get_name(self, obj): def get_name(self, obj):
return obj.fullname() return obj.fullname()
def get_is_owner(self, obj): def get_is_owner(self, obj):
return (obj.owner == self.context.get('user')) return obj.owner == self.context.get("user")
def get_accessibility(self, obj): def get_accessibility(self, obj):
if obj.privacy_level == Team.PUBLIC: if obj.privacy_level == Team.PUBLIC:
return 'public' return "public"
elif obj.privacy_level == Team.MEMBERS: elif obj.privacy_level == Team.MEMBERS:
return 'members' return "members"
else: else:
return 'private' return "private"
def get_members(self, obj): def get_members(self, obj):
return map(lambda x: x.username, obj.members.iterator()) return map(lambda x: x.username, obj.members.iterator())
#---------------------------------------------------------- # ----------------------------------------------------------
class SimpleTeamSerializer(BasicTeamSerializer): class SimpleTeamSerializer(BasicTeamSerializer):
class Meta(BasicTeamSerializer.Meta): class Meta(BasicTeamSerializer.Meta):
fields = ['name', 'short_description', 'is_owner', 'accessibility'] fields = ["name", "short_description", "is_owner", "accessibility"]
#---------------------------------------------------------- # ----------------------------------------------------------
class FullTeamSerializer(BasicTeamSerializer): class FullTeamSerializer(BasicTeamSerializer):
class Meta(BasicTeamSerializer.Meta): class Meta(BasicTeamSerializer.Meta):
fields = ['name', 'short_description', 'is_owner', 'accessibility', 'members'] fields = ["name", "short_description", "is_owner", "accessibility", "members"]
#---------------------------------------------------------- # ----------------------------------------------------------
class CreatedTeamSerializer(BasicTeamSerializer): class CreatedTeamSerializer(BasicTeamSerializer):
object_view = serializers.SerializerMethodField() object_view = serializers.SerializerMethodField()
class Meta(BasicTeamSerializer.Meta): class Meta(BasicTeamSerializer.Meta):
fields = ['name', 'short_description', 'accessibility', 'members', 'object_view'] fields = [
"name",
"short_description",
"accessibility",
"members",
"object_view",
]
def get_object_view(self, obj): def get_object_view(self, obj):
return reverse('teams:view', args=[obj.owner.username, obj.name]) return reverse("teams:view", args=[obj.owner.username, obj.name])
#---------------------------------------------------------- # ----------------------------------------------------------
class UpdatedTeamSerializer(BasicTeamSerializer): class UpdatedTeamSerializer(BasicTeamSerializer):
class Meta(BasicTeamSerializer.Meta): class Meta(BasicTeamSerializer.Meta):
fields = ['short_description', 'accessibility', 'members'] fields = ["short_description", "accessibility", "members"]
#---------------------------------------------------------- # ----------------------------------------------------------
class TeamCreationSerializer(serializers.ModelSerializer): class TeamCreationSerializer(serializers.ModelSerializer):
accessibility = serializers.CharField(source='privacy_level') accessibility = serializers.CharField(source="privacy_level")
members = serializers.ListField(child=serializers.CharField()) members = serializers.ListField(child=serializers.CharField())
class Meta: class Meta:
model = Team model = Team
fields = ['name', 'short_description', 'accessibility', 'members'] fields = ["name", "short_description", "accessibility", "members"]
def create(self, validated_data): def create(self, validated_data):
members = validated_data['members'] members = validated_data["members"]
del validated_data['members'] del validated_data["members"]
team = None if self.Meta.model.objects.filter(
try: owner=self.context["request"].user, name=validated_data["name"]
team = Team.objects.get(owner=self.context['request'].user, name=validated_data['name']) ).exists():
except: raise serializers.ValidationError("A team with this name already exists")
pass
if team is not None: team = self.Meta.model.objects.create(
raise serializers.ValidationError('A team with this name already exists') owner=self.context["request"].user, **validated_data
)
team = self.Meta.model.objects.create(owner=self.context['request'].user, **validated_data)
if members: if members:
for member in members: for member in members:
...@@ -142,14 +141,22 @@ class TeamCreationSerializer(serializers.ModelSerializer): ...@@ -142,14 +141,22 @@ class TeamCreationSerializer(serializers.ModelSerializer):
return team return team
def update(self, instance, validated_data): def update(self, instance, validated_data):
instance.short_description = validated_data.get('short_description', instance.short_description) instance.short_description = validated_data.get(
instance.privacy_level = validated_data.get('privacy_level', instance.privacy_level) "short_description", instance.short_description
)
instance.privacy_level = validated_data.get(
"privacy_level", instance.privacy_level
)
instance.save() instance.save()
members = validated_data.get('members', []) members = validated_data.get("members", [])
members_to_remove = [user for user in instance.members.all() if user not in members] members_to_remove = [
members_to_add = [user for user in members if user not in instance.members.all()] user for user in instance.members.all() if user not in members
]
members_to_add = [
user for user in members if user not in instance.members.all()
]
for user in members_to_remove: for user in members_to_remove:
instance.members.remove(user) instance.members.remove(user)
...@@ -166,9 +173,9 @@ class TeamCreationSerializer(serializers.ModelSerializer): ...@@ -166,9 +173,9 @@ class TeamCreationSerializer(serializers.ModelSerializer):
return Contribution.sanitize_name(value) return Contribution.sanitize_name(value)
def validate_accessibility(self, value): def validate_accessibility(self, value):
if value == 'public': if value == "public":
return Team.PUBLIC return Team.PUBLIC
elif value == 'members': elif value == "members":
return Team.MEMBERS return Team.MEMBERS
else: else:
return Team.PRIVATE return Team.PRIVATE
...@@ -181,13 +188,12 @@ class TeamCreationSerializer(serializers.ModelSerializer): ...@@ -181,13 +188,12 @@ class TeamCreationSerializer(serializers.ModelSerializer):
return serializer.data return serializer.data
#---------------------------------------------------------- # ----------------------------------------------------------
class TeamUpdateSerializer(TeamCreationSerializer): class TeamUpdateSerializer(TeamCreationSerializer):
class Meta(TeamCreationSerializer.Meta): class Meta(TeamCreationSerializer.Meta):
fields = ['short_description', 'accessibility', 'members'] fields = ["short_description", "accessibility", "members"]
def to_representation(self, obj): def to_representation(self, obj):
serializer = UpdatedTeamSerializer(obj) serializer = UpdatedTeamSerializer(obj)
......
...@@ -25,25 +25,21 @@ ...@@ -25,25 +25,21 @@
# # # #
############################################################################### ###############################################################################
import json
import os import os
import shutil import shutil
import json
from django.conf import settings
from django.contrib.auth.models import User
from django.urls import reverse from django.urls import reverse
from rest_framework import status from rest_framework import status
from rest_framework.test import APITestCase from rest_framework.test import APITestCase
from django.contrib.auth.models import User
from django.conf import settings
from ..common.testutils import tearDownModule # noqa test runner will call it from ..common.testutils import tearDownModule # noqa test runner will call it
from ..dataformats.models import DataFormat from ..dataformats.models import DataFormat
from .models import Team from .models import Team
from .serializers import SimpleTeamSerializer from .serializers import SimpleTeamSerializer
# ---------------------------------------------------------- # ----------------------------------------------------------
......
...@@ -26,16 +26,15 @@ ...@@ -26,16 +26,15 @@
############################################################################### ###############################################################################
from django.conf import settings from django.conf import settings
from django.shortcuts import get_object_or_404
from django.shortcuts import render
from django.contrib.auth.decorators import login_required from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.http import Http404 from django.http import Http404
from django.shortcuts import get_object_or_404
from django.shortcuts import render
from .models import Team from .models import Team
# ----------------------------------------------------------
#----------------------------------------------------------
@login_required @login_required
...@@ -45,14 +44,18 @@ def create(request): ...@@ -45,14 +44,18 @@ def create(request):
The user must be authenticated before it can add a new team The user must be authenticated before it can add a new team
""" """
return render(request, return render(
'team/edition.html', request,
{ "team/edition.html",
'users': User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username'), {
}) "users": User.objects.exclude(
username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS
).order_by("username"),
},
)
#---------------------------------------------------------- # ----------------------------------------------------------
@login_required @login_required
...@@ -62,23 +65,27 @@ def edit(request, author_name, name): ...@@ -62,23 +65,27 @@ def edit(request, author_name, name):
The user must be authenticated before it can edit a team The user must be authenticated before it can edit a team
""" """
if author_name != request.user.username: raise Http404() if author_name != request.user.username:
raise Http404()
# Retrieves the team # Retrieves the team
team = get_object_or_404(Team, team = get_object_or_404(
owner__username__iexact=author_name, Team, owner__username__iexact=author_name, name__iexact=name
name__iexact=name )
)
return render(request, return render(
'team/edition.html', request,
{ "team/edition.html",
'team': team, {
'users': User.objects.exclude(username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS).order_by('username'), "team": team,
}) "users": User.objects.exclude(
username__in=settings.ACCOUNTS_TO_EXCLUDE_FROM_TEAMS
).order_by("username"),
},
)
#---------------------------------------------------------- # ----------------------------------------------------------
def view(request, author_name, name): def view(request, author_name, name):
...@@ -86,18 +93,17 @@ def view(request, author_name, name): ...@@ -86,18 +93,17 @@ def view(request, author_name, name):
""" """
team = get_object_or_404(Team, name=name, owner__username=author_name) team = get_object_or_404(Team, name=name, owner__username=author_name)
return render(request, return render(request, "team/team.html", {"team": team})
'team/team.html',
{'team': team})
#---------------------------------------------------------- # ----------------------------------------------------------
def ls(request, author_name): def ls(request, author_name):
'''List all accessible teams to the request user''' """List all accessible teams to the request user"""
if not author_name: return public_ls(request) if not author_name:
return public_ls(request)
author = get_object_or_404(User, username=author_name) author = get_object_or_404(User, username=author_name)
...@@ -108,25 +114,25 @@ def ls(request, author_name): ...@@ -108,25 +114,25 @@ def ls(request, author_name):
else: else:
objects = Team.objects.for_user(request.user, True).filter(owner=author) objects = Team.objects.for_user(request.user, True).filter(owner=author)
return render(request, return render(
'team/list.html', request,
dict( "team/list.html",
objects=objects, dict(objects=objects, author=author, owner=(request.user == author),),
author=author, )
owner=(request.user == author),
))
#---------------------------------------------------------- # ----------------------------------------------------------
def public_ls(request): def public_ls(request):
'''List all accessible teams to the request user''' """List all accessible teams to the request user"""
return render(request, return render(
'team/list.html', request,
dict( "team/list.html",
objects=Team.objects.public(), dict(
author=request.user, #anonymous objects=Team.objects.public(),
owner=False, author=request.user, # anonymous
)) owner=False,
),
)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment