7212: convert invalid date to text on .gw import

Back-port from master [829986] [1ac0e2]
This commit is contained in:
Vassilii Khachaturov 2013-11-27 18:21:15 +02:00
parent d8f5d40c4c
commit 0753f87630
2 changed files with 64 additions and 5 deletions

View File

@ -96,9 +96,10 @@ def importData(database, filename, cb=None):
class GeneWebParser(object):
def __init__(self, dbase, file):
self.db = dbase
self.f = open(file,"rU")
self.filename = file
self.encoding = 'iso-8859-1'
if file: # Unit tests can create the parser w/o underlying file
self.f = open(file,"rU")
self.filename = file
self.encoding = 'iso-8859-1'
def get_next_line(self):
self.lineno += 1
@ -805,8 +806,17 @@ class GeneWebParser(object):
sub2 = (0,0,0)
cal1 = _cal_map.get(groups[2],gen.lib.Date.CAL_GREGORIAN)
sub1 = self.sub_date(groups[1])
date.set(gen.lib.Date.QUAL_NONE,mod, cal1,
(sub1[0],sub1[1],sub1[2],0,sub2[0],sub2[1],sub2[2],0))
try:
date.set(gen.lib.Date.QUAL_NONE,mod, cal1,
(sub1[0],sub1[1],sub1[2],0,sub2[0],sub2[1],sub2[2],0))
except gen.lib.DateError as e:
# TRANSLATORS: leave the {date} and {gw_snippet} untranslated
# in the format string, but you may re-order them if needed.
LOG.warning(_(
"Invalid date {date} in {gw_snippet}, "
"preserving date as text."
).format(date=e.date.dateval, gw_snippet=field))
date.set(modifier=gen.lib.Date.MOD_TEXTONLY, text=field)
return date
else:
return None

View File

@ -0,0 +1,49 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2013 Vassilii Khachaturov
#
# 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
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
"""
Unit test of the GeneWebParser
"""
from __future__ import print_function
import unittest
import sys
import os
sys.path.append(os.curdir)
sys.path.append(os.path.join(os.curdir, 'plugins', 'import'))
from ImportGeneWeb import GeneWebParser
from gen.lib.date import Date
class ParseDateTest(unittest.TestCase):
def setUp(self):
self.parse = GeneWebParser(dbase=None, file=None).parse_date
def test_regular_date_parsed_dmy(self):
d = self.parse("28/2/1876")
self.assertEqual(d.get_ymd(), (1876, 2, 28))
def test_invalid_date_stays_verbatim_text(self):
text = "29/2/1875"
d = self.parse(text)
self.assertEqual(d.get_modifier(), Date.MOD_TEXTONLY)
self.assertEqual(d.get_text(), text)
if __name__ == "__main__":
unittest.main()