Pygithub: Comment travailler avec l'objet GithubException

Créé le 28 mars 2013  ·  14Commentaires  ·  Source: PyGithub/PyGithub

J'ai une question sur la façon de travailler avec l'objet GithubException

Exemple de code:
essayer:
team = org.create_team (teamName,
[],
"pousser");
sauf GithubException comme e:
imprimer (e)

Lorsque j'imprime (e), j'obtiens:

 422 {u'message': u'Validation Failed', u'errors': [{u'field': u'name', u'code': u'already_exists', u'resource': u'Team'}]}

Ce que j'aimerais pouvoir faire est de voir la liste des attributs et des fonctions membres de l'objet GithubException afin que je puisse extraire diverses choses pour vérifier des événements particuliers ... mais je ne peux pas trouver cela dans la documentation pour l'API PyGithub. Peut-être ai-je juste besoin de mieux comprendre la relation entre l'API PyGithub et l'API Github RESTful sous-jacente.

D'après la source, il semble qu'il existe deux propriétés de l'objet GithubException:

https://github.com/jacquev6/PyGithub/blob/master/github/GithubException.py

data

et en mettant cela avec la sortie, il semble que le 422 est le statut (peut-être retourné par l'API?), et les données sont un objet dictionnaire (peut-être un encodage du JSON qui a été retourné?) mais ce ne sont que des suppositions.

Il semble que le seul endroit où GithubException se produit dans la source est dans Requester.py --- et cela tend à confirmer mes suppositions.

Y a-t-il quelque part dans la documentation de l'API github elle-même où l'on peut trouver les clés que l'on s'attendrait à trouver dans l'objet JSON, c'est-à-dire dans ce cas "message", "erreurs", puis dans "erreurs", "champ" , "code", "et" ressource "?

À partir d'essais et d'erreurs, j'ai opté pour un code comme celui-ci, mais cela me semble "hacky --- je serais plus à l'aise si je savais si je faisais ça correctement ...

team = False   # Sentinel to see if it succeeded or failed
try:
   team = org.create_team(teamName,
                     [],
                     "push");
   print(" team {0} created...".format(teamName),end='')
except GithubException as e:
   if (e.data['errors'][0]['code']=='already_exists'):
      print(" team {0} already exists...".format(teamName),end='') 
   else:
      print (e)

if (team != False):
   # do something with team...

Suis-je sur la bonne voie?

question

Commentaire le plus utile

Salut,
J'essaye d'attraper une exception:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

Maintenant, j'essaye d'y accéder directement, j'obtiens l'erreur suivante:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

Comment puis-je intercepter cette exception spécifique et pas seulement une exception githubexception générale?

Tous les 14 commentaires

Notez que User @ jacquev6 a partiellement abordé ce problème dans un commentaire sur le problème n ° 82.

C'est en effet la bonne voie. Voici quelques remarques.

Vous avez raison à propos de status et data : ce sont le statut HTTP et la charge utile json décodée. Je l'ai fait de cette façon parce que je n'avais aucune idée des types d'erreurs qui pourraient se produire, donc je n'ai pas pu créer des propriétés spécifiques comme dans toutes les autres classes de PyGithub. (Je sais qu'un NamedUser toujours un name , mais il n'y a pas de telles connaissances sur les exceptions / erreurs)

Ainsi, chaque fois que l'API Github v3 renvoie un statut HTTP supérieur à 400, je lève un GithubException avec ce statut et la charge utile.

En vérifiant la documentation de l'API Github v3 aujourd'hui, je vois quelques mots sur les erreurs: http://developer.github.com/v3/#client -errors mais en fait il y a plus d'erreurs possibles. Par exemple, 404 erreurs pour des objets non existants, 401 pour une mauvaise authentification, etc.

Donc, ce que je peux faire maintenant que je connais un peu plus les erreurs, c'est de créer des sous-classes de GithubException , et de les augmenter lorsque je vois un type d'erreur spécifique. Cela permettrait au client de except des classes d'erreur spécifiques et de laisser les autres classes remonter la pile.

Je vais le faire dans la version 1.14.0 et en profiter pour le documenter sur http://jacquev6.github.com/PyGithub/.

Je vais faire ça dans la branche topic/SpecificExceptions

Cela semble formidable. Encore une fois, merci pour tout votre travail acharné, et
excellentes compétences en conception de logiciels. Le produit a été extraordinairement
utile et facile à comprendre --- et résoudre ce problème le rendra même
mieux.

Le jeu.28 mars 2013 à 12:59, Vincent Jacques
[email protected] a écrit :

Je le ferai dans la branche topic / SpecificExcept ionshttps: //github.com/jacquev6/PyGithub/tree/topic/SpecificExceptions

-
Répondez directement à cet e-mail ou consultez-le sur Gi tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15611026
.

Phill Conrad, Maître de conférences (SOE) *, Département d'informatique
Université de Californie, Santa Barbara
Nomination conjointe: College of Creative Studies (www.ccs.ucsb.edu)

[email protected] , www.cs.ucsb.edu/~pconrad

* SOE: une nomination de professeur d'UC, correspondant au grade et au poste
sécurité à un professeur agrégé titulaire

Merci \ o / C'est toujours très agréable d'entendre un client satisfait!

Oui, je pense que je vais vous donner une augmentation - le double du salaire que je vous paie
à présent. :-)

Le jeu 28 mars 2013 à 13:33, Vincent Jacques
[email protected] a écrit :

Merci \ o / C'est toujours très agréable d'entendre un client satisfait!

-
Répondez directement à cet e-mail ou consultez-le sur Gi tHubhttps: //github.com/jacquev6/PyGithub/issues/152#issuecomment -15612761
.

Phill Conrad, Maître de conférences (SOE) *, Département d'informatique
Université de Californie, Santa Barbara
Nomination conjointe: College of Creative Studies (www.ccs.ucsb.edu)

[email protected] , www.cs.ucsb.edu/~pconrad

* SOE: une nomination de professeur d'UC, correspondant au grade et au poste
sécurité à un professeur agrégé titulaire

Huhu, ce serait à la fois ma plus grosse et ma plus petite augmentation!

Note à moi-même:

  • Vérifiez le test github.tests.Organization.testMembers: il y a un statut 403
  • Ajouter un cas de test pour un exn spécifique en cas d'authentification incorrecte avec un jeton

Une partie de ce problème était livré dans la version 1.14.0, mais je le garde pour la version 1.15.0 pour ajouter quelques autres types d'exceptions spécifiques.

Nouvelle exception spécifique à créer: HTTP 403 "bad user agent" (voir # 160)

Je ferme ce problème maintenant, mais je continuerai à ajouter des types d'exceptions spécifiques lorsque je les rencontrerai.

Salut,
J'essaye d'attraper une exception:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

Maintenant, j'essaye d'y accéder directement, j'obtiens l'erreur suivante:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

Comment puis-je intercepter cette exception spécifique et pas seulement une exception githubexception générale?

Salut,
J'essaye d'attraper une exception:

github.GithubException.BadCredentialsException: 401 {'message': 'Bad credentials', 'documentation_url': 'https://developer.github.com/v3'}

Maintenant, j'essaye d'y accéder directement, j'obtiens l'erreur suivante:

AttributeError: type object 'GithubException' has no attribute 'BadCredentialsException'

Comment puis-je intercepter cette exception spécifique et pas seulement une exception githubexception générale?

@NicoHood utilise github.BadCredentialsException - ce qui est plus clair à partir du code source.

GithubException est une classe ainsi qu'un module, le chemin complet du module vers la classe est github.GithubException.GithubException, à partir duquel vous ne pouvez pas importer BadCredentialsException. Toutes les exceptions sont exportées via github, donc from github import BadCredentialsException fonctionnera correctement.

Cette page vous a été utile?
0 / 5 - 0 notes