from_struct uses defaults from object if not given in JSON-like representation

This commit is contained in:
Doug Blank 2013-11-09 16:59:42 -05:00
parent 564aaf88a7
commit 8980d7be87
35 changed files with 304 additions and 248 deletions

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (PrivacyBase.from_struct(struct["private"]), default = Address()
CitationBase.from_struct(struct["citation_list"]), return (PrivacyBase.from_struct(struct.get("private", default.private)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
DateBase.from_struct(struct["date"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
LocationBase.from_struct(struct["location"]) DateBase.from_struct(struct.get("date", {})),
LocationBase.from_struct(struct.get("location", {}))
) )
def unserialize(self, data): def unserialize(self, data):

View File

@ -107,9 +107,10 @@ class AttributeRoot(SecondaryObject, PrivacyBase):
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (PrivacyBase.from_struct(struct["private"]), default = Attribute()
AttributeType.from_struct(struct["type"]), return (PrivacyBase.from_struct(struct.get("private", default.private)),
struct["value"]) AttributeType.from_struct(struct.get("type", {})),
struct.get("value", default.value))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -4,6 +4,7 @@
# Copyright (C) 2006-2007 Donald N. Allingham # Copyright (C) 2006-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (PrivacyBase.from_struct(struct["private"]), default = ChildRef()
CitationBase.from_struct(struct["citation_list"]), return (PrivacyBase.from_struct(struct.get("private", default.private)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
RefBase.from_struct(struct["ref"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
ChildRefType.from_struct(struct["frel"]), RefBase.from_struct(struct.get("ref", default.ref)),
ChildRefType.from_struct(struct["mrel"])) ChildRefType.from_struct(struct.get("frel", {})),
ChildRefType.from_struct(struct.get("mrel", {})))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -138,18 +138,19 @@ class Citation(MediaBase, NoteBase, SrcAttributeBase, IndirectCitationBase,
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = Citation()
struct["gramps_id"], return (Handle.from_struct(struct.get("handle", default.handle)),
DateBase.from_struct(struct["date"]), struct.get("gramps_id", default.gramps_id),
struct["page"], DateBase.from_struct(struct.get("date", {})),
struct["confidence"], struct.get("page", default.page),
struct["source_handle"].handle, struct.get("confidence", default.confidence),
NoteBase.from_struct(struct["note_list"]), Handle.from_struct(struct.get("source_handle", default.source_handle)),
MediaBase.from_struct(struct["media_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
SrcAttributeBase.from_struct(struct["srcattr_list"]), MediaBase.from_struct(struct.get("media_list", default.media_list)),
struct["change"], SrcAttributeBase.from_struct(struct.get("srcattr_list", [])),
TagBase.from_struct(struct["tag_list"]), struct.get("change", default.change),
struct["private"]) TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -105,7 +105,7 @@ class CitationBase(object):
:returns: Returns a serialized 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): def unserialize(self, data):
""" """

View File

@ -2,7 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2007 Donald N. Allingham # 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 # Copyright (C) 2013 Paul Franklin
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
@ -686,13 +686,14 @@ class Date(object):
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
retval = (struct["calendar"], default = Date()
struct["modifier"], retval = (struct.get("calendar", default.calendar),
struct["quality"], struct.get("modifier", default.modifier),
struct["dateval"], struct.get("quality", default.quality),
struct["text"], struct.get("dateval", default.dateval),
struct["sortval"], struct.get("text", default.text),
struct["newyear"]) struct.get("sortval", default.sortval),
struct.get("newyear", default.newyear))
if retval == (0, 0, 0, (0, 0, 0, False), '', 0, 0): if retval == (0, 0, 0, (0, 0, 0, False), '', 0, 0):
return None return None
else: else:

View File

@ -160,20 +160,20 @@ class Event(CitationBase, NoteBase, MediaBase, AttributeBase,
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
from .grampstype import GrampsType default = Event()
return (struct["handle"].handle, return (Handle.from_struct(struct.get("handle", default.handle)),
struct["gramps_id"], struct.get("gramps_id", default.gramps_id),
EventType.from_struct(struct["type"]), EventType.from_struct(struct.get("type", {})),
DateBase.from_struct(struct["date"]), DateBase.from_struct(struct.get("date", {})),
struct["description"], struct.get("description", default.description),
struct["place"].handle, Handle.from_struct(struct.get("place", default.place)),
CitationBase.from_struct(struct["citation_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
NoteBase.from_struct(struct["note_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
MediaBase.from_struct(struct["media_list"]), MediaBase.from_struct(struct.get("media_list", default.media_list)),
AttributeBase.from_struct(struct["attribute_list"]), AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)),
struct["change"], struct.get("change", default.change),
TagBase.from_struct(struct["tag_list"]), TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct["private"]) struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
default = EventRef()
return ( return (
PrivacyBase.from_struct(struct["private"]), PrivacyBase.from_struct(struct.get("private", default.private)),
NoteBase.from_struct(struct["note_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
AttributeBase.from_struct(struct["attribute_list"]), AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)),
RefBase.from_struct(struct["ref"]), RefBase.from_struct(struct.get("ref", default.ref)),
EventRoleType.from_struct(struct["role"]) EventRoleType.from_struct(struct.get("role", {}))
) )
def unserialize(self, data): def unserialize(self, data):

View File

@ -171,21 +171,22 @@ class Family(CitationBase, NoteBase, MediaBase, AttributeBase, LdsOrdBase,
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = Family()
struct["gramps_id"], return (Handle.from_struct(struct.get("handle", default.handle)),
struct["father_handle"].handle, struct.get("gramps_id", default.gramps_id),
struct["mother_handle"].handle, Handle.from_struct(struct.get("father_handle", default.father_handle)),
[ChildRef.from_struct(cr) for cr in struct["child_ref_list"]], Handle.from_struct(struct.get("mother_handle", default.mother_handle)),
FamilyRelType.from_struct(struct["type"]), [ChildRef.from_struct(cr) for cr in struct.get("child_ref_list", default.child_ref_list)],
[EventRef.from_struct(er) for er in struct["event_ref_list"]], FamilyRelType.from_struct(struct.get("type", {})),
MediaBase.from_struct(struct["media_list"]), [EventRef.from_struct(er) for er in struct.get("event_ref_list", default.event_ref_list)],
AttributeBase.from_struct(struct["attribute_list"]), MediaBase.from_struct(struct.get("media_list", default.media_list)),
LdsOrdBase.from_struct(struct["lds_ord_list"]), AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)),
CitationBase.from_struct(struct["citation_list"]), LdsOrdBase.from_struct(struct.get("lds_ord_list", default.lds_ord_list)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
struct["change"], NoteBase.from_struct(struct.get("note_list", default.note_list)),
TagBase.from_struct(struct["tag_list"]), struct.get("change", default.change),
struct["private"]) TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -241,10 +241,11 @@ class GrampsType(GrampsTypeC):
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
if struct["value"] == cls._CUSTOM: default = cls()
return (struct["value"], struct["string"]) if struct.get("value", cls._CUSTOM) == cls._CUSTOM:
return (struct.get("value", default.value), struct.get("string", ""))
else: else:
return (struct["value"], '') return (struct.get("value", default.value), '')
def unserialize(self, data): def unserialize(self, data):
"""Convert a serialized tuple of data to an object.""" """Convert a serialized tuple of data to an object."""

View File

@ -39,3 +39,9 @@ class Handle:
else: else:
return "None" return "None"
@classmethod
def from_struct(cls, struct):
if isinstance(struct, Handle):
return struct.handle
else:
return struct

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (CitationBase.from_struct(struct["citation_list"]), default = LdsOrd()
NoteBase.from_struct(struct["note_list"]), return (CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
DateBase.from_struct(struct["date"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
struct["type"], DateBase.from_struct(struct.get("date", {})),
struct["place"], struct.get("type", {}),
struct["famc"], struct.get("place", default.place),
struct["temple"], struct.get("famc", default.famc),
struct["status"], struct.get("temple", default.temple),
struct["private"]) struct.get("status", default.status),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -3,6 +3,7 @@
# #
# Copyright (C) 2000-2006 Donald N. Allingham # Copyright (C) 2000-2006 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return ((struct["street"], default = Location()
struct["locality"], return ((struct.get("street", default.street),
struct["city"], struct.get("locality", default.locality),
struct["country"], struct.get("city", default.city),
struct["state"], struct.get("country", default.country),
struct["country"], struct.get("state", default.state),
struct["postal"], struct.get("country", default.country),
struct["phone"]), struct.get("postal", default.postal),
struct["parish"]) struct.get("phone", default.phone)),
struct.get("parish", default.parish))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -104,14 +104,15 @@ class LocationBase(object):
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (struct["street"], default = LocationBase()
struct["locality"], return (struct.get("street", default.street),
struct["city"], struct.get("locality", default.locality),
struct["county"], struct.get("city", default.city),
struct["state"], struct.get("county", default.county),
struct["country"], struct.get("state", default.state),
struct["postal"], struct.get("country", default.country),
struct["phone"]) struct.get("postal", default.postal),
struct.get("phone", default.phone))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -164,19 +164,20 @@ class MediaObject(CitationBase, NoteBase, DateBase, AttributeBase,
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = MediaObject()
struct["gramps_id"], return (Handle.from_struct(struct.get("handle", default.handle)),
struct["path"], struct.get("gramps_id", default.gramps_id),
struct["mime"], struct.get("path", default.path),
struct["desc"], struct.get("mime", default.mime),
struct["checksum"], struct.get("desc", default.desc),
AttributeBase.from_struct(struct["attribute_list"]), struct.get("checksum", default.checksum),
CitationBase.from_struct(struct["citation_list"]), AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
struct["change"], NoteBase.from_struct(struct.get("note_list", default.note_list)),
DateBase.from_struct(struct["date"]), struct.get("change", default.change),
TagBase.from_struct(struct["tag_list"]), DateBase.from_struct(struct.get("date", {})),
struct["private"]) TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (PrivacyBase.from_struct(struct["private"]), default = MediaRef()
CitationBase.from_struct(struct["citation_list"]), return (PrivacyBase.from_struct(struct.get("private", default.private)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
AttributeBase.from_struct(struct["attribute_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
RefBase.from_struct(struct["ref"]), AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)),
struct["rect"]) RefBase.from_struct(struct.get("ref", default.ref)),
struct.get("rect", default.rect))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (PrivacyBase.from_struct(struct["private"]), default = Name()
CitationBase.from_struct(struct["citation_list"]), return (PrivacyBase.from_struct(struct.get("private", default.private)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
DateBase.from_struct(struct["date"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
struct["first_name"], DateBase.from_struct(struct.get("date", {})),
SurnameBase.from_struct(struct["surname_list"]), struct.get("first_name", default.first_name),
struct["suffix"], SurnameBase.from_struct(struct.get("surname_list", default.surname_list)),
struct["title"], struct.get("suffix", default.suffix),
NameType.from_struct(struct["type"]), struct.get("title", default.title),
struct["group_as"], NameType.from_struct(struct.get("type", {})),
struct["sort_as"], struct.get("group_as", default.group_as),
struct["display_as"], struct.get("sort_as", default.sort_as),
struct["call"], struct.get("display_as", default.display_as),
struct["nick"], struct.get("call", default.call),
struct["famnick"]) struct.get("nick", default.nick),
struct.get("famnick", default.famnick))
def is_empty(self): def is_empty(self):
""" """

View File

@ -135,14 +135,15 @@ class Note(BasicPrimaryObject):
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = Note()
struct["gramps_id"], return (Handle.from_struct(struct.get("handle", default.handle)),
StyledText.from_struct(struct["text"]), struct.get("gramps_id", default.gramps_id),
struct["format"], StyledText.from_struct(struct.get("text", {})),
NoteType.from_struct(struct["type"]), struct.get("format", default.format),
struct["change"], NoteType.from_struct(struct.get("type", {})),
TagBase.from_struct(struct["tag_list"]), struct.get("change", default.change),
struct["private"]) TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
"""Convert a serialized tuple of data to an object. """Convert a serialized tuple of data to an object.

View File

@ -84,7 +84,7 @@ class NoteBase(object):
:returns: Returns a serialized 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): def unserialize(self, data):
""" """

View File

@ -218,28 +218,29 @@ class Person(CitationBase, NoteBase, AttributeBase, MediaBase,
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
default = Person()
return ( return (
struct["handle"].handle, Handle.from_struct(struct.get("handle", default.handle)),
struct["gramps_id"], struct.get("gramps_id", default.gramps_id),
struct["gender"], struct.get("gender", default.gender),
Name.from_struct(struct["primary_name"]), Name.from_struct(struct.get("primary_name", {})),
[Name.from_struct(name) for name in struct["alternate_names"]], [Name.from_struct(name) for name in struct.get("alternate_names", default.alternate_names)],
struct["death_ref_index"], struct.get("death_ref_index", default.death_ref_index),
struct["birth_ref_index"], struct.get("birth_ref_index", default.birth_ref_index),
[EventRef.from_struct(er) for er in struct["event_ref_list"]], [EventRef.from_struct(er) for er in struct.get("event_ref_list", default.event_ref_list)],
[handle.handle for handle in struct["family_list"]], [Handle.from_struct(handle) for handle in struct.get("family_list", default.family_list)],
[handle.handle for handle in struct["parent_family_list"]], [Handle.from_struct(handle) for handle in struct.get("parent_family_list", default.parent_family_list)],
MediaBase.from_struct(struct["media_list"]), MediaBase.from_struct(struct.get("media_list", default.media_list)),
AddressBase.from_struct(struct["address_list"]), AddressBase.from_struct(struct.get("address_list", default.address_list)),
AttributeBase.from_struct(struct["attribute_list"]), AttributeBase.from_struct(struct.get("attribute_list", default.attribute_list)),
UrlBase.from_struct(struct["urls"]), UrlBase.from_struct(struct.get("urls", default.urls)),
LdsOrdBase.from_struct(struct["lds_ord_list"]), LdsOrdBase.from_struct(struct.get("lds_ord_list", default.lds_ord_list)),
CitationBase.from_struct(struct["citation_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
NoteBase.from_struct(struct["note_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
struct["change"], struct.get("change", default.change),
TagBase.from_struct(struct["tag_list"]), TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct["private"], struct.get("private", default.private),
[PersonRef.from_struct(p) for p in struct["person_ref_list"]] [PersonRef.from_struct(p) for p in struct.get("person_ref_list", default.person_ref_list)]
) )
def unserialize(self, data): def unserialize(self, data):

View File

@ -4,6 +4,7 @@
# Copyright (C) 2006-2007 Donald N. Allingham # Copyright (C) 2006-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (PrivacyBase.from_struct(struct["private"]), default = PersonRef()
CitationBase.from_struct(struct["citation_list"]), return (PrivacyBase.from_struct(struct.get("private", default.private)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
RefBase.from_struct(struct["ref"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
struct["rel"]) RefBase.from_struct(struct.get("ref", default.ref)),
struct.get("rel", default.rel))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = Place()
struct["gramps_id"], return (Handle.from_struct(struct.get("handle", default.handle)),
struct["title"], struct.get("gramps_id", default.gramps_id),
struct["long"], struct.get("title", default.title),
struct["lat"], struct.get("long", default.long),
[PlaceRef.from_struct(pr) for pr in struct["placeref_list"]], struct.get("lat", default.lat),
struct["name"], [PlaceRef.from_struct(pr) for pr in struct.get("placeref_list", default.placeref_list)],
PlaceType.from_struct(struct["place_type"]), struct.get("name", default.name),
struct["code"], PlaceType.from_struct(struct.get("place_type", {})),
[Location.from_struct(al) for al in struct["alt_loc"]], struct.get("code", default.code),
UrlBase.from_struct(struct["urls"]), [Location.from_struct(al) for al in struct.get("alt_loc", default.alt_loc)],
MediaBase.from_struct(struct["media_list"]), UrlBase.from_struct(struct.get("urls", default.urls)),
CitationBase.from_struct(struct["citation_list"]), MediaBase.from_struct(struct.get("media_list", default.media_list)),
NoteBase.from_struct(struct["note_list"]), CitationBase.from_struct(struct.get("citation_list", default.citation_list)),
struct["change"], NoteBase.from_struct(struct.get("note_list", default.note_list)),
TagBase.from_struct(struct["tag_list"]), struct.get("change", default.change),
struct["private"]) TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -96,9 +96,10 @@ class PlaceRef(RefBase, DateBase, SecondaryObject):
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
default = PlaceRef()
return ( return (
RefBase.from_struct(struct["ref"]), RefBase.from_struct(struct.get("ref", default.ref)),
DateBase.from_struct(struct["date"]) DateBase.from_struct(struct.get("date", {}))
) )
def unserialize(self, data): def unserialize(self, data):

View File

@ -110,16 +110,17 @@ class Repository(NoteBase, AddressBase, UrlBase,
:returns: Returns a serialized object :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = Repository()
struct["gramps_id"], return (Handle.from_struct(struct.get("handle", default.handle)),
RepositoryType.from_struct(struct["type"]), struct.get("gramps_id", default.gramps_id),
struct["name"], RepositoryType.from_struct(struct.get("type", {})),
NoteBase.from_struct(struct["note_list"]), struct.get("name", default.name),
AddressBase.from_struct(struct["address_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
UrlBase.from_struct(struct["urls"]), AddressBase.from_struct(struct.get("address_list", default.address_list)),
struct["change"], UrlBase.from_struct(struct.get("urls", default.urls)),
TagBase.from_struct(struct["tag_list"]), struct.get("change", default.change),
struct["private"]) TagBase.from_struct(struct.get("tag_list", default.tag_list)),
struct.get("private", default.private))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -3,6 +3,7 @@
# #
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
default = RepoRef()
return ( return (
NoteBase.from_struct(struct["note_list"]), NoteBase.from_struct(struct.get("note_list", default.note_list)),
RefBase.from_struct(struct["ref"]), RefBase.from_struct(struct.get("ref", default.ref)),
struct["call_number"], struct.get("call_number", default.call_number),
SourceMediaType.from_struct(struct["media_type"]), SourceMediaType.from_struct(struct.get("media_type", {})),
struct["private"], struct.get("private", default.private),
) )
def unserialize(self, data): def unserialize(self, data):

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (struct["street"], default = Researcher()
struct["locality"], return (struct.get("street", default.street),
struct["city"], struct.get("locality", default.locality),
struct["country"], struct.get("city", default.city),
struct["state"], struct.get("country", default.country),
struct["country"], struct.get("state", default.state),
struct["postal"], struct.get("country", default.country),
struct["phone"], struct.get("postal", default.postal),
struct["name"], struct.get("phone", default.phone),
struct["address"], struct.get("name", default.name),
struct["email"]) struct.get("address", default.address),
struct.get("email", default.email))
def unserialize(self, data): def unserialize(self, data):
""" """

View File

@ -4,6 +4,7 @@
# Copyright (C) 2000-2007 Donald N. Allingham # Copyright (C) 2000-2007 Donald N. Allingham
# Copyright (C) 2010 Michiel D. Nauta # Copyright (C) 2010 Michiel D. Nauta
# Copyright (C) 2011 Tim G L Lyons # Copyright (C) 2011 Tim G L Lyons
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (struct["handle"].handle, from .srcattribute import SrcAttribute
struct["gramps_id"], default = Source()
struct["title"], return (Handle.from_struct(struct.get("handle", default.handle)),
struct["author"], struct.get("gramps_id", default.gramps_id),
struct["pubinfo"], struct.get("title", default.title),
NoteBase.from_struct(struct["note_list"]), struct.get("author", default.author),
MediaBase.from_struct(struct["media_list"]), struct.get("pubinfo", default.pubinfo),
struct["abbrev"], NoteBase.from_struct(struct.get("note_list", default.note_list)),
struct["change"], MediaBase.from_struct(struct.get("media_list", default.media_list)),
SrcAttributeBase.from_struct(struct["srcattr_list"]), struct.get("abbrev", default.abbrev),
[RepoRef.from_struct(rr) for rr in struct["reporef_list"]], struct.get("change", default.change),
TagBase.from_struct(struct["tag_list"]), SrcAttributeBase.from_struct(struct.get("srcattr_list", {})),
struct["private"]) [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): def unserialize(self, data):
""" """

View File

@ -1,7 +1,8 @@
# #
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2008 Zsolt Foldvari # Copyright (C) 2008 Zsolt Foldvari
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :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): def unserialize(self, data):
"""Convert a serialized tuple of data to an object. """Convert a serialized tuple of data to an object.

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2008 Zsolt Foldvari # Copyright (C) 2008 Zsolt Foldvari
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (StyledTextTagType.from_struct(struct["name"]), default = StyledTextTag()
struct["value"], return (StyledTextTagType.from_struct(struct.get("name", {})),
struct["ranges"]) struct.get("value", default.value),
struct.get("ranges", default.ranges))
def unserialize(self, data): def unserialize(self, data):
"""Convert a serialized tuple of data to an object. """Convert a serialized tuple of data to an object.

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2010 Benny Malengier # Copyright (C) 2010 Benny Malengier
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (struct["surname"], default = Surname()
struct["prefix"], return (struct.get("surname", default.surname),
struct["primary"], struct.get("prefix", default.prefix),
NameOriginType.from_struct(struct["origintype"]), struct.get("primary", default.primary),
struct["connector"]) NameOriginType.from_struct(struct.get("origintype", {})),
struct.get("connector", default.connector))
def is_empty(self): def is_empty(self):
""" """

View File

@ -1,7 +1,8 @@
# #
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2010 Nick Hall # Copyright (C) 2010 Nick Hall
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # it under the terms of the GNU General Public License as published by

View File

@ -1,7 +1,8 @@
# #
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2010 Nick Hall # Copyright (C) 2010 Nick Hall
# Copyright (C) 2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (struct["handle"].handle, default = Tag()
struct["name"], return (Handle.from_struct(struct.get("handle", default.handle)),
struct["color"], struct.get("name", default.name),
struct["priority"], struct.get("color", default.color),
struct["change"]) struct.get("priority", default.priority),
struct.get("change", default.change))
priority = property(get_priority, set_priority, None, priority = property(get_priority, set_priority, None,
'Returns or sets priority of the tag') 'Returns or sets priority of the tag')

View File

@ -86,7 +86,7 @@ class TagBase(object):
:returns: Returns a serialized 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): def unserialize(self, data):
""" """

View File

@ -33,6 +33,10 @@ class BaseCheck:
serialized = self.cls.from_struct(struct) serialized = self.cls.from_struct(struct)
self.assertEqual(self.object.serialize(), serialized) 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): class PersonCheck(unittest.TestCase, BaseCheck):
def setUp(self): def setUp(self):
self.cls = Person self.cls = Person

View File

@ -2,7 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2006 Donald N. Allingham # Copyright (C) 2000-2006 Donald N. Allingham
# Copyright (C) 2009 Douglas S. Blank <doug.blank@gmail.com> # Copyright (C) 2009-2013 Doug Blank <doug.blank@gmail.com>
# #
# This program is free software; you can redistribute it and/or modify # 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 # 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 :returns: Returns a serialized object
""" """
return (struct["private"], default = Url()
struct["path"], return (struct.get("private", default.private),
struct["desc"], struct.get("path", default.path),
UrlType.from_struct(struct["type"])) struct.get("desc", default.desc),
UrlType.from_struct(struct.get("type", {})))
def unserialize(self, data): def unserialize(self, data):
(self.private, self.path, self.desc, type_value) = data (self.private, self.path, self.desc, type_value) = data