# API team ID based sharing
* extents api sharing via team name with team id, so that both ways are supported now * updates tests
This commit is contained in:
@@ -6,13 +6,14 @@ Created on: 21.01.22
|
||||
|
||||
"""
|
||||
import json
|
||||
import uuid
|
||||
|
||||
from django.db.models import QuerySet
|
||||
from django.db.models import QuerySet, Q
|
||||
from django.http import JsonResponse, HttpRequest
|
||||
from django.views import View
|
||||
from django.views.decorators.csrf import csrf_exempt
|
||||
|
||||
from api.models import APIUserToken
|
||||
from api.models import APIUserToken, ExternalIdentifier
|
||||
from api.settings import KSP_TOKEN_HEADER_IDENTIFIER, KSP_USER_HEADER_IDENTIFIER
|
||||
from compensation.models import EcoAccount
|
||||
from ema.models import Ema
|
||||
@@ -205,6 +206,10 @@ class AbstractModelShareAPIView(AbstractAPIView):
|
||||
|
||||
"""
|
||||
try:
|
||||
external_identifier = ExternalIdentifier.resolve_external_identifier(id)
|
||||
if external_identifier:
|
||||
id = external_identifier.internal_id
|
||||
|
||||
users = self._get_shared_users_of_object(id)
|
||||
teams = self._get_shared_teams_of_object(id)
|
||||
except Exception as e:
|
||||
@@ -237,6 +242,9 @@ class AbstractModelShareAPIView(AbstractAPIView):
|
||||
"""
|
||||
|
||||
try:
|
||||
external_identifier = ExternalIdentifier.resolve_external_identifier(id)
|
||||
if external_identifier:
|
||||
id = external_identifier.internal_id
|
||||
success = self._process_put_body(request.body, id)
|
||||
except Exception as e:
|
||||
return self._return_error_response(e)
|
||||
@@ -361,26 +369,29 @@ class AbstractModelShareAPIView(AbstractAPIView):
|
||||
# Eliminate duplicates
|
||||
new_teams = list(dict.fromkeys(team_list))
|
||||
|
||||
# Make sure each of these names exist as a team
|
||||
new_teams_objs = []
|
||||
for team_name in new_teams:
|
||||
# Resolve team names or ids into objects
|
||||
new_team_ids = []
|
||||
for team in new_teams:
|
||||
try:
|
||||
team_obj = Team.objects.get(name=team_name)
|
||||
except Team.DoesNotExist:
|
||||
raise AssertionError(f"Team {team_name} does not exist!")
|
||||
new_teams_objs.append(team_obj)
|
||||
uuid.UUID(team)
|
||||
try:
|
||||
new_team_ids.append(Team.objects.get(id=team).id)
|
||||
except Team.DoesNotExist:
|
||||
raise AssertionError(f"Team with id {team} does not exist!")
|
||||
except ValueError:
|
||||
# entry is a name and not a uuid -> try to resolve as name!
|
||||
try:
|
||||
new_team_ids.append(Team.objects.get(name=team).id)
|
||||
except Team.DoesNotExist:
|
||||
raise AssertionError(f"Team with name {team} does not exist!")
|
||||
|
||||
new_team_objs = Team.objects.filter(id__in=new_team_ids)
|
||||
if self.user.is_default_group_only():
|
||||
# Default only users are not allowed to remove other users from having access. They can only add new ones!
|
||||
# So we need to keep the ones that already have access from being removed!
|
||||
new_teams_to_be_added = Team.objects.filter(
|
||||
name__in=new_teams
|
||||
).exclude(
|
||||
id__in=obj.shared_teams
|
||||
)
|
||||
new_teams_objs = obj.shared_teams.union(new_teams_to_be_added)
|
||||
new_team_objs = obj.shared_teams.union(new_team_objs)
|
||||
|
||||
obj.share_with_team_list(new_teams_objs)
|
||||
obj.share_with_team_list(new_team_objs)
|
||||
|
||||
class InterventionAPIShareView(AbstractModelShareAPIView):
|
||||
model = Intervention
|
||||
|
||||
Reference in New Issue
Block a user