diff --git a/gramps/gen/lib/address.py b/gramps/gen/lib/address.py index 0b21a0a05..352e4a5de 100644 --- a/gramps/gen/lib/address.py +++ b/gramps/gen/lib/address.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -102,11 +103,12 @@ class Address(SecondaryObject, PrivacyBase, CitationBase, NoteBase, DateBase, :returns: Returns a serialized object """ - return (PrivacyBase.from_struct(struct["private"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - DateBase.from_struct(struct["date"]), - LocationBase.from_struct(struct["location"]) + default = Address() + return (PrivacyBase.from_struct(struct.get("private", default.private)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + DateBase.from_struct(struct.get("date", {})), + LocationBase.from_struct(struct.get("location", {})) ) def unserialize(self, data): diff --git a/gramps/gen/lib/attribute.py b/gramps/gen/lib/attribute.py index ad1ba05ca..c6c16139b 100644 --- a/gramps/gen/lib/attribute.py +++ b/gramps/gen/lib/attribute.py @@ -107,9 +107,10 @@ class AttributeRoot(SecondaryObject, PrivacyBase): :returns: Returns a serialized object """ - return (PrivacyBase.from_struct(struct["private"]), - AttributeType.from_struct(struct["type"]), - struct["value"]) + default = Attribute() + return (PrivacyBase.from_struct(struct.get("private", default.private)), + AttributeType.from_struct(struct.get("type", {})), + struct.get("value", default.value)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/childref.py b/gramps/gen/lib/childref.py index 4c1e0d880..7fa8ed36f 100644 --- a/gramps/gen/lib/childref.py +++ b/gramps/gen/lib/childref.py @@ -4,6 +4,7 @@ # Copyright (C) 2006-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -109,12 +110,13 @@ class ChildRef(SecondaryObject, PrivacyBase, CitationBase, NoteBase, RefBase): :returns: Returns a serialized object """ - return (PrivacyBase.from_struct(struct["private"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - RefBase.from_struct(struct["ref"]), - ChildRefType.from_struct(struct["frel"]), - ChildRefType.from_struct(struct["mrel"])) + default = ChildRef() + return (PrivacyBase.from_struct(struct.get("private", default.private)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + RefBase.from_struct(struct.get("ref", default.ref)), + ChildRefType.from_struct(struct.get("frel", {})), + ChildRefType.from_struct(struct.get("mrel", {}))) def unserialize(self, data): """ diff --git a/gramps/gen/lib/citation.py b/gramps/gen/lib/citation.py index b7b9a4433..10afd66b1 100644 --- a/gramps/gen/lib/citation.py +++ b/gramps/gen/lib/citation.py @@ -138,18 +138,19 @@ class Citation(MediaBase, NoteBase, SrcAttributeBase, IndirectCitationBase, :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - DateBase.from_struct(struct["date"]), - struct["page"], - struct["confidence"], - struct["source_handle"].handle, - NoteBase.from_struct(struct["note_list"]), - MediaBase.from_struct(struct["media_list"]), - SrcAttributeBase.from_struct(struct["srcattr_list"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = Citation() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + DateBase.from_struct(struct.get("date", {})), + struct.get("page", default.page), + struct.get("confidence", default.confidence), + Handle.from_struct(struct.get("source_handle", default.source_handle)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + MediaBase.from_struct(struct.get("media_list", default.media_list)), + SrcAttributeBase.from_struct(struct.get("srcattr_list", [])), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/citationbase.py b/gramps/gen/lib/citationbase.py index ea997f3a7..577a96c27 100644 --- a/gramps/gen/lib/citationbase.py +++ b/gramps/gen/lib/citationbase.py @@ -105,7 +105,7 @@ class CitationBase(object): :returns: Returns a serialized object """ - return [handle.handle for handle in struct] + return [Handle.from_struct(handle) for handle in struct] def unserialize(self, data): """ diff --git a/gramps/gen/lib/date.py b/gramps/gen/lib/date.py index f9097ff86..9cf39b63e 100644 --- a/gramps/gen/lib/date.py +++ b/gramps/gen/lib/date.py @@ -2,7 +2,7 @@ # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2000-2007 Donald N. Allingham -# Copyright (C) 2009 Douglas S. Blank +# Copyright (C) 2009-2013 Douglas S. Blank # Copyright (C) 2013 Paul Franklin # # This program is free software; you can redistribute it and/or modify @@ -686,13 +686,14 @@ class Date(object): :returns: Returns a serialized object """ - retval = (struct["calendar"], - struct["modifier"], - struct["quality"], - struct["dateval"], - struct["text"], - struct["sortval"], - struct["newyear"]) + default = Date() + retval = (struct.get("calendar", default.calendar), + struct.get("modifier", default.modifier), + struct.get("quality", default.quality), + struct.get("dateval", default.dateval), + struct.get("text", default.text), + struct.get("sortval", default.sortval), + struct.get("newyear", default.newyear)) if retval == (0, 0, 0, (0, 0, 0, False), '', 0, 0): return None else: diff --git a/gramps/gen/lib/event.py b/gramps/gen/lib/event.py index 74b521d2f..42dded428 100644 --- a/gramps/gen/lib/event.py +++ b/gramps/gen/lib/event.py @@ -160,20 +160,20 @@ class Event(CitationBase, NoteBase, MediaBase, AttributeBase, :returns: Returns a serialized object """ - from .grampstype import GrampsType - return (struct["handle"].handle, - struct["gramps_id"], - EventType.from_struct(struct["type"]), - DateBase.from_struct(struct["date"]), - struct["description"], - struct["place"].handle, - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - MediaBase.from_struct(struct["media_list"]), - AttributeBase.from_struct(struct["attribute_list"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = Event() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + EventType.from_struct(struct.get("type", {})), + DateBase.from_struct(struct.get("date", {})), + struct.get("description", default.description), + Handle.from_struct(struct.get("place", default.place)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + MediaBase.from_struct(struct.get("media_list", default.media_list)), + AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/eventref.py b/gramps/gen/lib/eventref.py index 004590728..4cb71e8df 100644 --- a/gramps/gen/lib/eventref.py +++ b/gramps/gen/lib/eventref.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -114,12 +115,13 @@ class EventRef(PrivacyBase, NoteBase, AttributeBase, RefBase, :returns: Returns a serialized object """ + default = EventRef() return ( - PrivacyBase.from_struct(struct["private"]), - NoteBase.from_struct(struct["note_list"]), - AttributeBase.from_struct(struct["attribute_list"]), - RefBase.from_struct(struct["ref"]), - EventRoleType.from_struct(struct["role"]) + PrivacyBase.from_struct(struct.get("private", default.private)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)), + RefBase.from_struct(struct.get("ref", default.ref)), + EventRoleType.from_struct(struct.get("role", {})) ) def unserialize(self, data): diff --git a/gramps/gen/lib/family.py b/gramps/gen/lib/family.py index 1dc7af866..4fd3e46d4 100644 --- a/gramps/gen/lib/family.py +++ b/gramps/gen/lib/family.py @@ -171,21 +171,22 @@ class Family(CitationBase, NoteBase, MediaBase, AttributeBase, LdsOrdBase, :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - struct["father_handle"].handle, - struct["mother_handle"].handle, - [ChildRef.from_struct(cr) for cr in struct["child_ref_list"]], - FamilyRelType.from_struct(struct["type"]), - [EventRef.from_struct(er) for er in struct["event_ref_list"]], - MediaBase.from_struct(struct["media_list"]), - AttributeBase.from_struct(struct["attribute_list"]), - LdsOrdBase.from_struct(struct["lds_ord_list"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = Family() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + Handle.from_struct(struct.get("father_handle", default.father_handle)), + Handle.from_struct(struct.get("mother_handle", default.mother_handle)), + [ChildRef.from_struct(cr) for cr in struct.get("child_ref_list", default.child_ref_list)], + FamilyRelType.from_struct(struct.get("type", {})), + [EventRef.from_struct(er) for er in struct.get("event_ref_list", default.event_ref_list)], + MediaBase.from_struct(struct.get("media_list", default.media_list)), + AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)), + LdsOrdBase.from_struct(struct.get("lds_ord_list", default.lds_ord_list)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/grampstype.py b/gramps/gen/lib/grampstype.py index f5e8d33a4..c911deb4d 100644 --- a/gramps/gen/lib/grampstype.py +++ b/gramps/gen/lib/grampstype.py @@ -241,10 +241,11 @@ class GrampsType(GrampsTypeC): :returns: Returns a serialized object """ - if struct["value"] == cls._CUSTOM: - return (struct["value"], struct["string"]) + default = cls() + if struct.get("value", cls._CUSTOM) == cls._CUSTOM: + return (struct.get("value", default.value), struct.get("string", "")) else: - return (struct["value"], '') + return (struct.get("value", default.value), '') def unserialize(self, data): """Convert a serialized tuple of data to an object.""" diff --git a/gramps/gen/lib/handle.py b/gramps/gen/lib/handle.py index 455471323..d6d2c3fc7 100644 --- a/gramps/gen/lib/handle.py +++ b/gramps/gen/lib/handle.py @@ -39,3 +39,9 @@ class Handle: else: return "None" + @classmethod + def from_struct(cls, struct): + if isinstance(struct, Handle): + return struct.handle + else: + return struct diff --git a/gramps/gen/lib/ldsord.py b/gramps/gen/lib/ldsord.py index 76989836a..1edfba9ae 100644 --- a/gramps/gen/lib/ldsord.py +++ b/gramps/gen/lib/ldsord.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -182,15 +183,16 @@ class LdsOrd(SecondaryObject, CitationBase, NoteBase, :returns: Returns a serialized object """ - return (CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - DateBase.from_struct(struct["date"]), - struct["type"], - struct["place"], - struct["famc"], - struct["temple"], - struct["status"], - struct["private"]) + default = LdsOrd() + return (CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + DateBase.from_struct(struct.get("date", {})), + struct.get("type", {}), + struct.get("place", default.place), + struct.get("famc", default.famc), + struct.get("temple", default.temple), + struct.get("status", default.status), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/location.py b/gramps/gen/lib/location.py index 236c7ac2d..1aca25e7f 100644 --- a/gramps/gen/lib/location.py +++ b/gramps/gen/lib/location.py @@ -3,6 +3,7 @@ # # Copyright (C) 2000-2006 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta +# Copyright (C) 2013 Doug Blank # # 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 @@ -101,15 +102,16 @@ class Location(SecondaryObject, LocationBase): :returns: Returns a serialized object """ - return ((struct["street"], - struct["locality"], - struct["city"], - struct["country"], - struct["state"], - struct["country"], - struct["postal"], - struct["phone"]), - struct["parish"]) + default = Location() + return ((struct.get("street", default.street), + struct.get("locality", default.locality), + struct.get("city", default.city), + struct.get("country", default.country), + struct.get("state", default.state), + struct.get("country", default.country), + struct.get("postal", default.postal), + struct.get("phone", default.phone)), + struct.get("parish", default.parish)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/locationbase.py b/gramps/gen/lib/locationbase.py index 2836d5afb..8b61adbb7 100644 --- a/gramps/gen/lib/locationbase.py +++ b/gramps/gen/lib/locationbase.py @@ -104,14 +104,15 @@ class LocationBase(object): :returns: Returns a serialized object """ - return (struct["street"], - struct["locality"], - struct["city"], - struct["county"], - struct["state"], - struct["country"], - struct["postal"], - struct["phone"]) + default = LocationBase() + return (struct.get("street", default.street), + struct.get("locality", default.locality), + struct.get("city", default.city), + struct.get("county", default.county), + struct.get("state", default.state), + struct.get("country", default.country), + struct.get("postal", default.postal), + struct.get("phone", default.phone)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/mediaobj.py b/gramps/gen/lib/mediaobj.py index c3832b2c7..c3179f373 100644 --- a/gramps/gen/lib/mediaobj.py +++ b/gramps/gen/lib/mediaobj.py @@ -164,19 +164,20 @@ class MediaObject(CitationBase, NoteBase, DateBase, AttributeBase, :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - struct["path"], - struct["mime"], - struct["desc"], - struct["checksum"], - AttributeBase.from_struct(struct["attribute_list"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - struct["change"], - DateBase.from_struct(struct["date"]), - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = MediaObject() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + struct.get("path", default.path), + struct.get("mime", default.mime), + struct.get("desc", default.desc), + struct.get("checksum", default.checksum), + AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + struct.get("change", default.change), + DateBase.from_struct(struct.get("date", {})), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/mediaref.py b/gramps/gen/lib/mediaref.py index 6e13e39bd..a448b7baf 100644 --- a/gramps/gen/lib/mediaref.py +++ b/gramps/gen/lib/mediaref.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -104,12 +105,13 @@ class MediaRef(SecondaryObject, PrivacyBase, CitationBase, NoteBase, RefBase, :returns: Returns a serialized object """ - return (PrivacyBase.from_struct(struct["private"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - AttributeBase.from_struct(struct["attribute_list"]), - RefBase.from_struct(struct["ref"]), - struct["rect"]) + default = MediaRef() + return (PrivacyBase.from_struct(struct.get("private", default.private)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)), + RefBase.from_struct(struct.get("ref", default.ref)), + struct.get("rect", default.rect)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/name.py b/gramps/gen/lib/name.py index 9004e4cfd..47af5fa2d 100644 --- a/gramps/gen/lib/name.py +++ b/gramps/gen/lib/name.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -169,21 +170,22 @@ class Name(SecondaryObject, PrivacyBase, SurnameBase, CitationBase, NoteBase, :returns: Returns a serialized object """ - return (PrivacyBase.from_struct(struct["private"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - DateBase.from_struct(struct["date"]), - struct["first_name"], - SurnameBase.from_struct(struct["surname_list"]), - struct["suffix"], - struct["title"], - NameType.from_struct(struct["type"]), - struct["group_as"], - struct["sort_as"], - struct["display_as"], - struct["call"], - struct["nick"], - struct["famnick"]) + default = Name() + return (PrivacyBase.from_struct(struct.get("private", default.private)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + DateBase.from_struct(struct.get("date", {})), + struct.get("first_name", default.first_name), + SurnameBase.from_struct(struct.get("surname_list", default.surname_list)), + struct.get("suffix", default.suffix), + struct.get("title", default.title), + NameType.from_struct(struct.get("type", {})), + struct.get("group_as", default.group_as), + struct.get("sort_as", default.sort_as), + struct.get("display_as", default.display_as), + struct.get("call", default.call), + struct.get("nick", default.nick), + struct.get("famnick", default.famnick)) def is_empty(self): """ diff --git a/gramps/gen/lib/note.py b/gramps/gen/lib/note.py index b27a7707b..053dce846 100644 --- a/gramps/gen/lib/note.py +++ b/gramps/gen/lib/note.py @@ -135,14 +135,15 @@ class Note(BasicPrimaryObject): :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - StyledText.from_struct(struct["text"]), - struct["format"], - NoteType.from_struct(struct["type"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = Note() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + StyledText.from_struct(struct.get("text", {})), + struct.get("format", default.format), + NoteType.from_struct(struct.get("type", {})), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """Convert a serialized tuple of data to an object. diff --git a/gramps/gen/lib/notebase.py b/gramps/gen/lib/notebase.py index 92a0fd1d4..a70116e9e 100644 --- a/gramps/gen/lib/notebase.py +++ b/gramps/gen/lib/notebase.py @@ -84,7 +84,7 @@ class NoteBase(object): :returns: Returns a serialized object """ - return [n.handle for n in struct] + return [Handle.from_struct(n) for n in struct] def unserialize(self, data): """ diff --git a/gramps/gen/lib/person.py b/gramps/gen/lib/person.py index 85f588ed8..883aec285 100644 --- a/gramps/gen/lib/person.py +++ b/gramps/gen/lib/person.py @@ -218,28 +218,29 @@ class Person(CitationBase, NoteBase, AttributeBase, MediaBase, :returns: Returns a serialized object """ + default = Person() return ( - struct["handle"].handle, - struct["gramps_id"], - struct["gender"], - Name.from_struct(struct["primary_name"]), - [Name.from_struct(name) for name in struct["alternate_names"]], - struct["death_ref_index"], - struct["birth_ref_index"], - [EventRef.from_struct(er) for er in struct["event_ref_list"]], - [handle.handle for handle in struct["family_list"]], - [handle.handle for handle in struct["parent_family_list"]], - MediaBase.from_struct(struct["media_list"]), - AddressBase.from_struct(struct["address_list"]), - AttributeBase.from_struct(struct["attribute_list"]), - UrlBase.from_struct(struct["urls"]), - LdsOrdBase.from_struct(struct["lds_ord_list"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"], - [PersonRef.from_struct(p) for p in struct["person_ref_list"]] + Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + struct.get("gender", default.gender), + Name.from_struct(struct.get("primary_name", {})), + [Name.from_struct(name) for name in struct.get("alternate_names", default.alternate_names)], + struct.get("death_ref_index", default.death_ref_index), + struct.get("birth_ref_index", default.birth_ref_index), + [EventRef.from_struct(er) for er in struct.get("event_ref_list", default.event_ref_list)], + [Handle.from_struct(handle) for handle in struct.get("family_list", default.family_list)], + [Handle.from_struct(handle) for handle in struct.get("parent_family_list", default.parent_family_list)], + MediaBase.from_struct(struct.get("media_list", default.media_list)), + AddressBase.from_struct(struct.get("address_list", default.address_list)), + AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)), + UrlBase.from_struct(struct.get("urls", default.urls)), + LdsOrdBase.from_struct(struct.get("lds_ord_list", default.lds_ord_list)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private), + [PersonRef.from_struct(p) for p in struct.get("person_ref_list", default.person_ref_list)] ) def unserialize(self, data): diff --git a/gramps/gen/lib/personref.py b/gramps/gen/lib/personref.py index cccb7fe8a..f600ba249 100644 --- a/gramps/gen/lib/personref.py +++ b/gramps/gen/lib/personref.py @@ -4,6 +4,7 @@ # Copyright (C) 2006-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -105,11 +106,12 @@ class PersonRef(SecondaryObject, PrivacyBase, CitationBase, NoteBase, RefBase): :returns: Returns a serialized object """ - return (PrivacyBase.from_struct(struct["private"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - RefBase.from_struct(struct["ref"]), - struct["rel"]) + default = PersonRef() + return (PrivacyBase.from_struct(struct.get("private", default.private)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + RefBase.from_struct(struct.get("ref", default.ref)), + struct.get("rel", default.rel)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/place.py b/gramps/gen/lib/place.py index 24a6d96ca..c51580d90 100644 --- a/gramps/gen/lib/place.py +++ b/gramps/gen/lib/place.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -159,23 +160,24 @@ class Place(CitationBase, NoteBase, MediaBase, UrlBase, PrimaryObject): :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - struct["title"], - struct["long"], - struct["lat"], - [PlaceRef.from_struct(pr) for pr in struct["placeref_list"]], - struct["name"], - PlaceType.from_struct(struct["place_type"]), - struct["code"], - [Location.from_struct(al) for al in struct["alt_loc"]], - UrlBase.from_struct(struct["urls"]), - MediaBase.from_struct(struct["media_list"]), - CitationBase.from_struct(struct["citation_list"]), - NoteBase.from_struct(struct["note_list"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = Place() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + struct.get("title", default.title), + struct.get("long", default.long), + struct.get("lat", default.lat), + [PlaceRef.from_struct(pr) for pr in struct.get("placeref_list", default.placeref_list)], + struct.get("name", default.name), + PlaceType.from_struct(struct.get("place_type", {})), + struct.get("code", default.code), + [Location.from_struct(al) for al in struct.get("alt_loc", default.alt_loc)], + UrlBase.from_struct(struct.get("urls", default.urls)), + MediaBase.from_struct(struct.get("media_list", default.media_list)), + CitationBase.from_struct(struct.get("citation_list", default.citation_list)), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/placeref.py b/gramps/gen/lib/placeref.py index f1d1848b1..a9ec9cd97 100644 --- a/gramps/gen/lib/placeref.py +++ b/gramps/gen/lib/placeref.py @@ -96,9 +96,10 @@ class PlaceRef(RefBase, DateBase, SecondaryObject): :returns: Returns a serialized object """ + default = PlaceRef() return ( - RefBase.from_struct(struct["ref"]), - DateBase.from_struct(struct["date"]) + RefBase.from_struct(struct.get("ref", default.ref)), + DateBase.from_struct(struct.get("date", {})) ) def unserialize(self, data): diff --git a/gramps/gen/lib/repo.py b/gramps/gen/lib/repo.py index d20900839..89f830ee0 100644 --- a/gramps/gen/lib/repo.py +++ b/gramps/gen/lib/repo.py @@ -110,16 +110,17 @@ class Repository(NoteBase, AddressBase, UrlBase, :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - RepositoryType.from_struct(struct["type"]), - struct["name"], - NoteBase.from_struct(struct["note_list"]), - AddressBase.from_struct(struct["address_list"]), - UrlBase.from_struct(struct["urls"]), - struct["change"], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + default = Repository() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + RepositoryType.from_struct(struct.get("type", {})), + struct.get("name", default.name), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + AddressBase.from_struct(struct.get("address_list", default.address_list)), + UrlBase.from_struct(struct.get("urls", default.urls)), + struct.get("change", default.change), + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/reporef.py b/gramps/gen/lib/reporef.py index 2a9a91eb2..035ed07e6 100644 --- a/gramps/gen/lib/reporef.py +++ b/gramps/gen/lib/reporef.py @@ -3,6 +3,7 @@ # # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta +# Copyright (C) 2013 Doug Blank # # 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 @@ -104,12 +105,13 @@ class RepoRef(SecondaryObject, PrivacyBase, NoteBase, RefBase): :returns: Returns a serialized object """ + default = RepoRef() return ( - NoteBase.from_struct(struct["note_list"]), - RefBase.from_struct(struct["ref"]), - struct["call_number"], - SourceMediaType.from_struct(struct["media_type"]), - struct["private"], + NoteBase.from_struct(struct.get("note_list", default.note_list)), + RefBase.from_struct(struct.get("ref", default.ref)), + struct.get("call_number", default.call_number), + SourceMediaType.from_struct(struct.get("media_type", {})), + struct.get("private", default.private), ) def unserialize(self, data): diff --git a/gramps/gen/lib/researcher.py b/gramps/gen/lib/researcher.py index 948f5e759..720d541fb 100644 --- a/gramps/gen/lib/researcher.py +++ b/gramps/gen/lib/researcher.py @@ -2,6 +2,7 @@ # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2000-2007 Donald N. Allingham +# Copyright (C) 2013 Doug Blank # # 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 @@ -100,17 +101,18 @@ class Researcher(LocationBase): :returns: Returns a serialized object """ - return (struct["street"], - struct["locality"], - struct["city"], - struct["country"], - struct["state"], - struct["country"], - struct["postal"], - struct["phone"], - struct["name"], - struct["address"], - struct["email"]) + default = Researcher() + return (struct.get("street", default.street), + struct.get("locality", default.locality), + struct.get("city", default.city), + struct.get("country", default.country), + struct.get("state", default.state), + struct.get("country", default.country), + struct.get("postal", default.postal), + struct.get("phone", default.phone), + struct.get("name", default.name), + struct.get("address", default.address), + struct.get("email", default.email)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/src.py b/gramps/gen/lib/src.py index 8e17e2318..1c02b28f3 100644 --- a/gramps/gen/lib/src.py +++ b/gramps/gen/lib/src.py @@ -4,6 +4,7 @@ # Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2011 Tim G L Lyons +# Copyright (C) 2013 Doug Blank # # 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 @@ -122,19 +123,21 @@ class Source(MediaBase, NoteBase, SrcAttributeBase, IndirectCitationBase, :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["gramps_id"], - struct["title"], - struct["author"], - struct["pubinfo"], - NoteBase.from_struct(struct["note_list"]), - MediaBase.from_struct(struct["media_list"]), - struct["abbrev"], - struct["change"], - SrcAttributeBase.from_struct(struct["srcattr_list"]), - [RepoRef.from_struct(rr) for rr in struct["reporef_list"]], - TagBase.from_struct(struct["tag_list"]), - struct["private"]) + from .srcattribute import SrcAttribute + default = Source() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("gramps_id", default.gramps_id), + struct.get("title", default.title), + struct.get("author", default.author), + struct.get("pubinfo", default.pubinfo), + NoteBase.from_struct(struct.get("note_list", default.note_list)), + MediaBase.from_struct(struct.get("media_list", default.media_list)), + struct.get("abbrev", default.abbrev), + struct.get("change", default.change), + SrcAttributeBase.from_struct(struct.get("srcattr_list", {})), + [RepoRef.from_struct(rr) for rr in struct.get("reporef_list", default.reporef_list)], + TagBase.from_struct(struct.get("tag_list", default.tag_list)), + struct.get("private", default.private)) def unserialize(self, data): """ diff --git a/gramps/gen/lib/styledtext.py b/gramps/gen/lib/styledtext.py index a40ca335f..12293aee8 100644 --- a/gramps/gen/lib/styledtext.py +++ b/gramps/gen/lib/styledtext.py @@ -1,7 +1,8 @@ # # Gramps - a GTK+/GNOME based genealogy program # -# Copyright (C) 2008 Zsolt Foldvari +# Copyright (C) 2008 Zsolt Foldvari +# Copyright (C) 2013 Doug Blank # # 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 @@ -322,7 +323,8 @@ class StyledText(object): :returns: Returns a serialized object """ - return (struct["string"], [StyledTextTag.from_struct(t) for t in struct["tags"]]) + default = StyledText() + return (struct.get("string", default.string), [StyledTextTag.from_struct(t) for t in struct.get("tags", default.tags)]) def unserialize(self, data): """Convert a serialized tuple of data to an object. diff --git a/gramps/gen/lib/styledtexttag.py b/gramps/gen/lib/styledtexttag.py index df157e5b6..5d81263cc 100644 --- a/gramps/gen/lib/styledtexttag.py +++ b/gramps/gen/lib/styledtexttag.py @@ -2,6 +2,7 @@ # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2008 Zsolt Foldvari +# Copyright (C) 2013 Doug Blank # # 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 @@ -104,9 +105,10 @@ class StyledTextTag(object): :returns: Returns a serialized object """ - return (StyledTextTagType.from_struct(struct["name"]), - struct["value"], - struct["ranges"]) + default = StyledTextTag() + return (StyledTextTagType.from_struct(struct.get("name", {})), + struct.get("value", default.value), + struct.get("ranges", default.ranges)) def unserialize(self, data): """Convert a serialized tuple of data to an object. diff --git a/gramps/gen/lib/surname.py b/gramps/gen/lib/surname.py index 9119dff89..529a79a64 100644 --- a/gramps/gen/lib/surname.py +++ b/gramps/gen/lib/surname.py @@ -2,6 +2,7 @@ # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2010 Benny Malengier +# Copyright (C) 2013 Doug Blank # # 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 @@ -104,11 +105,12 @@ class Surname(SecondaryObject): :returns: Returns a serialized object """ - return (struct["surname"], - struct["prefix"], - struct["primary"], - NameOriginType.from_struct(struct["origintype"]), - struct["connector"]) + default = Surname() + return (struct.get("surname", default.surname), + struct.get("prefix", default.prefix), + struct.get("primary", default.primary), + NameOriginType.from_struct(struct.get("origintype", {})), + struct.get("connector", default.connector)) def is_empty(self): """ diff --git a/gramps/gen/lib/tableobj.py b/gramps/gen/lib/tableobj.py index 6f67225ab..3eae632ca 100644 --- a/gramps/gen/lib/tableobj.py +++ b/gramps/gen/lib/tableobj.py @@ -1,7 +1,8 @@ # # Gramps - a GTK+/GNOME based genealogy program # -# Copyright (C) 2010 Nick Hall +# Copyright (C) 2010 Nick Hall +# Copyright (C) 2013 Doug Blank # # 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 diff --git a/gramps/gen/lib/tag.py b/gramps/gen/lib/tag.py index 4d9be74d8..0bf7a1450 100644 --- a/gramps/gen/lib/tag.py +++ b/gramps/gen/lib/tag.py @@ -1,7 +1,8 @@ # # Gramps - a GTK+/GNOME based genealogy program # -# Copyright (C) 2010 Nick Hall +# Copyright (C) 2010 Nick Hall +# Copyright (C) 2013 Doug Blank # # 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 @@ -233,11 +234,12 @@ class Tag(TableObject): :returns: Returns a serialized object """ - return (struct["handle"].handle, - struct["name"], - struct["color"], - struct["priority"], - struct["change"]) + default = Tag() + return (Handle.from_struct(struct.get("handle", default.handle)), + struct.get("name", default.name), + struct.get("color", default.color), + struct.get("priority", default.priority), + struct.get("change", default.change)) priority = property(get_priority, set_priority, None, 'Returns or sets priority of the tag') diff --git a/gramps/gen/lib/tagbase.py b/gramps/gen/lib/tagbase.py index 3ac62d6c7..eb0f4af7d 100644 --- a/gramps/gen/lib/tagbase.py +++ b/gramps/gen/lib/tagbase.py @@ -86,7 +86,7 @@ class TagBase(object): :returns: Returns a serialized object """ - return [t.handle for t in struct] + return [Handle.from_struct(t) for t in struct] def unserialize(self, data): """ diff --git a/gramps/gen/lib/test/struct_test.py b/gramps/gen/lib/test/struct_test.py index de60a2521..fbe726d83 100644 --- a/gramps/gen/lib/test/struct_test.py +++ b/gramps/gen/lib/test/struct_test.py @@ -33,6 +33,10 @@ class BaseCheck: serialized = self.cls.from_struct(struct) self.assertEqual(self.object.serialize(), serialized) + def test_from_empty_struct(self): + serialized = self.cls.from_struct({}) + self.assertEqual(self.object.serialize(), serialized) + class PersonCheck(unittest.TestCase, BaseCheck): def setUp(self): self.cls = Person diff --git a/gramps/gen/lib/url.py b/gramps/gen/lib/url.py index dffe1a523..44bb7a20c 100644 --- a/gramps/gen/lib/url.py +++ b/gramps/gen/lib/url.py @@ -2,7 +2,7 @@ # Gramps - a GTK+/GNOME based genealogy program # # Copyright (C) 2000-2006 Donald N. Allingham -# Copyright (C) 2009 Douglas S. Blank +# Copyright (C) 2009-2013 Doug Blank # # 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 @@ -105,10 +105,11 @@ class Url(SecondaryObject, PrivacyBase): :returns: Returns a serialized object """ - return (struct["private"], - struct["path"], - struct["desc"], - UrlType.from_struct(struct["type"])) + default = Url() + return (struct.get("private", default.private), + struct.get("path", default.path), + struct.get("desc", default.desc), + UrlType.from_struct(struct.get("type", {}))) def unserialize(self, data): (self.private, self.path, self.desc, type_value) = data