Forum Programmation.python Script qui utilise Weboob cassé après une màj

Posté par  (site Web personnel) . Licence CC By‑SA.
Étiquettes : aucune
0
1
avr.
2019

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  . Évalué à 1.

    En tout cas la fonction que tu appelle semble documentée

    • [^] # Re: doque

      Posté par  . Évalué à 2. Dernière modification le 02/04/19 à 09:25.

      Bon, visiblement, iter_accounts n'est plus une fonction de la classe Weboob (Enfin je crois que c'est ce que j'ai compris).

      En fait la class Weboob n'a pas vraiment d'attributs, quand on accède à un attribut comme la fonction iter_accounts, elle distribue l'appel à tous les modules qui sont chargés/activés, ici, le module cragr, qui a bien cette méthode car il implémente la classe abstraite CapBank 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 module cragr, qu'il conviendrait de rapporter là : https://git.weboob.org/weboob/weboob/issues pour qu'il soit corrigé rapidement.

      • [^] # Re: doque

        Posté par  (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  (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  (site Web personnel) . Évalué à 2.

        seul exemple de code que j'avais trouvé

        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).

        Python 3 - Apprendre à programmer dans l'écosystème Python → https://www.dunod.com/EAN/9782100809141

        • [^] # Re: doque

          Posté par  (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  (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 à ceux qui les ont postés. Nous n’en sommes pas responsables.