Interface geneanet

do u check that the -s is not present in your gramps launch script

@jmichault It is working now! Thank you!

Since I am running 5.2 for these tests, it was necessary to download the PersonGN.addon.tgz archive file manually and install the expanded PersonGN folder to the gramps52/plugins folder.
https://github.com/jmichault/gramps-kromprogramoj/tree/gramps60/download

(6.0 is supported with install from the Addon Manager.)

Thanks for the suggestion. But, no. The “Safe Mode” switch was not in use. (All the other addons were loading. So there was not an ‘hidden’ trigger for safe mode either.) The changes that Jean made have resolved the problem.

Here is the “George Washington and parents” file I used for experimentation. (It also has Attributes for use with testing the WebSearch addon gramplet.):
Washington.gramps (8.6 KB)

En fait, le module de détection de présence des dépendances ne fonctionne pas dans l’environnement “fermé” de Gramps Mac. Une fois bypassé (en mettant simplement “havLxml = True et havProtobuf = True” dans le code) le plugin semble fonctionner - mais il reste le problème de certificat invalide… que mes piètres connaissances en Python ne me permettent pas de régler…

Je vais essayer de soumettre le cas au packager de la version Mac

Bonjour
C’est vraiment dommage car ce greffon est vraiment génial.
Cocernant ton probleme il semblerait que la version utilisée de python ne connaisse pas le cartidicat root qui a signe la certificat de geneanet.

Ta version sur mac elle vient d’ou?
utilise t elle le python officiel sur macos qui lui aussi n utilise pas le magasin systeme des certificats?
a priori tu devrais avoir le meme genre de probleme avec tous les greffons qui font des connexions web securisé comme Websearch

Je ne connais pas le mac, mais as-tu essayé d’installer openssl avec :

brew install openssl

Bonjour et merci pour les suggestions

J’utilise la version Mac officielle, qui est packagée avec sa propre version de Python (3.11) à l’intérieur.

Comme toutes les applications Mac, le “bundle” est en fait une arborescence avec un format défini.
Pour les applications Python, il est très facilement possible d’ajouter des modules manquants (tant qu’ils ne sont que du Python) dans le bundle, le seul problème étant qu’il faut le refaire à chaque nouvelle version. C’est par exemple ce que j’ai fait avec protobuf - mais pour lxml, seul le packager de la version (JRalls) a pu le faire car il y a des exécutables qui doivent être signés pendant le processus de création du bundle.

La méthode d’installation des dépendances manquantes du module Geneanet ne fonctionne pas car pip n’est pas inclus dans l’app - et je ne pense pas qu’il puisse y être en raison des règles de sécurité MacOS.

Pour revenir au problème, il est clair qu’il manque un certificat au moins, mais je n’ai pas réussi à l’ajouter (le module certifi est présent et à jour). J’ai tenté plusieurs choses mais sans résultat…

Je viens de publier une nouvelle version (0.1.2), qui utilise certifi s’il est disponible.
Est-ce que tu peux la tester ?

Autre nouveauté notable : les évènements familiaux sont gérés.

Je vois une version 0.1.3, mais c’est un peu bizarre : elle semble avoir été installée (au moins une partie des fichiers sont datés d’aujourd’hui), mais le gestionnaire d’extensions me la propose toujours quoi que je fasse (il dit que j’ai la 0.1.1).
Accessoirement, ça ne change rien au comportement… :frowning:

:france: La différence de version pourrait être due à une anomalie de l’outil (make.py) qui génère la liste du gestionnaire de modules complémentaires.

Je pense que la différence augmente légèrement avec la version par rapport au fichier d’enregistrement .gpr.py.

Ne vous inquiétez donc pas de savoir si le gestionnaire de modules complémentaires indique la version 0.1.2 ou 0.1.3. Il s’agit probablement de la même version.


:us_outlying_islands: The difference in versions might be an idiosyncracy of the tool (make.py) that builds the listing for the Addon Manager.

I believe that it increases by version slightly over the .gpr.py registration file.

So do not worry about whether the Addon Manager is reporting 0.1.2 or 0.1.3 version. They are probably the same.

Ok, le fichier .gpr.py indique 0.0.13.

Cela dit, j’ai cherché je n’ai pas trouvé l’utilisation de certifi dans les fichiers du module mis à jour.

Effectivement, il y avait un problème.
Du coup j’ai republié : version 0.1.4 maintenant.

Ça marche !
Je testerai plus tard en détail, mais ça se lance et ça trouve des infos sur Geneanet.
Le problème de certificat est réglé.

J’ai toujours le message disant que les prérequis manquent, mais c’est dû à la méthode de détection qui ne fonctionne pas dans mon cas.

Bonjour.
J’ai fait quelques essais ce matin, et je tombe sur un comportement curieux : au départ, tout fonctionne bien, puis, après quelques utilisations, généralement lors du téléchargement des résultats trouvés sur Généanet, une erreur de validation SSL se produit. Si on relance Gramps et qu’on fait la même recherche, elle se passe généralement sans problème.
L’apparition du problème est très aléatoire (parfois dès la première recherche, parfois après bien plus).

Voici la totalité du traceback :

933015: ERROR: grampsapp.py: line 188: Unhandled exception
Traceback (most recent call last):
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/urllib/request.py", line 1319, in do_open
    h.request(req.get_method(), req.selector, req.data, headers,
    ~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
              encode_chunked=req.has_header('Transfer-encoding'))
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1338, in request
    self._send_request(method, url, body, headers, encode_chunked)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1384, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1333, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1093, in _send_output
    self.send(msg)
    ~~~~~~~~~^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1037, in send
    self.connect()
    ~~~~~~~~~~~~^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1479, in connect
    self.sock = self._context.wrap_socket(self.sock,
                ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
                                          server_hostname=server_hostname)
                                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/ssl.py", line 455, in wrap_socket
    return self.sslsocket_class._create(
           ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
        sock=sock,
        ^^^^^^^^^^
    ...<5 lines>...
        session=session
        ^^^^^^^^^^^^^^^
    )
    ^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/ssl.py", line 1076, in _create
    self.do_handshake()
    ~~~~~~~~~~~~~~~~~^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/ssl.py", line 1372, in do_handshake
    self._sslobj.do_handshake()
    ~~~~~~~~~~~~~~~~~~~~~~~~~^^
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/PersonGN.py", line 857, in ButSercxi_clicked
    self.ButLancxi_clicked(None)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/PersonGN.py", line 715, in ButLancxi_clicked
    p = self.getPersono(url)
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/PersonGN.py", line 581, in getPersono
    extPersono = self.gn.getPerson(x)
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/geneanet.py", line 326, in getPerson
    media = self.listMedia(person_id)
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/geneanet.py", line 365, in listMedia
    page = self.urlopen(url).decode('utf-8')
           ~~~~~~~~~~~~^^^^^
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/geneanet.py", line 138, in urlopen
    response = self.opener.open(req, timeout=10)
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/urllib/request.py", line 489, in open
    response = self._open(req, data)
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/urllib/request.py", line 506, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
                              '_open', req)
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/urllib/request.py", line 466, in _call_chain
    result = func(*args)
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/urllib/request.py", line 1367, in https_open
    return self.do_open(http.client.HTTPSConnection, req,
           ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                        context=self._context)
                        ^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/B84B284C-7530-4CFE-8E03-17E8232DDFBD/d/Gramps.app/Contents/Resources/lib/python3.13/urllib/request.py", line 1322, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)>

Je suis curieux de savoir ce qu’est l’option de presse-papiers JSON dans le menu contextuel.

A-t-elle une utilité autre que l’inspection des données provenant de Geneanet ?

Est-il possible de modifier manuellement les données, puis de les importer ?

Et où ce format JSON est-il défini ?

J’ai amélioré la gestion des exceptions dans le téléchargement : nouvelle version 0.1.5

J’espère que ça résoudra ton problème, sinon il faudrait que tu lances gramps en mode console et que tu me donnes les messages de la console quand l’erreur se produit.

1 Like

C’est destiné uniquement à des utilisateurs (très) avancés, ou à des développeurs, pour permettre de récupérer l’intégralité des données fournies par le site.
L’idée est de récupérer des données qui ne sont pas gérées par l’interface pour les copier/coller dans gramps.

Le format est une traduction en JSON des données au format protobuf, dont le modèle est décrit ici :
https://gw.geneanet.org/setup/api/api_saisie_read.proto

1 Like

@oliber a introduit un addon expérimental avec le format protobuf de Geneanet en 2022. J’ai ensuite eu une discussion avec @PLegoux à propos du format.

https://www.geneanet.org/forum/viewtopic.php?p=2109301&sid=abde3b7e7539f4e3101ecbdfc146b1a4#p2109301

L’information se perd dans le long fil de discussion Geneanet.

Peut-être pourrions-nous lancer un autre fil de discussion pour explorer ce format et répertorier les outils qui utilisent le format protobut JSON en conjonction avec Gramps ?

Pouvons-nous discuter du nom de ce Gramplet ?

Le nom « PersonGN » n’est pas informatif et « Geneanet » est trop générique. La liste des Gramplets Person étant si longue, peut-être existe-t-il un meilleur nom ?

Cet outil est très spécifique dans sa fonction. Il recherche dans les arbres Geneanet les individus correspondant à la personne active, puis propose de comparer (en détail) une personne correspondante aux données Gramps. Il propose ensuite une liste de données à importer concernant cette personne et sa famille proche. Il s’agit d’une synchronisation unidirectionnelle : l’importation.

Je n’ai pas de nom à suggérer. Geneanet étant une base de données principalement francophone, le nom devrait être imaginé par un locuteur natif.

Je n’ai plus vu d’erreur lié au SSL.
En revanche régulièrement des exceptions Python qui me semblent plus ou moins aléatoires mais aussi des plantages complets de Gramps liés à GTK ; voici un exemple de trace console :

Gtk:ERROR:../../src/gtk-3.24.48/gtk/gtkcellareabox.c:2105:_gtk_cell_area_box_group_visible: assertion failed: (group_idx >= 0 && group_idx < priv->groups->len)
Bail out! Gtk:ERROR:../../src/gtk-3.24.48/gtk/gtkcellareabox.c:2105:_gtk_cell_area_box_group_visible: assertion failed: (group_idx >= 0 && group_idx < priv->groups->len)

(c’est arrivé lorsque j’ai double cliqué sur un nom dans la fenêtre du gramplet Geneanet)

Une autre erreur, uniquement Python donc sans plantage de Gramps, lors d’une recherche:

1361216: ERROR: grampsapp.py: line 188: Unhandled exception
Traceback (most recent call last):
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/PersonGN.py", line 855, in ButSercxi_clicked
    self.ButLancxi_clicked(None)
    ~~~~~~~~~~~~~~~~~~~~~~^^^^^^
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/PersonGN.py", line 713, in ButLancxi_clicked
    p = self.getPersono(url)
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/PersonGN.py", line 580, in getPersono
    PersonGN.GnPersonoj[geneanet.id2url(extPersono)] = extPersono
                        ~~~~~~~~~~~~~~~^^^^^^^^^^^^
  File "/Users/cram/Library/Application Support/gramps/gramps60/plugins/PersonGN/geneanet.py", line 79, in id2url
    return 'https://gw.geneanet.org/'+persono['person'].get('baseprefix')+'?'+strId(persono['person'])
           ~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TypeError: can only concatenate str (not "NoneType") to str

En regardant les messages console, j’ai vu que cette erreur était précédée des messages suivants:

 Reason:  [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)
************ Sign up for free in response *************
 list media error
Reason:  [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)
 Reason:  [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)
Reason:  [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)
 Reason:  [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1028)