3502: Extend CSV import to include additional fields; added source title to export
svn: r15671
This commit is contained in:
parent
e4bb905303
commit
59dca4e3ea
@ -50,6 +50,7 @@ LOG = logging.getLogger(".ExportCSV")
|
||||
#-------------------------------------------------------------------------
|
||||
import gen.lib
|
||||
from Filters import GenericFilter, Rules, build_filter_model
|
||||
from gen.lib.eventroletype import EventRoleType
|
||||
from ExportOptions import WriterOptionBox
|
||||
import Utils
|
||||
import gen.proxy
|
||||
@ -80,6 +81,25 @@ def sortable_string_representation(text):
|
||||
alpha += s
|
||||
return alpha + (("0" * 10) + numeric)[-10:]
|
||||
|
||||
def get_primary_event_ref_from_type(db, person, event_name):
|
||||
"""
|
||||
>>> get_primary_event_ref_from_type(db, Person(), "Baptism"):
|
||||
"""
|
||||
for ref in person.event_ref_list:
|
||||
if ref.get_role() == EventRoleType.PRIMARY:
|
||||
event = db.get_event_from_handle(ref.ref)
|
||||
if event and event.type.is_type(event_name):
|
||||
return ref
|
||||
return None
|
||||
|
||||
def get_primary_source_title(db, obj):
|
||||
import pdb; pdb.set_trace()
|
||||
for ref in obj.get_source_references():
|
||||
source = db.get_source_from_handle(ref.ref)
|
||||
if source:
|
||||
return source.get_title()
|
||||
return ""
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Encoding support for CSV, from http://docs.python.org/lib/csv-examples.html
|
||||
@ -310,19 +330,25 @@ class CSVWriter(object):
|
||||
###########################
|
||||
if self.include_individuals:
|
||||
if self.translate_headers:
|
||||
self.write_csv(_("Person"), _("Surname"), _("Given"),
|
||||
_("Call"), _("Suffix"), _("Prefix"),
|
||||
_("Person|Title"), _("Gender"), _("Birth date"),
|
||||
_("Birth place"), _("Birth source"),
|
||||
_("Death date"), _("Death place"),
|
||||
_("Death source"), _("Note"))
|
||||
self.write_csv(
|
||||
_("Person"), _("Surname"), _("Given"),
|
||||
_("Call"), _("Suffix"), _("Prefix"),
|
||||
_("Person|Title"), _("Gender"),
|
||||
_("Birth date"), _("Birth place"), _("Birth source"),
|
||||
_("Baptism date"), _("Baptism place"), _("Baptism source"),
|
||||
_("Death date"), _("Death place"), _("Death source"),
|
||||
_("Burial date"), _("Burial place"), _("Burial source"),
|
||||
_("Note"))
|
||||
else:
|
||||
self.write_csv("Person", "Surname", "Given",
|
||||
"Call", "Suffix", "Prefix",
|
||||
"Title", "Gender", "Birth date",
|
||||
"Birth place", "Birth source",
|
||||
"Death date", "Death place",
|
||||
"Death source", "Note")
|
||||
self.write_csv(
|
||||
"Person", "Surname", "Given",
|
||||
"Call", "Suffix", "Prefix",
|
||||
"Title", "Gender",
|
||||
"Birth date", "Birth place", "Birth source",
|
||||
"Baptism date", "Baptism place", "Baptism source",
|
||||
"Death date", "Death place", "Death source",
|
||||
"Burial date", "Burial place", "Burial source",
|
||||
"Note")
|
||||
for key in plist:
|
||||
person = self.db.get_person_from_handle(key)
|
||||
if person:
|
||||
@ -336,7 +362,7 @@ class CSVWriter(object):
|
||||
grampsid_ref = ""
|
||||
if grampsid != "":
|
||||
grampsid_ref = "[" + grampsid + "]"
|
||||
note = '' # don't export notes or source
|
||||
note = '' # don't export notes
|
||||
callname = primary_name.get_call_name()
|
||||
gender = person.get_gender()
|
||||
if gender == gen.lib.Person.MALE:
|
||||
@ -348,6 +374,7 @@ class CSVWriter(object):
|
||||
# Birth:
|
||||
birthdate = ""
|
||||
birthplace = ""
|
||||
birthsource = ""
|
||||
birth_ref = person.get_birth_ref()
|
||||
if birth_ref:
|
||||
birth = self.db.get_event_from_handle(birth_ref.ref)
|
||||
@ -357,9 +384,26 @@ class CSVWriter(object):
|
||||
if place_handle:
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
birthplace = place.get_title()
|
||||
birthsource = get_primary_source_title(self.db, birth)
|
||||
# Baptism:
|
||||
baptismdate = ""
|
||||
baptismplace = ""
|
||||
baptismsource = ""
|
||||
baptism_ref = get_primary_event_ref_from_type(
|
||||
self.db, person, "Baptism")
|
||||
if baptism_ref:
|
||||
baptism = self.db.get_event_from_handle(baptism_ref.ref)
|
||||
if baptism:
|
||||
baptismdate = self.format_date( baptism)
|
||||
place_handle = baptism.get_place_handle()
|
||||
if place_handle:
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
baptismplace = place.get_title()
|
||||
baptismsource = get_primary_source_title(self.db, baptism)
|
||||
# Death:
|
||||
deathdate = ""
|
||||
deathplace = ""
|
||||
deathsource = ""
|
||||
death_ref = person.get_death_ref()
|
||||
if death_ref:
|
||||
death = self.db.get_event_from_handle(death_ref.ref)
|
||||
@ -369,10 +413,29 @@ class CSVWriter(object):
|
||||
if place_handle:
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
deathplace = place.get_title()
|
||||
deathsource = get_primary_source_title(self.db, death)
|
||||
# Burial:
|
||||
burialdate = ""
|
||||
burialplace = ""
|
||||
burialsource = ""
|
||||
burial_ref = get_primary_event_ref_from_type(
|
||||
self.db, person, "Burial")
|
||||
if burial_ref:
|
||||
burial = self.db.get_event_from_handle(burial_ref.ref)
|
||||
if burial:
|
||||
burialdate = self.format_date( burial)
|
||||
place_handle = burial.get_place_handle()
|
||||
if place_handle:
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
burialplace = place.get_title()
|
||||
burialsource = get_primary_source_title(self.db, burial)
|
||||
# Write it out:
|
||||
self.write_csv(grampsid_ref, surname, first_name, callname,
|
||||
suffix, prefix, title, gender,
|
||||
birthdate, birthplace, "",
|
||||
deathdate, deathplace, "",
|
||||
birthdate, birthplace, birthsource,
|
||||
baptismdate, baptismplace, baptismsource,
|
||||
deathdate, deathplace, deathsource,
|
||||
burialdate, burialplace, burialsource,
|
||||
note)
|
||||
self.update()
|
||||
self.writeln()
|
||||
@ -426,8 +489,8 @@ class CSVWriter(object):
|
||||
if place_handle:
|
||||
place = self.db.get_place_from_handle(place_handle)
|
||||
mplace = place.get_title()
|
||||
# m_source = self.get_primary_source( event.get_source_references())
|
||||
source, note = '', ''
|
||||
source = get_primary_source_title(self.db, event)
|
||||
note = ''
|
||||
self.write_csv(marriage_id, father_id, mother_id, mdate,
|
||||
mplace, source, note)
|
||||
self.update()
|
||||
|
@ -55,6 +55,23 @@ from DateHandler import parser as _dp
|
||||
from Utils import gender as gender_map
|
||||
from Utils import create_id
|
||||
from gui.utils import ProgressMeter
|
||||
from gen.lib.eventroletype import EventRoleType
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Support Functions
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def get_primary_event_ref_from_type(db, person, event_name):
|
||||
"""
|
||||
>>> get_primary_event_ref_from_type(db, Person(), "Baptism"):
|
||||
"""
|
||||
for ref in person.event_ref_list:
|
||||
if ref.get_role() == EventRoleType.PRIMARY:
|
||||
event = db.get_event_from_handle(ref.ref)
|
||||
if event and event.type.is_type(event_name):
|
||||
return ref
|
||||
return None
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -184,6 +201,24 @@ def cleanup_column_name(column):
|
||||
elif retval in ["Birthsource",
|
||||
"Birth source", _("Birth source")]:
|
||||
return "birthsource"
|
||||
elif retval in ["Baptismplace",
|
||||
"Baptism place", _("Baptism place")]:
|
||||
return "baptismplace"
|
||||
elif retval in ["Baptismdate",
|
||||
"Baptism date", _("Baptism date")]:
|
||||
return "baptismdate"
|
||||
elif retval in ["Baptismsource",
|
||||
"Baptism source", _("Baptism source")]:
|
||||
return "baptismsource"
|
||||
elif retval in ["Burialplace",
|
||||
"Burial place", _("Burial place")]:
|
||||
return "burialplace"
|
||||
elif retval in ["Burialdate",
|
||||
"Burial date", _("Burial date")]:
|
||||
return "burialdate"
|
||||
elif retval in ["Burialsource",
|
||||
"Burial source", _("Burial source")]:
|
||||
return "burialsource"
|
||||
elif retval in ["Deathplace",
|
||||
"Death place", _("Death place")]:
|
||||
return "deathplace"
|
||||
@ -256,6 +291,24 @@ def cleanup_column_name(column):
|
||||
elif retval in ["birthsource", "birth_source",
|
||||
"birth source", _("birth source")]:
|
||||
return "birthsource"
|
||||
elif retval in ["baptismplace",
|
||||
"baptism place", _("baptism place")]:
|
||||
return "baptismplace"
|
||||
elif retval in ["baptismdate",
|
||||
"baptism date", _("baptism date")]:
|
||||
return "baptismdate"
|
||||
elif retval in ["baptismsource",
|
||||
"baptism source", _("baptism source")]:
|
||||
return "baptismsource"
|
||||
elif retval in ["burialplace",
|
||||
"burial place", _("burial place")]:
|
||||
return "burialplace"
|
||||
elif retval in ["burialdate",
|
||||
"burial date", _("burial date")]:
|
||||
return "burialdate"
|
||||
elif retval in ["burialsource",
|
||||
"burial source", _("burial source")]:
|
||||
return "burialsource"
|
||||
elif retval in ["deathplace", "death_place",
|
||||
"death place", _("death place")]:
|
||||
return "deathplace"
|
||||
@ -574,6 +627,12 @@ class CSVParser(object):
|
||||
birthplace = rd(line_number, row, col, "birthplace")
|
||||
birthdate = rd(line_number, row, col, "birthdate")
|
||||
birthsource = rd(line_number, row, col, "birthsource")
|
||||
baptismplace = rd(line_number, row, col, "baptismplace")
|
||||
baptismdate = rd(line_number, row, col, "baptismdate")
|
||||
baptismsource = rd(line_number, row, col, "baptismsource")
|
||||
burialplace = rd(line_number, row, col, "burialplace")
|
||||
burialdate = rd(line_number, row, col, "burialdate")
|
||||
burialsource = rd(line_number, row, col, "burialsource")
|
||||
deathplace = rd(line_number, row, col, "deathplace")
|
||||
deathdate = rd(line_number, row, col, "deathdate")
|
||||
deathsource = rd(line_number, row, col, "deathsource")
|
||||
@ -648,6 +707,7 @@ class CSVParser(object):
|
||||
person.set_gender(gender)
|
||||
#########################################################
|
||||
# add if new, replace if different
|
||||
# Birth:
|
||||
if birthdate is not None:
|
||||
birthdate = _dp.parse(birthdate)
|
||||
if birthplace is not None:
|
||||
@ -655,13 +715,33 @@ class CSVParser(object):
|
||||
if birthsource is not None:
|
||||
new, birthsource = self.get_or_create_source(birthsource)
|
||||
if birthdate or birthplace or birthsource:
|
||||
new, birth = self.get_or_create_event(person, gen.lib.EventType.BIRTH, birthdate, birthplace, birthsource)
|
||||
new, birth = self.get_or_create_event(person,
|
||||
gen.lib.EventType.BIRTH, birthdate,
|
||||
birthplace, birthsource)
|
||||
birth_ref = person.get_birth_ref()
|
||||
if birth_ref is None:
|
||||
# new
|
||||
birth_ref = gen.lib.EventRef()
|
||||
birth_ref.set_reference_handle( birth.get_handle())
|
||||
person.set_birth_ref( birth_ref)
|
||||
# Baptism:
|
||||
if baptismdate is not None:
|
||||
baptismdate = _dp.parse(baptismdate)
|
||||
if baptismplace is not None:
|
||||
new, baptismplace = self.get_or_create_place(baptismplace)
|
||||
if baptismsource is not None:
|
||||
new, baptismsource = self.get_or_create_source(baptismsource)
|
||||
if baptismdate or baptismplace or baptismsource:
|
||||
new, baptism = self.get_or_create_event(person,
|
||||
gen.lib.EventType.BAPTISM, baptismdate,
|
||||
baptismplace, baptismsource)
|
||||
baptism_ref = get_primary_event_ref_from_type(self.db, person, "Baptism")
|
||||
if baptism_ref is None:
|
||||
# new
|
||||
baptism_ref = gen.lib.EventRef()
|
||||
baptism_ref.set_reference_handle( baptism.get_handle())
|
||||
person.add_event_ref( baptism_ref)
|
||||
# Death:
|
||||
if deathdate is not None:
|
||||
deathdate = _dp.parse(deathdate)
|
||||
if deathplace is not None:
|
||||
@ -679,6 +759,23 @@ class CSVParser(object):
|
||||
death_ref = gen.lib.EventRef()
|
||||
death_ref.set_reference_handle(death.get_handle())
|
||||
person.set_death_ref(death_ref)
|
||||
# Burial:
|
||||
if burialdate is not None:
|
||||
burialdate = _dp.parse(burialdate)
|
||||
if burialplace is not None:
|
||||
new, burialplace = self.get_or_create_place(burialplace)
|
||||
if burialsource is not None:
|
||||
new, burialsource = self.get_or_create_source(burialsource)
|
||||
if burialdate or burialplace or burialsource:
|
||||
new, burial = self.get_or_create_event(person,
|
||||
gen.lib.EventType.BURIAL, burialdate,
|
||||
burialplace, burialsource)
|
||||
burial_ref = get_primary_event_ref_from_type(self.db, person, "Burial")
|
||||
if burial_ref is None:
|
||||
# new
|
||||
burial_ref = gen.lib.EventRef()
|
||||
burial_ref.set_reference_handle( burial.get_handle())
|
||||
person.add_event_ref( burial_ref)
|
||||
if source:
|
||||
# add, if new
|
||||
new, source = self.get_or_create_source(source)
|
||||
|
Loading…
Reference in New Issue
Block a user