Répondre

GedcomforGeneanet : Discussion

glopglop
glopglop
Messages : 2881
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour

Afin de permettre au nouveau venu de trouver plus facilement le lien vers gedcomforgeneanet je propose de séparer
le support et la discussion sur le plugin et tout ce qui tourne autour des annonces de version.

Donc les rapports de bugs ou les demandes c'est ici.
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/GedcomforGeneanet
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.

glopglop
glopglop
Messages : 2881
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Pour eviter de dupliquer inutilement du code de l export gedcom
j'ai demande a geneanet dans le forum de corriger le comportement a l importation.
Un grand merci a Thierry qui m'a permis d’appréhender correctement le problème.
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/GedcomforGeneanet
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.

patricelegoux
patricelegoux
Messages : 1285
Saisie : Standard
Navigation : Fiche
Voir son arbre
Hello Eric,

Une idée me vient en exportant un gedcom qui prend pas mal de temps.

Je sais que Gramps n'est pas fait pour travailler en mulithreadé mais est ce que ce greffon ne le pourrait pas lui ? A près tout, on est sûr qu'il ne fait que lire des données pour écrire le résultat dans un autre fichier.

L'idée par exemple pourrait être de lancer des threads qui prépareent ce qui concerne les individus et leurs événements d'une part, les événements et leurs sources d'autre part et peut-être d'autres choses qui pourraient être faites en parallèle (lieux, notes ... ?), puis de synchroniser les threads afin d'attendre que toutes se terminent pour consolider les données constituées par chacune d'elles afin d'écrire le Gedcom.

Je ne sais absolument pas si c'est faisable ou non ; tant du point de vue Gramps que du point de vue de la structure du Gedcom. Idée en passant, en patientant :D
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

glopglop
glopglop
Messages : 2881
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Cela n'est pas faisable par le greffon directement car je ne fais que surcharger l export gedcom
il faudrait en fait modifier l'exportgedcom directement
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/GedcomforGeneanet
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.

patricelegoux
patricelegoux
Messages : 1285
Saisie : Standard
Navigation : Fiche
Voir son arbre
Bon tant pis. J'irais peut-être poser la question sur le forum discourse un de ces quatre histoire de voir ce qu'ils en pensent.
Merci !
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

patricelegoux
patricelegoux
Messages : 1285
Saisie : Standard
Navigation : Fiche
Voir son arbre
Bonjour,

Une petite question (je n'ai pas essayé mais Eric, tu as surement la réponse). Si je mets un attribut URL à une source (pas à une citation mais à la source elle-même), sera t'il exporté correctement sur GNN ?

Merci
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

glopglop
glopglop
Messages : 2881
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
patricelegoux a écrit :
04 juin 2021, 12:24
Bonjour,

Une petite question (je n'ai pas essayé mais Eric, tu as surement la réponse). Si je mets un attribut URL à une source (pas à une citation mais à la source elle-même), sera t'il exporté correctement sur GNN ?

Merci
Oui

Enfin corectement je ne sais pas mais oui c'est exporte
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/GedcomforGeneanet
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.

patricelegoux
patricelegoux
Messages : 1285
Saisie : Standard
Navigation : Fiche
Voir son arbre
Merci ;-)
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

bjc49
bjc49
Messages : 384
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour,
Problème sur GedcomforGeneanet ????
Ai je fait une fausse manip ??
  • Je suis en Gramps en 5.1.3 sur Linux Mint Kubuntu (Sarah) (Il va falloir d'ailleurs que je migre vers une autre distribution car n'est plus maintenu depuis Avril 2021)
    J'ai réinstaller GedcomforGeneanet 2.0.12
Jusqu'a maintenant je n'avais pas de soucis mais actuellement le gedcom généré par GedcomforGeneanet ne semble plus faire son travail ...Je crois ?
J'ai créé dans Gramps un événement de type personnalisé "Vente" Description "Vente aux enchères......" le 10/5/1891 a St Brice
auxquels un certains nombres d'individus étaient présents avec des rôles personnalisés (Acheteur,Officiant,Comparant,...)
Pour moi tout semble correct dans Gramps si j'en crois la vue "Évenements"
Screenshot_20210721_155820.png
Mais quand je fais l'export en utilisant l'option "Gedcom pour GENEANET"
Le gedcom obtenu ne semble pas être correct :
Par exemple on ne trouve aucun événement de type "Vente"
Screenshot_20210721_160433.png
Ps:
j'ai désinstaller réinstaller Gramps, supprimer et recréer GedcomforGeneanet
Rien n'y fait
Remarque :
Les autres événements personnalisés que j'avais créés auparavant eux sont conservés (Exemple :"Prisonnier de Guerre") sont conservés
Problème Gramps ou Gdecomfor Geneanet ???
Merci pour vos suggestions
Pièces jointes
Screenshot_20210721_161149.png
Logiciel : Gramps 5.1.4
Geneanet : bjc49
Config :Linux Kubuntu 20.04

glopglop
glopglop
Messages : 2881
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour

je passe par hasard sur le forum car je crapahute dans les Dolomites.

Apres avoir regarder le code je pense que cela vient du fait qu'il n'y a pas de Role principal
dans l evenement.
C'est une limitation historique du code d export gedcom de Gramps sur lequel gedcomforgeneanet se base pour eviter les doublons d export d événement.

je decouvre le probleme il faut que je reflechisse a la meilleure facon de faire pour adresser ce "bug".

P.S.
pour faire apparaitre l evenement il faut le coller a quelqu'un en role principal.
je reconnais c'est un peu moche :)
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/GedcomforGeneanet
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.

bjc49
bjc49
Messages : 384
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonsoir,
Bonne récupération après ce "crapahutage" surtout s'il fait aussi chaud que chez nous en Anjou
Effectivement j'ai mis les 2 notaires en rôle "Principal" et l'événement apparaît bien pour ces 2 individus avec une indication des rôles des autres intervenants.
Je n'avais pas encore "capté" que l'événement(partagé) n'apparaîtrait pas dans les fiches de ces dits intervenants seul une indication "Témoin(date): Évènement , Lien vers fiche de l'un de ses 2 acteurs principaux est capable de nous en dire plus sur l'évenement
Ok
Merci d'avoir pris le temps de me répondre
Logiciel : Gramps 5.1.4
Geneanet : bjc49
Config :Linux Kubuntu 20.04

patricelegoux
patricelegoux
Messages : 1285
Saisie : Standard
Navigation : Fiche
Voir son arbre
Hello,

J'ai essayé de traficoter ton code pour faire de l'asyncio mais la librairie n'est pas dispo dans le zip de python fourni avec gramps sur windows 😪 pourtant il était joli mon bout de code

Code : Tout sélectionner

    async def _pop_n_write(self):
        while True:
            
            (level, token, textline, limit) = await self.queue.get()
            
            if textlines:
                # break the line into multiple lines if a newline is found
                textlines = textlines.replace('\n\r', '\n')
                textlines = textlines.replace('\r', '\n')
              #  LOG.debug("anychar %d" % self.anychar)
                if self.anychar:
                    if not textlines.startswith('@'):  # avoid xrefs
                        textlines = textlines.replace('@', '@@')
                textlist = textlines.split('\n')
                token_level = level
                for text in textlist:
                    # make it unicode so that breakup below does the right thin.
                    text = str(text)
                    if limit:
                        prefix = "\n%d CONC " % (level + 1)
                        txt = prefix.join(self.breakup(text, limit))
                    else:
                        txt = text
                    self.gedcom_file.write("%d %s %s\n" %
                                           (token_level, token, txt))
                    token_level = level + 1
                    token = "CONT"
            else:
                self.gedcom_file.write("%d %s\n" % (level, token))

            queue.task_done()

    async def write_gedcom_file(self, filename):
        """
        Write the actual GEDCOM file to the specified filename.
        """

        self.dirname = os.path.dirname (filename)
        self.gedcom_file = io.open(filename, "w", encoding='utf-8')
        
        self.queue = asyncio.Queue()
        task = asyncio.create_task(self._pop_n_write)
        
        if self.zip:
            zipf = filename + ".zip"
            self.zipfile = zipfile.ZipFile(zipf,'w')
            if not self.zipfile:
                raise Exception('fichier zip %s non ouvert' % zipf)
        
        LOG.debug("deb write gedcom %d" % self.relativepath)
        self._header(filename)
        self._submitter()
        self._individuals()
        self._families()
        self._sources()
        self._repos()
        self._notes()
        self._writeln(0, "TRLR")

        await self.queue.join()
        task.cancel()
        await asyncio.gather(task, return_exceptions=True)
        
        self.gedcom_file.close()

        if self.zip:
            self.zipfile.close()
        return True
        

Code : Tout sélectionner

    def _writeln(self, level, token, textlines="", limit=72):
        """
        Write a line of text to the output file in the form of:

            LEVEL TOKEN text

        If the line contains newlines, it is broken into multiple lines using
        the CONT token. If any line is greater than the limit, it will broken
        into multiple lines using CONC.

        """
        assert token
        
        self.queue.put_nowait((level, token, textline, limit))

Code : Tout sélectionner

def export_data(database, filename, user, option_box=None):
    """
    External interface used to register with the plugin system.
    """
    ret = False
    try:
        ged_write = GedcomWriterforGeneanet(database, user, option_box)
#pylint: disable=maybe-no-member

        ret = asyncio.run(ged_write.write_gedcom_file(filename))
        
    except IOError as msg:
        msg2 = _("Could not create %s") % filename
        user.notify_error(msg2, msg)
    except DatabaseError as msg:
        user.notify_db_error(_("Export failed"), msg)
    return ret
L'idée était qu'il fasse le gedcom en // de la préparation des données à y écrire mais malheureusement je ne saurai jamais s'il fonctionne ou pas 😪 (ensuite c'est peut-être plein d'erreurs mais ça non plus je ne le saurai pas).

Si j'ai pas la flemme, un de ces jours j'essaierai de monter une VM linux et voir si Gramps utilise le python std plutôt que le sien pour voir si ça tourne...
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

romjerome
male
Messages : 1469
Hello.
patricelegoux a écrit :
21 décembre 2021, 22:43
J'ai essayé de traficoter ton code pour faire de l'asyncio mais la librairie n'est pas dispo dans le zip de python fourni avec gramps sur windows 😪 pourtant il était joli mon bout de code
Si il existe l'équivalent de asyncio (pas forcément en python), tu peux "bricoler" avec
subprocess, ou si vraiment tu es prisonnier de Windows, un simple

Code : Tout sélectionner

 
import sys
import os
os.system('mon_programme_windows_shell %s %s' % ('var1', 'var2'))
bon, je reconnais, ce n'est plus du "haut niveau" dans ce cas !

patricelegoux
patricelegoux
Messages : 1285
Saisie : Standard
Navigation : Fiche
Voir son arbre
Hello,

Il semble qu'il y ait un bug dans GedcomForGeneanet; @glopglop si tu pouvais regarder ça: https://gramps.discourse.group/t/error-remove-unused-items/2195/10?u=plegoux
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

glopglop
glopglop
Messages : 2881
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour

Franchement je ne pense pas que le bug soit au niveau de GedcomForGeneanet mais a un niveau plus eleve.
mon code ne m'anipule ni la base ni d’éventuels fichiers.
d'ailleurs c'est la meme chose pour l export gedcom.

mais je vais participer a la recherche :)
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/GedcomforGeneanet
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.

Répondre

Revenir à « Gramps »