def put( self, request: Request, organization: Organization, member: OrganizationMember, ) -> Response: """ Update an invite request to Organization ```````````````````````````````````````` Update and/or approve an invite request to an organization. :pparam string organization_slug: the slug of the organization the member will belong to :param string member_id: the member ID :param boolean approve: allows the member to be invited :param string role: the suggested role of the new member :param array teams: the suggested slugs of the teams the member should belong to. :auth: required """ serializer = OrganizationMemberSerializer( data=request.data, context={ "organization": organization, "allowed_roles": roles.get_all() }, partial=True, ) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) result = serializer.validated_data if result.get("role"): member.update(role=result["role"]) if "teams" in result: save_team_assignments(member, result["teams"]) if "approve" in request.data: _, allowed_roles = get_allowed_roles(request, organization) serializer = ApproveInviteRequestSerializer( data=request.data, context={ "request": request, "organization": organization, "member": member, "allowed_roles": allowed_roles, }, ) if not serializer.is_valid(): return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) result = serializer.validated_data if result.get("approve") and not member.invite_approved: api_key = get_api_key_for_audit_log(request) member.approve_member_invitation( request.user, api_key, request.META["REMOTE_ADDR"], request.data.get("referrer"), ) return Response( serialize(member, serializer=OrganizationMemberWithTeamsSerializer()), status=status.HTTP_200_OK, )