Various changes to PrivateProxyDb and ProxyDbBase.

svn: r8871
This commit is contained in:
Brian Matherly 2007-08-26 04:46:33 +00:00
parent 173ae91f8a
commit ea61bf0d65
3 changed files with 96 additions and 509 deletions

View File

@ -1,3 +1,7 @@
2007-08-25 Brian Matherly <brian@gramps-project.org>
* src/GrampsDbUtils/_PrivateProxyDb.py: Various changes
* src/GrampsDbUtils/_ProxyDbBase.py: Various changes
2007-08-25 Don Allingham <don@gramps-project.org>
* src/Config/_GrampsIniKeys.py (get): handle "" case
* src/GrampsDb/__init__.py: Add DbBase

View File

@ -122,7 +122,10 @@ class PrivateProxyDb(ProxyDbBase):
Finds a Note in the database from the passed gramps' ID.
If no such Note exists, None is returned.
"""
return self.db.get_note_from_handle(handle)
note = self.db.get_note_from_handle(handle)
if note and note.get_privacy() == False:
return note
return None
def get_person_from_gramps_id(self, val):
"""
@ -321,6 +324,86 @@ class PrivateProxyDb(ProxyDbBase):
if person and person.get_privacy() == False:
return handle
return None
def has_person_handle(self, handle):
"""
returns True if the handle exists in the current Person database.
"""
has_person = False
person = self.db.get_person_from_handle()
if person and not person.get_privacy():
has_person = True
return has_person
def has_event_handle(self, handle):
"""
returns True if the handle exists in the current Event database.
"""
has_event = False
event = self.db.get_event_from_handle()
if event and not event.get_privacy():
has_event = True
return has_event
def has_source_handle(self, handle):
"""
returns True if the handle exists in the current Source database.
"""
has_source = False
source = self.db.get_source_from_handle()
if source and not source.get_privacy():
has_source = True
return has_source
def has_place_handle(self, handle):
"""
returns True if the handle exists in the current Place database.
"""
has_place = False
place = self.db.get_place_from_handle()
if place and not place.get_privacy():
has_place = True
return has_place
def has_family_handle(self, handle):
"""
returns True if the handle exists in the current Family database.
"""
has_family = False
family = self.db.get_family_from_handle()
if family and not family.get_privacy():
has_family = True
return has_family
def has_object_handle(self, handle):
"""
returns True if the handle exists in the current MediaObjectdatabase.
"""
has_object = False
object = self.db.get_object_from_handle()
if object and not object.get_privacy():
has_object = True
return has_object
def has_repository_handle(self, handle):
"""
returns True if the handle exists in the current Repository database.
"""
has_repository = False
repository = self.db.get_repository_from_handle()
if repository and not repository.get_privacy():
has_repository = True
return has_repository
def has_note_handle(self, handle):
"""
returns True if the handle exists in the current Note database.
"""
has_note = False
note = self.db.get_note_from_handle()
if note and not note.get_privacy():
has_note = True
return has_note
def find_backlink_handles(self, handle, include_classes=None):
"""

View File

@ -53,13 +53,6 @@ class ProxyDbBase(DbBase):
"""
return self.db.is_open
def get_note_from_handle(self, handle):
"""
Finds a Note in the database from the passed gramps' ID.
If no such Note exists, None is returned.
"""
return self.db.get_note_from_handle(handle)
def get_name_group_mapping(self, name):
"""
Returns the default grouping name for a surname
@ -221,49 +214,49 @@ class ProxyDbBase(DbBase):
"""
returns True if the handle exists in the current Person database.
"""
return self.db.has_person_handle(handle)
raise NotImplementedError
def has_event_handle(self, handle):
"""
returns True if the handle exists in the current Event database.
"""
return self.db.has_event_handle(handle)
raise NotImplementedError
def has_source_handle(self, handle):
"""
returns True if the handle exists in the current Source database.
"""
return self.db.has_source_handle(handle)
raise NotImplementedError
def has_place_handle(self, handle):
"""
returns True if the handle exists in the current Place database.
"""
return self.db.has_place_handle(handle)
raise NotImplementedError
def has_family_handle(self, handle):
"""
returns True if the handle exists in the current Family database.
"""
return self.db.has_family_handle(handle)
raise NotImplementedError
def has_object_handle(self, handle):
"""
returns True if the handle exists in the current MediaObjectdatabase.
"""
return self.dbhas_object_handle(handle)
raise NotImplementedError
def has_repository_handle(self, handle):
"""
returns True if the handle exists in the current Repository database.
"""
return self.db.has_repository_handle(handle)
raise NotImplementedError
def has_note_handle(self, handle):
"""
returns True if the handle exists in the current Note database.
"""
return self.db.has_note_handle(handle)
raise NotImplementedError
def set_column_order(self, col_list, name):
raise NotImplementedError
@ -434,497 +427,4 @@ class ProxyDbBase(DbBase):
> result_list = [i for i in find_backlink_handles(handle)]
"""
raise NotImplementedError
# This isn't done yet because it doesn't check if references are
# private (like a SourceRef or MediaRef). It only checks if the
# referenced object is private.
handle_itr = self.db.find_backlink_handles(handle, include_classes)
for (class_name, handle) in handle_itr:
if class_name == 'Person':
obj = self.db.get_person_from_handle(handle)
elif class_name == 'Family':
obj = self.db.get_family_from_handle(handle)
elif class_name == 'Event':
obj = self.db.get_event_from_handle(handle)
elif class_name == 'Source':
obj = self.db.get_source_from_handle(handle)
elif class_name == 'Place':
obj = self.db.get_place_from_handle(handle)
elif class_name == 'MediaObject':
obj = self.db.get_object_from_handle(handle)
elif class_name == 'Note':
obj = self.db.get_note_from_handle(handle)
elif class_name == 'Repository':
obj = self.db.get_repository_from_handle(handle)
else:
raise NotImplementedError
if obj.get_privacy() == False:
yield (class_name,handle)
return
def copy_media_ref_list(db,original_obj,clean_obj):
"""
Copies media references from one object to another - excluding private
references and references to private objects.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have private references
@type original_obj: MediaBase
@param clean_obj: Object that will have only non-private references
@type original_obj: MediaBase
@returns: Nothing
"""
for media_ref in original_obj.get_media_list():
if media_ref.get_privacy() == False:
handle = media_ref.get_reference_handle()
media_object = db.get_object_from_handle(handle)
if media_object.get_privacy() == False:
clean_obj.add_media_reference(MediaRef(media_ref))
def copy_source_ref_list(db,original_obj,clean_obj):
"""
Copies source references from one object to another - excluding private
references and references to private objects.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have private references
@type original_obj: SourceBase
@param clean_obj: Object that will have only non-private references
@type original_obj: SourceBase
@returns: Nothing
"""
for ref in original_obj.get_source_references():
if not ref.get_privacy():
handle = ref.get_reference_handle()
source = db.get_source_from_handle(handle)
if source.get_privacy() == False:
clean_obj.add_source_reference(SourceRef(ref))
def copy_notes(db,original_obj,clean_obj):
"""
Copies notes from one object to another - excluding references to private
notes.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have private references
@type original_obj: NoteBase
@param clean_obj: Object that will have only non-private references
@type original_obj: NoteBase
@returns: Nothing
"""
for note_handle in original_obj.get_note_list():
note = db.get_note_from_handle(note_handle)
if note.get_privacy() == False:
clean_obj.add_note(note_handle)
def copy_attributes(db,original_obj,clean_obj):
"""
Copies attributes from one object to another - excluding references to
private attributes.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have private references
@type original_obj: AttributeBase
@param clean_obj: Object that will have only non-private references
@type original_obj: AttributeBase
@returns: Nothing
"""
for attribute in original_obj.get_attribute_list():
if not attribute.get_privacy():
new_attribute = Attribute()
new_attribute.set_type(attribute.get_type())
new_attribute.set_value(attribute.get_value())
copy_notes(db,attribute,new_attribute)
copy_source_ref_list(db,attribute,new_attribute)
clean_obj.add_attribute(new_attribute)
def copy_urls(db,original_obj,clean_obj):
"""
Copies urls from one object to another - excluding references to
private urls.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have urls
@type original_obj: UrlBase
@param clean_obj: Object that will have only non-private urls
@type original_obj: UrlBase
@returns: Nothing
"""
for url in original_obj.get_url_list():
if not url.get_privacy():
clean_obj.add_url(url)
def copy_lds_ords(db,original_obj,clean_obj):
"""
Copies LDS ORDs from one object to another - excluding references to
private LDS ORDs.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have LDS ORDs
@type original_obj: LdsOrdBase
@param clean_obj: Object that will have only non-private LDS ORDs
@type original_obj: LdsOrdBase
@returns: Nothing
"""
for lds_ord in original_obj.get_lds_ord_list():
if lds_ord.get_privacy() == False:
clean_obj.add_lds_ord( lds_ord )
def copy_addresses(db,original_obj,clean_obj):
"""
Copies addresses from one object to another - excluding references to
private addresses.
@param db: GRAMPS database to which the references belongs
@type db: GrampsDbBase
@param original_obj: Object that may have addresses
@type original_obj: AddressBase
@param clean_obj: Object that will have only non-private addresses
@type original_obj: AddressBase
@returns: Nothing
"""
for address in original_obj.get_address_list():
if not address.get_privacy():
clean_obj.add_address(Address(address))
def sanitize_name(db,name):
"""
Creates a new Name instance based off the passed Name
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param name: source Name object that will be copied with
privacy records removed
@type name: Name
@returns: 'cleansed' Name object
@rtype: Name
"""
new_name = Name()
new_name.set_group_as(name.get_group_as())
new_name.set_sort_as(name.get_sort_as())
new_name.set_display_as(name.get_display_as())
new_name.set_call_name(name.get_call_name())
new_name.set_surname_prefix(name.get_surname_prefix())
new_name.set_type(name.get_type())
new_name.set_first_name(name.get_first_name())
new_name.set_patronymic(name.get_patronymic())
new_name.set_surname(name.get_surname())
new_name.set_suffix(name.get_suffix())
new_name.set_title(name.get_title())
new_name.set_date_object(name.get_date_object())
copy_source_ref_list(db,name,new_name)
copy_notes(db,name,new_name)
return new_name
def sanitize_event_ref(db,event_ref):
"""
Creates a new EventRef instance based off the passed EventRef
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param event_ref: source EventRef object that will be copied with
privacy records removed
@type event_ref: EventRef
@returns: 'cleansed' EventRef object
@rtype: EventRef
"""
new_ref = EventRef()
new_ref.set_reference_handle(event_ref.get_reference_handle())
new_ref.set_role(event_ref.get_role())
copy_notes(db,event_ref,new_ref)
copy_attributes(db,event_ref,new_ref)
return new_ref
def sanitize_person(db,person):
"""
Creates a new Person instance based off the passed Person
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param person: source Person object that will be copied with
privacy records removed
@type person: Person
@returns: 'cleansed' Person object
@rtype: Person
"""
new_person = Person()
# copy gender
new_person.set_gender(person.get_gender())
new_person.set_gramps_id(person.get_gramps_id())
new_person.set_handle(person.get_handle())
# copy names if not private
name = person.get_primary_name()
if name.get_privacy() or person.get_privacy():
# Do this so a person always has a primary name of some sort.
name = Name()
name.set_surname(_('Private'))
else:
name = sanitize_name(db,name)
new_person.set_primary_name(name)
# copy Family reference list
for handle in person.get_family_handle_list():
family = db.get_family_from_handle(handle)
if family.get_privacy() == False:
new_person.add_family_handle(handle)
# copy Family reference list
for handle in person.get_parent_family_handle_list():
family = db.get_family_from_handle(handle)
if family.get_privacy() == True:
continue
child_ref_list = family.get_child_ref_list()
for child_ref in child_ref_list:
if child_ref.get_reference_handle() == person.get_handle():
if child_ref.get_privacy() == False:
new_person.add_parent_family_handle(handle)
break
for name in person.get_alternate_names():
if not name.get_privacy():
new_person.add_alternate_name(sanitize_name(db,name))
# set complete flag
new_person.set_marker(person.get_marker())
# copy event list
for event_ref in person.get_event_ref_list():
if event_ref and event_ref.get_privacy() == False:
event = db.get_event_from_handle(event_ref.ref)
if not event.get_privacy():
new_person.add_event_ref(sanitize_event_ref(db,event_ref))
# Copy birth and death after event list to maintain the order.
# copy birth event
event_ref = person.get_birth_ref()
if event_ref and event_ref.get_privacy() == False:
event = db.get_event_from_handle(event_ref.ref)
if not event.get_privacy():
new_person.set_birth_ref(sanitize_event_ref(db,event_ref))
# copy death event
event_ref = person.get_death_ref()
if event_ref and event_ref.get_privacy() == False:
event = db.get_event_from_handle(event_ref.ref)
if not event.get_privacy():
new_person.set_death_ref(sanitize_event_ref(db,event_ref))
copy_addresses(db,person,new_person)
copy_attributes(db,person,new_person)
copy_source_ref_list(db,person,new_person)
copy_urls(db,person,new_person)
copy_media_ref_list(db,person,new_person)
copy_lds_ords(db,person,new_person)
copy_notes(db,person,new_person)
return new_person
def sanitize_source(db,source):
"""
Creates a new Source instance based off the passed Source
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param source: source Source object that will be copied with
privacy records removed
@type source: Source
@returns: 'cleansed' Source object
@rtype: Source
"""
new_source = Source()
new_source.set_author(source.get_author())
new_source.set_title(source.get_title())
new_source.set_publication_info(source.get_publication_info())
new_source.set_abbreviation(source.get_abbreviation())
new_source.set_gramps_id(source.get_gramps_id())
new_source.set_handle(source.get_handle())
new_source.set_marker(source.get_marker())
new_source.set_data_map(source.get_data_map())
for repo_ref in source.get_reporef_list():
if not repo_ref.get_privacy():
handle = repo_ref.get_reference_handle()
repo = db.get_repository_from_handle(handle)
if repo.get_privacy() == False:
new_source.add_repo_reference(RepoRef(repo_ref))
copy_media_ref_list(db,source,new_source)
copy_notes(db,source,new_source)
return new_source
def sanitize_media(db,media):
"""
Creates a new MediaObject instance based off the passed Media
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param media: source Media object that will be copied with
privacy records removed
@type media: MediaObject
@returns: 'cleansed' Media object
@rtype: MediaObject
"""
new_media = MediaObject()
new_media.set_mime_type(media.get_mime_type())
new_media.set_path(media.get_path())
new_media.set_description(media.get_description())
new_media.set_gramps_id(media.get_gramps_id())
new_media.set_handle(media.get_handle())
new_media.set_date_object(media.get_date_object())
new_media.set_marker(media.get_marker())
copy_source_ref_list(db,media,new_media)
copy_attributes(db,media,new_media)
copy_notes(db,media,new_media)
return new_media
def sanitize_place(db,place):
"""
Creates a new Place instance based off the passed Place
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param place: source Place object that will be copied with
privacy records removed
@type place: Place
@returns: 'cleansed' Place object
@rtype: Place
"""
new_place = Place()
new_place.set_title(place.get_title())
new_place.set_gramps_id(place.get_gramps_id())
new_place.set_handle(place.get_handle())
new_place.set_longitude(place.get_longitude())
new_place.set_latitude(place.get_latitude())
new_place.set_main_location(place.get_main_location())
new_place.set_alternate_locations(place.get_alternate_locations())
new_place.set_marker(place.get_marker())
copy_source_ref_list(db,place,new_place)
copy_notes(db,place,new_place)
copy_media_ref_list(db,place,new_place)
copy_urls(db,place,new_place)
return new_place
def sanitize_event(db,event):
"""
Creates a new Event instance based off the passed Event
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param event: source Event object that will be copied with
privacy records removed
@type event: Event
@returns: 'cleansed' Event object
@rtype: Event
"""
new_event = Event()
new_event.set_type(event.get_type())
new_event.set_description(event.get_description())
new_event.set_gramps_id(event.get_gramps_id())
new_event.set_handle(event.get_handle())
new_event.set_date_object(event.get_date_object())
new_event.set_marker(event.get_marker())
copy_source_ref_list(db,event,new_event)
copy_notes(db,event,new_event)
copy_media_ref_list(db,event,new_event)
copy_attributes(db,event,new_event)
place_handle = event.get_place_handle()
place = db.get_place_from_handle(place_handle)
if place and place.get_privacy() == False:
new_event.set_place_handle(place_handle)
return new_event
def sanitize_family(db,family):
"""
Creates a new Family instance based off the passed Family
instance. The returned instance has all private records
removed from it.
@param db: GRAMPS database to which the Person object belongs
@type db: GrampsDbBase
@param family: source Family object that will be copied with
privacy records removed
@type family: Family
@returns: 'cleansed' Family object
@rtype: Family
"""
new_family = Family()
new_family.set_gramps_id(family.get_gramps_id())
new_family.set_handle(family.get_handle())
new_family.set_marker(family.get_marker())
new_family.set_relationship(family.get_relationship())
# Copy the father handle.
father_handle = family.get_father_handle()
if father_handle:
father = db.get_person_from_handle(father_handle)
if father.get_privacy() == False:
new_family.set_father_handle(father_handle)
# Copy the mother handle.
mother_handle = family.get_mother_handle()
if mother_handle:
mother = db.get_person_from_handle(mother_handle)
if mother.get_privacy() == False:
new_family.set_mother_handle(mother_handle)
# Copy child references.
for child_ref in family.get_child_ref_list():
if child_ref.get_privacy() == True:
continue
child_handle = child_ref.get_reference_handle()
child = db.get_person_from_handle(child_handle)
if child.get_privacy() == True:
continue
# Copy this reference
new_ref = ChildRef()
new_ref.set_reference_handle(child_ref.get_reference_handle())
new_ref.set_father_relation(child_ref.get_father_relation())
new_ref.set_mother_relation(child_ref.get_mother_relation())
copy_notes(db,child_ref,new_ref)
copy_source_ref_list(db,child_ref,new_ref)
new_family.add_child_ref(new_ref)
# Copy event ref list.