from django.urls import reverse from typing import Any from unittest import mock def disable_gestionnaire_permission(type): """ Utilise "mock" pour ignorer le gestionnaire de permissions dans la vue. TODO trouver un mécanisme de mock plus précis :param type: le type de la vue :type type: class:`ModelViewSet` par exemple :return: résultat du mock :rtype: voir mock """ return mock.patch.object(type, 'permission_classes', [p for p in type.permission_classes if p.__name__ != 'GestionnairePermission']) def api_url(basename: str, pk: Any = None) -> str: """ renvoie l'URL selon qu'on a besoin d'un ID ou non nécessite l'utilisation de SimpleRouter ou DefaultRouter (voir urls.py) :param basename: valeur de "basename" :type basename: str :param pk: valeur qui permet de savoir s'il s'agit d'une URL "list" ou "detail" (voir https://www.django-rest-framework.org/api-guide/routers/#simplerouter) :type pk: Any :return: URL :rtype: str """ return reverse(f'{basename}-list') if pk is None else reverse(f'{basename}-detail', args=[pk]) class TestUtilsMixin: """ mixin à ajouter pour les tests """ def _api_url(self, pk: Any = None) -> str: """ voir fonction "api_url", nécessite un champ "basename" pour remplir le paramètre """ return api_url(self.basename, pk)