MadeInPierre / finalynx

A minimalistic companion (CLI & web) to organize your investment portfolio, simulate its future, and reach your life goals.
https://finalynx.readthedocs.io
GNU General Public License v3.0
68 stars 13 forks source link

feat(fetch): fetch RealT Gnosis wallet via public API #106

Closed nmathey closed 1 year ago

nmathey commented 1 year ago

Description

Fetch RealT Gnosis wallet using RealT community maintained API

Actions

Usage

Make sure you put your own RealT Gnosis wallet address in 'fetch/source_finary.py': 'MyRealT_Wallet_Address' variable

MadeInPierre commented 1 year ago

Excellent, je teste ça dans la journée ! Merci :grin:

Pas trop galère avec les merge ? J'en ai bavé aussi à certains points ^^

MadeInPierre commented 1 year ago

Après, vu qu'il faut mettre son token perso dans un fichier, peut-être serait-il mieux de laisser l'utilisateur l'ajouter dans sa config perso avec l'API en argument ? Voici un exemple :

realt = SourceRealT("MY_TOKEN")

portfolio = ...

assistant = Assistant(portfolio)
assistant.add_source(realt)
assistant.run(active_sources=["finary", "realt"])

Ca permettrait aux débutants de ne jamais toucher aux fichiers internes ^^

nmathey commented 1 year ago

Pas trop galère avec les merge ? Si un peu :) mais on apprend en galérant

peut-être serait-il mieux de laisser l'utilisateur l'ajouter dans sa config perso avec l'API en argument Ah ben oui carrément. Tu peux modifier mon PR avant de merge?

MadeInPierre commented 1 year ago

Sinon il faudrait un système comme Finary pour demander le token au user dans la console, ce qui serait pas mal pour harmoniser la façon d'intéragir avec toutes les sources :) on peut commencer par cette solution simple et j'adapterai la structure de SourceBase pour avoir la même structure pour toutes les sources :) si ça te va je peux faire le changement et ça me paraît bon ?

MadeInPierre commented 1 year ago

Ah ben oui carrément. Tu peux modifier mon PR avant de merge?

Ok je teste et m'en occupe bientôt

nmathey commented 1 year ago

Oui dans un premier temps ca peut suffire je pense. Après en améliorations sur cette source, il faudrait:

MadeInPierre commented 1 year ago
  1. Ca me parait raisonnable de déclarer plusieurs sources RealT :
assistant.add_source(SourceRealt("MY_TOKEN_1"))
assistant.add_source(SourceRealt("MY_TOKEN_2"))
assistant.run(active_sources=["finary", "realt"])

D'ailleurs pour faire ça il serait bien de pouvoir changer le nom de la source à la création pour pouvoir activer celle(s) qu'on veut plutôt que toutes obligatoirement :

assistant.add_source(SourceRealt("MY_TOKEN_1", name="realt1"))
assistant.add_source(SourceRealt("MY_TOKEN_2", name="realt2"))
assistant.run(active_sources=["finary", "realt1", "realt2"])

  1. C'est toi le pro :grin:
  2. Normalement le cache est déjà supporté grâce à SourceBase, tu devrais voir un fichier realt_cache.json ^^ Plus qu'à changer la durée de validité du cache pour cette source !
MadeInPierre commented 1 year ago

Bon c'est pas encore parfait mais j'ai pas le temps de faire mieux aujourd'hui, SourceRealT demande des infos dans le contructeur alors que SourceFinary demande les infos dans credentials.json, dans les variables d'environnement ou directement dans la console. Il faudra trouver un système pour que ce soir pareil partout mais on n'est pas très loin :slightly_smiling_face:

Si tu me confirmes que tout est bon, je merge !

nmathey commented 1 year ago

Hello,

J'ai rapidement testé avant d'aller au taff et je suis un peu perdu :) Tu mets bien cela dans l'assistant-config?

assistant.add_source(SourceRealt("MY_TOKEN_1"))
assistant.add_source(SourceRealt("MY_TOKEN_2"))
assistant.run(active_sources=["finary", "realt"])

Si oui, il me manque la référence à SourceRealt :/

Pour le cache j'ai vu effectivement mais j'ai du avoir un timeout ailleurs à un moment, peut être au niveau de blockscout. Je checkerai à l'usage.

MadeInPierre commented 1 year ago

Hello !

from finalynx.fetch.source_realt import SourceRealT

...

assistant = Assistant(portfolio)
assistant.add_source(SourceRealT("TOKEN"))
assistant.run(active_sources=["finary", "realt"])

Normalement ceci devrait passer (T majuscule) ?

nmathey commented 1 year ago

On y est presque :)

TypeError: Assistant.add_source() missing 1 required positional argument: 
'source'
MadeInPierre commented 1 year ago

Probablement assistant avec a minuscule, car Assistant est la classe elle-même alors qu'on utilise l'instance créée avec assistant = Assistant(...)

MadeInPierre commented 1 year ago

Si besoin tu peux envoyer ta config entière en pièce jointe et je regarde 🙂

nmathey commented 1 year ago

oui je veux bien là parce que je suis un peu perdu :)

MadeInPierre commented 1 year ago

Extrait de mon assistant_config.py qui fonctionne bien avec ta source RealT :

from finalynx.fetch.source_realt import SourceRealT
from finalynx import ...

bucket = ...
envelope_abc = ...
portfolio = Portfolio(...)

assistant = Assistant(
    portfolio,
    buckets,
    envelopes,
    ignore_orphans=False,
    hide_root=True,
    active_sources=["finary", "realt"],
)
assistant.add_source(SourceRealT("0x10df7DD932E655c01CC7A35eC23711B1d4153882"))
assistant.run()

Et j'appelle simplement :

python assistant_config.py

N'hésite pas à m'envoyer ton assistant_config.py en pièce jointe ici ou par telegram :slightly_smiling_face:

nmathey commented 1 year ago

Ca passe! :)

MadeInPierre commented 1 year ago

Je crois que l'erreur de GitHub Actions ne compte pas, je tente de merge dans main et hopefully ça va se résoudre tout seul :crossed_fingers:

MadeInPierre commented 1 year ago

Finalynx devient multi-sources grâce à toi, ça a le potentiel d'aller loin cette histoire :grin: Merci ! Pub possible dans le forum finary ^^

Je sais pas pourquoi GitHub ne veut pas créer de nouvelle version tout de suite, mais il le fera dès le prochain commit dans la branche main :slightly_smiling_face:

sebfar9172 commented 1 year ago

Top je l'attend avec impatience

MadeInPierre commented 1 year ago

@sebfar9172 @nmathey c'est dispo en v1.18 :smile: j'écris un petit tuto dans la release bientôt, un jour il faudra que je rédige un vrai guide dans la documentation :sweat_smile: