Bonjour à tous !
J'ai l'impression que l'usage de weboob dans des scripts python ne fait pas l'objet de vraie documentation destinée aux utilisateurs.
Et j'ai pas trouvé de forum dédié où poser des questions, donc je tente ma chance ici.
J'étais parvenu à un truc qui marchais il y a quelques temps, en m'inspirant d'un exemple glané je ne sais plus où, et j'étais arrivé à truc qui juste marche, par un hasard miraculeux.
Dans mon script, j'ai le bout de code suivant qui sert à récupérer l'historique d'un compte en banque :
def get_history(account_ID,min_date = date(1900, 12, 31), max_date = date(2900, 12, 31)) :
bank_name = account_ID.split("@")[1]
w = Weboob()
w.load_backends(names=[bank_name])
for a_tmp in list(w.iter_accounts()) :
account = a_tmp.to_dict()
if account["id"] == account_ID :
a = a_tmp
res = []
for h in w.iter_history(a) :
history = h.to_dict()
if min_date <= history["date"].date() <= max_date :
res += [{"label":history["label"], "amount":history["amount"], "date":history["date"]}]
return res
Tout marchait pour le mieux dans le meilleur des mondes, jusqu'à ce que je mette à jour Weboob.
Depuis, j'ai le message d'erreur suivant :
Traceback (most recent call last):
File "/media/bigadin_homes/Travail/Banque/Auto_dispatch_manual_test.py", line 9, in <module>
gain_moy = get_gain_moyen_par_mois("XXXXXXXX", nb_mois = nbm)
File "/media/bigadin_homes/Travail/Banque/BankTools.py", line 100, in get_gain_moyen_par_mois
history = get_history(account_ID,min_date = min_date, max_date = max_date)
File "/media/bigadin_homes/Travail/Banque/BankTools.py", line 55, in get_history
for a_tmp in list(w.iter_accounts()) :
File "/home/admin/.local/lib/python3.5/site-packages/weboob/core/bcall.py", line 185, in __iter__
raise CallErrors(self.errors)
weboob.core.bcall.CallErrors: Errors during backend calls:
Module(<Backend 'cragr'>): TypeError('object() takes no parameters',)
'Traceback (most recent call last):\n File "/home/admin/.local/lib/python3.5/site-packages/weboob/browser/switch.py", line 91, in wrapper\n return val(*args, **kwar
gs)\n File "/home/admin/.local/lib/python3.5/site-packages/weboob/browser/browsers.py", line 795, in inner\n browser.do_login()\n File "/home/admin/.local/share/we
boob/modules/1.5/cragr/web/browser.py", line 177, in do_login\n raise SiteSwitch(\'api\')\nweboob.browser.switch.SiteSwitch: Switching to site api\n\nDuring handling
of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File "/home/admin/.local/lib/python3.5/site-packages/weboob/core/bcall.py"
, line 96, in backend_process\n result = getattr(backend, function)(*args, **kwargs)\n File "/home/admin/.local/share/weboob/modules/1.5/cragr/module.py", line 105,
in iter_accounts\n return self.browser.get_accounts_list()\n File "/home/admin/.local/lib/python3.5/site-packages/weboob/browser/switch.py", line 93, in wrapper\n
self.set_browser(e.name)\n File "/home/admin/.local/lib/python3.5/site-packages/weboob/browser/switch.py", line 73, in set_browser\n obj = klass(*self._browser_a
rgs, **self._browser_kwargs)\n File "/home/admin/.local/share/weboob/modules/1.5/cragr/api/browser.py", line 157, in __init__\n self.netfinca = NetfincaBrowser(\'\'
, \'\', logger=self.logger, weboob=self.weboob, responses_dirname=dirname, proxy=self.PROXIES)\nTypeError: object() takes no parameters\n'
Bon, visiblement, iter_accounts n'est plus une fonction de la classe Weboob (Enfin je crois que c'est ce que j'ai compris).
J'ai tenté d'investiguer à base de print(dir(w)) et de help(w) pour voir si c'était remplacé par autre chose, mais j'ai pas trouvé.
Quelqu'un saurait me dire si la documentation de mes rêves se trouve quelque part ?
EDIT : En fait ça n'arrive que à partir de la deuxième fois que je rentre dans cette fonction.
Je suppose qu'il faut réinitialiser un truc entre deux appels.
J'ai tenté de mettre un w.deinit() à la fin, mais ça ne change rien.
# doque
Posté par mr_maurice . Évalué à 1.
En tout cas la fonction que tu appelle semble documentée
[^] # Re: doque
Posté par BFG . Évalué à 2. Dernière modification le 02 avril 2019 à 09:25.
En fait la class
Weboob
n'a pas vraiment d'attributs, quand on accède à un attribut comme la fonctioniter_accounts
, elle distribue l'appel à tous les modules qui sont chargés/activés, ici, le modulecragr
, qui a bien cette méthode car il implémente la classe abstraiteCapBank
pointée par le commentaire ci-dessus.Concernant l'erreur rencontrée, d'après la trace d'erreur, on peut voir qu'elle n'arrive pas avec l'usage de la méthode
iter_accounts
mais qu'elle arrive plus profond. C'est donc un bug du modulecragr
, qu'il conviendrait de rapporter là : https://git.weboob.org/weboob/weboob/issues pour qu'il soit corrigé rapidement.[^] # Re: doque
Posté par Coninox (site web personnel) . Évalué à 1.
C'est à dire que pour l'instant je ne sais pas vraiment si c'est un bug du module cragr, ou si c'est un mauvais usage de Weboob de ma part, donc c'est peut-être prématuré d'écrire un rapport de bug.
[^] # Re: doque
Posté par Coninox (site web personnel) . Évalué à 1.
à vrai dire j'avais déjà lu cette documentation il y a des mois, quand j'avais fait la première version qui fonctionnait.
Mais j'ai du mal à l'apréhender, déjà parcequ'il n'y a aucun exemple de code, et c'est souvent en contextualisant les choses qu'on en comprend le fonctionnement, et ensuite, parce que je ne comprends pas la structure du bouzin.
Ici, les fonctions documentées le sont dans "weboob.capabilities.bank.CapBank"
Or, quand je fais un appel à iter_accounts(), je fais w.iter_accounts(), et non pas w.capabilities.bank.Capbank.iter_accounts().
Il doit me manquer une notion, mais du coup je n'arrive pas à comprendre le lien entre la doc et ce que je dois écrire pour que ça fonctionne.
Je m'étais inspiré du seul exemple de code que j'avais trouvé, à savoir le Hello World sur dev.weboob.org
[^] # Re: doque
Posté par lolop (site web personnel) . Évalué à 2.
Il me semble qu'il y a une petite collection d'applications clientes basées sur weboob, a priori c'est du Python et ça vient avec les sources, tu devrais pouvoir trouver une application simple pour t'inspirer.
Sur la page d'installation http://weboob.org/install
Il y a les commandes git pour récupérer les dernières sources (les applications sont dans un sous-répertoire de la distrib).
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
[^] # Re: doque
Posté par Coninox (site web personnel) . Évalué à 2.
C'est une bonne idée.
Ceci dit, j'ai corrigé mon problème en mettant ma variable w en variable globale, et en faisant une fonction qui fait le load du backend uniquement si il n'a pas été chargé auparavant.
Pour l'instant, ça re-marche !
# IRC
Posté par ComputingFroggy (site web personnel) . Évalué à 2.
Si tu vas sur le canal IRC de weboob #weboob sur http://www.freenode.net/, tu trouveras des personnes prêtes à te donner un coup de main … en tout cas pour moi, ça a fonctionné.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.