From: Marcin Koziej Date: Sat, 7 Dec 2013 17:17:06 +0000 (+0100) Subject: merging master X-Git-Tag: 1.7~121 X-Git-Url: https://git.mdrn.pl/librarian.git/commitdiff_plain/32177c13e6f1f07741f559601064538a65ce00fd?ds=inline merging master --- 32177c13e6f1f07741f559601064538a65ce00fd diff --cc librarian/dcparser.py index 7418f70,a690e8f..a7215a1 --- a/librarian/dcparser.py +++ b/librarian/dcparser.py @@@ -66,23 -82,34 +82,35 @@@ for now we will translate this to some try: # check out the "N. poł X w." syntax if isinstance(text, str): text = text.decode("utf-8") - m = re.match(u"(?:([12]) *poł[.]? )?([MCDXVI]+) *w[.]?", text) ++ + century_format = u"(?:([12]) *poł[.]? +)?([MCDXVI]+) *w[.,]*(?: *l[.]? *([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) if m: - - half = m.groups()[0] - if half is not None: + half = m.group(1) + decade = m.group(3) + century = roman_to_int(str(m.group(2))) + if half is not None: + if decade is not None: + raise ValueError("Bad date format. Cannot specify both half and decade of century") half = int(half) - else: - half = 1 - century = roman_to_int(str(m.groups()[1])) - t = ((century*100 + (half-1)*50), 1, 1) + t = ((century*100 + (half-1)*50), 1, 1) + else: + decade = int(decade or 0) + t = ((century*100 + decade), 1, 1) + elif m2: + 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: - text = re.sub(r"(po|ok[.]?) *", "", text) - try: - t = time.strptime(text, '%Y-%m-%d') - except ValueError: - t = time.strptime(re.split(r'[-/]', text)[0], '%Y') - return date(t[0], t[1], t[2]) + raise ValueError + + return DatePlus(t[0], t[1], t[2]) except ValueError, e: raise ValueError("Unrecognized date format. Try YYYY-MM-DD or YYYY.")