Interface geneanet

Bonjour,

J’ai commencé à écrire un gramplet d’interface avec geneanet.

Vous pouvez y jeter un œil en ajoutant mon projet https://raw.githubusercontent.com/jmichault/gramps-kromprogramoj/gramps60 dans le gestionnaire de plugins, puis en installant le gramplet PersonGN.
L’extension est compatible avec gramps 5.2 et gramps 6.0.
Une fois l’extension installée, vous pouvez ajouter le gramplet «Geneanet» sur la vue Individus.

Note : le gramplet a besoin de quelques modules python supplémentaires, il essaie de les installer s’ils ne sont pas présents, mais vous pouvez faciliter l’installation en les installant préalablement :
sous debian ou ubuntu :

sudo apt install python3-lxml python3-pip python3-protobuf

sous fedora :

sudo dnf install python3-lxml python3-pip python3-protobuf

Attention : sauvegardez votre base ou utilisez une base de test, c’est une extension en début de développement !

Pour l’instant, il permet :

  • de faire une recherche simple
  • d’importer un parent, conjoint ou enfant manquant
  • de copier un évènement de geneanet vers gramps

Les données importées se limitent à :

  • le nom et le prénom
  • les évènements individuels
  • les sources
  • les notes (en option, désactivé par défaut)

Attention : l’import des lieux depuis geneanet est un vrai casse-tête, donc après avoir fait un import, vérifiez les lieux pour les corriger.

Petite démonstration :
Supposons que l’on ait un Louis Martin né vers 1810 à Marseille-en-Beauvaisis :

En cliquant sur le bouton «Chercher», une interrogation du site geneanet est lancée.
Patientez pendant le chargement :


Le résultat de la recherche s’affiche :

Si les résultats ne vous conviennent pas, vous pouvez modifier les critères et relancer la recherche avec le bouton «Exécuter».
Si l’une des lignes vous semble intéressante, cliquez dessus :

Vous pouvez alors :

  • Cliquer sur le lien en vert (en bas à droite), ce qui ouvrira la fiche geneanet dans votre navigateur internet.
  • Cliquer sur le bouton «Comparer» pour revenir dans le gramplet et comparer la fiche gramps avec la fiche geneanet :


Si vous voyez des individus présents dans geneanet et absents gramps (parent, conjoint, ou enfant), vous pouvez cocher la case correspondante, puis lancer l’import avec un clic droit :

Patientez un peu :

Et les fiches sélectionnées sont importées :

4 Likes

Bonsoir Jean
pour l installation aucun probleme. par contre le gramplet ne se charge pas.
quand je regarde la sortie console je vois
2025-05-27 21:10:01.758: WARNING: _manager.py: line 328: Plugin error (from ‘PersonGN’): cannot import name ‘builder’ from ‘google.protobuf.internal’ (/usr/lib64/python3.13/site-packages/google/protobuf/internal/init.py)
et effectivement il n y a pas de fichier builder.py dans ce repertoire.
voici la version de protobuf utilise
pip show protobuf
Name: protobuf
Version: 3.19.6
Summary: Protocol Buffers
Home-page: Protocol Buffers Documentation
Author:
Author-email:
License: 3-Clause BSD License
Location: /usr/lib64/python3.13/site-packages
Requires:
Required-by: google-api-core, googleapis-common-protos, grpcio-status

bon manifestement il faut une version 5 de protobuf mais sur la fedora la version est la version 3.
Ce que je ne comprends pas trop c’est que si j installe une version 5 en mode user avec pip celle ci n 'est manifestement pas utilise.
va falloir que je creuse

bon pour une raison inconnue mon gramps ne chargeait pas mon sys.path local.
une fois cela corrige j’ai pu utiliser le protobuf version 5.
le gramplet se charge le test commence :slight_smile:

mon premier retour.
Cela fonctionne vraiment tres bien pour les fonctions implementées.
Ce qui manque vraiment ( mais bon il faut savoir etre patient ) c’est la possibilite de écompleter un individu deja present dans la base.
Sinon quelques petites remarques.
Cela serait bien d’avoir la source pour les evenements ajoutes et pas seulement pour l individus.
pour la source avoir le lien url de l’arbre geneanet dans information de publication.
Et rajouter la date du jour pour la citation. En effet un ite geneanet cela change et donc je pense que c’est important d’avoir la date ou l on a consulte cet arbre.
Concernant les lieux vu la galere de les gerer je me demande si cela ne serait pas mieux de ne pas essayer de creer la hierarchie. Comme de toutes facons il faut les reprendre apres l importation si on ne crée qu’un lieu sans hiérarchie si celui ci existe dans la base il suffirra de le fusionner.
Au final je suis vraiment très impressionné
Bravo

1 Like

Petite mise à jour pour tenir compte d’une partie de tes remarques :

  • ajout d’une citation sur tous les évènements, avec en note de citation la date d’import :

et en attribut, le lien vers la fiche geneanet

  • la source a en attribut le lien vers l’arbre geneanet :

  • la citation de l’individu a elle aussi la date d’import dans la note de citation, et le lien internet en attribut.

Et aussi une petite précision que j’avais oubliée : le gramplet fonctionne aussi bien en version 5.2 qu’en version 6.0 de gramps. Par contre je n’ai pas testé sous windows.

1 Like

Et on trouve où la version qui fonctionne en v5.2 ?
Je l’installerai sur w11

Edit: J’ai trouvé par contre une fois installé où est ce qu’il est ? Pas dans la liste des gramplets ?

Edit 2: Ah ! Geneanet, je cherchais PersonGN :grinning_face: J’ai fait toutes les bourdes, c’est bon là !!

Bon ça ne se lance pas (j’ai bien l’onglet Geneanet parmi les gramplets mais il est vide) et j’ai les erreurs suivantes sur la console:

dependeco protobuf ne trovita aŭ < 4.21.1
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
Collecting protobuf
  Downloading protobuf-6.31.1-py3-none-any.whl.metadata (593 bytes)
Downloading protobuf-6.31.1-py3-none-any.whl (168 kB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 168.7/168.7 kB 1.1 MB/s eta 0:00:00
Installing collected packages: protobuf
Successfully installed protobuf-6.31.1
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see https://github.com/pypa/pip/issues/5599 for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with '-m pip' instead of running pip directly.
Collecting protobuf
  Using cached protobuf-6.31.1-py3-none-any.whl.metadata (593 bytes)
Using cached protobuf-6.31.1-py3-none-any.whl (168 kB)
Installing collected packages: protobuf
Successfully installed protobuf-6.31.1
Traceback (most recent call last):
  File "C:\Program Files\GrampsAIO64-5.2.2\gramps\gen\plug\_manager.py", line 274, in load_plugin
    _module = self.import_plugin(pdata)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\GrampsAIO64-5.2.2\gramps\gen\plug\_manager.py", line 308, in import_plugin
    module = __import__(pdata.mod_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\patri\AppData\Local\gramps\gramps52\plugins\PersonGN\PersonGN.py", line 68, in <module>
    import geneanet
  File "C:\Users\patri\AppData\Local\gramps\gramps52\plugins\PersonGN\geneanet.py", line 27, in <module>
    from geneanet_pb import api_saisie_read_pb2, api_saisie_write_pb2, api_app_pb2, api_stats_pb2
  File "C:\Users\patri\AppData\Local\gramps\gramps52\plugins\PersonGN\geneanet_pb\api_saisie_read_pb2.py", line 23, in <module>
    Person.RegisterExtension(_FICHEPERSON.extensions_by_name['person'])
    ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: type object 'Person' has no attribute 'RegisterExtension'
WARNING: Error loading gramplet 'Geneanet Gramplet': skipping content
ERROR: Unhandled exception
Traceback (most recent call last):
  File "C:\Program Files\GrampsAIO64-5.2.2\gramps\gui\widgets\grampletbar.py", line 478, in __page_added
    gramplet.set_orientation(self.orientation)
  File "C:\Program Files\GrampsAIO64-5.2.2\gramps\gui\widgets\grampletbar.py", line 693, in set_orientation
    self.pui.set_orientation(orientation)
    ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'set_orientation'

*** Remove ui
*** Add ui
*** Update ui
*** Remove ui
*** Add ui
*** Update ui
*** Remove ui
*** Add ui
*** Update ui
*** Remove ui
*** Add ui
*** Update ui
*** Remove ui
*** Remove ui
*** Add ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Add ui
*** Add ui
*** Add ui
*** Add ui
*** Add ui
*** Update ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Add ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Remove ui
*** Add ui
*** Add ui
*** Add ui
*** Add ui
*** Add ui
*** Update ui
*** Remove ui
*** Add ui
*** Update ui

Moi, j’ai la même erreur sur linux que ce soit en 5.2 ou en 6.0

Bonsoir à tous,
j’ai pu travailler un peu sur mon gramplet.

Je crois avoir trouvé le problème rencontré par Patrice et Serge : j’avais compilé les fichiers protobuf avec une vieille version du compilateur protoc. Du coup les fichiers python générés étaient devenus incompatibles avec les versions récentes de protobuf, sauf si les librairies protobuf cython étaient installées. J’ai recompilé avec la dernière version de protoc.

De plus j’ai changé la gestion des lieux :
J’essaie de trouver la hiérarchie mais je ne la crée pas si elle n’existe pas.
Exemple : si le lieu généanet est «Bordeaux, Gironde, Aquitaine, France», et que France et Aquitaine existent mais pas Gironde, je vais créer le lieu «Bordeaux,Gironde» en Aquitaine.
De plus à la fin de l’import si des lieux ont été créés, j’affiche un avertissement avec la liste des lieux créés.

Note : j’ai changé le titre de l’extension en «Gramplet Geneanet», plus parlant. (le nom interne reste PersonGN)

Je l’ai a nouveau téléchargé mais il ne s’affiche pas dans la liste des gramplet.

Pour info: Dans le répertoire la directory pycache n’y est pas presente

Impossible de l’installer sur ma ubuntu Ubuntu 22.04.5 LTS. Que ce soit en 5.2 ou 6.0.

erreur suivante:

J’ai la dernière version de fake_useragent en version 2.2.0 pour ma distrib.
J’ai la dernière version de gedcomx_v1 en version 1.0.7 pour ma distrib.

Lors de l’installation, j’ai le log suivant:

Two Gramps application data directories exist.
dependeco protobuf ne trovita aŭ < 6.31.1
WARNING: pip is being invoked by an old script wrapper. This will fail in a future version of pip.
Please see ImportError in system pip wrappers after an upgrade · Issue #5599 · pypa/pip · GitHub for advice on fixing the underlying issue.
To avoid this problem you can invoke Python with ‘-m pip’ instead of running pip directly.

Usage:
Gramps.py install [options] [package-index-options] …
Gramps.py install [options] -r [package-index-options] …
Gramps.py install [options] [-e] …
Gramps.py install [options] [-e] …
Gramps.py install [options] <archive url/path> …

no such option: --break-system-packages
Traceback (most recent call last):
File “/usr/lib/python3.10/optparse.py”, line 1387, in parse_args
stop = self._process_args(largs, rargs, values)
File “/usr/lib/python3.10/optparse.py”, line 1427, in _process_args
self._process_long_opt(rargs, values)
File “/usr/lib/python3.10/optparse.py”, line 1480, in _process_long_opt
opt = self._match_long_opt(opt)
File “/usr/lib/python3.10/optparse.py”, line 1465, in _match_long_opt
return _match_abbrev(opt, self._long_opt)
File “/usr/lib/python3.10/optparse.py”, line 1670, in _match_abbrev
raise BadOptionError(s)
optparse.BadOptionError: no such option: --break-system-packages

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File “/home/gramps/gramps-6.1/gramps/gen/plug/_manager.py”, line 270, in load_plugin
_module = self.import_plugin(pdata)
File “/home/gramps/gramps-6.1/gramps/gen/plug/_manager.py”, line 304, in import_plugin
module = import(pdata.mod_name)
File “/home/serge/.local/share/gramps/gramps60/plugins/PersonGN/PersonGN.py”, line 59, in
instdepGN.instDep(‘protobuf’,‘6.31.1’)
File “/home/serge/.local/share/gramps/gramps60/plugins/PersonGN/instdepGN.py”, line 28, in instDep
pip.main([‘install’, ‘–target’, LIB_PATH, ‘–upgrade’, ‘–break-system-packages’, modulo])
File “/usr/lib/python3/dist-packages/pip/init.py”, line 13, in main
return _wrapper(args)
File “/usr/lib/python3/dist-packages/pip/_internal/utils/entrypoints.py”, line 27, in _wrapper
return main(args)
File “/usr/lib/python3/dist-packages/pip/_internal/cli/main.py”, line 70, in main
return command.main(cmd_args)
File “/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py”, line 99, in main
return self._main(args)
File “/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py”, line 112, in _main
options, args = self.parse_args(args)
File “/usr/lib/python3/dist-packages/pip/_internal/cli/base_command.py”, line 94, in parse_args
return self.parser.parse_args(args)
File “/usr/lib/python3.10/optparse.py”, line 1389, in parse_args
self.error(str(err))
File “/usr/lib/python3/dist-packages/pip/_internal/cli/parser.py”, line 292, in error
self.exit(UNKNOWN_ERROR, f"{msg}\n")
File “/usr/lib/python3.10/optparse.py”, line 1559, in exit
sys.exit(status)
SystemExit: 2

J’ai la dernière version de protobuf sur ma machine:

pip install protobuf
Defaulting to user installation because normal site-packages is not writeable
Requirement already satisfied: protobuf in /home/serge/.local/lib/python3.10/site-packages (4.25.3)

Bon, j’ai réussi à le faire fonctionner.
J’ai installé la version de protobuf en 6.31.1 qui ne voulais pas s’installer à cause d’autres modules. avec différentes mises à jour, c’est maintenant OK.
C’est bien de vouloir a tout prix utiliser les dernières versions de certains modules. Il faut aussi penser à l’utilisateur normal qui ne comprend rien et qui ne sait pas comment s’en sortir.
Appuyez vous sur une distribution LTS et s’assurer que cela fonctionne sans bidouiller…

sur la fedora une fois que gramps daigne utilise le repertoire local pour les libraries python l’installation se fait sans aucun soucis.

Bonjour

Je suis sur Mac (ce qui peut avoir son importance, vu que l’application est autoporteuse), et j’ai la même erreur que Serge:

371604: ERROR: grampsapp.py: line 188: Unhandled exception
Traceback (most recent call last):
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/5DBA7D38-C05C-4D29-9567-6CA19D6C17CE/d/Gramps.app/Contents/Resources/lib/python3.13/site-packages/gramps/gui/widgets/grampletbar.py", line 486, in __page_added
    gramplet.set_orientation(self.orientation)
    ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/bk/hdj607v48xjdxw001s7n4vkh0000gn/T/AppTranslocation/5DBA7D38-C05C-4D29-9567-6CA19D6C17CE/d/Gramps.app/Contents/Resources/lib/python3.13/site-packages/gramps/gui/widgets/grampletbar.py", line 683, in set_orientation
    self.pui.set_orientation(orientation)
    ^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'set_orientation'

Je suis en version 6.0.1 avec la version beta 0.0.6 du plugin.
A priori les modules prérequis sont présents dans l’application Gramps Mac, sinon le module n’aurait pas pu s’installer.

Une idée de ce qui peut se passer ?

I see the same error in Fedora Linux with Gramps 5.2

I remembered I could start Gramps from the command-line, and watch the errors : it seems that I miss a “google” module.
Currently trying to add it to Gramps

1 Like

This is odd. Sometimes Plugin Manager reports an error with urllib but sometimes it does not.

urlib is installed and working. (It is needed for the GrampsWeb addon by @Urchello ) But still reporting as failed for PersonGN.py

Plugin name: PersonGN [Gramplet]    Id: Geneanet2 Gramplet    Version: beta 0.0.4
Description: interfaco por Geneanet
Filename: PersonGN.py    Location: /home/districtsupport/.gramps/gramps52/plugins/PersonGN
Audience: Everyone    Status: Stable
Requires: 
    Python modules: urllibFailed
  <class 'SystemExit'>
2
Traceback (most recent call last):
  File "/usr/lib64/python3.11/optparse.py", line 1387, in parse_args
    stop = self._process_args(largs, rargs, values)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/optparse.py", line 1427, in _process_args
    self._process_long_opt(rargs, values)
  File "/usr/lib64/python3.11/optparse.py", line 1480, in _process_long_opt
    opt = self._match_long_opt(opt)
          ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/optparse.py", line 1465, in _match_long_opt
    return _match_abbrev(opt, self._long_opt)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/optparse.py", line 1670, in _match_abbrev
    raise BadOptionError(s)
optparse.BadOptionError: no such option: --break-system-packages

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/districtsupport/.local/lib/python3.11/site-packages/gramps/gen/plug/_manager.py", line 274, in load_plugin
    _module = self.import_plugin(pdata)
              ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/districtsupport/.local/lib/python3.11/site-packages/gramps/gen/plug/_manager.py", line 338, in import_plugin
    module = __import__(pdata.mod_name)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/districtsupport/.gramps/gramps52/plugins/PersonGN/PersonGN.py", line 59, in <module>
    instdepGN.instDep('protobuf','4.21.1')
  File "/home/districtsupport/.gramps/gramps52/plugins/PersonGN/instdepGN.py", line 28, in instDep
    pip.main(['install', '--target', LIB_PATH, '--upgrade', '--break-system-packages', modulo])
  File "/usr/lib/python3.11/site-packages/pip/__init__.py", line 13, in main
    return _wrapper(args)
           ^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pip/_internal/utils/entrypoints.py", line 44, in _wrapper
    return main(args)
           ^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pip/_internal/cli/main.py", line 70, in main
    return command.main(cmd_args)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pip/_internal/cli/base_command.py", line 101, in main
    return self._main(args)
           ^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pip/_internal/cli/base_command.py", line 114, in _main
    options, args = self.parse_args(args)
                    ^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/site-packages/pip/_internal/cli/base_command.py", line 96, in parse_args
    return self.parser.parse_args(args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.11/optparse.py", line 1389, in parse_args
    self.error(str(err))
  File "/usr/lib/python3.11/site-packages/pip/_internal/cli/parser.py", line 294, in error
    self.exit(UNKNOWN_ERROR, f"{msg}\n")
  File "/usr/lib64/python3.11/optparse.py", line 1559, in exit
    sys.exit(status)
SystemExit: 2

1 Like

Je viens de publier une nouvelle version :

  • ajout des évènements non essentiels (c’est à dire autres que naissance, baptême, décès, inhumation)
  • possibilité de copier des évènements de geneanet vers gramps
  • changements dans la gestion des dépendances, qui, je l’espère, devraient faciliter l’installation.
1 Like

Bonsoir. J’essaye toujours d’installer le module sur MacOS.

J’ai fini par comprendre que je devais installer protobuf, ce que j’ai fait manuellement, mais lorsque j’installe la nouvelle version, j’ai un message me disant que protobuf et lxml sont manquants (je suis certain que lxml est présent car utilisé dans un autre add-on).

Si je passe outre, le module est installé mais si j’essaye de l’utiliser, j’ai une erreur de validation de certificat SSL:

392221: ERROR: grampsapp.py: line 188: Unhandled exception
Traceback (most recent call last):
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/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 "/Applications/Genealogie/Gramps-6.0.1-2-Arm/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1338, in request
    self._send_request(method, url, body, headers, encode_chunked)
    ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1384, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1333, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
    ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1093, in _send_output
    self.send(msg)
    ~~~~~~~~~^^^^^
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/Gramps.app/Contents/Resources/lib/python3.13/http/client.py", line 1037, in send
    self.connect()
    ~~~~~~~~~~~~^^
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/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 "/Applications/Genealogie/Gramps-6.0.1-2-Arm/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 "/Applications/Genealogie/Gramps-6.0.1-2-Arm/Gramps.app/Contents/Resources/lib/python3.13/ssl.py", line 1076, in _create
    self.do_handshake()
    ~~~~~~~~~~~~~~~~~^^
  File "/Applications/Genealogie/Gramps-6.0.1-2-Arm/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)

Une idée ?