From: Marcin Koziej Date: Wed, 6 Nov 2013 15:30:30 +0000 (+0100) Subject: More on date format X-Git-Tag: 1.7~121^2~2 X-Git-Url: https://git.mdrn.pl/librarian.git/commitdiff_plain/859b209f96275dce7205f7c8011784d409a48de8?ds=sidebyside;hp=--cc More on date format --- 859b209f96275dce7205f7c8011784d409a48de8 diff --git a/librarian/dcparser.py b/librarian/dcparser.py index 1df1e5a..cb212a3 100644 --- a/librarian/dcparser.py +++ b/librarian/dcparser.py @@ -76,7 +76,7 @@ for now we will translate this to some single date losing information of course. # check out the "N. poł X w." syntax if isinstance(text, str): text = text.decode("utf-8") century_format = u"(?:([12]) *poł[.]? +)?([MCDXVI]+) *w[.,]*(?: *l[.]? *([0-9]+))?" - vague_format = u"(?:po *|ok. *)([0-9]+)" + vague_format = u"(?:po *|ok. *)?([0-9]{4})(-[0-9]{2}-[0-9]{2})?" m = re.match(century_format, text) m2 = re.match(vague_format, text) @@ -93,13 +93,14 @@ for now we will translate this to some single date losing information of course. decade = int(decade or 0) t = ((century*100 + decade), 1, 1) elif m2: - year = int(m2.group(1)) - t = (year, 1, 1) + year = m2.group(1) + mon_day = m2.group(2) + if mon_day: + t = time.strptime(year + mon_day, "%Y-%m-%d") + else: + t = time.strptime(year, '%Y') else: - try: - t = time.strptime(text, '%Y-%m-%d') - except ValueError: - t = time.strptime(text, '%Y') + raise ValueError return date(t[0], t[1], t[2]) except ValueError, e: diff --git a/tests/test_dcparser.py b/tests/test_dcparser.py index 734c0b9..b9a28f0 100644 --- a/tests/test_dcparser.py +++ b/tests/test_dcparser.py @@ -51,7 +51,6 @@ def test_asdate(): assert_equals(dcparser.as_date(u"2011"), date(2011, 1, 1)) assert_equals(dcparser.as_date(u"2 poł. XIX w."), date(1950, 1, 1)) assert_equals(dcparser.as_date(u"XVII w., l. 20"), date(1720, 1, 1)) - import pdb; pdb.set_trace() assert_equals(dcparser.as_date(u"po 1460"), date(1460, 1, 1)) assert_equals(dcparser.as_date(u"ok. 1813-1814"), date(1813, 1, 1)) assert_equals(dcparser.as_date(u"ok.1876-ok.1886"), date(1876, 1, 1))