2 votes

Comment ajouter des codes personnalisés à HTTPStatus en Python 3.5 ?

Mon client HTTP utilise le programme Python demande pour accéder à une API mandatée par CloudFlare. Le client convertit le code d'état de la réponse numérique en un code de statut HTTPStatus enum instance. Simplifié ...

import requests
from http import HTTPStatus

url = ...
response = requests.get(url)
status = HTTPStatus(response.status_code)

Le service proxy CloudFlare peut renvoyer certains codes d'état HTTP 5xx non officiels : https://en.wikipedia.org/wiki/List_of_HTTP_status_codes#CloudFlare . Ces causes HTTPStatus de soulever un ValueError parce que des codes tels que 522 (Connection Timed Out) ne font pas partie du HTTPStatus définie dans le langage Python lib/http/__init__.py .

Comment puis-je ajouter les codes d'état non officiels de CloudFlare à l'adresse suivante HTTPStatus enum ? Ou, comment puis-je charger le HTTPStatus dans un autre enum avec les codes d'état non officiels de CloudFlare ?

La version 3.5 de Python Enum documentation, https://docs.python.org/3/library/enum.html décrit les restrictions qui m'ont contrarié jusqu'à présent.

Section 8.13.9 : La sous-classification d'une énumération n'est autorisée que si l'énumération ne définit aucun membre. l'énumération ne définit pas de membres.

Section 8.13.14.2 : La chose la plus intéressante à propos Enum Les membres sont qu'ils sont des singletons. EnumMeta les crée tous pendant qu'il crée le Enum elle-même, et met ensuite un __new__() en place afin de s'assurer qu'aucun nouveau n'est jamais instancié en retournant le fichier uniquement les instances membres existantes.

0voto

Ethan Furman Points 12683

Le nouveau bibliothèque aenum 1 a un extend_enum qui est capable d'ajouter de nouveaux membres à une énumération existante.

Exemple d'utilisation :

import aenum
from http import HTTPStatus

aenum.extend_enum(HTTPStatus, 'BAD_SPAM', 513, 'Too greasy')
aenum.extend_enum(HTTPStatus, 'BAD_EGGS', 514, 'Too green')

1 Le site bibliothèque aenum vient de l'auteur/coauteur de la backport de l'enum34 et la version 3.4 de Python Enum type de données.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X