Bug 3018: ImportGrdb: remove calls to keys() dictionary method where possible

svn: r12572
This commit is contained in:
Gerald Britton 2009-05-26 20:48:09 +00:00
parent 51f65aa02f
commit 5eb7e18dc6
47 changed files with 134 additions and 199 deletions

View File

@ -155,8 +155,7 @@ class StandardCustomSelector(object):
""" """
Fill with data Fill with data
""" """
keys = self.mapping.keys() keys = sorted(self.mapping, self.by_value)
keys.sort(self.by_value)
index = 0 index = 0
for key in keys: for key in keys:
if key != self.custom_key: if key != self.custom_key:

View File

@ -951,10 +951,10 @@ class StyleSheetList(object):
xml_file = open(self.file,"w") xml_file = open(self.file,"w")
xml_file.write("<?xml version=\"1.0\"?>\n") xml_file.write("<?xml version=\"1.0\"?>\n")
xml_file.write('<stylelist>\n') xml_file.write('<stylelist>\n')
for name in self.map.keys():
for name, sheet in self.map.iteritems():
if name == "default": if name == "default":
continue continue
sheet = self.map[name]
xml_file.write('<sheet name="%s">\n' % escxml(name)) xml_file.write('<sheet name="%s">\n' % escxml(name))
for p_name in sheet.get_paragraph_style_names(): for p_name in sheet.get_paragraph_style_names():
para = sheet.get_paragraph_style(p_name) para = sheet.get_paragraph_style(p_name)
@ -1031,17 +1031,13 @@ class StyleSheet(object):
self.cell_styles = {} self.cell_styles = {}
self.name = "" self.name = ""
if obj is not None: if obj is not None:
for style_name in obj.para_styles.keys(): for style_name, style in obj.para_styles.iteritems():
style = obj.para_styles[style_name]
self.para_styles[style_name] = ParagraphStyle(style) self.para_styles[style_name] = ParagraphStyle(style)
for style_name in obj.draw_styles.keys(): for style_name, style in obj.draw_styles.iteritems():
style = obj.draw_styles[style_name]
self.draw_styles[style_name] = GraphicsStyle(style) self.draw_styles[style_name] = GraphicsStyle(style)
for style_name in obj.table_styles.keys(): for style_name, style in obj.table_styles.iteritems():
style = obj.table_styles[style_name]
self.table_styles[style_name] = TableStyle(style) self.table_styles[style_name] = TableStyle(style)
for style_name in obj.cell_styles.keys(): for style_name, style in obj.cell_styles.iteritems():
style = obj.cell_styles[style_name]
self.cell_styles[style_name] = TableCellStyle(style) self.cell_styles[style_name] = TableCellStyle(style)
def set_name(self, name): def set_name(self, name):

View File

@ -221,8 +221,7 @@ class NameDisplay(object):
""" """
the_list = [] the_list = []
keys = self.name_formats.keys() keys = sorted(self.name_formats, self._sort_name_format)
keys.sort(self._sort_name_format)
for num in keys: for num in keys:
if ((also_default or num) and if ((also_default or num) and
@ -340,12 +339,12 @@ class NameDisplay(object):
# key-word replacement. Just replace ikeywords with # key-word replacement. Just replace ikeywords with
# %codes (ie, replace "irstnamefay" with "%f", and # %codes (ie, replace "irstnamefay" with "%f", and
# "IRSTNAMEFAY" for %F) # "IRSTNAMEFAY" for %F)
if (len(format_str) > 2 and if (len(format_str) > 2 and
format_str[0] == '"' and format_str[0] == format_str[-1] == '"'):
format_str[-1] == '"'):
pass pass
else: else:
d_keys = [(code, d[code][2]) for code in d.keys()] d_keys = [(code, _tuple[2]) for code, _tuple in d.iteritems()]
d_keys.sort(_make_cmp) # reverse sort by ikeyword d_keys.sort(_make_cmp) # reverse sort by ikeyword
for (code, ikeyword) in d_keys: for (code, ikeyword) in d_keys:
exp, keyword, ikeyword = d[code] exp, keyword, ikeyword = d[code]
@ -358,11 +357,10 @@ class NameDisplay(object):
# %codes (ie, replace "firstname" with "%f", and # %codes (ie, replace "firstname" with "%f", and
# "FIRSTNAME" for %F) # "FIRSTNAME" for %F)
if (len(format_str) > 2 and if (len(format_str) > 2 and
format_str[0] == '"' and format_str[0] == format_str[-1] == '"'):
format_str[-1] == '"'): pass
format_str = format_str[1:-1]
else: else:
d_keys = [(code, d[code][1]) for code in d.keys()] d_keys = [(code, _tuple[1]) for code, _tuple in d.iteritems()]
d_keys.sort(_make_cmp) # reverse sort by keyword d_keys.sort(_make_cmp) # reverse sort by keyword
# if in double quotes, just use % codes # if in double quotes, just use % codes
for (code, keyword) in d_keys: for (code, keyword) in d_keys:
@ -372,7 +370,7 @@ class NameDisplay(object):
format_str = format_str.replace(keyword.title(),"%"+ code) format_str = format_str.replace(keyword.title(),"%"+ code)
format_str = format_str.replace(keyword.upper(),"%"+ code.upper()) format_str = format_str.replace(keyword.upper(),"%"+ code.upper())
# Get lower and upper versions of codes: # Get lower and upper versions of codes:
codes = d.keys() + [c.upper() for c in d.keys()] codes = d.keys() + [c.upper() for c in d]
# Next, list out the matching patterns: # Next, list out the matching patterns:
# If it starts with "!" however, treat the punctuation verbatim: # If it starts with "!" however, treat the punctuation verbatim:
if len(format_str) > 0 and format_str[0] == "!": if len(format_str) > 0 and format_str[0] == "!":

View File

@ -98,12 +98,10 @@ class IniKeyClient(object):
fp = open(filename, "w") fp = open(filename, "w")
fp.write(";; Gramps key file" + NL) fp.write(";; Gramps key file" + NL)
fp.write((";; Automatically created at %s" % time.strftime("%Y/%m/%d %H:%M:%S")) + NL + NL) fp.write((";; Automatically created at %s" % time.strftime("%Y/%m/%d %H:%M:%S")) + NL + NL)
sections = self.data.keys() sections = sorted(self.data)
sections.sort()
for section in sections: for section in sections:
fp.write(("[%s]" + NL) % section) fp.write(("[%s]" + NL) % section)
keys = self.data[section].keys() keys = sorted(self.data[section])
keys.sort()
for key in keys: for key in keys:
fp.write(("%s=%s" + NL)% (key, self.data[section][key])) fp.write(("%s=%s" + NL)% (key, self.data[section][key]))
fp.write(NL) fp.write(NL)

View File

@ -92,9 +92,7 @@ class NodeTreeMap(object):
self.temp_sname_sub = {} self.temp_sname_sub = {}
def build_toplevel(self): def build_toplevel(self):
mylist = self.temp_sname_sub.keys() self.temp_top_path2iter = sorted(self.temp_sname_sub, locale.strcoll)
mylist.sort(locale.strcoll)
self.temp_top_path2iter = mylist
for name in self.temp_top_path2iter: for name in self.temp_top_path2iter:
self.build_sub_entry(name) self.build_sub_entry(name)

View File

@ -540,9 +540,7 @@ class EditRule(ManagedWindow.ManagedWindow):
else: else:
self.sel_class = None self.sel_class = None
keys = the_map.keys() keys = sorted(the_map, by_rule_name, reverse=True)
keys.sort(by_rule_name)
keys.reverse()
catlist = [] catlist = []
for class_obj in keys: for class_obj in keys:
category = class_obj.category category = class_obj.category

View File

@ -128,6 +128,6 @@ class RelationshipPathBetween(Rule):
self.map[e] = 1 self.map[e] = 1
def get_intersection(self,target, map1, map2): def get_intersection(self,target, map1, map2):
for e in map1.keys(): for e in map1:
if e in map2: if e in map2:
target[e] = map2[e] target[e] = map2[e]

View File

@ -272,16 +272,13 @@ class GedcomInfoDB(object):
return self.standard return self.standard
def get_from_source_tag(self, name): def get_from_source_tag(self, name):
for k in self.map.keys(): for k, val in self.map.iteritems():
val = self.map[k]
if val.get_dest() == name: if val.get_dest() == name:
return val return val
return self.standard return self.standard
def get_name_list(self): def get_name_list(self):
mylist = self.map.keys() return ["GEDCOM 5.5 standard"] + sorted(self.map)
mylist.sort()
return ["GEDCOM 5.5 standard"] + mylist
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
# #

View File

@ -54,19 +54,16 @@ LOG = logging.getLogger(".GedcomImport")
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
GED2GRAMPS = {} GED2GRAMPS = {}
for __val in personalConstantEvents.keys(): for __val, __key in personalConstantEvents.iteritems():
__key = personalConstantEvents[__val]
if __key != "": if __key != "":
GED2GRAMPS[__key] = __val GED2GRAMPS[__key] = __val
for __val in familyConstantEvents.keys(): for __val, __key in familyConstantEvents.iteritems():
__key = familyConstantEvents[__val]
if __key != "": if __key != "":
GED2GRAMPS[__key] = __val GED2GRAMPS[__key] = __val
GED2ATTR = {} GED2ATTR = {}
for __val in personalConstantAttributes.keys(): for __val, __key in personalConstantAttributes.iteritems():
__key = personalConstantAttributes[__val]
if __key != "": if __key != "":
GED2ATTR[__key] = __val GED2ATTR[__key] = __val

View File

@ -197,14 +197,14 @@ MEDIA_MAP = {
# #
#------------------------------------------------------------------------- #-------------------------------------------------------------------------
GED_2_GRAMPS = {} GED_2_GRAMPS = {}
for _val in GedcomInfo.personalConstantEvents.keys(): for _val, _key in GedcomInfo.personalConstantEvents.iteritems():
_key = GedcomInfo.personalConstantEvents[_val] #_key = GedcomInfo.personalConstantEvents[_val]
if _key != "": if _key != "":
GED_2_GRAMPS[_key] = _val GED_2_GRAMPS[_key] = _val
GED_2_FAMILY = {} GED_2_FAMILY = {}
for _val in GedcomInfo.familyConstantEvents.keys(): for _val, _key in GedcomInfo.familyConstantEvents.iteritems():
_key = GedcomInfo.familyConstantEvents[_val] #_key = GedcomInfo.familyConstantEvents[_val]
if _key != "": if _key != "":
GED_2_FAMILY[_key] = _val GED_2_FAMILY[_key] = _val
@ -786,8 +786,8 @@ class GedcomParser(UpdateCallback):
self.attrs = amap.values() self.attrs = amap.values()
self.gedattr = {} self.gedattr = {}
for val in amap.keys(): for val, key in amap.iteritems():
self.gedattr[amap[val]] = val self.gedattr[key] = val
self.search_paths = [] self.search_paths = []
def parse_gedcom_file(self, use_trans=False): def parse_gedcom_file(self, use_trans=False):
@ -807,9 +807,7 @@ class GedcomParser(UpdateCallback):
self.dbase.add_source(self.def_src, self.trans) self.dbase.add_source(self.def_src, self.trans)
self.__parse_record() self.__parse_record()
self.__parse_trailer() self.__parse_trailer()
for title, handle in self.inline_srcs.iteritems():
for title in self.inline_srcs.keys():
handle = self.inline_srcs[title]
src = gen.lib.Source() src = gen.lib.Source()
src.set_handle(handle) src.set_handle(handle)
src.set_title(title) src.set_title(title)

View File

@ -91,8 +91,7 @@ class LdsTemples(object):
""" """
returns a list of temple codes, temple name tuples returns a list of temple codes, temple name tuples
""" """
return [ (self.__temple_codes[name], name) \ return [(code, name) for name, code in self.__temple_codes.iteritems()]
for name in self.__temple_codes.keys() ]
def __start_element(self, tag, attrs): def __start_element(self, tag, attrs):
""" """

View File

@ -152,7 +152,7 @@ class MergeSources(ManagedWindow.ManagedWindow):
src2_map = self.s2.get_data_map() src2_map = self.s2.get_data_map()
src1_map = self.s1.get_data_map() src1_map = self.s1.get_data_map()
for key in src2_map.keys(): for key in src2_map:
if key not in src1_map: if key not in src1_map:
src1_map[key] = src2_map[key] src1_map[key] = src2_map[key]

View File

@ -198,20 +198,20 @@ class OptionListCollection(object):
option_list = self.get_option_list(module_name) option_list = self.get_option_list(module_name)
f.write('<module name=%s>\n' % quoteattr(module_name)) f.write('<module name=%s>\n' % quoteattr(module_name))
options = option_list.get_options() options = option_list.get_options()
for option_name in options.keys(): for option_name, option_data in options.iteritems():
if isinstance(options[option_name], (list, tuple)): if isinstance(option_data, (list, tuple)):
f.write(' <option name=%s value="" length="%d">\n' % ( f.write(' <option name=%s value="" length="%d">\n' % (
quoteattr(option_name), quoteattr(option_name),
len(options[option_name]) ) ) len(option_data) ) )
for list_index in range(len(options[option_name])): for list_index, list_data in enumerate(option_data):
f.write(' <listitem number="%d" value=%s/>\n' % ( f.write(' <listitem number="%d" value=%s/>\n' % (
list_index, list_index,
quoteattr(unicode(options[option_name][list_index]))) ) quoteattr(unicode(list_data))) )
f.write(' </option>\n') f.write(' </option>\n')
else: else:
f.write(' <option name=%s value=%s/>\n' % ( f.write(' <option name=%s value=%s/>\n' % (
quoteattr(option_name), quoteattr(option_name),
quoteattr(unicode(options[option_name]))) ) quoteattr(unicode(option_data))) )
self.write_module_common(f, option_list) self.write_module_common(f, option_list)
@ -334,7 +334,7 @@ class OptionHandler(object):
# First we set options_dict values based on the saved options # First we set options_dict values based on the saved options
options = self.saved_option_list.get_options() options = self.saved_option_list.get_options()
bad_opts = [] bad_opts = []
for option_name in options.keys(): for option_name, option_data in options.iteritems():
if option_name not in self.options_dict: if option_name not in self.options_dict:
print "Option %s is present in the %s but is not known "\ print "Option %s is present in the %s but is not known "\
"to the module." % (option_name, "to the module." % (option_name,
@ -344,7 +344,7 @@ class OptionHandler(object):
continue continue
try: try:
converter = Utils.get_type_converter(self.options_dict[option_name]) converter = Utils.get_type_converter(self.options_dict[option_name])
self.options_dict[option_name] = converter(options[option_name]) self.options_dict[option_name] = converter(option_data)
except ValueError: except ValueError:
pass pass
except TypeError: except TypeError:
@ -368,8 +368,8 @@ class OptionHandler(object):
""" """
# First we save options from options_dict # First we save options from options_dict
for option_name in self.options_dict.keys(): for option_name, option_data in self.options_dict.iteritems():
if self.options_dict[option_name] == self.default_options_dict[option_name]: if option_data == self.default_options_dict[option_name]:
self.saved_option_list.remove_option(option_name) self.saved_option_list.remove_option(option_name)
else: else:
self.saved_option_list.set_option(option_name,self.options_dict[option_name]) self.saved_option_list.set_option(option_name,self.options_dict[option_name])

View File

@ -72,7 +72,6 @@ class PluginDialog(ManagedWindow.ManagedWindow):
reports. This is used to build the selection tree on the left reports. This is used to build the selection tree on the left
hand side of the dialog box. hand side of the dialog box.
""" """
self.active = state.active self.active = state.active
self.imap = {} self.imap = {}
self.msg = msg self.msg = msg
@ -189,7 +188,6 @@ class PluginDialog(ManagedWindow.ManagedWindow):
Items in the same category are grouped under the same submenu. Items in the same category are grouped under the same submenu.
The categories must be dicts from integer to string. The categories must be dicts from integer to string.
""" """
ilist = [] ilist = []
self.store.clear() self.store.clear()
@ -207,9 +205,8 @@ class PluginDialog(ManagedWindow.ManagedWindow):
# add a submenu for each category, and populate it with the # add a submenu for each category, and populate it with the
# GtkTreeItems that are associated with it. # GtkTreeItems that are associated with it.
key_list = [ item for item in item_hash.keys() if item != _UNSUPPORTED] key_list = [item for item in item_hash if item != _UNSUPPORTED]
key_list.sort() key_list.sort(reverse=True)
key_list.reverse()
prev = None prev = None
if _UNSUPPORTED in item_hash: if _UNSUPPORTED in item_hash:
@ -228,7 +225,7 @@ class PluginDialog(ManagedWindow.ManagedWindow):
node = self.store.insert_after(None, prev) node = self.store.insert_after(None, prev)
self.store.set(node, 0, key) self.store.set(node, 0, key)
next = None next = None
data.sort(lambda x, y: cmp(x[2], y[2])) data.sort(key=lambda k:k[2])
for item in data: for item in data:
next = self.store.insert_after(node, next) next = self.store.insert_after(node, next)
ilist.append((next, item)) ilist.append((next, item))

View File

@ -210,20 +210,17 @@ class DocReportDialog(ReportDialog):
yoptions=gtk.SHRINK) yoptions=gtk.SHRINK)
self.template_combo = gtk.combo_box_new_text() self.template_combo = gtk.combo_box_new_text()
tlist = _template_map.keys() tlist = sorted(_template_map)
tlist.sort()
template_name = self.options.handler.get_template_name() template_name = self.options.handler.get_template_name()
self.template_combo.append_text(_default_template) self.template_combo.append_text(_default_template)
template_index = 1
active_index = 0 active_index = 0
for template in tlist: for template_index, template in enumerate(sorted(_template_map)):
if template != _user_template: if template != _user_template:
self.template_combo.append_text(template) self.template_combo.append_text(template)
if _template_map[template] == os.path.basename(template_name): if _template_map[template] == os.path.basename(template_name):
active_index = template_index active_index = template_index
template_index = template_index + 1
self.template_combo.append_text(_user_template) self.template_combo.append_text(_user_template)
self.template_combo.connect('changed',self.html_file_enable) self.template_combo.connect('changed',self.html_file_enable)

View File

@ -59,18 +59,14 @@ class StyleComboBox(gtk.ComboBox):
self.store = gtk.ListStore(gobject.TYPE_STRING) self.store = gtk.ListStore(gobject.TYPE_STRING)
self.set_model(self.store) self.set_model(self.store)
self.style_map = style_map self.style_map = style_map
keys = style_map.keys()
keys.sort()
index = 0
start_index = 0 start_index = 0
for key in keys: for index, key in enumerate(sorted(style_map)):
if key == "default": if key == "default":
self.store.append(row=[_('default')]) self.store.append(row=[_('default')])
else: else:
self.store.append(row=[key]) self.store.append(row=[key])
if key == default: if key == default:
start_index = index start_index = index
index += 1
self.set_active(start_index) self.set_active(start_index)

View File

@ -103,10 +103,9 @@ class TipFromFunction(object):
o = self._fetch_function() o = self._fetch_function()
# check if we have a handler for the object type returned # check if we have a handler for the object type returned
for cls in CLASS_MAP.keys(): for cls, handler in CLASS_MAP.iteritems():
if isinstance(o,cls): if isinstance(o,cls):
return CLASS_MAP[cls](self._db, o)() return handler(self._db, o)()
return "no tip" return "no tip"
__call__ = get_tip __call__ = get_tip

View File

@ -1389,7 +1389,7 @@ class ViewManager(object):
(item[0], item[1], item[2], item[4], item[3], item[10])] (item[0], item[1], item[2], item[4], item[3], item[10])]
# Sort categories, skipping the unsupported # Sort categories, skipping the unsupported
catlist = [item for item in hash_data.keys() catlist = [item for item in hash_data
if item != _UNSUPPORTED] if item != _UNSUPPORTED]
catlist.sort() catlist.sort()
for key in catlist: for key in catlist:

View File

@ -1,4 +1,4 @@
# k#
# Gramps - a GTK+/GNOME based genealogy program # Gramps - a GTK+/GNOME based genealogy program
# #
# Copyright (C) 2000-2004 Donald N. Allingham # Copyright (C) 2000-2004 Donald N. Allingham
@ -111,10 +111,9 @@ class ODSDoc(SpreadSheetDoc):
self.f.write('style:font-family-generic="swiss" ') self.f.write('style:font-family-generic="swiss" ')
self.f.write('style:font-pitch="variable"/>\n') self.f.write('style:font-pitch="variable"/>\n')
self.f.write('</office:font-face-decls>\n') self.f.write('</office:font-face-decls>\n')
self.f.write('<office:automatic-styles>\n') self.f.write('<office:automatic-styles>\n')
for key in self.table_styles.keys():
table = self.table_styles[key] for key, table in self.table_styles.iteritems():
self.f.write('<style:style style:name="') self.f.write('<style:style style:name="')
self.f.write(key) self.f.write(key)
self.f.write('" style:family="table" ') self.f.write('" style:family="table" ')
@ -133,8 +132,7 @@ class ODSDoc(SpreadSheetDoc):
self.f.write('<style:table-row-properties fo:break-before="auto"/>\n') self.f.write('<style:table-row-properties fo:break-before="auto"/>\n')
self.f.write('</style:style>\n') self.f.write('</style:style>\n')
for key in self.style_list.keys(): for key, style in self.style_list.iteritems():
style = self.style_list[key]
font = style.get_font() font = style.get_font()
self.f.write('<style:style style:name="') self.f.write('<style:style style:name="')
self.f.write(key) self.f.write(key)

View File

@ -106,8 +106,8 @@ class OpenSpreadSheet(SpreadSheetDoc):
self.f.write('style:font-pitch="variable"/>\n') self.f.write('style:font-pitch="variable"/>\n')
self.f.write('</office:font-decls>\n') self.f.write('</office:font-decls>\n')
self.f.write('<office:automatic-styles>\n') self.f.write('<office:automatic-styles>\n')
for key in self.table_styles.keys():
table = self.table_styles[key] for key, table in self.table_styles.iteritems():
self.f.write('<style:style style:name="') self.f.write('<style:style style:name="')
self.f.write(key) self.f.write(key)
self.f.write('" style:family="table">\n') self.f.write('" style:family="table">\n')
@ -125,9 +125,8 @@ class OpenSpreadSheet(SpreadSheetDoc):
self.f.write('<style:style style:name="ro1" style:family="table-row">\n') self.f.write('<style:style style:name="ro1" style:family="table-row">\n')
self.f.write('<style:properties fo:break-before="auto"/>\n') self.f.write('<style:properties fo:break-before="auto"/>\n')
self.f.write('</style:style>\n') self.f.write('</style:style>\n')
for key in self.style_list.keys(): for key, style in self.style_list.iteritems():
style = self.style_list[key]
font = style.get_font() font = style.get_font()
self.f.write('<style:style style:name="') self.f.write('<style:style style:name="')
self.f.write(key) self.f.write(key)

View File

@ -204,7 +204,7 @@ def eval_func(dateval, e1, e2, e3):
def suite3(): def suite3():
suite = unittest.TestSuite() suite = unittest.TestSuite()
count = 1 count = 1
for testset in date_tests.keys(): for testset in date_tests:
for format in range( len( DateHandler.get_date_formats())): for format in range( len( DateHandler.get_date_formats())):
DateHandler.set_format(format) DateHandler.set_format(format)
for dateval in date_tests[testset]: for dateval in date_tests[testset]:

View File

@ -123,7 +123,7 @@ class Menu(object):
@return: an Option instance or None on failure. @return: an Option instance or None on failure.
""" """
for category in self.__options.keys(): for category in self.__options:
for (oname, option) in self.__options[category]: for (oname, option) in self.__options[category]:
if oname == name: if oname == name:
return option return option

View File

@ -371,9 +371,9 @@ class ReferencedProxyDb(ProxyDbBase):
last_count = 0 last_count = 0
while has_unreferenced_handles: while has_unreferenced_handles:
current_count = 0 current_count = 0
for object_type in object_types.keys(): for object_type, object_dict in object_types.iteritems():
unref_list = object_types[object_type]['unref_list'] unref_list = object_dict['unref_list']
handle_list = object_types[object_type]['handle_list']() handle_list = object_dict['handle_list']()
for handle in handle_list: for handle in handle_list:
ref_handles = [i for i in \ ref_handles = [i for i in \
self.find_backlink_handles(handle)] self.find_backlink_handles(handle)]

View File

@ -252,10 +252,9 @@ def db_copy(from_db,to_db,callback):
# Start batch transaction to use async TXN and other tricks # Start batch transaction to use async TXN and other tricks
trans = to_db.transaction_begin("", batch=True) trans = to_db.transaction_begin("", batch=True)
for table_name, table_dict in tables.iteritems():
for table_name in tables.keys(): cursor_func = table_dict['cursor_func']
cursor_func = tables[table_name]['cursor_func'] add_func = table_dict['add_func']
add_func = tables[table_name]['add_func']
cursor = cursor_func() cursor = cursor_func()
item = cursor.first() item = cursor.first()

View File

@ -421,8 +421,7 @@ class BookList(object):
f = open(self.file, "w") f = open(self.file, "w")
f.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n") f.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
f.write('<booklist>\n') f.write('<booklist>\n')
for name in self.bookmap:
for name in self.bookmap.keys():
book = self.get_book(name) book = self.get_book(name)
dbname = book.get_dbname() dbname = book.get_dbname()
f.write('<book name="%s" database="%s">\n' % (name, dbname) ) f.write('<book name="%s" database="%s">\n' % (name, dbname) )
@ -430,14 +429,13 @@ class BookList(object):
f.write(' <item name="%s" trans_name="%s">\n' % f.write(' <item name="%s" trans_name="%s">\n' %
(item.get_name(),item.get_translated_name() ) ) (item.get_name(),item.get_translated_name() ) )
options = item.option_class.handler.options_dict options = item.option_class.handler.options_dict
for option_name in options.keys(): for option_name, option_value in options.iteritems():
option_value = options[option_name]
if isinstance(option_value, (list, tuple)): if isinstance(option_value, (list, tuple)):
f.write(' <option name="%s" value="" ' f.write(' <option name="%s" value="" '
'length="%d">\n' % ( 'length="%d">\n' % (
escape(option_name), escape(option_name),
len(options[option_name]) ) ) len(options[option_name]) ) )
for list_index in range(len(options[option_name])): for list_index in range(len(option_value)):
option_type = \ option_type = \
Utils.type_name(option_value[list_index]) Utils.type_name(option_value[list_index])
value = escape(unicode(option_value[list_index])) value = escape(unicode(option_value[list_index]))

View File

@ -279,12 +279,12 @@ class PrintPreview(object):
self._drawing_area.queue_draw() self._drawing_area.queue_draw()
self._zoom_in_button.set_sensitive(self._zoom != self._zoom_in_button.set_sensitive(self._zoom !=
max(self.zoom_factors.keys())) max(self.zoom_factors))
self._zoom_out_button.set_sensitive(self._zoom != self._zoom_out_button.set_sensitive(self._zoom !=
min(self.zoom_factors.keys())) min(self.zoom_factors))
def __zoom_in(self): def __zoom_in(self):
zoom = [z for z in self.zoom_factors.keys() if z > self._zoom] zoom = [z for z in self.zoom_factors if z > self._zoom]
if zoom: if zoom:
return min(zoom) return min(zoom)
@ -292,7 +292,7 @@ class PrintPreview(object):
return self._zoom return self._zoom
def __zoom_out(self): def __zoom_out(self):
zoom = [z for z in self.zoom_factors.keys() if z < self._zoom] zoom = [z for z in self.zoom_factors if z < self._zoom]
if zoom: if zoom:
return max(zoom) return max(zoom)

View File

@ -340,13 +340,13 @@ class HtmlDoc(BaseDoc.BaseDoc,BaseDoc.TextDoc):
def write_support_files(self): def write_support_files(self):
if self.map: if self.map:
for name in self.map.keys(): for name, handle in self.map.iteritems():
if name == 'template.html': if name == 'template.html':
continue continue
fname = '%s%s%s' % (self.base, os.path.sep, name) fname = '%s%s%s' % (self.base, os.path.sep, name)
try: try:
f = open(fname, 'wb') f = open(fname, 'wb')
f.write(self.map[name].read()) f.write(handle.read())
f.close() f.close()
except IOError,msg: except IOError,msg:
errmsg = "%s\n%s" % (_("Could not create %s") % fname, msg) errmsg = "%s\n%s" % (_("Could not create %s") % fname, msg)

View File

@ -123,16 +123,14 @@ class GenChart(object):
self.array[y][x] = value self.array[y][x] = value
def dimensions(self): def dimensions(self):
return (max(self.array.keys())+1, self.max_x+1) return (max(self.array)+1, self.max_x+1)
def compress(self): def compress(self):
new_map = {} new_map = {}
new_array = {} new_array = {}
old_y = 0 old_y = 0
new_y = 0 new_y = 0
for key, i in self.array.iteritems():
for key in self.array.keys():
i = self.array[key]
old_y = key old_y = key
if self.not_blank(i.values()): if self.not_blank(i.values()):
self.compress_map[old_y] = new_y self.compress_map[old_y] = new_y
@ -203,14 +201,12 @@ class AncestorTree(Report):
self.scale = 1 self.scale = 1
self.apply_filter(center_person.get_handle(), 1) self.apply_filter(center_person.get_handle(), 1)
keys = sorted(self.map)
keys = self.map.keys()
keys.sort()
max_key = log2(keys[-1]) max_key = log2(keys[-1])
self.genchart = GenChart(max_key+1) self.genchart = GenChart(max_key+1)
for key in self.map.keys(): for key, chart in self.map.iteritems():
self.genchart.set(key,self.map[key]) self.genchart.set(key, chart)
self.calc() self.calc()
if self.force_fit: if self.force_fit:

View File

@ -200,8 +200,7 @@ class AgeStatsGramplet(Gramplet):
def compute_stats(self, hash): def compute_stats(self, hash):
""" Returns the statistics of a dictionary of data """ """ Returns the statistics of a dictionary of data """
hashkeys = hash.keys() hashkeys = sorted(hash)
hashkeys.sort()
count = sum(hash.values()) count = sum(hash.values())
sumval = sum([k * hash[k] for k in hash]) sumval = sum([k * hash[k] for k in hash])
minval = min(hashkeys) minval = min(hashkeys)
@ -241,8 +240,8 @@ class AgeStatsGramplet(Gramplet):
""" """
# first, binify: # first, binify:
bin = [0] * (max_val/bin_size) bin = [0] * (max_val/bin_size)
for value in hash.keys(): for value, hash_value in hash.iteritems():
bin[value/bin_size] += hash[value] bin[value/bin_size] += hash_value
text = "" text = ""
max_bin = float(max(bin)) max_bin = float(max(bin))
if max_bin != 0: if max_bin != 0:

View File

@ -101,8 +101,7 @@ class GivenNameCloudGramplet(Gramplet):
totals = {} totals = {}
for (count, givensubname) in cloud_names: # givensubname_sort: for (count, givensubname) in cloud_names: # givensubname_sort:
totals[count] = totals.get(count, 0) + 1 totals[count] = totals.get(count, 0) + 1
sums = totals.keys() sums = sorted(totals)
sums.sort()
sums.reverse() sums.reverse()
total = 0 total = 0
include_greater_than = 0 include_greater_than = 0

View File

@ -236,8 +236,7 @@ class PedigreeGramplet(Gramplet):
self.process_person(active_person.handle, 1, "f") # father self.process_person(active_person.handle, 1, "f") # father
self.process_person(active_person.handle, 0, "a") # active #FIXME: should be 1? self.process_person(active_person.handle, 0, "a") # active #FIXME: should be 1?
self.process_person(active_person.handle, 1, "m") # mother self.process_person(active_person.handle, 1, "m") # mother
gens = self._generations.keys() gens = sorted(self._generations)
gens.sort()
self.append_text(_("\nBreakdown by generation:\n")) self.append_text(_("\nBreakdown by generation:\n"))
all = [active_person.handle] all = [active_person.handle]
percent_sign = _("percent sign or text string|%") percent_sign = _("percent sign or text string|%")

View File

@ -80,7 +80,7 @@ class PluginManagerGramplet(Gramplet):
types[row[1]] = 1 types[row[1]] = 1
self.set_text("") self.set_text("")
# name, type, ver, desc, gver, use, rating, contact, download # name, type, ver, desc, gver, use, rating, contact, download
for type in types.keys(): for type in types:
self.render_text("<b>%s Plugins</b>\n" % _(type)) self.render_text("<b>%s Plugins</b>\n" % _(type))
row_count = 1 row_count = 1
for row in rows: for row in rows:

View File

@ -114,8 +114,7 @@ class SurnameCloudGramplet(Gramplet):
totals = {} totals = {}
for (count, givensubname) in cloud_names: # givensubname_sort: for (count, givensubname) in cloud_names: # givensubname_sort:
totals[count] = totals.get(count, 0) + 1 totals[count] = totals.get(count, 0) + 1
sums = totals.keys() sums = sorted(totals)
sums.sort()
sums.reverse() sums.reverse()
total = 0 total = 0
include_greater_than = 0 include_greater_than = 0

View File

@ -147,10 +147,8 @@ def run(database, document, filter_name, *args, **kwargs):
surnames = list(set([name.get_group_name() for name in names])) surnames = list(set([name.get_group_name() for name in names]))
for surname in surnames: for surname in surnames:
namelist[surname] = namelist.get(surname, 0) + 1 namelist[surname] = namelist.get(surname, 0) + 1
surnames = namelist.keys()
surnames.sort()
stab.columns(_("Surname"), _("Count")) stab.columns(_("Surname"), _("Count"))
for name in surnames: for name in sorted(namelist):
stab.row(name, namelist[name]) stab.row(name, namelist[name])
matches += 1 matches += 1
stab.set_callback("leftdouble", stab.set_callback("leftdouble",

View File

@ -166,11 +166,9 @@ class AncestorReport(Report):
# get the entries out of the map, and sort them. # get the entries out of the map, and sort them.
keys = self.map.keys()
keys.sort()
generation = 0 generation = 0
for key in keys : for key in sorted(self.map):
# check the index number to see if we need to start a new generation # check the index number to see if we need to start a new generation
if generation == log2(key): if generation == log2(key):

View File

@ -154,12 +154,10 @@ class DetAncestorReport(Report):
self.doc.write_text(title,mark) self.doc.write_text(title,mark)
self.doc.end_paragraph() self.doc.end_paragraph()
keys = self.map.keys()
keys.sort()
generation = 0 generation = 0
need_header = 1 need_header = 1
for key in keys : for key in sorted(self.map):
if generation == 0 or key >= 2**generation: if generation == 0 or key >= 2**generation:
if self.pgbrk and generation > 0: if self.pgbrk and generation > 0:
self.doc.page_break() self.doc.page_break()
@ -221,9 +219,7 @@ class DetAncestorReport(Report):
if self.dupperson: if self.dupperson:
# Check for duplicate record (result of distant cousins marrying) # Check for duplicate record (result of distant cousins marrying)
keys = self.map.keys() for dkey in sorted(self.map):
keys.sort()
for dkey in keys:
if dkey >= key: if dkey >= key:
break break
if self.map[key] == self.map[dkey]: if self.map[key] == self.map[dkey]:

View File

@ -157,7 +157,7 @@ class DetDescendantReport(Report):
for family_handle in person.get_family_handle_list(): for family_handle in person.get_family_handle_list():
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
for child_ref in family.get_child_ref_list(): for child_ref in family.get_child_ref_list():
ix = max(self.map.keys()) ix = max(self.map)
self.apply_henry_filter(child_ref.ref, ix+1, self.apply_henry_filter(child_ref.ref, ix+1,
pid+HENRY[index], cur_gen+1) pid+HENRY[index], cur_gen+1)
index += 1 index += 1
@ -178,7 +178,7 @@ class DetDescendantReport(Report):
for family_handle in person.get_family_handle_list(): for family_handle in person.get_family_handle_list():
family = self.database.get_family_from_handle(family_handle) family = self.database.get_family_from_handle(family_handle)
for child_ref in family.get_child_ref_list(): for child_ref in family.get_child_ref_list():
ix = max(self.map.keys()) ix = max(self.map)
self.apply_mod_reg_filter_aux(child_ref.ref, ix+1, cur_gen+1) self.apply_mod_reg_filter_aux(child_ref.ref, ix+1, cur_gen+1)
def apply_mod_reg_filter(self,person_handle): def apply_mod_reg_filter(self,person_handle):
@ -209,8 +209,7 @@ class DetDescendantReport(Report):
self.doc.write_text(title, mark) self.doc.write_text(title, mark)
self.doc.end_paragraph() self.doc.end_paragraph()
keys = self.map.keys() keys = sorted(self.map)
keys.sort()
generation = 0 generation = 0
for generation in xrange(len(self.gen_keys)): for generation in xrange(len(self.gen_keys)):
@ -289,9 +288,7 @@ class DetDescendantReport(Report):
if self.dubperson: if self.dubperson:
# Check for duplicate record (result of distant cousins marrying) # Check for duplicate record (result of distant cousins marrying)
keys = self.map.keys() for dkey in sorted(self.map):
keys.sort()
for dkey in keys:
if dkey >= key: if dkey >= key:
break break
if self.map[key] == self.map[dkey]: if self.map[key] == self.map[dkey]:

View File

@ -142,12 +142,11 @@ class EndOfLineReport(Report):
self.doc.end_paragraph() self.doc.end_paragraph()
self.doc.start_table('EolTable','EOL-Table') self.doc.start_table('EolTable','EOL-Table')
for generation, handles in self.eol_map.iteritems():
for generation in self.eol_map.keys():
self.write_generation_row(generation) self.write_generation_row(generation)
for person_handle in self.eol_map[generation].keys(): for person_handle, pedigrees in handles.iteritems():
self.write_person_row(person_handle) self.write_person_row(person_handle)
for pedigree in self.eol_map[generation][person_handle]: for pedigree in pedigrees:
self.write_pedigree_row(pedigree) self.write_pedigree_row(pedigree)
self.doc.end_table() self.doc.end_table()

View File

@ -113,8 +113,8 @@ class KinshipReport(Report):
self.traverse_up(self.person.get_handle(), 1, 0) self.traverse_up(self.person.get_handle(), 1, 0)
# Write Kin # Write Kin
for Ga in self.kinship_map.keys(): for Ga, Gbs in self.kinship_map.iteritems():
for Gb in self.kinship_map[Ga]: for Gb in Gbs:
# To understand these calculations, see: # To understand these calculations, see:
# http://en.wikipedia.org/wiki/Cousin#Mathematical_definitions # http://en.wikipedia.org/wiki/Cousin#Mathematical_definitions
x = min (Ga,Gb) x = min (Ga,Gb)

View File

@ -111,7 +111,7 @@ class NumberOfAncestorsReport(Report):
temp = thisgen temp = thisgen
thisgen = {} thisgen = {}
for person_handle in temp.keys(): for person_handle, person_data in temp.iteritems():
person = self.__db.get_person_from_handle(person_handle) person = self.__db.get_person_from_handle(person_handle)
family_handle = person.get_main_parents_family_handle() family_handle = person.get_main_parents_family_handle()
if family_handle: if family_handle:
@ -120,16 +120,16 @@ class NumberOfAncestorsReport(Report):
mother_handle = family.get_mother_handle() mother_handle = family.get_mother_handle()
if father_handle: if father_handle:
thisgen[father_handle] = \ thisgen[father_handle] = \
thisgen.get(father_handle, 0) + temp[person_handle] thisgen.get(father_handle, 0) + person_data
all_people[father_handle] = \ all_people[father_handle] = \
all_people.get(father_handle, 0) + \ all_people.get(father_handle, 0) + \
temp[person_handle] person_data
if mother_handle: if mother_handle:
thisgen[mother_handle] = \ thisgen[mother_handle] = \
thisgen.get(mother_handle, 0) + temp[person_handle] thisgen.get(mother_handle, 0) + person_data
all_people[mother_handle] = \ all_people[mother_handle] = \
all_people.get(mother_handle, 0) + \ all_people.get(mother_handle, 0) + \
temp[person_handle] person_data
if( total_theoretical != 1 ): if( total_theoretical != 1 ):
percent = '(%3.2f%%)' % (( sum(all_people.values()) / (total_theoretical-1) ) * 100) percent = '(%3.2f%%)' % (( sum(all_people.values()) / (total_theoretical-1) ) * 100)
@ -142,7 +142,7 @@ class NumberOfAncestorsReport(Report):
"%(last_generation)d is %(count)d. %(percent)s") % { "%(last_generation)d is %(count)d. %(percent)s") % {
'second_generation' : 2, 'second_generation' : 2,
'last_generation' : gen, 'last_generation' : gen,
'count' : len(all_people.keys()), 'count' : len(all_people),
'percent' : percent} 'percent' : percent}
self.doc.start_paragraph('NOA-Normal') self.doc.start_paragraph('NOA-Normal')

View File

@ -49,11 +49,10 @@ class DumpGenderStats(Tool.Tool, ManagedWindow.ManagedWindow):
self.__class__) self.__class__)
stats_list = [] stats_list = []
for name, value in dbstate.db.genderStats.stats.iteritems():
for name in dbstate.db.genderStats.stats.keys():
stats_list.append( stats_list.append(
(name,) (name,)
+ dbstate.db.genderStats.stats[name] + value
+ (_GENDER[dbstate.db.genderStats.guess_gender(name)],) + (_GENDER[dbstate.db.genderStats.guess_gender(name)],)
) )
@ -81,10 +80,10 @@ class DumpGenderStats(Tool.Tool, ManagedWindow.ManagedWindow):
self.show() self.show()
else: else:
print "\t%s\t%s\t%s\t%s\t%s\n" % ( print '\t%s'*5 % ('Name','Male','Female','Unknown','Guess')
'Name','Male','Female','Unknown','Guess') print
for entry in stats_list: for entry in stats_list:
print "\t%s\t%s\t%s\t%s\t%s" % entry print '\t%s'*5 % entry
def build_menu_names(self, obj): def build_menu_names(self, obj):
return (self.label,None) return (self.label,None)

View File

@ -358,8 +358,8 @@ class DisplayChart(ManagedWindow.ManagedWindow):
else: else:
the_map[name] = 1 the_map[name] = 1
unsort_list = [ (the_map[item], item) for item in the_map.keys() ] unsort_list = sorted([(d, k) for k,d in the_map.iteritems()],by_value)
unsort_list.sort(by_value)
sort_list = [ item[1] for item in unsort_list ] sort_list = [ item[1] for item in unsort_list ]
## Presently there's no Birth and Death. Instead there's Birth Date and ## Presently there's no Birth and Death. Instead there's Birth Date and
## Birth Place, as well as Death Date and Death Place. ## Birth Place, as well as Death Date and Death Place.

View File

@ -110,9 +110,7 @@ class Merge(Tool.Tool,ManagedWindow.ManagedWindow):
use_soundex = self.options.handler.options_dict['soundex'] use_soundex = self.options.handler.options_dict['soundex']
my_menu = gtk.ListStore(str, object) my_menu = gtk.ListStore(str, object)
vals = _val2label.keys() for val in sorted(_val2label):
vals.sort()
for val in vals:
my_menu.append([_val2label[val], val]) my_menu.append([_val2label[val], val])
self.soundex_obj = top.get_object("soundex") self.soundex_obj = top.get_object("soundex")
@ -243,8 +241,7 @@ class Merge(Tool.Tool,ManagedWindow.ManagedWindow):
else: else:
self.map[p1key] = (p2key,chance) self.map[p1key] = (p2key,chance)
self.list = self.map.keys() self.list = sorted(self.map)
self.list.sort()
self.length = len(self.list) self.length = len(self.list)
self.progress.close() self.progress.close()
@ -575,10 +572,10 @@ class ShowMatches(ManagedWindow.ManagedWindow):
GrampsDisplay.help(WIKI_HELP_PAGE , WIKI_HELP_SEC) GrampsDisplay.help(WIKI_HELP_PAGE , WIKI_HELP_SEC)
def redraw(self): def redraw(self):
list = [] list = []
for p1key in self.map.keys(): for p1key, p1data in self.map.iteritems():
if p1key in self.dellist: if p1key in self.dellist:
continue continue
(p2key,c) = self.map[p1key] (p2key,c) = p1data
if p1key == p2key: if p1key == p2key:
continue continue
list.append((c,p1key,p2key)) list.append((c,p1key,p2key))
@ -608,8 +605,8 @@ class ShowMatches(ManagedWindow.ManagedWindow):
def on_update(self): def on_update(self):
self.dellist[self.p2] = self.p1 self.dellist[self.p2] = self.p1
for key in self.dellist.keys(): for key, data in self.dellist.iteritems():
if self.dellist[key] == self.p2: if data == self.p2:
self.dellist[key] = self.p1 self.dellist[key] = self.p1
self.update() self.update()
self.redraw() self.redraw()

View File

@ -127,7 +127,7 @@ class PHPGedViewConnector(object):
result = [] result = []
types = [] types = []
if type == self.TYPE_ALL: if type == self.TYPE_ALL:
for entry in self.type_trans.keys(): for entry in self.type_trans:
types.append(entry) types.append(entry)
else: else:
types.append(type) types.append(type)

View File

@ -349,7 +349,7 @@ class MonitoredDataType(object):
map = get_val().get_map().copy() map = get_val().get_map().copy()
if ignore_values : if ignore_values :
for key in map.keys(): for key in map:
try : try :
i = ignore_values.index(key) i = ignore_values.index(key)
except ValueError: except ValueError:
@ -535,14 +535,12 @@ class MonitoredComboSelectedEntry(object):
Fill combo with data Fill combo with data
""" """
self.store = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING) self.store = gtk.ListStore(gobject.TYPE_INT, gobject.TYPE_STRING)
keys = self.mapping.keys() keys = sorted(self.mapping.keys(), self.__by_value)
keys.sort(self.__by_value)
index = 0 for index, key in enumerate(keys):
for key in keys:
self.store.append(row=[key, self.mapping[key]]) self.store.append(row=[key, self.mapping[key]])
if key == self.active_key: if key == self.active_key:
self.active_index = index self.active_index = index
index = index + 1
def __by_value(self, first, second): def __by_value(self, first, second):
""" """

View File

@ -426,9 +426,9 @@ class StyledTextBuffer(gtk.TextBuffer):
def _remove_style_from_selection(self, style): def _remove_style_from_selection(self, style):
start, end = self._get_selection() start, end = self._get_selection()
tags = self._get_tag_from_range(start.get_offset(), end.get_offset()) tags = self._get_tag_from_range(start.get_offset(), end.get_offset())
for tag_name in tags.keys(): for tag_name, tag_data in tags.iteritems():
if tag_name.startswith(str(style)): if tag_name.startswith(str(style)):
for start, end in tags[tag_name]: for start, end in tag_data:
self.remove_tag_by_name(tag_name, self.remove_tag_by_name(tag_name,
self.get_iter_at_offset(start), self.get_iter_at_offset(start),
self.get_iter_at_offset(end+1)) self.get_iter_at_offset(end+1))

View File

@ -220,10 +220,10 @@ class StyledTextEditor(gtk.TextView):
Handle formatting shortcuts. Handle formatting shortcuts.
""" """
for accel in self.action_accels.keys(): for accel, accel_name in self.action_accels.iteritems():
key, mod = gtk.accelerator_parse(accel) key, mod = gtk.accelerator_parse(accel)
if (event.keyval, event.state) == (key, mod): if (event.keyval, event.state) == (key, mod):
action_name = self.action_accels[accel] action_name = accel_name
action = self.action_group.get_action(action_name) action = self.action_group.get_action(action_name)
action.activate() action.activate()
return True return True
@ -523,18 +523,18 @@ class StyledTextEditor(gtk.TextView):
def _on_buffer_style_changed(self, buffer, changed_styles): def _on_buffer_style_changed(self, buffer, changed_styles):
"""Synchronize actions as the format changes at the buffer's cursor.""" """Synchronize actions as the format changes at the buffer's cursor."""
for style in changed_styles.keys(): for style, style_value in changed_styles.iteritems():
if str(style) in self.toggle_actions: if str(style) in self.toggle_actions:
action = self.action_group.get_action(str(style)) action = self.action_group.get_action(str(style))
self._internal_style_change = True self._internal_style_change = True
action.set_active(changed_styles[style]) action.set_active(style_value)
self._internal_style_change = False self._internal_style_change = False
if ((style == StyledTextTagType.FONTFACE) or if ((style == StyledTextTagType.FONTFACE) or
(style == StyledTextTagType.FONTSIZE)): (style == StyledTextTagType.FONTSIZE)):
action = self.action_group.get_action(str(style)) action = self.action_group.get_action(str(style))
self._internal_style_change = True self._internal_style_change = True
action.set_value(changed_styles[style]) action.set_value(style_value)
self._internal_style_change = False self._internal_style_change = False
def _spell_change_cb(self, menuitem, language): def _spell_change_cb(self, menuitem, language):