gen.lib and gen.utils are independent; removed gen.utils.dbutils --- moved db methods to gen.db.base
svn: r13872
This commit is contained in:
parent
43dc350b8c
commit
872e971fd3
@ -432,7 +432,7 @@ class MergePeople(object):
|
|||||||
# merge the event lists
|
# merge the event lists
|
||||||
self.merge_event_lists(new)
|
self.merge_event_lists(new)
|
||||||
|
|
||||||
gen.utils.set_birth_death_index(self.db, new)
|
self.db.set_birth_death_index(new)
|
||||||
|
|
||||||
# copy attributes
|
# copy attributes
|
||||||
new.set_attribute_list(self.p1.get_attribute_list() +
|
new.set_attribute_list(self.p1.get_attribute_list() +
|
||||||
|
@ -44,6 +44,7 @@ from gettext import gettext as _
|
|||||||
# GRAMPS libraries
|
# GRAMPS libraries
|
||||||
#
|
#
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
|
import gen.lib
|
||||||
from gen.lib import (MediaObject, Person, Family, Source, Event, Place,
|
from gen.lib import (MediaObject, Person, Family, Source, Event, Place,
|
||||||
Repository, Note, GenderStats, Researcher)
|
Repository, Note, GenderStats, Researcher)
|
||||||
from gen.utils.callback import Callback
|
from gen.utils.callback import Callback
|
||||||
@ -1521,6 +1522,8 @@ class GrampsDbBase(object):
|
|||||||
|
|
||||||
def get_birth_or_fallback(self, person):
|
def get_birth_or_fallback(self, person):
|
||||||
"""
|
"""
|
||||||
|
Get BIRTH event from a person, or fallback to an event around
|
||||||
|
the time of birth.
|
||||||
"""
|
"""
|
||||||
birth_ref = person.get_birth_ref()
|
birth_ref = person.get_birth_ref()
|
||||||
if birth_ref: # regular birth found
|
if birth_ref: # regular birth found
|
||||||
@ -1539,6 +1542,8 @@ class GrampsDbBase(object):
|
|||||||
|
|
||||||
def get_death_or_fallback(self, person):
|
def get_death_or_fallback(self, person):
|
||||||
"""
|
"""
|
||||||
|
Get a DEATH event from a person, or fallback to an
|
||||||
|
event around the time of death.
|
||||||
"""
|
"""
|
||||||
death_ref = person.get_death_ref()
|
death_ref = person.get_death_ref()
|
||||||
if death_ref: # regular death found
|
if death_ref: # regular death found
|
||||||
@ -1555,3 +1560,218 @@ class GrampsDbBase(object):
|
|||||||
return event
|
return event
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def add_child_to_family(self, family, child,
|
||||||
|
mrel=gen.lib.ChildRefType(),
|
||||||
|
frel=gen.lib.ChildRefType(),
|
||||||
|
trans=None):
|
||||||
|
"""
|
||||||
|
Adds a child to a family.
|
||||||
|
"""
|
||||||
|
cref = gen.lib.ChildRef()
|
||||||
|
cref.ref = child.handle
|
||||||
|
cref.set_father_relation(frel)
|
||||||
|
cref.set_mother_relation(mrel)
|
||||||
|
|
||||||
|
family.add_child_ref(cref)
|
||||||
|
child.add_parent_family_handle(family.handle)
|
||||||
|
|
||||||
|
if trans is None:
|
||||||
|
need_commit = True
|
||||||
|
trans = self.transaction_begin()
|
||||||
|
else:
|
||||||
|
need_commit = False
|
||||||
|
|
||||||
|
self.commit_family(family,trans)
|
||||||
|
self.commit_person(child,trans)
|
||||||
|
|
||||||
|
if need_commit:
|
||||||
|
self.transaction_commit(trans, _('Add child to family') )
|
||||||
|
|
||||||
|
def remove_child_from_family(self, person_handle, family_handle, trans=None):
|
||||||
|
"""
|
||||||
|
Remove a person as a child of the family, deleting the family if
|
||||||
|
it becomes empty.
|
||||||
|
"""
|
||||||
|
person = self.get_person_from_handle(person_handle)
|
||||||
|
family = self.get_family_from_handle(family_handle)
|
||||||
|
person.remove_parent_family_handle(family_handle)
|
||||||
|
family.remove_child_handle(person_handle)
|
||||||
|
|
||||||
|
if trans is None:
|
||||||
|
need_commit = True
|
||||||
|
trans = self.transaction_begin()
|
||||||
|
else:
|
||||||
|
need_commit = False
|
||||||
|
|
||||||
|
child_list = family.get_child_ref_list()
|
||||||
|
if (not family.get_father_handle() and not family.get_mother_handle() and
|
||||||
|
len(child_list) <= 1):
|
||||||
|
self.remove_family(family_handle, trans)
|
||||||
|
if child_list:
|
||||||
|
child = self.get_person_from_handle(child_list[0].ref)
|
||||||
|
child.remove_parent_family_handle(family_handle)
|
||||||
|
self.commit_person(child, trans)
|
||||||
|
else:
|
||||||
|
self.commit_family(family, trans)
|
||||||
|
self.commit_person(person, trans)
|
||||||
|
|
||||||
|
if need_commit:
|
||||||
|
self.transaction_commit(trans,_("Remove child from family"))
|
||||||
|
|
||||||
|
def delete_person_from_database(self, person, trans):
|
||||||
|
"""
|
||||||
|
Deletes a person from the database, cleaning up all associated references.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# clear out the default person if the person is the default person
|
||||||
|
if self.get_default_person() == person:
|
||||||
|
self.set_default_person_handle(None)
|
||||||
|
|
||||||
|
# loop through the family list
|
||||||
|
for family_handle in [ f for f in person.get_family_handle_list() if f ]:
|
||||||
|
|
||||||
|
family = self.get_family_from_handle(family_handle)
|
||||||
|
|
||||||
|
if person.get_handle() == family.get_father_handle():
|
||||||
|
family.set_father_handle(None)
|
||||||
|
else:
|
||||||
|
family.set_mother_handle(None)
|
||||||
|
|
||||||
|
if not family.get_father_handle() and not family.get_mother_handle() and \
|
||||||
|
not family.get_child_ref_list():
|
||||||
|
self.remove_family(family_handle, trans)
|
||||||
|
else:
|
||||||
|
self.commit_family(family, trans)
|
||||||
|
|
||||||
|
for family_handle in person.get_parent_family_handle_list():
|
||||||
|
if family_handle:
|
||||||
|
family = self.get_family_from_handle(family_handle)
|
||||||
|
family.remove_child_handle(person.get_handle())
|
||||||
|
self.commit_family(family, trans)
|
||||||
|
|
||||||
|
handle = person.get_handle()
|
||||||
|
|
||||||
|
person_list = [
|
||||||
|
item[1] for item in
|
||||||
|
self.find_backlink_handles(handle,['Person'])]
|
||||||
|
|
||||||
|
for phandle in person_list:
|
||||||
|
p = self.get_person_from_handle(phandle)
|
||||||
|
p.remove_handle_references('Person', handle)
|
||||||
|
self.commit_person(person, trans)
|
||||||
|
self.remove_person(handle, trans)
|
||||||
|
|
||||||
|
def remove_family_relationships(self, family_handle, trans=None):
|
||||||
|
"""
|
||||||
|
Remove a family and its relationships.
|
||||||
|
"""
|
||||||
|
family = self.get_family_from_handle(family_handle)
|
||||||
|
|
||||||
|
if trans is None:
|
||||||
|
need_commit = True
|
||||||
|
trans = self.transaction_begin()
|
||||||
|
else:
|
||||||
|
need_commit = False
|
||||||
|
|
||||||
|
for phandle in [ family.get_father_handle(),
|
||||||
|
family.get_mother_handle()]:
|
||||||
|
if phandle:
|
||||||
|
person = self.get_person_from_handle(phandle)
|
||||||
|
person.remove_family_handle(family_handle)
|
||||||
|
self.commit_person(person, trans)
|
||||||
|
|
||||||
|
for ref in family.get_child_ref_list():
|
||||||
|
phandle = ref.ref
|
||||||
|
person = self.get_person_from_handle(phandle)
|
||||||
|
person.remove_parent_family_handle(family_handle)
|
||||||
|
self.commit_person(person, trans)
|
||||||
|
|
||||||
|
self.remove_family(family_handle, trans)
|
||||||
|
|
||||||
|
if need_commit:
|
||||||
|
self.transaction_commit(trans, _("Remove Family"))
|
||||||
|
|
||||||
|
def remove_parent_from_family(self, person_handle, family_handle, trans=None):
|
||||||
|
"""
|
||||||
|
Remove a person as either the father or mother of a family,
|
||||||
|
deleting the family if it becomes empty.
|
||||||
|
"""
|
||||||
|
person = self.get_person_from_handle(person_handle)
|
||||||
|
family = self.get_family_from_handle(family_handle)
|
||||||
|
|
||||||
|
if trans is None:
|
||||||
|
need_commit = True
|
||||||
|
trans = self.transaction_begin()
|
||||||
|
else:
|
||||||
|
need_commit = False
|
||||||
|
|
||||||
|
person.remove_family_handle(family_handle)
|
||||||
|
if family.get_father_handle() == person_handle:
|
||||||
|
family.set_father_handle(None)
|
||||||
|
msg = _("Remove father from family")
|
||||||
|
elif family.get_mother_handle() == person_handle:
|
||||||
|
msg = _("Remove mother from family")
|
||||||
|
family.set_mother_handle(None)
|
||||||
|
|
||||||
|
child_list = family.get_child_ref_list()
|
||||||
|
if (not family.get_father_handle() and not family.get_mother_handle() and
|
||||||
|
len(child_list) <= 1):
|
||||||
|
self.remove_family(family_handle, trans)
|
||||||
|
if child_list:
|
||||||
|
child = self.get_person_from_handle(child_list[0].ref)
|
||||||
|
child.remove_parent_family_handle(family_handle)
|
||||||
|
self.commit_person(child, trans)
|
||||||
|
else:
|
||||||
|
self.commit_family(family, trans)
|
||||||
|
self.commit_person(person, trans)
|
||||||
|
|
||||||
|
if need_commit:
|
||||||
|
self.transaction_commit(trans,msg)
|
||||||
|
|
||||||
|
def marriage_from_eventref_list(self, eventref_list):
|
||||||
|
"""
|
||||||
|
Get the marriage event from an eventref list.
|
||||||
|
"""
|
||||||
|
for eventref in eventref_list:
|
||||||
|
event = self.get_event_from_handle(eventref.ref)
|
||||||
|
if event and event.type.is_marriage():
|
||||||
|
return event
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_total(self):
|
||||||
|
"""
|
||||||
|
Get the total of primary objects.
|
||||||
|
"""
|
||||||
|
person_len = self.get_number_of_people()
|
||||||
|
family_len = self.get_number_of_families()
|
||||||
|
event_len = self.get_number_of_events()
|
||||||
|
source_len = self.get_number_of_sources()
|
||||||
|
place_len = self.get_number_of_places()
|
||||||
|
repo_len = self.get_number_of_repositories()
|
||||||
|
obj_len = self.get_number_of_media_objects()
|
||||||
|
|
||||||
|
return person_len + family_len + event_len + \
|
||||||
|
place_len + source_len + obj_len + repo_len
|
||||||
|
|
||||||
|
def set_birth_death_index(self, person):
|
||||||
|
"""
|
||||||
|
Set the birth and death indices for a person.
|
||||||
|
"""
|
||||||
|
birth_ref_index = -1
|
||||||
|
death_ref_index = -1
|
||||||
|
event_ref_list = person.get_event_ref_list()
|
||||||
|
for index in range(len(event_ref_list)):
|
||||||
|
ref = event_ref_list[index]
|
||||||
|
event = self.get_event_from_handle(ref.ref)
|
||||||
|
if (event.type.is_birth()
|
||||||
|
and ref.role.is_primary()
|
||||||
|
and (birth_ref_index == -1)):
|
||||||
|
birth_ref_index = index
|
||||||
|
elif (event.type.is_death()
|
||||||
|
and ref.role.is_primary()
|
||||||
|
and (death_ref_index == -1)):
|
||||||
|
death_ref_index = index
|
||||||
|
|
||||||
|
person.birth_ref_index = birth_ref_index
|
||||||
|
person.death_ref_index = death_ref_index
|
||||||
|
|
||||||
|
@ -190,9 +190,23 @@ class EventType(GrampsType):
|
|||||||
def __init__(self, value=None):
|
def __init__(self, value=None):
|
||||||
GrampsType.__init__(self, value)
|
GrampsType.__init__(self, value)
|
||||||
|
|
||||||
|
def is_birth(self):
|
||||||
|
"""
|
||||||
|
Returns True if EventType is BIRTH, False
|
||||||
|
otherwise.
|
||||||
|
"""
|
||||||
|
return self.value == self.BIRTH
|
||||||
|
|
||||||
|
def is_death(self):
|
||||||
|
"""
|
||||||
|
Returns True if EventType is DEATH, False
|
||||||
|
otherwise.
|
||||||
|
"""
|
||||||
|
return self.value == self.DEATH
|
||||||
|
|
||||||
def is_birth_fallback(self):
|
def is_birth_fallback(self):
|
||||||
"""
|
"""
|
||||||
Returns True if EventRoleType is a birth fallback, False
|
Returns True if EventType is a birth fallback, False
|
||||||
otherwise.
|
otherwise.
|
||||||
"""
|
"""
|
||||||
return self.value in [self.CHRISTEN,
|
return self.value in [self.CHRISTEN,
|
||||||
@ -200,7 +214,7 @@ class EventType(GrampsType):
|
|||||||
|
|
||||||
def is_death_fallback(self):
|
def is_death_fallback(self):
|
||||||
"""
|
"""
|
||||||
Returns True if EventRoleType is a death fallback, False
|
Returns True if EventType is a death fallback, False
|
||||||
otherwise.
|
otherwise.
|
||||||
"""
|
"""
|
||||||
return self.value in [self.BURIAL,
|
return self.value in [self.BURIAL,
|
||||||
@ -208,12 +222,12 @@ class EventType(GrampsType):
|
|||||||
self.CAUSE_DEATH]
|
self.CAUSE_DEATH]
|
||||||
def is_marriage(self):
|
def is_marriage(self):
|
||||||
"""
|
"""
|
||||||
Returns True if EventRoleType is MARRIAGE, False otherwise.
|
Returns True if EventType is MARRIAGE, False otherwise.
|
||||||
"""
|
"""
|
||||||
return self.value == self.MARRIAGE
|
return self.value == self.MARRIAGE
|
||||||
|
|
||||||
def is_divorce(self):
|
def is_divorce(self):
|
||||||
"""
|
"""
|
||||||
Returns True if EventRoleType is DIVORCE, False otherwise.
|
Returns True if EventType is DIVORCE, False otherwise.
|
||||||
"""
|
"""
|
||||||
return self.value == self.DIVORCE
|
return self.value == self.DIVORCE
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
Generic utilities useful for users of the gen package
|
Generic utilities useful for users of the gen package
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from dbutils import *
|
|
||||||
from progressmon import ProgressMonitor
|
from progressmon import ProgressMonitor
|
||||||
from longop import LongOpStatus
|
from longop import LongOpStatus
|
||||||
from callback import Callback
|
from callback import Callback
|
||||||
|
@ -1,313 +0,0 @@
|
|||||||
#
|
|
||||||
# Gramps - a GTK+/GNOME based genealogy program
|
|
||||||
#
|
|
||||||
# Copyright (C) 2004-2006 Donald N. Allingham
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program; if not, write to the Free Software
|
|
||||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
#
|
|
||||||
|
|
||||||
# $Id$
|
|
||||||
|
|
||||||
from __future__ import with_statement
|
|
||||||
from gettext import gettext as _
|
|
||||||
import copy
|
|
||||||
|
|
||||||
import gen.lib
|
|
||||||
from BasicUtils import UpdateCallback
|
|
||||||
|
|
||||||
|
|
||||||
def delete_person_from_database(db, person, trans):
|
|
||||||
"""
|
|
||||||
Deletes a person from the database, cleaning up all associated references.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# clear out the default person if the person is the default person
|
|
||||||
if db.get_default_person() == person:
|
|
||||||
db.set_default_person_handle(None)
|
|
||||||
|
|
||||||
# loop through the family list
|
|
||||||
for family_handle in [ f for f in person.get_family_handle_list() if f ]:
|
|
||||||
|
|
||||||
family = db.get_family_from_handle(family_handle)
|
|
||||||
|
|
||||||
if person.get_handle() == family.get_father_handle():
|
|
||||||
family.set_father_handle(None)
|
|
||||||
else:
|
|
||||||
family.set_mother_handle(None)
|
|
||||||
|
|
||||||
if not family.get_father_handle() and not family.get_mother_handle() and \
|
|
||||||
not family.get_child_ref_list():
|
|
||||||
db.remove_family(family_handle, trans)
|
|
||||||
else:
|
|
||||||
db.commit_family(family, trans)
|
|
||||||
|
|
||||||
for family_handle in person.get_parent_family_handle_list():
|
|
||||||
if family_handle:
|
|
||||||
family = db.get_family_from_handle(family_handle)
|
|
||||||
family.remove_child_handle(person.get_handle())
|
|
||||||
db.commit_family(family, trans)
|
|
||||||
|
|
||||||
handle = person.get_handle()
|
|
||||||
|
|
||||||
person_list = [
|
|
||||||
item[1] for item in
|
|
||||||
db.find_backlink_handles(handle,['Person'])]
|
|
||||||
|
|
||||||
for phandle in person_list:
|
|
||||||
p = db.get_person_from_handle(phandle)
|
|
||||||
p.remove_handle_references('Person', handle)
|
|
||||||
db.commit_person(person, trans)
|
|
||||||
db.remove_person(handle, trans)
|
|
||||||
|
|
||||||
def remove_family_relationships(db, family_handle, trans=None):
|
|
||||||
family = db.get_family_from_handle(family_handle)
|
|
||||||
|
|
||||||
if trans is None:
|
|
||||||
need_commit = True
|
|
||||||
trans = db.transaction_begin()
|
|
||||||
else:
|
|
||||||
need_commit = False
|
|
||||||
|
|
||||||
for phandle in [ family.get_father_handle(),
|
|
||||||
family.get_mother_handle()]:
|
|
||||||
if phandle:
|
|
||||||
person = db.get_person_from_handle(phandle)
|
|
||||||
person.remove_family_handle(family_handle)
|
|
||||||
db.commit_person(person, trans)
|
|
||||||
|
|
||||||
for ref in family.get_child_ref_list():
|
|
||||||
phandle = ref.ref
|
|
||||||
person = db.get_person_from_handle(phandle)
|
|
||||||
person.remove_parent_family_handle(family_handle)
|
|
||||||
db.commit_person(person, trans)
|
|
||||||
|
|
||||||
db.remove_family(family_handle, trans)
|
|
||||||
|
|
||||||
if need_commit:
|
|
||||||
db.transaction_commit(trans, _("Remove Family"))
|
|
||||||
|
|
||||||
def remove_parent_from_family(db, person_handle, family_handle, trans=None):
|
|
||||||
"""
|
|
||||||
Remove a person as either the father or mother of a family,
|
|
||||||
deleting the family if it becomes empty.
|
|
||||||
"""
|
|
||||||
person = db.get_person_from_handle(person_handle)
|
|
||||||
family = db.get_family_from_handle(family_handle)
|
|
||||||
|
|
||||||
if trans is None:
|
|
||||||
need_commit = True
|
|
||||||
trans = db.transaction_begin()
|
|
||||||
else:
|
|
||||||
need_commit = False
|
|
||||||
|
|
||||||
person.remove_family_handle(family_handle)
|
|
||||||
if family.get_father_handle() == person_handle:
|
|
||||||
family.set_father_handle(None)
|
|
||||||
msg = _("Remove father from family")
|
|
||||||
elif family.get_mother_handle() == person_handle:
|
|
||||||
msg = _("Remove mother from family")
|
|
||||||
family.set_mother_handle(None)
|
|
||||||
|
|
||||||
child_list = family.get_child_ref_list()
|
|
||||||
if (not family.get_father_handle() and not family.get_mother_handle() and
|
|
||||||
len(child_list) <= 1):
|
|
||||||
db.remove_family(family_handle, trans)
|
|
||||||
if child_list:
|
|
||||||
child = db.get_person_from_handle(child_list[0].ref)
|
|
||||||
child.remove_parent_family_handle(family_handle)
|
|
||||||
db.commit_person(child, trans)
|
|
||||||
else:
|
|
||||||
db.commit_family(family, trans)
|
|
||||||
db.commit_person(person, trans)
|
|
||||||
|
|
||||||
if need_commit:
|
|
||||||
db.transaction_commit(trans,msg)
|
|
||||||
|
|
||||||
def remove_child_from_family(db, person_handle, family_handle, trans=None):
|
|
||||||
"""
|
|
||||||
Remove a person as a child of the family, deleting the family if
|
|
||||||
it becomes empty.
|
|
||||||
"""
|
|
||||||
person = db.get_person_from_handle(person_handle)
|
|
||||||
family = db.get_family_from_handle(family_handle)
|
|
||||||
person.remove_parent_family_handle(family_handle)
|
|
||||||
family.remove_child_handle(person_handle)
|
|
||||||
|
|
||||||
if trans is None:
|
|
||||||
need_commit = True
|
|
||||||
trans = db.transaction_begin()
|
|
||||||
else:
|
|
||||||
need_commit = False
|
|
||||||
|
|
||||||
child_list = family.get_child_ref_list()
|
|
||||||
if (not family.get_father_handle() and not family.get_mother_handle() and
|
|
||||||
len(child_list) <= 1):
|
|
||||||
db.remove_family(family_handle, trans)
|
|
||||||
if child_list:
|
|
||||||
child = db.get_person_from_handle(child_list[0].ref)
|
|
||||||
child.remove_parent_family_handle(family_handle)
|
|
||||||
db.commit_person(child, trans)
|
|
||||||
else:
|
|
||||||
db.commit_family(family, trans)
|
|
||||||
db.commit_person(person, trans)
|
|
||||||
|
|
||||||
if need_commit:
|
|
||||||
db.transaction_commit(trans,_("Remove child from family"))
|
|
||||||
|
|
||||||
def marriage_from_eventref_list(db, eventref_list):
|
|
||||||
for eventref in eventref_list:
|
|
||||||
event = db.get_event_from_handle(eventref.ref)
|
|
||||||
if event.type == gen.lib.EventType.MARRIAGE:
|
|
||||||
return event
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def add_child_to_family(db, family, child,
|
|
||||||
mrel=gen.lib.ChildRefType(),
|
|
||||||
frel=gen.lib.ChildRefType(),
|
|
||||||
trans=None):
|
|
||||||
|
|
||||||
cref = gen.lib.ChildRef()
|
|
||||||
cref.ref = child.handle
|
|
||||||
cref.set_father_relation(frel)
|
|
||||||
cref.set_mother_relation(mrel)
|
|
||||||
|
|
||||||
family.add_child_ref(cref)
|
|
||||||
child.add_parent_family_handle(family.handle)
|
|
||||||
|
|
||||||
if trans is None:
|
|
||||||
need_commit = True
|
|
||||||
trans = db.transaction_begin()
|
|
||||||
else:
|
|
||||||
need_commit = False
|
|
||||||
|
|
||||||
db.commit_family(family,trans)
|
|
||||||
db.commit_person(child,trans)
|
|
||||||
|
|
||||||
if need_commit:
|
|
||||||
db.transaction_commit(trans, _('Add child to family') )
|
|
||||||
|
|
||||||
|
|
||||||
def get_total(db):
|
|
||||||
person_len = db.get_number_of_people()
|
|
||||||
family_len = db.get_number_of_families()
|
|
||||||
event_len = db.get_number_of_events()
|
|
||||||
source_len = db.get_number_of_sources()
|
|
||||||
place_len = db.get_number_of_places()
|
|
||||||
repo_len = db.get_number_of_repositories()
|
|
||||||
obj_len = db.get_number_of_media_objects()
|
|
||||||
|
|
||||||
return person_len + family_len + event_len + \
|
|
||||||
place_len + source_len + obj_len + repo_len
|
|
||||||
|
|
||||||
def db_copy(from_db,to_db,callback):
|
|
||||||
"""
|
|
||||||
Copy all data in from_db into to_db.
|
|
||||||
|
|
||||||
Both databases must be loaded.
|
|
||||||
It is assumed that to_db is an empty database,
|
|
||||||
so no care is taken to prevent handle collision or merge data.
|
|
||||||
"""
|
|
||||||
|
|
||||||
uc = UpdateCallback(callback)
|
|
||||||
uc.set_total(get_total(from_db))
|
|
||||||
tables = {
|
|
||||||
'Person': {'cursor_func': from_db.get_person_cursor,
|
|
||||||
'add_func' : to_db.add_person,
|
|
||||||
},
|
|
||||||
'Family': {'cursor_func': from_db.get_family_cursor,
|
|
||||||
'add_func' : to_db.add_family,
|
|
||||||
},
|
|
||||||
'Event': {'cursor_func': from_db.get_event_cursor,
|
|
||||||
'add_func' : to_db.add_event,
|
|
||||||
},
|
|
||||||
'Place': {'cursor_func': from_db.get_place_cursor,
|
|
||||||
'add_func' : to_db.add_place,
|
|
||||||
},
|
|
||||||
'Source': {'cursor_func': from_db.get_source_cursor,
|
|
||||||
'add_func' : to_db.add_source,
|
|
||||||
},
|
|
||||||
'MediaObject': {'cursor_func': from_db.get_media_cursor,
|
|
||||||
'add_func' : to_db.add_object,
|
|
||||||
},
|
|
||||||
'Repository': {'cursor_func': from_db.get_repository_cursor,
|
|
||||||
'add_func' : to_db.add_repository,
|
|
||||||
},
|
|
||||||
'Note': {'cursor_func': from_db.get_note_cursor,
|
|
||||||
'add_func': to_db.add_note,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
# Start batch transaction to use async TXN and other tricks
|
|
||||||
trans = to_db.transaction_begin("", batch=True)
|
|
||||||
for table_name, table_dict in tables.iteritems():
|
|
||||||
with table_dict['cursor_func']() as cursor:
|
|
||||||
add_func = table_dict['add_func']
|
|
||||||
for handle, data in cursor:
|
|
||||||
exec('obj = gen.lib.%s()' % table_name)
|
|
||||||
obj_ = getattr(gen.lib, table_name)()
|
|
||||||
assert obj_ == obj
|
|
||||||
obj.unserialize(data)
|
|
||||||
add_func(obj,trans)
|
|
||||||
uc.update()
|
|
||||||
|
|
||||||
# Copy name grouping
|
|
||||||
group_map = from_db.get_name_group_keys()
|
|
||||||
for key in group_map:
|
|
||||||
value = from_db.get_name_group_mapping(key)
|
|
||||||
to_db.set_name_group_mapping(key, value)
|
|
||||||
|
|
||||||
# Commit batch transaction: does nothing, except undoing the tricks
|
|
||||||
to_db.transaction_commit(trans, "")
|
|
||||||
|
|
||||||
# Copy bookmarks over:
|
|
||||||
# we already know that there's no overlap in handles anywhere
|
|
||||||
to_db.bookmarks = copy.deepcopy(from_db.bookmarks)
|
|
||||||
to_db.family_bookmarks = copy.deepcopy(from_db.family_bookmarks)
|
|
||||||
to_db.event_bookmarks = copy.deepcopy(from_db.event_bookmarks)
|
|
||||||
to_db.source_bookmarks = copy.deepcopy(from_db.source_bookmarks)
|
|
||||||
to_db.place_bookmarks = copy.deepcopy(from_db.place_bookmarks)
|
|
||||||
to_db.media_bookmarks = copy.deepcopy(from_db.media_bookmarks)
|
|
||||||
to_db.repo_bookmarks = copy.deepcopy(from_db.repo_bookmarks)
|
|
||||||
to_db.note_bookmarks = copy.deepcopy(from_db.note_bookmarks)
|
|
||||||
|
|
||||||
# Copy name formats
|
|
||||||
to_db.name_formats = from_db.name_formats
|
|
||||||
|
|
||||||
# Copy db owner
|
|
||||||
to_db.owner = from_db.owner
|
|
||||||
|
|
||||||
# Copy other selected metadata
|
|
||||||
if from_db.get_mediapath() is not None:
|
|
||||||
to_db.set_mediapath(from_db.get_mediapath())
|
|
||||||
|
|
||||||
def set_birth_death_index(db, person):
|
|
||||||
birth_ref_index = -1
|
|
||||||
death_ref_index = -1
|
|
||||||
event_ref_list = person.get_event_ref_list()
|
|
||||||
for index in range(len(event_ref_list)):
|
|
||||||
ref = event_ref_list[index]
|
|
||||||
event = db.get_event_from_handle(ref.ref)
|
|
||||||
if (event.type == gen.lib.EventType.BIRTH) \
|
|
||||||
and (ref.role == gen.lib.EventRoleType.PRIMARY) \
|
|
||||||
and (birth_ref_index == -1):
|
|
||||||
birth_ref_index = index
|
|
||||||
elif (event.type == gen.lib.EventType.DEATH) \
|
|
||||||
and (ref.role == gen.lib.EventRoleType.PRIMARY) \
|
|
||||||
and (death_ref_index == -1):
|
|
||||||
death_ref_index = index
|
|
||||||
|
|
||||||
person.birth_ref_index = birth_ref_index
|
|
||||||
person.death_ref_index = death_ref_index
|
|
@ -55,7 +55,6 @@ from gui import widgets
|
|||||||
from BasicUtils import name_displayer
|
from BasicUtils import name_displayer
|
||||||
import Errors
|
import Errors
|
||||||
from glade import Glade
|
from glade import Glade
|
||||||
from gen.utils import set_birth_death_index
|
|
||||||
|
|
||||||
from editprimary import EditPrimary
|
from editprimary import EditPrimary
|
||||||
from editmediaref import EditMediaRef
|
from editmediaref import EditMediaRef
|
||||||
@ -737,7 +736,7 @@ class EditPerson(EditPrimary):
|
|||||||
|
|
||||||
self._check_for_unknown_gender()
|
self._check_for_unknown_gender()
|
||||||
|
|
||||||
set_birth_death_index(self.db, self.obj)
|
self.db.set_birth_death_index(self.obj)
|
||||||
|
|
||||||
trans = self.db.transaction_begin()
|
trans = self.db.transaction_begin()
|
||||||
|
|
||||||
|
@ -133,7 +133,7 @@ class FamilyModel(FlatBaseModel):
|
|||||||
erlist = [ gen.lib.EventRef().unserialize(d) for d in data[6] ]
|
erlist = [ gen.lib.EventRef().unserialize(d) for d in data[6] ]
|
||||||
erlist = [x for x in erlist if x.get_role()==EventRoleType.FAMILY or
|
erlist = [x for x in erlist if x.get_role()==EventRoleType.FAMILY or
|
||||||
x.get_role()==EventRoleType.PRIMARY]
|
x.get_role()==EventRoleType.PRIMARY]
|
||||||
event = gen.utils.marriage_from_eventref_list(self.db, erlist)
|
event = self.db.marriage_from_eventref_list(erlist)
|
||||||
if event:
|
if event:
|
||||||
return DateHandler.displayer.display(event.date)
|
return DateHandler.displayer.display(event.date)
|
||||||
else:
|
else:
|
||||||
@ -141,7 +141,7 @@ class FamilyModel(FlatBaseModel):
|
|||||||
|
|
||||||
def sort_marriage(self, data):
|
def sort_marriage(self, data):
|
||||||
erlist = [ gen.lib.EventRef().unserialize(d) for d in data[6] ]
|
erlist = [ gen.lib.EventRef().unserialize(d) for d in data[6] ]
|
||||||
event = gen.utils.marriage_from_eventref_list(self.db, erlist)
|
event = self.db.marriage_from_eventref_list(erlist)
|
||||||
if event:
|
if event:
|
||||||
return "%09d" % event.date.get_sort_value()
|
return "%09d" % event.date.get_sort_value()
|
||||||
else:
|
else:
|
||||||
|
@ -54,7 +54,6 @@ from gen.db.txn import GrampsDbTxn as Transaction
|
|||||||
from gen.db.cursor import GrampsCursor
|
from gen.db.cursor import GrampsCursor
|
||||||
from gen.db.dbconst import *
|
from gen.db.dbconst import *
|
||||||
from gen.db.exceptions import GrampsDbVersionError
|
from gen.db.exceptions import GrampsDbVersionError
|
||||||
from gen.utils import db_copy
|
|
||||||
import const
|
import const
|
||||||
from QuestionDialog import ErrorDialog
|
from QuestionDialog import ErrorDialog
|
||||||
from Errors import HandleError
|
from Errors import HandleError
|
||||||
|
@ -40,7 +40,6 @@ from PluginUtils import Tool, MenuToolOptions, PluginWindows
|
|||||||
from ReportBase import ReportUtils
|
from ReportBase import ReportUtils
|
||||||
from gen.plug.menu import FilterOption, PersonOption, \
|
from gen.plug.menu import FilterOption, PersonOption, \
|
||||||
EnumeratedListOption, BooleanOption
|
EnumeratedListOption, BooleanOption
|
||||||
from gen.utils import set_birth_death_index
|
|
||||||
|
|
||||||
#------------------------------------------------------------------------
|
#------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@ -123,7 +122,7 @@ class SortEvents(PluginWindows.ToolManagedWindowBatch):
|
|||||||
if self.fam_events:
|
if self.fam_events:
|
||||||
family_handles.extend(person.get_family_handle_list())
|
family_handles.extend(person.get_family_handle_list())
|
||||||
person.set_event_ref_list(event_ref_list)
|
person.set_event_ref_list(event_ref_list)
|
||||||
set_birth_death_index(self.db, person)
|
self.db.set_birth_death_index(person)
|
||||||
self.db.commit_person(person, trans)
|
self.db.commit_person(person, trans)
|
||||||
self.change = True
|
self.change = True
|
||||||
return family_handles
|
return family_handles
|
||||||
|
@ -207,9 +207,8 @@ class FamilyView(ListView):
|
|||||||
_('_Delete Item'), _('Cancel'))
|
_('_Delete Item'), _('Cancel'))
|
||||||
if q.run():
|
if q.run():
|
||||||
self.uistate.set_busy_cursor(1)
|
self.uistate.set_busy_cursor(1)
|
||||||
import gen.utils
|
|
||||||
for handle in self.selected_handles():
|
for handle in self.selected_handles():
|
||||||
gen.utils.remove_family_relationships(self.dbstate.db, handle)
|
self.dbstate.db.remove_family_relationships(handle)
|
||||||
self.build_tree()
|
self.build_tree()
|
||||||
self.uistate.set_busy_cursor(0)
|
self.uistate.set_busy_cursor(0)
|
||||||
|
|
||||||
|
@ -317,7 +317,7 @@ class PersonView(ListView):
|
|||||||
active_name = _("Delete Person (%s)") % name_displayer.display(person)
|
active_name = _("Delete Person (%s)") % name_displayer.display(person)
|
||||||
|
|
||||||
# delete the person from the database
|
# delete the person from the database
|
||||||
gen.utils.delete_person_from_database(self.dbstate.db, person, trans)
|
self.dbstate.db.delete_person_from_database(person, trans)
|
||||||
|
|
||||||
# remove the person from the list
|
# remove the person from the list
|
||||||
self.remove_from_person_list(person)
|
self.remove_from_person_list(person)
|
||||||
|
@ -58,7 +58,6 @@ import config
|
|||||||
from gui import widgets
|
from gui import widgets
|
||||||
from gui.selectors import SelectorFactory
|
from gui.selectors import SelectorFactory
|
||||||
import Errors
|
import Errors
|
||||||
import gen.utils
|
|
||||||
import Bookmarks
|
import Bookmarks
|
||||||
import const
|
import const
|
||||||
|
|
||||||
@ -1509,10 +1508,7 @@ class RelationshipView(NavigationView):
|
|||||||
active_handle = self.dbstate.active.handle
|
active_handle = self.dbstate.active.handle
|
||||||
child = self.dbstate.db.get_person_from_handle(active_handle)
|
child = self.dbstate.db.get_person_from_handle(active_handle)
|
||||||
|
|
||||||
gen.utils.add_child_to_family(
|
self.dbstate.db.add_child_to_family(family, child)
|
||||||
self.dbstate.db,
|
|
||||||
family,
|
|
||||||
child)
|
|
||||||
|
|
||||||
def select_parents(self, obj):
|
def select_parents(self, obj):
|
||||||
SelectFamily = SelectorFactory('Family')
|
SelectFamily = SelectorFactory('Family')
|
||||||
@ -1529,10 +1525,7 @@ class RelationshipView(NavigationView):
|
|||||||
active_handle = self.dbstate.active.handle
|
active_handle = self.dbstate.active.handle
|
||||||
child = self.dbstate.db.get_person_from_handle(active_handle)
|
child = self.dbstate.db.get_person_from_handle(active_handle)
|
||||||
|
|
||||||
gen.utils.add_child_to_family(
|
self.dbstate.db.add_child_to_family(family, child)
|
||||||
self.dbstate.db,
|
|
||||||
family,
|
|
||||||
child)
|
|
||||||
|
|
||||||
def add_parents(self, obj):
|
def add_parents(self, obj):
|
||||||
family = gen.lib.Family()
|
family = gen.lib.Family()
|
||||||
@ -1566,14 +1559,12 @@ class RelationshipView(NavigationView):
|
|||||||
|
|
||||||
def delete_family(self, obj, event, handle):
|
def delete_family(self, obj, event, handle):
|
||||||
if button_activated(event, _LEFT_BUTTON):
|
if button_activated(event, _LEFT_BUTTON):
|
||||||
gen.utils.remove_parent_from_family(self.dbstate.db,
|
self.dbstate.db.remove_parent_from_family(self.dbstate.active.handle,
|
||||||
self.dbstate.active.handle,
|
|
||||||
handle)
|
handle)
|
||||||
|
|
||||||
def delete_parent_family(self, obj, event, handle):
|
def delete_parent_family(self, obj, event, handle):
|
||||||
if button_activated(event, _LEFT_BUTTON):
|
if button_activated(event, _LEFT_BUTTON):
|
||||||
gen.utils.remove_child_from_family(self.dbstate.db,
|
self.dbstate.db.remove_child_from_family(self.dbstate.active.handle,
|
||||||
self.dbstate.active.handle,
|
|
||||||
handle)
|
handle)
|
||||||
|
|
||||||
def change_to(self, obj, handle):
|
def change_to(self, obj, handle):
|
||||||
|
Loading…
Reference in New Issue
Block a user