Modify srctemplatetab to use new Template data model
svn: r22698
This commit is contained in:
@@ -230,8 +230,7 @@ class SrcTemplate(TableObject):
|
|||||||
self.template_element_list = template_element_list
|
self.template_element_list = template_element_list
|
||||||
|
|
||||||
def add_template_element(self, template_element):
|
def add_template_element(self, template_element):
|
||||||
if template_element not in self.template_element_list:
|
self.template_element_list.append(template_element)
|
||||||
self.template_element_list.append(template_element)
|
|
||||||
|
|
||||||
def add_structure_element(self, cite_type, slist):
|
def add_structure_element(self, cite_type, slist):
|
||||||
self.structure[cite_type] += slist
|
self.structure[cite_type] += slist
|
||||||
@@ -553,6 +552,13 @@ class TemplateElement(SecondaryObject):
|
|||||||
Names & SecondAuthorSurname, Given Names'. Like this Gramps can parse the
|
Names & SecondAuthorSurname, Given Names'. Like this Gramps can parse the
|
||||||
name and shorten as needed."
|
name and shorten as needed."
|
||||||
|
|
||||||
|
- citation - True if this element appears in a citation (false for a source
|
||||||
|
element)
|
||||||
|
|
||||||
|
- short - True if this element is an optional short element
|
||||||
|
|
||||||
|
- short_alg - algorithm to shorten the field.
|
||||||
|
|
||||||
- list of Mappings - there would always be a GEDCOM mapping. Also we would
|
- list of Mappings - there would always be a GEDCOM mapping. Also we would
|
||||||
expect a CSL mapping
|
expect a CSL mapping
|
||||||
|
|
||||||
@@ -567,12 +573,18 @@ class TemplateElement(SecondaryObject):
|
|||||||
self.display = source.display
|
self.display = source.display
|
||||||
self.hint = source.hint
|
self.hint = source.hint
|
||||||
self.tooltip = source.tooltip
|
self.tooltip = source.tooltip
|
||||||
|
self.citation = source.citation
|
||||||
|
self.short - source.short
|
||||||
|
self.short_alg = source.short_alg
|
||||||
self.template_mapping_list = source.template_mapping_list
|
self.template_mapping_list = source.template_mapping_list
|
||||||
else:
|
else:
|
||||||
self.name = ""
|
self.name = ""
|
||||||
self.display = ""
|
self.display = ""
|
||||||
self.hint = ""
|
self.hint = ""
|
||||||
self.tooltip = ""
|
self.tooltip = ""
|
||||||
|
self.citation = False
|
||||||
|
self.short = False
|
||||||
|
self.short_alg = ""
|
||||||
self.template_mapping_list = []
|
self.template_mapping_list = []
|
||||||
|
|
||||||
def serialize(self):
|
def serialize(self):
|
||||||
@@ -668,6 +680,42 @@ class TemplateElement(SecondaryObject):
|
|||||||
"""
|
"""
|
||||||
self.tooltip = tooltip
|
self.tooltip = tooltip
|
||||||
|
|
||||||
|
def get_citation(self):
|
||||||
|
"""
|
||||||
|
Return the citation for the Template element.
|
||||||
|
"""
|
||||||
|
return self.citation
|
||||||
|
|
||||||
|
def set_citation(self, citation):
|
||||||
|
"""
|
||||||
|
Set the citation for the Template element according to the given argument.
|
||||||
|
"""
|
||||||
|
self.citation = citation
|
||||||
|
|
||||||
|
def get_short(self):
|
||||||
|
"""
|
||||||
|
Return the short for the Template element.
|
||||||
|
"""
|
||||||
|
return self.short
|
||||||
|
|
||||||
|
def set_short(self, short):
|
||||||
|
"""
|
||||||
|
Set the short for the Template element according to the given argument.
|
||||||
|
"""
|
||||||
|
self.short = short
|
||||||
|
|
||||||
|
def get_short_alg(self):
|
||||||
|
"""
|
||||||
|
Return the short_alg for the Template element.
|
||||||
|
"""
|
||||||
|
return self.short_alg
|
||||||
|
|
||||||
|
def set_short_alg(self, short_alg):
|
||||||
|
"""
|
||||||
|
Set the short_alg for the Template element according to the given argument.
|
||||||
|
"""
|
||||||
|
self.short_alg = short_alg
|
||||||
|
|
||||||
def get_template_mapping_list(self):
|
def get_template_mapping_list(self):
|
||||||
return self.template_mapping_list
|
return self.template_mapping_list
|
||||||
|
|
||||||
|
@@ -54,7 +54,6 @@ class Singleton(type):
|
|||||||
def __call__(cls, *args, **kwargs):
|
def __call__(cls, *args, **kwargs):
|
||||||
if cls not in cls._instances:
|
if cls not in cls._instances:
|
||||||
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
|
||||||
LOG.debug("**** Singleton metaclass initialised")
|
|
||||||
return cls._instances[cls]
|
return cls._instances[cls]
|
||||||
|
|
||||||
class SrcTemplateList(object):
|
class SrcTemplateList(object):
|
||||||
|
@@ -208,6 +208,7 @@ class TemplateFields(object):
|
|||||||
if SrcTemplateList().template_defined(key):
|
if SrcTemplateList().template_defined(key):
|
||||||
#a predefined template,
|
#a predefined template,
|
||||||
template = SrcTemplateList().get_template_from_name(key).get_structure()
|
template = SrcTemplateList().get_template_from_name(key).get_structure()
|
||||||
|
telist = SrcTemplateList().get_template_from_name(key).get_template_element_list()
|
||||||
else:
|
else:
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -226,24 +227,24 @@ class TemplateFields(object):
|
|||||||
self.btns = []
|
self.btns = []
|
||||||
row = 1
|
row = 1
|
||||||
# now add new fields
|
# now add new fields
|
||||||
fieldsL = []
|
long_source_fields = [x for x in telist
|
||||||
for fielddef in template[REF_TYPE_L]:
|
if not x.get_short() and not x.get_citation()]
|
||||||
hint = fielddef[9] or SrcAttributeType.get_default_hint(fielddef[1])
|
short_source_fields = [x for x in telist
|
||||||
|
if x.get_short() and not x.get_citation()]
|
||||||
fieldsL.append(fielddef[1])
|
long_citation_fields = [x for x in telist
|
||||||
if self.cite is None:
|
if not x.get_short() and x.get_citation()]
|
||||||
#these are source fields
|
short_citation_fields = [x for x in telist
|
||||||
self._add_entry(row, fielddef[1], fielddef[2],
|
if x.get_short() and x.get_citation()]
|
||||||
fielddef[9] or SrcAttributeType.get_default_hint(fielddef[1]),
|
|
||||||
fielddef[10] or SrcAttributeType.get_default_tooltip(fielddef[1]))
|
|
||||||
row += 1
|
|
||||||
|
|
||||||
tempsattrt = SrcAttributeType()
|
|
||||||
# now add optional short citation values
|
|
||||||
if self.cite is None:
|
if self.cite is None:
|
||||||
fieldsS = [fielddef for fielddef in template[REF_TYPE_S]
|
# source long fileds
|
||||||
if fielddef[1] in fieldsL and fielddef[7]==EMPTY]
|
for te in long_source_fields:
|
||||||
if fieldsS:
|
self._add_entry(row, te.get_name(), _(te.get_display()),
|
||||||
|
_(te.get_hint()), _(te.get_tooltip()))
|
||||||
|
row += 1
|
||||||
|
|
||||||
|
# now add short source fields (if any)
|
||||||
|
if short_source_fields:
|
||||||
self.gridfields.insert_row(row)
|
self.gridfields.insert_row(row)
|
||||||
lbl = Gtk.Label('')
|
lbl = Gtk.Label('')
|
||||||
lbl.set_markup(_("<b>Optional Short Versions:</b>"))
|
lbl.set_markup(_("<b>Optional Short Versions:</b>"))
|
||||||
@@ -251,36 +252,33 @@ class TemplateFields(object):
|
|||||||
self.gridfields.attach(lbl, 0, row-1, 2, 1)
|
self.gridfields.attach(lbl, 0, row-1, 2, 1)
|
||||||
self.lbls.append(lbl)
|
self.lbls.append(lbl)
|
||||||
row += 1
|
row += 1
|
||||||
for fielddef in fieldsS:
|
for te in short_source_fields:
|
||||||
lblval = fielddef[2]
|
self._add_entry(row, te.get_name(), _(te.get_display()),
|
||||||
if lblval:
|
_(te.get_hint()), _(te.get_tooltip()))
|
||||||
lblval = _('%(normal_version_label)s (Short)') % {
|
row += 1
|
||||||
'normal_version_label': lblval}
|
|
||||||
self._add_entry(row, tempsattrt.short_version(fielddef[1]), lblval)
|
# At source level add a header for the default citation values
|
||||||
|
if (long_citation_fields+short_citation_fields) and \
|
||||||
|
show_default_cite_fields:
|
||||||
|
self.gridfields.insert_row(row)
|
||||||
|
lbl = Gtk.Label('')
|
||||||
|
lbl.set_markup(_("<b>Optional Default Citation Fields:</b>"))
|
||||||
|
lbl.set_halign(Gtk.Align.START)
|
||||||
|
self.gridfields.attach(lbl, 0, row-1, 2, 1)
|
||||||
|
self.lbls.append(lbl)
|
||||||
row += 1
|
row += 1
|
||||||
|
|
||||||
# now add citation values (optional on source level)
|
# Either show citation fields or at source level the default values
|
||||||
fieldsF = [fielddef for fielddef in template[REF_TYPE_F]
|
|
||||||
if fielddef[1] not in fieldsL]
|
|
||||||
if fieldsF and show_default_cite_fields and self.cite is None:
|
|
||||||
self.gridfields.insert_row(row)
|
|
||||||
lbl = Gtk.Label('')
|
|
||||||
lbl.set_markup(_("<b>Optional Default Citation Fields:</b>"))
|
|
||||||
lbl.set_halign(Gtk.Align.START)
|
|
||||||
self.gridfields.attach(lbl, 0, row-1, 2, 1)
|
|
||||||
self.lbls.append(lbl)
|
|
||||||
row += 1
|
|
||||||
if show_default_cite_fields or (not self.cite is None):
|
if show_default_cite_fields or (not self.cite is None):
|
||||||
for fielddef in fieldsF:
|
for te in long_citation_fields:
|
||||||
self._add_entry(row, fielddef[1], fielddef[2],
|
self._add_entry(row, te.get_name(), _(te.get_display()),
|
||||||
fielddef[9] or SrcAttributeType.get_default_hint(fielddef[1]),
|
_(te.get_hint()), _(te.get_tooltip()))
|
||||||
fielddef[10] or SrcAttributeType.get_default_tooltip(fielddef[1]))
|
|
||||||
row += 1
|
row += 1
|
||||||
fieldsS = [fielddef for fielddef in template[REF_TYPE_S]
|
|
||||||
if fielddef[1] not in fieldsL and fielddef[7]==EMPTY]
|
# Finally the short citation fields (if any)
|
||||||
if not self.cite is None:
|
if not self.cite is None:
|
||||||
#we indicate with a text these are the short versions
|
#we indicate with a text these are the short versions
|
||||||
if fieldsS:
|
if short_citation_fields:
|
||||||
self.gridfields.insert_row(row)
|
self.gridfields.insert_row(row)
|
||||||
lbl = Gtk.Label('')
|
lbl = Gtk.Label('')
|
||||||
lbl.set_markup(_("<b>Optional Short Versions:</b>"))
|
lbl.set_markup(_("<b>Optional Short Versions:</b>"))
|
||||||
@@ -289,14 +287,11 @@ class TemplateFields(object):
|
|||||||
self.lbls.append(lbl)
|
self.lbls.append(lbl)
|
||||||
row += 1
|
row += 1
|
||||||
if show_default_cite_fields or (not self.cite is None):
|
if show_default_cite_fields or (not self.cite is None):
|
||||||
for fielddef in fieldsS:
|
for te in short_citation_fields:
|
||||||
lblval = fielddef[2]
|
self._add_entry(row, te.get_name(), _(te.get_display()),
|
||||||
if lblval:
|
_(te.get_hint()), _(te.get_tooltip()))
|
||||||
lblval = _('%(normal_version_label)s (Short)') % {
|
|
||||||
'normal_version_label': lblval}
|
|
||||||
self._add_entry(row, tempsattrt.short_version(fielddef[1]), lblval)
|
|
||||||
row += 1
|
row += 1
|
||||||
|
|
||||||
self.gridfields.show_all()
|
self.gridfields.show_all()
|
||||||
|
|
||||||
def _add_entry(self, row, srcattrtype, alt_label, hint=None, tooltip=None):
|
def _add_entry(self, row, srcattrtype, alt_label, hint=None, tooltip=None):
|
||||||
|
@@ -86,10 +86,8 @@ class EditSource(EditPrimary):
|
|||||||
# FIXME: Is there a cleaner place to initially load the template data?
|
# FIXME: Is there a cleaner place to initially load the template data?
|
||||||
global FIRST
|
global FIRST
|
||||||
if FIRST:
|
if FIRST:
|
||||||
LOG.debug("**** load csv data")
|
|
||||||
from gramps.plugins.srctemplates.importcsv import load_srctemplates_data
|
from gramps.plugins.srctemplates.importcsv import load_srctemplates_data
|
||||||
load_srctemplates_data()
|
load_srctemplates_data()
|
||||||
LOG.debug("**** csv data loaded\n\n")
|
|
||||||
FIRST = False
|
FIRST = False
|
||||||
self.srctemp = None
|
self.srctemp = None
|
||||||
self.citation = citation
|
self.citation = citation
|
||||||
|
@@ -36,6 +36,7 @@ from __future__ import print_function
|
|||||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||||
_ = glocale.translation.gettext
|
_ = glocale.translation.gettext
|
||||||
import csv
|
import csv
|
||||||
|
import collections
|
||||||
|
|
||||||
#-------------------------------------------------------------------------
|
#-------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
@@ -79,99 +80,98 @@ TOOLTIPCOL = 17
|
|||||||
UNKNOWN = 'UNKNOWN'
|
UNKNOWN = 'UNKNOWN'
|
||||||
DESCR = -10
|
DESCR = -10
|
||||||
|
|
||||||
# the GEDCOM type is predefined and always present. Other templates will be
|
|
||||||
# loaded via plugins
|
|
||||||
TEMPLATES = {
|
|
||||||
'GEDCOM': {
|
|
||||||
REF_TYPE_L: [
|
|
||||||
('', SrcAttributeType.AUTHOR, _(''), '.', EMPTY, False, False, EMPTY, GED_AUTHOR,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.TITLE, _(''), '.', STYLE_QUOTE, False, False, EMPTY, GED_TITLE,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.PUB_INFO, _(''), '', EMPTY, False, False, EMPTY, GED_PUBINF,
|
|
||||||
None, None),
|
|
||||||
],
|
|
||||||
REF_TYPE_F: [
|
|
||||||
('', SrcAttributeType.AUTHOR, _(''), ',', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.TITLE, _(''), ',', STYLE_QUOTE, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.PUB_INFO, _(''), '.', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.DATE, _(''), ' -', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.PAGE, _('Page(s)'), '.', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
],
|
|
||||||
REF_TYPE_S: [
|
|
||||||
('', SrcAttributeType.AUTHOR, _(''), ',', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.DATE, _(''), ' -', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
('', SrcAttributeType.PAGE, _('Page(s)'), '.', EMPTY, False, False, EMPTY, EMPTY,
|
|
||||||
None, None),
|
|
||||||
],
|
|
||||||
DESCR: '%(first)s - %(sec)s - %(third)s' % { 'first': _('Basic'), 'sec': _('GEDCOM Style'), 'third': _('')},
|
|
||||||
},
|
|
||||||
UNKNOWN: {
|
|
||||||
REF_TYPE_L: [
|
|
||||||
],
|
|
||||||
REF_TYPE_F: [
|
|
||||||
],
|
|
||||||
REF_TYPE_S: [
|
|
||||||
],
|
|
||||||
DESCR: _("Unrecognized Template. Download it's definition."),
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
def load_srctemplates_data():
|
def load_srctemplates_data():
|
||||||
"""
|
"""
|
||||||
Loads the srctemplates defined, and returns a dict with template data
|
Loads the srctemplates defined, and returns a dict with template data
|
||||||
"""
|
"""
|
||||||
|
LOG.debug("**** load_srctemplate_data. Starting")
|
||||||
|
load_srctemplate_gedcom()
|
||||||
|
LOG.debug("**** load_srctemplate_data. GEDCOM and UNKNOWN loaded")
|
||||||
|
|
||||||
|
|
||||||
from gramps.gen.plug import BasePluginManager
|
from gramps.gen.plug import BasePluginManager
|
||||||
bpmgr = BasePluginManager.get_instance()
|
bpmgr = BasePluginManager.get_instance()
|
||||||
pdatas = bpmgr.get_reg_srctemplates()
|
pdatas = bpmgr.get_reg_srctemplates()
|
||||||
templatemap = {}
|
|
||||||
|
|
||||||
for plugin in pdatas:
|
for plugin in pdatas:
|
||||||
mod = bpmgr.load_plugin(plugin)
|
mod = bpmgr.load_plugin(plugin)
|
||||||
if mod:
|
if mod:
|
||||||
csvfilename = mod.csvfile
|
csvfilename = mod.csvfile
|
||||||
|
LOG.debug("**** load_srctemplate_data. Loading csv from %s" % csvfilename)
|
||||||
with open(csvfilename, 'rb') as csvfile:
|
with open(csvfilename, 'rb') as csvfile:
|
||||||
templatemap.update(load_srctemplate_csv(csvfile))
|
load_srctemplate_csv(csvfile)
|
||||||
return templatemap
|
LOG.debug("**** load_srctemplate_data. csv data loaded")
|
||||||
|
|
||||||
def load_srctemplate_csv(csvfile):
|
def load_srctemplate_gedcom():
|
||||||
"""
|
"""
|
||||||
Loads a template csvfile, and returns a dict with template data
|
Loads the GEDCOM and UNKNOWN templates which are always pre-defined
|
||||||
Note: csvfile could be a list containing strings!
|
|
||||||
"""
|
"""
|
||||||
LOG.debug("**** importcsv.load_srctemplate_cvs called")
|
TEMPLATES = {
|
||||||
first = True
|
'GEDCOM': {
|
||||||
TYPE2CITEMAP = {}
|
REF_TYPE_L: [
|
||||||
TYPE2TEMPLATEMAP = {}
|
('', SrcAttributeType.AUTHOR, _(''), '.', EMPTY, False, False, EMPTY, GED_AUTHOR,
|
||||||
tlist = SrcTemplateList()
|
None, None),
|
||||||
CITE_TYPES = {'F': REF_TYPE_F, 'L': REF_TYPE_L, 'S': REF_TYPE_S}
|
('', SrcAttributeType.TITLE, _(''), '.', STYLE_QUOTE, False, False, EMPTY, GED_TITLE,
|
||||||
GEDCOMFIELDS = {'A': GED_AUTHOR, 'T': GED_TITLE,
|
None, None),
|
||||||
'P': GED_PUBINF, 'D': GED_DATE}
|
('', SrcAttributeType.PUB_INFO, _(''), '', EMPTY, False, False, EMPTY, GED_PUBINF,
|
||||||
SHORTERALG = {'LOC': SHORTERALG_LOC, 'YEAR': SHORTERALG_YEAR,
|
None, None),
|
||||||
'ETAL': SHORTERALG_ETAL, 'REV.': SHORTERALG_REVERT_TO_DOT}
|
],
|
||||||
STYLES = {'Quoted': STYLE_QUOTE, 'Italics': STYLE_EMPH,
|
REF_TYPE_F: [
|
||||||
'QuotedCont': STYLE_QUOTECONT, 'Bold': STYLE_BOLD}
|
('', SrcAttributeType.AUTHOR, _(''), ',', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
('', SrcAttributeType.TITLE, _(''), ',', STYLE_QUOTE, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
('', SrcAttributeType.PUB_INFO, _(''), '.', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
('', SrcAttributeType.DATE, _(''), ' -', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
('', SrcAttributeType.PAGE, _('Page(s)'), '.', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
],
|
||||||
|
REF_TYPE_S: [
|
||||||
|
('', SrcAttributeType.AUTHOR, _(''), ',', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
('', SrcAttributeType.DATE, _(''), ' -', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
('', SrcAttributeType.PAGE, _('Page(s)'), '.', EMPTY, False, False, EMPTY, EMPTY,
|
||||||
|
None, None),
|
||||||
|
],
|
||||||
|
DESCR: '%(first)s - %(sec)s - %(third)s' % { 'first': _('Basic'), 'sec': _('GEDCOM Style'), 'third': _('')},
|
||||||
|
},
|
||||||
|
UNKNOWN: {
|
||||||
|
REF_TYPE_L: [
|
||||||
|
],
|
||||||
|
REF_TYPE_F: [
|
||||||
|
],
|
||||||
|
REF_TYPE_S: [
|
||||||
|
],
|
||||||
|
DESCR: _("Unrecognized Template. Download it's definition."),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
template = SrcTemplate()
|
template = SrcTemplate()
|
||||||
template.set_name('GEDCOM')
|
template.set_name('GEDCOM')
|
||||||
template.set_descr('%(first)s - %(sec)s - %(third)s' % { 'first': _('Basic'), 'sec': _('GEDCOM Style'), 'third': _('')})
|
template.set_descr('%(first)s - %(sec)s - %(third)s' % { 'first': _('Basic'), 'sec': _('GEDCOM Style'), 'third': _('')})
|
||||||
handle = create_id()
|
handle = create_id()
|
||||||
template.set_handle(handle)
|
template.set_handle(handle)
|
||||||
TYPE2TEMPLATEMAP['GEDCOM'] = template
|
|
||||||
tlist = SrcTemplateList()
|
tlist = SrcTemplateList()
|
||||||
tlist.add_template(handle, template)
|
tlist.add_template(handle, template)
|
||||||
|
|
||||||
for (cite_type, slist) in TEMPLATES['GEDCOM'].iteritems():
|
for (cite_type, slist) in TEMPLATES['GEDCOM'].iteritems():
|
||||||
if cite_type != DESCR:
|
if cite_type != DESCR:
|
||||||
for struct in slist:
|
for struct in slist:
|
||||||
LOG.debug(struct)
|
if cite_type == REF_TYPE_L or cite_type == REF_TYPE_F:
|
||||||
|
elem = [x for x in template.get_template_element_list()
|
||||||
|
if x.get_name()==struct[1] and x.get_short()==False]
|
||||||
|
if elem:
|
||||||
|
te = elem[0]
|
||||||
|
else:
|
||||||
|
te = TemplateElement()
|
||||||
|
template.add_template_element(te)
|
||||||
|
elif cite_type == REF_TYPE_S:
|
||||||
|
te = TemplateElement()
|
||||||
|
template.add_template_element(te)
|
||||||
ldel = struct[0]
|
ldel = struct[0]
|
||||||
field_type = struct[1]
|
field_type = struct[1]
|
||||||
field_label = struct[2]
|
field_label = struct[2]
|
||||||
@@ -183,28 +183,62 @@ def load_srctemplate_csv(csvfile):
|
|||||||
gedcommap = struct[8]
|
gedcommap = struct[8]
|
||||||
hint = struct[9]
|
hint = struct[9]
|
||||||
tooltip = struct[10]
|
tooltip = struct[10]
|
||||||
te = TemplateElement()
|
|
||||||
te.set_name(field_type)
|
te.set_name(field_type)
|
||||||
te.set_display(field_label)
|
te.set_display(field_label)
|
||||||
te.set_hint(hint or SrcAttributeType.get_default_hint(field_type))
|
te.set_hint(hint or SrcAttributeType.get_default_hint(field_type))
|
||||||
te.set_tooltip(tooltip or SrcAttributeType.get_default_tooltip(field_type))
|
te.set_tooltip(tooltip or SrcAttributeType.get_default_tooltip(field_type))
|
||||||
template.add_template_element(te)
|
if cite_type == REF_TYPE_S:
|
||||||
|
te.set_short(True)
|
||||||
|
te.set_name(int(SrcAttributeType().short_version(te.get_name())))
|
||||||
|
if field_type == SrcAttributeType.PAGE or \
|
||||||
|
field_type == SrcAttributeType.DATE:
|
||||||
|
te.set_citation(True)
|
||||||
template.add_structure_element(cite_type, [(ldel, field_type,
|
template.add_structure_element(cite_type, [(ldel, field_type,
|
||||||
field_label, rdel, style, private, optional,
|
field_label, rdel, style, private, optional,
|
||||||
shorteralg, gedcommap, hint, tooltip)])
|
shorteralg, gedcommap, hint, tooltip)])
|
||||||
|
|
||||||
|
for handle in SrcTemplateList().get_template_list():
|
||||||
|
template = SrcTemplateList().get_template_from_handle(handle)
|
||||||
|
LOG.debug("source_type: %s" % template.get_name())
|
||||||
|
for te in template.get_template_element_list():
|
||||||
|
LOG.debug(" name: %s; display: %s; hint: %s; tooltip: %s; citation %s; "
|
||||||
|
"short %s; short_alg %s" %
|
||||||
|
(SrcAttributeType(te.get_name()).xml_str(),
|
||||||
|
te.get_display(), te.get_hint(),
|
||||||
|
te.get_tooltip(), te.get_citation(),
|
||||||
|
te.get_short(), te.get_short_alg()
|
||||||
|
))
|
||||||
|
|
||||||
|
# Now load the UNKNOWN template
|
||||||
template = SrcTemplate()
|
template = SrcTemplate()
|
||||||
template.set_name(UNKNOWN)
|
template.set_name(UNKNOWN)
|
||||||
template.set_descr(_("Unrecognized Template. Download it's definition."))
|
template.set_descr(_("Unrecognized Template. Download it's definition."))
|
||||||
handle = create_id()
|
handle = create_id()
|
||||||
template.set_handle(handle)
|
template.set_handle(handle)
|
||||||
TYPE2TEMPLATEMAP[UNKNOWN] = template
|
|
||||||
tlist = SrcTemplateList()
|
tlist = SrcTemplateList()
|
||||||
tlist.add_template(handle, template)
|
tlist.add_template(handle, template)
|
||||||
|
|
||||||
for cite_type in (REF_TYPE_F, REF_TYPE_L, REF_TYPE_S):
|
for cite_type in (REF_TYPE_F, REF_TYPE_L, REF_TYPE_S):
|
||||||
template.add_structure_element(cite_type, [])
|
template.add_structure_element(cite_type, [])
|
||||||
|
|
||||||
|
def load_srctemplate_csv(csvfile):
|
||||||
|
"""
|
||||||
|
Loads a template csvfile, and returns a dict with template data
|
||||||
|
Note: csvfile could be a list containing strings!
|
||||||
|
"""
|
||||||
|
first = True
|
||||||
|
TYPE2CITEMAP = {}
|
||||||
|
TYPE2TEMPLATEMAP = {}
|
||||||
|
TYPE2FIELDS = collections.defaultdict(lambda: collections.defaultdict(list))
|
||||||
|
tlist = SrcTemplateList()
|
||||||
|
CITE_TYPES = {'F': REF_TYPE_F, 'L': REF_TYPE_L, 'S': REF_TYPE_S}
|
||||||
|
GEDCOMFIELDS = {'A': GED_AUTHOR, 'T': GED_TITLE,
|
||||||
|
'P': GED_PUBINF, 'D': GED_DATE}
|
||||||
|
SHORTERALG = {'LOC': SHORTERALG_LOC, 'YEAR': SHORTERALG_YEAR,
|
||||||
|
'ETAL': SHORTERALG_ETAL, 'REV.': SHORTERALG_REVERT_TO_DOT}
|
||||||
|
STYLES = {'Quoted': STYLE_QUOTE, 'Italics': STYLE_EMPH,
|
||||||
|
'QuotedCont': STYLE_QUOTECONT, 'Bold': STYLE_BOLD}
|
||||||
|
|
||||||
reader = csv.reader(csvfile, delimiter=';')
|
reader = csv.reader(csvfile, delimiter=';')
|
||||||
|
|
||||||
prevtempl = ''
|
prevtempl = ''
|
||||||
@@ -286,13 +320,6 @@ def load_srctemplate_csv(csvfile):
|
|||||||
shorteralg = SHORTERALG.get(row[SHORTERCOL].strip()) or EMPTY
|
shorteralg = SHORTERALG.get(row[SHORTERCOL].strip()) or EMPTY
|
||||||
gedcommap = GEDCOMFIELDS.get(row[GEDCOMCOL].strip()) or EMPTY
|
gedcommap = GEDCOMFIELDS.get(row[GEDCOMCOL].strip()) or EMPTY
|
||||||
style = STYLES.get(row[STYLECOL].strip()) or EMPTY
|
style = STYLES.get(row[STYLECOL].strip()) or EMPTY
|
||||||
hint = row[HINTCOL]
|
|
||||||
tooltip = row[TOOLTIPCOL]
|
|
||||||
te = TemplateElement()
|
|
||||||
te.set_name(field_type)
|
|
||||||
te.set_display(_(field_label))
|
|
||||||
te.set_hint(_(hint) or SrcAttributeType.get_default_hint(field_type))
|
|
||||||
te.set_tooltip(_(tooltip) or SrcAttributeType.get_default_tooltip(field_type))
|
|
||||||
|
|
||||||
if source_type in TYPE2TEMPLATEMAP:
|
if source_type in TYPE2TEMPLATEMAP:
|
||||||
template = TYPE2TEMPLATEMAP[source_type]
|
template = TYPE2TEMPLATEMAP[source_type]
|
||||||
@@ -302,13 +329,73 @@ def load_srctemplate_csv(csvfile):
|
|||||||
template.set_handle(handle)
|
template.set_handle(handle)
|
||||||
TYPE2TEMPLATEMAP[source_type] = template
|
TYPE2TEMPLATEMAP[source_type] = template
|
||||||
tlist.add_template(handle, template)
|
tlist.add_template(handle, template)
|
||||||
# FIXME: If the template element is already present, don't add it again
|
|
||||||
template.add_template_element(te)
|
if cite_type == REF_TYPE_L or REF_TYPE_F:
|
||||||
|
elem = [x for x in template.get_template_element_list()
|
||||||
|
if x.get_name()==field_type and x.get_short()==False]
|
||||||
|
if elem:
|
||||||
|
te = elem[0]
|
||||||
|
else:
|
||||||
|
te = TemplateElement()
|
||||||
|
template.add_template_element(te)
|
||||||
|
hint = row[HINTCOL]
|
||||||
|
tooltip = row[TOOLTIPCOL]
|
||||||
|
te.set_name(field_type)
|
||||||
|
te.set_display(field_label)
|
||||||
|
te.set_hint(hint or te.get_hint())
|
||||||
|
te.set_tooltip(tooltip or te.get_tooltip())
|
||||||
|
te.set_short_alg(shorteralg)
|
||||||
|
if cite_type == REF_TYPE_S:
|
||||||
|
te = TemplateElement()
|
||||||
|
# field_type = int(SrcAttributeType().short_version(field_type))
|
||||||
|
te.set_name(field_type)
|
||||||
|
te.set_short_alg(shorteralg)
|
||||||
|
te.set_short(True)
|
||||||
|
lblval = field_label
|
||||||
|
if lblval:
|
||||||
|
te.set_display(_('%(normal_version_label)s (Short)') % {
|
||||||
|
'normal_version_label': lblval})
|
||||||
|
template.add_template_element(te)
|
||||||
|
TYPE2FIELDS[source_type][cite_type].append(field_type)
|
||||||
template.add_structure_element(cite_type, [(row[LDELCOL], field_type,
|
template.add_structure_element(cite_type, [(row[LDELCOL], field_type,
|
||||||
_(field_label), row[RDELCOL], style, private, optional,
|
_(field_label), row[RDELCOL], style, private, optional,
|
||||||
shorteralg, gedcommap, _(hint), _(tooltip))])
|
shorteralg, gedcommap, _(hint), _(tooltip))])
|
||||||
|
|
||||||
LOG.debug(tlist.get_template_list())
|
# Now we adjust some fields that could not be changed till all the data had
|
||||||
for handle in tlist.get_template_list():
|
# been read in
|
||||||
LOG.debug(tlist.get_template_from_handle(handle).to_struct())
|
for source_type in TYPE2FIELDS:
|
||||||
return TYPE2CITEMAP
|
template = TYPE2TEMPLATEMAP[source_type]
|
||||||
|
LOG.debug("source_type: %s" % source_type)
|
||||||
|
# First we determine which are citation fields
|
||||||
|
cite_fields = [field for field in
|
||||||
|
TYPE2FIELDS[source_type][REF_TYPE_F] +
|
||||||
|
TYPE2FIELDS[source_type][REF_TYPE_S]
|
||||||
|
if field not in TYPE2FIELDS[source_type][REF_TYPE_L]]
|
||||||
|
for te in template.get_template_element_list():
|
||||||
|
# Set the boolean if this is a citation field
|
||||||
|
if te.get_name() in cite_fields:
|
||||||
|
te.set_citation(True)
|
||||||
|
|
||||||
|
# Set the hint and tooltip to default if not already set
|
||||||
|
if not te.get_hint():
|
||||||
|
te.set_hint(SrcAttributeType.get_default_hint(te.get_name()))
|
||||||
|
if not te.get_tooltip():
|
||||||
|
te.set_tooltip(SrcAttributeType.get_default_tooltip(te.get_name()))
|
||||||
|
|
||||||
|
# If this is a short version, set the name accordingly. This could
|
||||||
|
# not be done earlier because we needed to keep the old 'non-short'
|
||||||
|
# name to find which fields belonged to citations as opposed to
|
||||||
|
# sources
|
||||||
|
if te.get_short() == True:
|
||||||
|
te.set_name(int(SrcAttributeType().short_version(te.get_name())))
|
||||||
|
LOG.debug(" name: %s; display: %s; hint: %s; tooltip: %s; "
|
||||||
|
"citation %s; short %s; short_alg %s" %
|
||||||
|
(SrcAttributeType(te.get_name()).xml_str(),
|
||||||
|
te.get_display(), te.get_hint(),
|
||||||
|
te.get_tooltip(), te.get_citation(),
|
||||||
|
te.get_short(), te.get_short_alg()
|
||||||
|
))
|
||||||
|
|
||||||
|
# LOG.debug(tlist.get_template_list())
|
||||||
|
# for handle in tlist.get_template_list():
|
||||||
|
# LOG.debug(tlist.get_template_from_handle(handle).to_struct())
|
||||||
|
Reference in New Issue
Block a user