Skip to content
Snippets Groups Projects
Commit b55ed9db authored by André Anjos's avatar André Anjos :speech_balloon:
Browse files

[teams] Closes issue #406

parent 1902bcf8
No related branches found
No related tags found
1 merge request!206Issue 406
Pipeline #
......@@ -42,7 +42,7 @@ from .serializers import TeamUpdateSerializer
from .models import Team
from .permissions import IsOwner, HasPrivacyLevel
from ..common.responses import BadRequestResponse
from ..common.responses import BadRequestResponse, ForbiddenResponse
from ..common.mixins import CommonContextMixin
......@@ -117,6 +117,11 @@ class TeamDetailView(CommonContextMixin, generics.RetrieveUpdateDestroyAPIView):
def delete(self, request, owner_name, team_name):
team = self.get_queryset()
# Check that the team can still be deleted
if not(team.deletable()):
return ForbiddenResponse("The team isn't deletable (it has been used to share %d objects with its members)" % team.total_shares())
team.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
......
......@@ -93,6 +93,32 @@ class Team(models.Model):
return (self.owner.username, self.name)
def total_shares(self):
used_at = 0
used_at += self.shared_algorithms.count()
used_at += self.shared_databases.count()
used_at += self.shared_dataformats.count()
used_at += self.shared_environment.count()
used_at += self.shared_experiments.count()
used_at += self.shared_librarys.count()
used_at += self.shared_plotterparameters.count()
used_at += self.shared_plotters.count()
used_at += self.shared_searchs.count()
used_at += self.shared_toolchains.count()
used_at += self.usable_algorithm.count()
used_at += self.usable_library.count()
used_at += self.usable_plotterparameters.count()
used_at += self.usable_plotters.count()
return used_at
def deletable(self):
return not self.total_shares()
#_____ Overrides __________
def __unicode__(self):
......
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