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) 2010 Michiel D. Nauta
# 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
# 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):

View File

@ -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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -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):
"""

View File

@ -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):
"""

View File

@ -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:

View File

@ -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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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):

View File

@ -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):
"""

View File

@ -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."""

View File

@ -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

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -3,6 +3,7 @@
#
# Copyright (C) 2000-2006 Donald N. Allingham
# 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
# 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):
"""

View File

@ -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):
"""

View File

@ -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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -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.

View File

@ -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):
"""

View File

@ -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):

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -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):

View File

@ -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):
"""

View File

@ -3,6 +3,7 @@
#
# Copyright (C) 2000-2007 Donald N. Allingham
# 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
# 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):

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# 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
# 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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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.

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# 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
# 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.

View File

@ -2,6 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# 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
# 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):
"""

View File

@ -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 <doug.blank@gmail.com>
#
# 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

View File

@ -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 <doug.blank@gmail.com>
#
# 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')

View File

@ -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):
"""

View File

@ -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

View File

@ -2,7 +2,7 @@
# Gramps - a GTK+/GNOME based genealogy program
#
# 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
# 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