Répondre

une petite mine d'or

glopglop
glopglop
Messages : 2663
Saisie : Geneweb
Voir son arbre
en furetant sur le web je suis tome sur ca

https://github.com/Taapeli/isotammi-addons

y a quelques greffons tres interessant
pour l'instant je teste le multi merge c'est vraiment super pratique ce truc
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.

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
Merci, le SuperTool semble pas mal aussi juste a lire la doc.

glopglop
glopglop
Messages : 2663
Saisie : Geneweb
Voir son arbre
oui c'est le "gros" morceau.

Un tres bon outil pour faciliter l exploration des bases gramps et aider au developpement.
je me le garde pour plus tard
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 : 955
Saisie : Geneweb
Voir son arbre
Hello,

J'ai essayé ça. J'ai conservé qq addons parmi ceux à disposition dont effectivement le SuperTool.

Je joue actuellement avec mais Gramps et sa doc me dépriment. 1) Il me déprime parce que je sais pas quel module appeler pour écrire un attribut, et 2) il me super-déprime pour l'accès aux données en référence.

Je commence par le point 2.
Je voudrais accéder aux attributs dans les références aux événements (partie haute de l'éditeur d'événement dans les individus).

J'ai fait ce petit script SuperTool pour les Individus qui me lit les attributs de partie basse mais je ne sais pas comment choper ces eventRef et donc les infos en partie haute (rôle, notes, attributs). Quelqu'un de plus callé que moi dans le coin pour me dire comment y accéder?

Code : Tout sélectionner

[title]
Individus_Recherche-des-attributs

[category]
People

[initial_statements]

[statements]
for event in events:
	for attribute in event.attributes:
		if attribute is not None: print(event, attribute)

[filter]

[expressions]

[scope]
selected

[unwind_lists]
False

[commit_changes]
False

[summary_only]
False


--------------------

Le point 1 maintenant. J'ai donc un second script ST pour les Citations avec une seconde question.

Celui-ci a pour but est d'automatiser mon changement de nom de mes citations. Avant que l'export Geneanet de Glopglop ne supporte l'export des attributs, j'avais mis l'url de l'acte, le n° d'image, etc dans le nom de la citation. Ex: "[1908, Nantes - 1 R 1213]/Img 571 & 572/747 (Classe 1908, Fiche matricule, n° 383. Loyer, Emile Alfred | Affectations de Loyer, Emile Alfred) - https://archinoe.fr/v2/ark:/42067/cb1bb4fa2439eaea9f3fef620571d1db & https://archinoe.fr/v2/ark:/42067/46c9bc63175740fa093e25a455bf98a7".

Désormais je redescends tout ça dans les attributs (attribut URL, attribut N° d'image, etc). J'en ai fait quelques uns mais c'est fastidieux. Là avec ST, j'ai déjà fait un petit morceau qui m'extrait l'URL, ou les URLs s'il y en a plusieurs, et me les affiche. Ce que je voudrais c'est écrire les attributs à partir de cette sélection. Savez vous comment créer un attribut d'événement ou de source par programmation ? Quels imports faut il faire et quelles méthodes appeler?

Le script ST citations:

Code : Tout sélectionner

[title]
SuperTool-Citations_Save-Url-as-attribute

[category]
Citations

[initial_statements]
import re

[statements]
if ') - http' in page:
	gid = gramps_id
	cit_url = re.search('(^.{1,}\()(.{1,})(\) - )(http.{1,}$)', page)
	for url in cit_url.group(4).split(' & '):
		print(gid, ':', cit_url.group(2), '=> URL:', url)

[filter]
') - http' in page

[expressions]
gramps_id, page, citators

[scope]
all

[unwind_lists]
False

[commit_changes]
False

[summary_only]
False

Pour la citation précédente par exemple il me donne ça dans la console, il m'a bien décomposé ma citation en deux pour me motrer les 2 URL quelle contient:

C01149 : Classe 1908, Fiche matricule, n° 383. Loyer, Emile Alfred | Affectations de Loyer, Emile Alfred => URL: https://archinoe.fr/v2/ark:/42067/cb1bb4fa2439eaea9f3fef620571d1db
C01149 : Classe 1908, Fiche matricule, n° 383. Loyer, Emile Alfred | Affectations de Loyer, Emile Alfred => URL: https://archinoe.fr/v2/ark:/42067/46c9bc63175740fa093e25a455bf98a7
Objects: 1/1; rows: 1 (0.25s)


-------------------

Toujours concernant ST y a un post intéressant ici (globalement intéressant d'une part et d'autre part incluant un morceau de code ST) pour modifier l'origine du nom de famille de tous les enfants d'une famille sélectionnée et y mettre Lignée paternelle par exemple

---------------------

Merci d'avance à qui pourra m'aider sur les deux premiers points

P.S: vous pouvez utiliser mes 2 scripts ils ne modifient rien, ce n'est pas le cas de celui en lien.

P.P.S: même s'il a tendance à parler un peu finlandais, j'aime bien l'addon pour le tableau de bord, le Deep Connections Graph. Si vous ne l'avez pas essayé, je vous le conseille

P.P.P.S (et je m'arrête là :lol: ): en plus c'est un post-scriptum hors sujet, mais je ne sais plus si je vous ai donné ce lien: https://gramps.discourse.group/t/experimental-person-profile-view-plugin/1562/2?u=plegoux une nouvelle vue individu en cours de dev déjà bien avancé. Très sympa
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 : 955
Saisie : Geneweb
Voir son arbre
Petit tweet et copies d'écran concernant le Deep Connections Graph : https://twitter.com/plegoux/status/1413079045093404679?s=20
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
patricelegoux a écrit :
07 juillet 2021, 20:25
Savez vous comment créer un attribut d'événement ou de source par programmation ? Quels imports faut il faire et quelles méthodes appeler?
Bonjour,

Juste en regardant le code de Event: la classe hérite de AttributeBase et donc de la méthode add_attribute(self, attribute), donc je dirait créer une instance monattribute = Attribute(....) et event.add_attribute(monattribute)

Laurent

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
Pour le point 1, un début de réponse

Code : Tout sélectionner

[title]
SuperTool-People

[category]
People

[initial_statements]
atts=[]

[statements]
for evtp in events:
	event = db.get_event_from_handle(evtp.handle)
	for att in event.attribute_list:
		atts.append(att)

[filter]

[expressions]
atts


[scope]
selected

[unwind_lists]
True

[commit_changes]
False

[summary_only]
False


Laurent

patricelegoux
patricelegoux
Messages : 955
Saisie : Geneweb
Voir son arbre
llhduflot a écrit :
08 juillet 2021, 15:04
Pour le point 1, un début de réponse

Code : Tout sélectionner

[title]
SuperTool-People

[category]
People

[initial_statements]
atts=[]

[statements]
for evtp in events:
	event = db.get_event_from_handle(evtp.handle)
	for att in event.attribute_list:
		atts.append(att)

[filter]

[expressions]
atts


[scope]
selected

[unwind_lists]
True

[commit_changes]
False

[summary_only]
False


Laurent
Merci

J'ai fait une petite modif (atts=[] dans statements) parce que sinon pour chaque personne ça accumule les attributs de toutes les personnes précédente de la liste sélectionnée

Code : Tout sélectionner

[title]
SuperTool-People

[category]
People

[initial_statements]


[statements]
atts=[]
for evtp in events:
	event = db.get_event_from_handle(evtp.handle)
	for att in event.attribute_list:
		atts.append(att)

[filter]

[expressions]
[att.value for att in atts], attributes


[scope]
selected

[unwind_lists]
False

[commit_changes]
False

[summary_only]
False

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 : 955
Saisie : Geneweb
Voir son arbre
llhduflot a écrit :
08 juillet 2021, 13:34
patricelegoux a écrit :
07 juillet 2021, 20:25
Savez vous comment créer un attribut d'événement ou de source par programmation ? Quels imports faut il faire et quelles méthodes appeler?
Bonjour,

Juste en regardant le code de Event: la classe hérite de AttributeBase et donc de la méthode add_attribute(self, attribute), donc je dirait créer une instance monattribute = Attribute(....) et event.add_attribute(monattribute)

Laurent
Et du coup pour son type et sa valeur, comment je les positionne ? quelque chose comme ça:

monattribute = Attribute(....)
monattribute.type = 'URL'
monattribute.value = l'url que que j'ai récupérée
event.add_attribute(monattribute)

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

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
patricelegoux a écrit :
08 juillet 2021, 17:03

J'ai fait une petite modif (atts=[] dans statements) parce que sinon pour chaque personne ça accumule les attributs de toutes les personnes précédente de la liste sélectionnée

Si plusieurs personnes sont sélectionnées, pour les différentier dans l'impression finale, tu peux t'inspirer d'un de ses exemples dans lequel il a un dictionnaire de liste. Ici on pourrait mettre le nom de la personne comme clef du dictionnaire. En fait je ne sais pas exactement ce que tu veux, donc j'ai mis juste mon exemple pour démontrer comment on remonte aux Event à partir des références aux Event.

Laurent

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
patricelegoux a écrit :
08 juillet 2021, 17:08
llhduflot a écrit :
08 juillet 2021, 13:34
patricelegoux a écrit :
07 juillet 2021, 20:25
Savez vous comment créer un attribut d'événement ou de source par programmation ? Quels imports faut il faire et quelles méthodes appeler?
Bonjour,

Juste en regardant le code de Event: la classe hérite de AttributeBase et donc de la méthode add_attribute(self, attribute), donc je dirait créer une instance monattribute = Attribute(....) et event.add_attribute(monattribute)

Laurent
Et du coup pour son type et sa valeur, comment je les positionne ? quelque chose comme ça:

monattribute = Attribute(....)
monattribute.type = 'URL'
monattribute.value = l'url que que j'ai récupérée
event.add_attribute(monattribute)

??
Il semble que monattribute.type soit attendu être un AttributeType qui semble restreindre le type

UNKNOWN = -1
CUSTOM = 0
CASTE = 1
DESCRIPTION = 2
ID = 3
NATIONAL = 4
NUM_CHILD = 5
SSN = 6
NICKNAME = 7
CAUSE = 8
AGENCY = 9
AGE = 10
FATHER_AGE = 11
MOTHER_AGE = 12
WITNESS = 13
TIME = 14
OCCUPATION = 15

Laurent

patricelegoux
patricelegoux
Messages : 955
Saisie : Geneweb
Voir son arbre
Good ! Mes points 1 et 2 se débloquent, je vous mets le script ST dans l'état actuel

1) ajout d'un attribut à une citation (fonctionne)

Code : Tout sélectionner

[title]
SuperTool-Citations_Save-Url-as-attribute

[category]
Citations

[initial_statements]
import re
#from gramps.gen.lib import Attribute
from gramps.gen.lib import SrcAttribute, SrcAttributeType

[statements]
if ') - http' in page:
	gid = gramps_id
	cit_url = re.search('(^.{1,}\()(.{1,})(\) - )(http.{1,}$)', page)
	for url in cit_url.group(4).split(' & '):
		print(gid, ':', cit_url.group(2), '=> URL:', url)
		attr = SrcAttribute()

		#Test1 KO unserialize impossible
		#Test1 attr.set_type('URL')

		#Test2 KO utiliser cette méthode ne change rien au pb unserialize
		attr_type = SrcAttributeType()
		attr_type.set('URL')
		print(attr_type)
		attr.set_type(attr_type)
		print(attr)

		attr.set_value(url)
		print(attr)

		citation.add_attribute(attr)
		print('attr: ', attr)

[filter]
') - http' in page

[expressions]
gramps_id, page, citators, attributes

[scope]
all

[unwind_lists]
False

[commit_changes]
True

[summary_only]
False

2) Lecture des attributs dans la référence des évènements (ne fait pas encore grand chose mais au moins l'accès à la donné est présent et fonctionne)

Code : Tout sélectionner

[title]
individus-test filtre dans les attr de la référence des événements

[category]
People

[initial_statements]
def ref_attr(attr_list, type=None, value=None):
	#Recherche dans les attributs de le référence si le type et ou la valeur correspondent aux arguments
	
	if type != None or value != None:
		for attr in attr_list:
			if type:
				if value:
					if type == attr.type and value in attr.value:
						print(attr.type, attr.value)
						return True
				else:
					if type == attr.type:
						return True
			else:
				if value in attr.value:
					return True
	
	return False

searchlist = []

[statements]
if [ref_attr(event.attribute_list, 'Présence', 'Absent') for event in person.get_event_ref_list()]:
	searchlist.append(self)

[filter]
searchlist

[expressions]

[scope]
all

[unwind_lists]
False

[commit_changes]
False

[summary_only]
False

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

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
Le SuperTool va me faciliter le recodage d'un outils que j'avais écrit puis perdu: faire la liste des décès et enterrements connus pour une ville, utile quand on fait une visite de cimetière.

Laurent

patricelegoux
patricelegoux
Messages : 955
Saisie : Geneweb
Voir son arbre
llhduflot a écrit :
10 juillet 2021, 08:26
Le SuperTool va me faciliter le recodage d'un outils que j'avais écrit puis perdu: faire la liste des décès et enterrements connus pour une ville, utile quand on fait une visite de cimetière.

Laurent
Bonjour,

Je les enregistre en créant des dépôts "cimetiere", des sources "pierre tombale" et des citations, dans un lieu "cimetiere". Du coup les retrouver est assez simple

http://home.patrice.legoux.org/genealogie/DWR/2021-07/source.html?p=repository.html&stxt=Bk00006__&idx=1600&mdx=5132&sdx=351&rdx=36

http://home.patrice.legoux.org/genealogie/DWR/2021-07/person.html?p=source.html&stxt=Bk00006__&idx=7683&mdx=5132&sdx=351&rdx=36

http://home.patrice.legoux.org/genealogie/DWR/2021-07/place.html?p=person.html&stxt=Bk00006__&idx=7683&mdx=5132&sdx=351&pdx=723&rdx=36
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload: 3.0.2
  • Chrome

llhduflot
male
Messages : 201
Saisie : Standard
Voir son arbre
patricelegoux a écrit :
10 juillet 2021, 09:09
llhduflot a écrit :
10 juillet 2021, 08:26
Le SuperTool va me faciliter le recodage d'un outils que j'avais écrit puis perdu: faire la liste des décès et enterrements connus pour une ville, utile quand on fait une visite de cimetière.

Laurent
Bonjour,

Je les enregistre en créant des dépôts "cimetiere", des sources "pierre tombale" et des citations, dans un lieu "cimetiere". Du coup les retrouver est assez simple

http://home.patrice.legoux.org/genealogie/DWR/2021-07/source.html?p=repository.html&stxt=Bk00006__&idx=1600&mdx=5132&sdx=351&rdx=36

http://home.patrice.legoux.org/genealogie/DWR/2021-07/person.html?p=source.html&stxt=Bk00006__&idx=7683&mdx=5132&sdx=351&rdx=36

http://home.patrice.legoux.org/genealogie/DWR/2021-07/place.html?p=person.html&stxt=Bk00006__&idx=7683&mdx=5132&sdx=351&pdx=723&rdx=36
Très bien, j'avoue que j'ai raté complètement l'utilisation des dépôts dans gramps.

Répondre

Revenir à « Gramps »