- def readable(self):
- return u" ".join(self.first_names + (self.last_name,))
-
- def __eq__(self, right):
- return self.last_name == right.last_name and self.first_names == right.first_names
-
- def __lt__(self, other):
- return (self.last_name, self.first_names) < (other.last_name, other.first_names)
-
- def __hash__(self):
- return hash((self.last_name, self.first_names))
-
- def __str__(self):
- if len(self.first_names) > 0:
- return '%s, %s' % (self.last_name, ' '.join(self.first_names))
- else:
- return self.last_name
-
- def __repr__(self):
- return 'Person(last_name=%r, first_names=*%r)' % (self.last_name, self.first_names)
-
-
-def as_date(text):
- """Dates for digitization of pictures. It seems we need the following:
-ranges: '1350-1450',
-centuries: "XVIII w.'
-half centuries/decades: '2 poł. XVIII w.', 'XVII w., l. 20'
-later-then: 'po 1450'
-circa 'ok. 1813-1814', 'ok.1876-ok.1886
-turn: 1893/1894
-for now we will translate this to some single date losing information of course.
- """
- try:
- # check out the "N. poł X w." syntax
- if isinstance(text, six.binary_type):
- text = text.decode("utf-8")
-
- 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.group(1)
- decade = m.group(3)
- century = roman_to_int(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)
- 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:
- raise ValueError
-
- return DatePlus(t[0], t[1], t[2])
- except ValueError as e:
- raise ValueError("Unrecognized date format. Try YYYY-MM-DD or YYYY.")
-
-
-def as_person(text):
- return Person.from_text(text)
-
-
-def as_unicode(text):
- if isinstance(text, six.text_type):
- return text
- else:
- return TextPlus(text.decode('utf-8'))
-
-
-def as_wluri_strict(text):
- return WLURI.strict(text)
-
-
-class Field(object):
- def __init__(self, uri, attr_name, validator=as_unicode, strict=None, multiple=False, salias=None, **kwargs):