7482: Fix python3 problems with new place structure

Based on patches by Marc Hulsman.
This commit is contained in:
Nick Hall 2014-02-25 21:55:06 +00:00
parent 8dd6d92184
commit c364bcd7ad
5 changed files with 14 additions and 10 deletions

View File

@ -215,10 +215,12 @@ class DbBsddbTreeCursor(BsddbBaseCursor):
""" """
Iterator Iterator
""" """
to_do = [''] _n = self.next_dup
to_do = [b'']
while to_do: while to_do:
data = self.set(str(to_do.pop())) key = to_do.pop()
_n = self.next_dup key = key.encode('utf-8') if not isinstance(key, bytes) else key
data = self.set(key)
while data: while data:
payload = pickle.loads(data[1]) payload = pickle.loads(data[1])
yield (payload[0], payload) yield (payload[0], payload)

View File

@ -38,7 +38,7 @@ LOG = logging.getLogger(".citation")
from ..const import GRAMPS_LOCALE as glocale from ..const import GRAMPS_LOCALE as glocale
_ = glocale.translation.gettext _ = glocale.translation.gettext
from ..constfunc import cuni, UNITYPE from ..constfunc import cuni, UNITYPE, handle2internal
""" """
methods to upgrade a database from version 13 to current version methods to upgrade a database from version 13 to current version
@ -138,7 +138,7 @@ def gramps_upgrade_17(self):
if parent_handle is not None: if parent_handle is not None:
placeref = PlaceRef() placeref = PlaceRef()
placeref.ref = parent_handle placeref.ref = handle2internal(parent_handle)
placeref_list = [placeref.serialize()] placeref_list = [placeref.serialize()]
else: else:
placeref_list = [] placeref_list = []
@ -274,7 +274,7 @@ def add_place(self, name, level, parent, title):
place.set_type(PlaceType(7-level)) place.set_type(PlaceType(7-level))
if parent is not None: if parent is not None:
placeref = PlaceRef() placeref = PlaceRef()
placeref.ref = parent placeref.ref = handle2internal(parent)
place.set_placeref_list([placeref]) place.set_placeref_list([placeref])
with BSDDBTxn(self.env, self.place_map) as txn: with BSDDBTxn(self.env, self.place_map) as txn:
if isinstance(handle, UNITYPE): if isinstance(handle, UNITYPE):

View File

@ -1096,7 +1096,8 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
""" """
Find all child places having the given place as the primary parent. Find all child places having the given place as the primary parent.
""" """
handle = str(handle) if isinstance(handle, UNITYPE):
handle = handle.encode('utf-8')
parent_cur = self.get_place_parent_cursor() parent_cur = self.get_place_parent_cursor()
try: try:

View File

@ -61,7 +61,7 @@ class RefBase(object):
""" """
Convert a serialized tuple of data to an object. Convert a serialized tuple of data to an object.
""" """
self.ref = str(data) self.ref = data
return self return self
def get_referenced_handles(self): def get_referenced_handles(self):

View File

@ -30,6 +30,7 @@ Helper class for importing places.
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
from gramps.gen.lib import Place, PlaceType, PlaceRef from gramps.gen.lib import Place, PlaceType, PlaceRef
from gramps.gen.constfunc import handle2internal
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #
@ -89,7 +90,7 @@ class PlaceImport(object):
if parent: if parent:
place = self.db.get_place_from_handle(handle) place = self.db.get_place_from_handle(handle)
placeref = PlaceRef() placeref = PlaceRef()
placeref.ref = parent placeref.ref = handle2internal(parent)
place.set_placeref_list([placeref]) place.set_placeref_list([placeref])
self.db.commit_place(place, trans, place.get_change_time()) self.db.commit_place(place, trans, place.get_change_time())
@ -103,7 +104,7 @@ class PlaceImport(object):
place.place_type = PlaceType(7-type_num) place.place_type = PlaceType(7-type_num)
if parent is not None: if parent is not None:
placeref = PlaceRef() placeref = PlaceRef()
placeref.ref = parent placeref.ref = handle2internal(parent)
place.set_placeref_list([placeref]) place.set_placeref_list([placeref])
handle = self.db.add_place(place, trans) handle = self.db.add_place(place, trans)
self.db.commit_place(place, trans) self.db.commit_place(place, trans)