Répondre

export GEDCOM - chemin (path) media tronqué

Pour les utilisateurs du logiciel Gramps.
valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour,

J'ai généré un GEDCOM via Gramps de l'ensemble de mon arbre, tout fonctionne plutôt bien à un détail prêt: le chemin (path) vers les images semble tronqué à 60 caractères, et comme je souhaite utiliser ce GEDCOM pour imprimer un arbre avec les photos c'est un peu gênant..
Y a-t-il un paramètre permettant de lever cette limite de 60 caractères? ou un bout de code python à modifier permettant cela?

Merci pour votre aide,

Laurent
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
Bonjour,

[quote]

Est-ce que vous avez un chemin relatif ?
Par exemple, vos images sont elles toutes dans le même répertoire de base
(ex: /home/Laurent/généalogie/images)

60 caractères c'est effectivement peu.
Si vos images sont correctement affichées, il faut effectivement voir du côté de l'export GEDCOM et de votre système d'exploitation (support caractères accentués et type de chemin utilisé).

Je pars du principe que vous utilisez Gramps-3.1.3 sous Linux !

1. le module python pour exporter au format GEDCOM se trouve à : file:///usr/share/gramps/plugins/export/ExportGedcom.py

2. utilisez un éditeur supportant l'UTF-8

Code : Tout sélectionner

def __photo(self, photo, level):
        """
        n OBJE {1:1}
        +1 FORM <MULTIMEDIA_FORMAT> {1:1} 
        +1 TITL <DESCRIPTIVE_TITLE> {0:1} 
        +1 FILE <MULTIMEDIA_FILE_REFERENCE> {1:1}
        +1 <<NOTE_STRUCTURE>> {0:M}
        """
        photo_obj_id = photo.get_reference_handle()
        photo_obj = self.dbase.get_object_from_handle(photo_obj_id)
        if photo_obj:
            mime = photo_obj.get_mime_type()
            form = MIME2GED.get(mime, mime)
            path = media_path_full(self.dbase, photo_obj.get_path())
            if not os.path.isfile(path):
                return
            self.__writeln(level, 'OBJE')
            if form:
                self.__writeln(level+1, 'FORM', form)
            self.__writeln(level+1, 'TITL', photo_obj.get_description())
            self.__writeln(level+1, 'FILE', path)

            self.__note_references(photo_obj.get_note_list(), level+1)
--licence GPL2

et voici le code : path = media_path_full(self.dbase, photo_obj.get_path())

3. on voit en haut du fichier que media_path_full() vient de Utils.py :
from Utils import media_path_full

4. direction file:///usr/share/gramps/Utils.py

5.

Code : Tout sélectionner

 def media_path_full(db, filename):
    """
    Given a database and a filename of a media, return the media filename
    is full form, eg 'graves/tomb.png' becomes '/home/me/genea/graves/tomb.png
    """
    if os.path.isabs(filename):
        return filename
    mpath = media_path(db)
    return os.path.join(mpath, filename)
--licence GPL2

Je ne vois pas de limitations dans le code.

Il faudrait savoir quelle est votre version de Gramps et le système d'exploitation utilisé.
Enfin, un exemple de chemin tronqué : séparateur "Windows" ou non, caractère accentué ou non, chemin relatif ou non.


Cordialement,
Jérôme
valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour,

J'utilise en effet Gramps 3.1.3 mais sous windows (XP), il peut y avoir des caractères accentués dans les noms des fichiers images.

un exemple extrait du fichier GEDCOM:

Code : Tout sélectionner

1 OBJE
2 FORM jpeg
2 TITL 1878 02 15 - Marie Catherine Elisabeth PERRIN
2 FILE D:\Genea\Pic\L.Valentin\1878 02 15 - Marie Catherine Elisabeth PERRIN.jp
3 CONC g
En fait, je m'aperçois que:
  - il ne s'agit pas d'une limitation de 60 caractères mais de 80 - 7 (nb de caractères précédents le chemin)
  - la partie tronqué de la chaine et poursuivi par autant de "3 CONC" nécessaires dans les lignes suivantes
  - ce n'est pas limité au chemin vers les images mais a tout ce qui dépasse 80 caractères (entête inclus)

Code : Tout sélectionner

0 @N0635@ NOTE 1874-05-05 - Acte de Firmin Ernest Eugène Perrin & Marie Stéphani
1 CONC e Amélie Triboulot
0 @N0636@ NOTE 2 cousins témoins de mariage:
1 CONT 	* Jean Joseph Mougel, agé de soixante cinq ans, cultivateur maire de l
1 CONC a commune d'Anglémont ou il est domicilié, cousin de l'épouse
1 CONT 	* Victor Christophe, agé de quarante deux ans, rentier ancien notair
1 CONC e domicilié à Rambervillers, cousins de l'épouse
Apparemment CONC n'est pas pris en compte par Heredis pour les chemins vers les images par exemple... savez vous si il y a un paramètre général dans GRAMPS définissant la longueur d'une ligne dans l'export GEDCOM?

=> cela fonctionne très bien pour les notes par exemple, l'ensemble des notes sont bien reprise. le pb ne semble se poser que pour les chemins images..

Merci,

Laurent
valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
après quelques recherche le "pb" trouve probablement son origine dans ExportGedcom.py au niveau de la définition de la fonction writeln:

Code : Tout sélectionner

    def __writeln(self, level, token, textlines="", limit=72):
la limite est fixé en dur à 72.

à mon avis, pour une meilleure compatibilité, il faut que la limite soit différente pour les images.

Qu'en pensez vous?
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
valentil a écrit : 24 février 2010, 10:41 J'utilise en effet Gramps 3.1.3 mais sous windows (XP)
Windows ou Linux, le code est le même, c'était juste pour l'emplacement des fichiers  ;)

C'est sans doute autre chose, il y a sans doute une limitation "Gedcom" (troll) : la fin de ligne !

Apparemment CONC n'est pas pris en compte par Heredis pour les chemins vers les images par exemple... savez vous si il y a un paramètre général dans GRAMPS définissant la longueur d'une ligne dans l'export GEDCOM?

=> cela fonctionne très bien pour les notes par exemple, l'ensemble des notes sont bien reprise. le pb ne semble se poser que pour les chemins images..
Là je ne sais pas !
Soit Gramps utilise la même chose que dans les NOTES car il y avait des problèmes pour importer un chemin d'image trop long (dans Gramps ou autres logiciels ?), soit GEDCOM 5.5 définit une limitation de caractères dans le fichier ?

Un expert GEDCOM dans le coin ?
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
valentil a écrit : 24 février 2010, 10:51 après quelques recherche le "pb" trouve probablement son origine dans ExportGedcom.py au niveau de la définition de la fonction writeln:

Code : Tout sélectionner

    def __writeln(self, level, token, textlines="", limit=72):
la limite est fixé en dur à 72.

à mon avis, pour une meilleure compatibilité, il faut que la limite soit différente pour les images.

Qu'en pensez vous?
Avec une autre limite, vous aurez peut être un problème dans les notes et urls ?
à tester !
valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
bon, j'ai rajouté ça en début de la fonction writeln:
     

Code : Tout sélectionner

 if token == "FILE":
            limit = 300
300 c'est arbitraire, mais ça marche très bien.

pour info, PAF génère des lignes GEDCOM jusqu'à 101 caractères, sauf pour les chemins de fichier où je ne sais pas si il y a une limite (jusqu'à 193 dans mon cas).

voila, merci pour votre aide,

Laurent
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
valentil a écrit :merci pour votre aide
vous avez tout fait en modifiant le code  ;)
       

Code : Tout sélectionner

 if token == "FILE":
            limit = 300
300 c'est arbitraire, mais ça marche très bien.

On peut proposer votre patch ?
valentil a écrit : pour info, PAF génère des lignes GEDCOM jusqu'à 101 caractères, sauf pour les chemins de fichier où je ne sais pas si il y a une limite (jusqu'à 193 dans mon cas).
Si cette limite n'est pas définie, peut être qu'il faudrait ajouter un champ dans la fenêtre d'exportation GEDCOM ?

Merci !

Jérôme


valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Bonjour,

Oui, on peut proposer ce patch, par contre je ne l'ai jamais fait, si vous souhaitez le faire je n'ai aucun soucis avec ça...

pour ce qui est de proposer une limite paramétrable dans la fenêtre d'export, c'est une bonne idée, mais je ne sais pas du tout pourquoi elle est fixée à 80 par GRAMPS. Peut-être y a-t-il des logiciels n'acceptant pas plus de 80 caractères? je ne sais pas non plus si il y a une limite "officielle" dans les specs de GEDCOM?

Hors sujet: j'ai également modifié la vue "individu" pour ajouter une colonne indiquant le nombre de source par évènement, est-ce que vous pensez que l'on peut proposer ce genre d'évolution? (je trouve que le gros inconvénient de GRAMPS est le nb de click/fenêtre nécessaire dans la saisie de chaque individu...)

Cordialement,

Laurent
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
Bonjour,
valentil a écrit : 25 février 2010, 11:54 Oui, on peut proposer ce patch, par contre je ne l'ai jamais fait, si vous souhaitez le faire je n'ai aucun soucis avec ça...
En général, on ajoute les modifications dans une Feature Request et un petit mail sur la liste des développeurs pour en discuter. Ce sont des modifications bénéfiques pour les utilisateurs dont les développeurs ont besoin pour comprendre ce qui manque ou ne va pas.
Oui, je peux le faire.
valentil a écrit : 25 février 2010, 11:54 pour ce qui est de proposer une limite paramétrable dans la fenêtre d'export, c'est une bonne idée, mais je ne sais pas du tout pourquoi elle est fixée à 80 par GRAMPS. Peut-être y a-t-il des logiciels n'acceptant pas plus de 80 caractères? je ne sais pas non plus si il y a une limite "officielle" dans les specs de GEDCOM?
idem pour moi, seul celui qui a défini cette limite dans Gramps doit savoir ...
valentil a écrit : 25 février 2010, 11:54 J'ai également modifié la vue "individu" pour ajouter une colonne indiquant le nombre de source par évènement, est-ce que vous pensez que l'on peut proposer ce genre d'évolution?
oui, bien sûr.  8)
En revanche, j'ai du mal à me l'imaginer : les sources par événement dans les infos de l'individu  ???

Notez que le système de gestion des colonnes et des vues a été "nettoyé" dans Gramps-3.2
(une version test sera disponible dans quelques jours ...)
valentil a écrit : 25 février 2010, 11:54 je trouve que le gros inconvénient de GRAMPS est le nb de click/fenêtre nécessaire dans la saisie de chaque individu...
on est d'accord ! Mais c'est aussi une sécurité, car chaque "Validation" écrit les données.

Gramps-3.2 améliore un peu la saisie et gestion (Individus & Famille / événements)
Image

Image

Sinon pour afficher plus de données, il y a les "rapports express" !

Cordialement,

Jérôme
hieronym
male
Messages : 74
Saisie : Standard
Navigation : Fiche
Voir son arbre
Bonjour,
valentil a écrit : 25 février 2010, 11:54
Hors sujet: j'ai également modifié la vue "individu" pour ajouter une colonne indiquant le nombre de source par évènement, est-ce que vous pensez que l'on peut proposer ce genre d'évolution? (je trouve que le gros inconvénient de GRAMPS est le nb de click/fenêtre nécessaire dans la saisie de chaque individu...)
Ayant les mêmes problèmes que vous, pourriez-vous nous envoyer le code de la modification de la vue "individu" avec la colonne indiquant le nombre de sources ? J'avais même rêvé, il y a un moment, pouvoir modifier l'éditeur de colonnes pour rajouter une colonne "private" avec son joli petit cadenas, pour voir d'un seul coup d'oeil tous les événements "privés".  J'ai voulu poster ce "feature" dans la liste idoine mais j'ai misérablement raté :-(

Bien cordialement,
Jérôme.
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
hieronym a écrit : 25 février 2010, 14:09 J'avais même rêvé, il y a un moment, pouvoir modifier l'éditeur de colonnes pour rajouter une colonne "private" avec son joli petit cadenas, pour voir d'un seul coup d'oeil tous les événements "privés".  J'ai voulu poster ce "feature" dans la liste idoine mais j'ai misérablement raté :-(
raté ? J'ai vu la proposition d'amélioration.
Ce n'est pas parce que la fonction n'est pas (encore) ajoutée dans la prochaine version majeure, que c'est perdu ...  ;)

Le code de Gramps-3.1.x pour la gestion des colonnes n'est pas toujours très simple d'accès, car actuellement la définition des colonnes est liée à la base de données ouverte, c'est à dire que vous ouvrez votre base et ses colonnes pour l'affichage !
/!\ Attention aux modifications du code ...

La prochaine version majeure va permettre de charger ou non certaines vues, de le configurer, de définir quelles colonnes quel que soit votre base de données ouverte.  :)

Bon, l'ajout de nouvelles colonnes n'est pas prévu mais le code est plus accessible et souple, un patch sera sans doute plus simple à réaliser. Par exemple, en s'inspirant de la colonne "Dernière modification" qui n'est pas activée par défaut et qui est présente pour chaque objet (individu, famille, événement, source, note, etc ...).
valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
ok pour les rapports express, mais si j'ai fais cette modif c'est surtout pour rendre l'outil plus ergonomique en évitant de faire des aller-retour dans les différents menu (d'après mon utilisation bien sur).

Puisque l'on est dans les améliorations de Gramps, j'avais imaginé toutes ces modifs (ci-dessous) pour l'améliorer un peu. je ne sais pas si j'aurais un jour le temps de les faire... :

Code : Tout sélectionner

Pedigree's view modification:
 - Display ToDo individuals differently (in green? or red?)
 - Display not marked individuals in orange (should be removed when work is not in progress)
 - enable mariage modification on pedigree's view (edit button or right click menu?)
 - Add brothers on first level of pedigree's view
 - Add "view other marriage" button/flag in Pedigree's view when applicable

Person window?
 - ajouter champs calculés dans écrans de saisies (mort à l'age de, marié à l'age de...)
 - "masque de saisie": aide à la saisie automatique lors de la création/maj d'un individu: naissance/mort/profession sans passer par la création d'évènement

Report:
 - Create a report on "ToDo" and "None" individuals

pas de soucis, (je ne sais pas comment mettre une copie d'écran dans ce post...) lorsque j'ouvre une fenêtre individu la liste de l'onglet "Events" contient une nouvelle colonne "Source?" qui me donne le nb de Source associé à l'évènement donné. d'un seul coup d'oeil je vois si mes évènements ont bien une source associée, si c'est "0" c'est que j'ai encore du boulot!

et le code modifié (2 fichiers):

Code : Tout sélectionner

*************************************************
Add a column Source Count at event listing level:
*************************************************
    - Modification in DisplayTabs\_EventRefModel.py file
    - Modification in DisplayTabs\_EventEmbededList.py file
*************************************************


******************************
DisplayTabs\_EventRefModel.py:
******************************
class EventRefModel(gtk.ListStore):

    def __init__(self, event_list, db):
        #LVA 20090818 Start - Add a new column in output (is there a Source for the given event)
        #gtk.ListStore.__init__(self, str, str, str, str, str, str, str, object)
        gtk.ListStore.__init__(self, str, str, str, str, str, str, str, str, object)
        #LVA 20090818 End
        self.db = db
        for event_ref in event_list:
            event = db.get_event_from_handle(event_ref.ref)
            self.append(row=[str(event.get_type()), 
                             event.get_description(), 
                             event.get_gramps_id(), 
                             #LVA 20090818 Start - Add a new column in output (is there a Source for the given event)
                             len(event.source_list),
                             #LVA 20090818 End
                             self.column_date(event_ref), 
                             self.column_place(event_ref), 
                             self.column_role(event_ref), 
                             self.column_sort_date(event_ref),
                             event_ref
                             ])
.
.
.
******************************

*********************************
DisplayTabs\_EventEmbededList.py:
*********************************

class EventEmbedList(EmbeddedList):

#LVA 20090818 Start - Add a new column in output (is there a Source for the given event)
#    _HANDLE_COL = 7
    _HANDLE_COL = 8
#LVA 20090818 End
    _DND_TYPE   = DdTargets.EVENTREF
    _DND_EXTRA  = DdTargets.EVENT

    _MSG = {
        'add'   : _('Add a new event'),
        'del'   : _('Remove the selected event'),
        'edit'  : _('Edit the selected event'),
        'share' : _('Share an existing event'),
        'up'    : _('Move the selected event upwards'),
        'down'  : _('Move the selected event downwards'),
        }

    _column_names = [
        (_('Type'), 0, 100), 
        (_('Description'), 1, 175), 
        (_('ID'), 2, 60), 
#LVA 20090818 - Add a new column in output (is there a Source for the given event)
        (_('Source?'), 3, 60), 
#LVA 20090818 End
        (_('Date'), 6, 150), 
        (_('Place'), 4, 140), 
        (_('Role'), 5, 80),
        ]
        
.
.
.
*********************************
*********************************
.
.
.
    def column_order(self):
#LVA 20090818 - Add a new column in output (is there a Source for the given event)
#        return ((1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5))
        return ((1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6))
#LVA 20090818 End
romjerome
male
Messages : 1514
Saisie : Standard
Navigation : Fiche
Voir son arbre
valentil a écrit : 25 février 2010, 15:04 ok pour les rapports express, mais si j'ai fais cette modif c'est surtout pour rendre l'outil plus ergonomique en évitant de faire des aller-retour dans les différents menu (d'après mon utilisation bien sur).

Puisque l'on est dans les améliorations de Gramps, j'avais imaginé toutes ces modifs (ci-dessous) pour l'améliorer un peu. je ne sais pas si j'aurais un jour le temps de les faire... :

Code : Tout sélectionner

Pedigree's view modification:
 - Display ToDo individuals differently (in green? or red?)
 - Display not marked individuals in orange (should be removed when work is not in progress)
 - enable mariage modification on pedigree's view (edit button or right click menu?)
 - Add brothers on first level of pedigree's view
 - Add "view other marriage" button/flag in Pedigree's view when applicable

Person window?
 - ajouter champs calculés dans écrans de saisies (mort à l'age de, marié à l'age de...)
 - "masque de saisie": aide à la saisie automatique lors de la création/maj d'un individu: naissance/mort/profession sans passer par la création d'évènement

Report:
 - Create a report on "ToDo" and "None" individuals
En fait, pas vraiment la peine de se lancer dans de grosses modifications sur la branche 3.1.x car les modifications et améliorations apparaissent dans le tronc...

Concernant le "Pedigree", çà devient (Gramps-3.2) une catégorie avec plusieurs types de graphiques (voir les boutons de la barre d'outils) !
Image
valentil a écrit : 25 février 2010, 15:04 (je ne sais pas comment mettre une copie d'écran dans ce post...)
l'url d'une image dans la balise "img".
valentil a écrit : 25 février 2010, 15:04 ajouter champs calculés dans écrans de saisies (mort à l'age de, marié à l'age de...)
Image
valentil a écrit : 25 février 2010, 15:04 Create a report on "ToDo" and "None" individuals
None individuals !!!
Une amélioration du rapport de marqueur ?
valentil a écrit : 25 février 2010, 15:04 lorsque j'ouvre une fenêtre individu la liste de l'onglet "Events" contient une nouvelle colonne "Source?" qui me donne le nb de Source associé à l'évènement donné. d'un seul coup d'oeil je vois si mes évènements ont bien une source associée, si c'est "0" c'est que j'ai encore du boulot!
OK, j'ai eu peur que la modification soit au niveau de la vue ...
Car là (3.1.x), c'est dépendant de la base de données.
valentil a écrit : 25 février 2010, 15:04 et le code modifié (2 fichiers):

Code : Tout sélectionner

*************************************************
Add a column Source Count at event listing level:
*************************************************
    - Modification in DisplayTabs\_EventRefModel.py file
    - Modification in DisplayTabs\_EventEmbededList.py file
*************************************************


******************************
DisplayTabs\_EventRefModel.py:
******************************
class EventRefModel(gtk.ListStore):

    def __init__(self, event_list, db):
        #LVA 20090818 Start - Add a new column in output (is there a Source for the given event)
        #gtk.ListStore.__init__(self, str, str, str, str, str, str, str, object)
        gtk.ListStore.__init__(self, str, str, str, str, str, str, str, str, object)
        #LVA 20090818 End
        self.db = db
        for event_ref in event_list:
            event = db.get_event_from_handle(event_ref.ref)
            self.append(row=[str(event.get_type()), 
                             event.get_description(), 
                             event.get_gramps_id(), 
                             #LVA 20090818 Start - Add a new column in output (is there a Source for the given event)
                             len(event.source_list),
                             #LVA 20090818 End
                             self.column_date(event_ref), 
                             self.column_place(event_ref), 
                             self.column_role(event_ref), 
                             self.column_sort_date(event_ref),
                             event_ref
                             ])
.
.
.
******************************

*********************************
DisplayTabs\_EventEmbededList.py:
*********************************

class EventEmbedList(EmbeddedList):

#LVA 20090818 Start - Add a new column in output (is there a Source for the given event)
#    _HANDLE_COL = 7
    _HANDLE_COL = 8
#LVA 20090818 End
    _DND_TYPE   = DdTargets.EVENTREF
    _DND_EXTRA  = DdTargets.EVENT

    _MSG = {
        'add'   : _('Add a new event'),
        'del'   : _('Remove the selected event'),
        'edit'  : _('Edit the selected event'),
        'share' : _('Share an existing event'),
        'up'    : _('Move the selected event upwards'),
        'down'  : _('Move the selected event downwards'),
        }

    _column_names = [
        (_('Type'), 0, 100), 
        (_('Description'), 1, 175), 
        (_('ID'), 2, 60), 
#LVA 20090818 - Add a new column in output (is there a Source for the given event)
        (_('Source?'), 3, 60), 
#LVA 20090818 End
        (_('Date'), 6, 150), 
        (_('Place'), 4, 140), 
        (_('Role'), 5, 80),
        ]
        
.
.
.
*********************************
*********************************
.
.
.
    def column_order(self):
#LVA 20090818 - Add a new column in output (is there a Source for the given event)
#        return ((1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5))
        return ((1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6))
#LVA 20090818 End
c'est dans le même esprit que le nouvel onglet "Noms" !!!  :D

Image

Malheureusement, "3.2" va bientôt sortir...
Mais je pense que çà pourrait également intéresser d'autres utilisateurs, je vais poster un mail sur la mailing list !

Merci !
Jérôme (un autre ...)
valentil
male
Messages : 25
Saisie : Geneweb
Navigation : Fiche
Voir son arbre
Merci pour votre réponse, j'attends maintenant la 3.2 avec impatience qui semble répondre à pas mal de mes questions!
Merci beaucoup,

Laurent
Répondre

Revenir à « Gramps »