Development #67085
Authentification DRF and co pour APIClient
0%
Fichiers
Demandes liées
Révisions associées
rest_authentication: add api client authentication (#67085)
Historique
Mis à jour par Frédéric Péters il y a plus d'un an
- Lié à Development #66985: gestion centralisée des accès aux API / Infrastructure minimale pour accès HTTP basic ajouté
Mis à jour par Emmanuel Cazenave il y a plus d'un an
- Fichier 0001-rest_authentication-add-a-requests-wrapper-67085.patch 0001-rest_authentication-add-a-requests-wrapper-67085.patch ajouté
- Fichier 0002-rest_authentication-add-api-client-authentication-67.patch 0002-rest_authentication-add-api-client-authentication-67.patch ajouté
- Statut changé de Nouveau à Solution proposée
- Patch proposed changé de Non à Oui
0001 pour un request wrapper.
0002 l'authent, rien se spécial à mon sens.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution proposée à Information nécessaire
Je commence.
response = Requests().post(url, json={'identifier': identifier, 'password': password}) try: response.raise_for_status() except requests.exceptions.RequestException: return None
S'il y a une erreur réseau le problème ressortira dans le porteur du web service mais aussi sur le client (avec juste une 500 sans savoir vraiment le souci) mais pas du tout sur authentic, je me dis qu'on pourrait cacher ces erreurs coté web services et simplement renvoyer le souci dans des erreurs propres 500 avec err/err_desc/err_cls (via l'émission d'une exception APIException), on aura ainsi une trace que chez l'appelant, avec un code d'erreur explicite, ça me parait mieux.
Je ne connaissais pas responses, ça a l'air bien sympa, plus qu'httmock. Je découperai ton test en plusieurs cas via une class :
class TestApiClientAuthentication: @pytest.fixture(autouse=True) def setupt(self): settings.ROOT_URLCONF = 'hobo.test_urls' app.authorization = ('Basic', ('foo', 'bar')) settings.KNOWN_SERVICES = { 'authentic': { 'idp': { 'title': 'Foobar', 'url': 'https://idp.example.invalid/', 'orig': 'example.org', 'secret': 'xxx', } } } def test_no_known_services(self, settings): del settings.KNOWN_SERVICES # No KNOWN_SERVICES : 403 resp = app.get('/authenticated-testview/', status=403) def test_no_authentic_in_known_services(self, settings): # No authentic in KNOWN_SERVICES : 403 settings.KNOWN_SERVICES = {} resp = app.get('/authenticated-testview/', status=403) @responses.activate def test_error_404(self) # check-api-client returns an error : 403 responses.add( responses.POST, 'https://idp.example.invalid/api/check-api-client/', status=403, ) resp = app.get('/authenticated-testview/', status=403) ...
Je trouve plus clair ce style avec des tests plus petits mais ciblés et structurés.
Mis à jour par Emmanuel Cazenave il y a plus d'un an
- Fichier 0001-rest_authentication-add-a-requests-wrapper-67085.patch 0001-rest_authentication-add-a-requests-wrapper-67085.patch ajouté
- Fichier 0002-rest_authentication-add-api-client-authentication-67.patch 0002-rest_authentication-add-api-client-authentication-67.patch ajouté
- Statut changé de Information nécessaire à Solution proposée
Benjamin Dauvergne a écrit :
S'il y a une erreur réseau le problème ressortira
Voilà des 503 propres.
Je trouve plus clair ce style avec des tests plus petits mais ciblés et structurés.
Découpé mais sans classe, j'aime pas du tout dans les tests.
Mis à jour par Benjamin Dauvergne il y a plus d'un an
- Statut changé de Solution proposée à Solution validée
Good.
Mis à jour par Emmanuel Cazenave il y a plus d'un an
- Statut changé de Solution validée à Résolu (à déployer)
commit bc959e928e6c9a0974e50102b31a50965d910ce1 Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Mon Aug 22 14:23:04 2022 +0200 rest_authentication: add api client authentication (#67085) commit 57d856937633c75dec33a7688ede02512bf59864 Author: Emmanuel Cazenave <ecazenave@entrouvert.com> Date: Mon Aug 22 14:22:02 2022 +0200 rest_authentication: add a requests wrapper (#67085)
Mis à jour par Transition automatique il y a plus d'un an
- Statut changé de Résolu (à déployer) à Solution déployée
Mis à jour par Mikaël Ates (de retour le 29 avril) il y a plus d'un an
- Lié à Development #67087: Avoir un wrapper Request qui puisse être partagé par les applications ajouté
rest_authentication: add a requests wrapper (#67085)