From ea61bf0d650ccf2f4e4d094359a35d11f8be5f01 Mon Sep 17 00:00:00 2001 From: Brian Matherly Date: Sun, 26 Aug 2007 04:46:33 +0000 Subject: [PATCH] Various changes to PrivateProxyDb and ProxyDbBase. svn: r8871 --- ChangeLog | 4 + src/GrampsDbUtils/_PrivateProxyDb.py | 85 ++++- src/GrampsDbUtils/_ProxyDbBase.py | 516 +-------------------------- 3 files changed, 96 insertions(+), 509 deletions(-) diff --git a/ChangeLog b/ChangeLog index e9162511b..973cc0728 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-08-25 Brian Matherly + * src/GrampsDbUtils/_PrivateProxyDb.py: Various changes + * src/GrampsDbUtils/_ProxyDbBase.py: Various changes + 2007-08-25 Don Allingham * src/Config/_GrampsIniKeys.py (get): handle "" case * src/GrampsDb/__init__.py: Add DbBase diff --git a/src/GrampsDbUtils/_PrivateProxyDb.py b/src/GrampsDbUtils/_PrivateProxyDb.py index 31460bf09..176f1c731 100644 --- a/src/GrampsDbUtils/_PrivateProxyDb.py +++ b/src/GrampsDbUtils/_PrivateProxyDb.py @@ -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): """ diff --git a/src/GrampsDbUtils/_ProxyDbBase.py b/src/GrampsDbUtils/_ProxyDbBase.py index d0e33ca9d..238164d68 100644 --- a/src/GrampsDbUtils/_ProxyDbBase.py +++ b/src/GrampsDbUtils/_ProxyDbBase.py @@ -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.