X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/12b5230d8fdb3ad995e867fb5d58a69e8a627e68..09b0a045683b6a965e83c1512f0cc99907f2c65c:/librarian/dcparser.py diff --git a/librarian/dcparser.py b/librarian/dcparser.py index fd3eec5..f8dfaf9 100644 --- a/librarian/dcparser.py +++ b/librarian/dcparser.py @@ -40,13 +40,13 @@ class Person(object): surname = parts[0] names = [] elif len(parts) != 2: - raise ValueError("Invalid person name. There should be at most one comma: \"%s\"." % text) + raise ValueError("Invalid person name. There should be at most one comma: \"%s\"." % text.encode('utf-8')) else: surname = parts[0] if len(parts[1]) == 0: # there is no non-whitespace data after the comma raise ValueError("Found a comma, but no names given: \"%s\" -> %r." % (text, parts)) - names = [name for name in parts[1].split() if len(name)] # all non-whitespace tokens + names = parts[1].split() return cls(surname, *names) def readable(self): @@ -230,15 +230,15 @@ class WorkInfo(object): Field(DCNS('type'), 'type', required=False, multiple=True), Field(DCNS('contributor.editor'), 'editors', - as_person, salias='editor', multiple=True, default=[]), + as_person, salias='editor', multiple=True, required=False), Field(DCNS('contributor.technical_editor'), 'technical_editors', - as_person, salias='technical_editor', multiple=True, default=[]), - Field(DCNS('contributor.funding'), 'funders', salias='funder', multiple=True, default=[]), + as_person, salias='technical_editor', multiple=True, required=False), + Field(DCNS('contributor.funding'), 'funders', salias='funder', multiple=True, required=False), Field(DCNS('contributor.thanks'), 'thanks', required=False), Field(DCNS('date'), 'created_at'), Field(DCNS('date.pd'), 'released_to_public_domain_at', as_date, required=False), - Field(DCNS('publisher'), 'publisher'), + Field(DCNS('publisher'), 'publisher', multiple=True), Field(DCNS('language'), 'language'), Field(DCNS('description'), 'description', required=False), @@ -249,7 +249,7 @@ class WorkInfo(object): Field(DCNS('rights.license'), 'license', required=False), Field(DCNS('rights'), 'license_description'), - Field(PLMETNS('digitisationSponsor'), 'sponsors', multiple=True, default=[]), + Field(PLMETNS('digitisationSponsor'), 'sponsors', multiple=True, required=False), Field(WLNS('digitisationSponsorNote'), 'sponsor_note', required=False), Field(WLNS('developmentStage'), 'stage', required=False), ) @@ -310,6 +310,10 @@ class WorkInfo(object): text = text.decode('utf-8') val = TextPlus(text) val.lang = e.attrib.get(XMLNS('lang'), lang) + if e.tag == 'meta': + meta_id = e.attrib.get('id') + if meta_id and meta_id.endswith('-id'): + field_dict[meta_id] = [val.replace('ISBN-', 'ISBN ')] else: val = e.text fv.append(val) @@ -446,9 +450,11 @@ class BookInfo(WorkInfo): Field(DCNS('subject.period'), 'epochs', salias='epoch', multiple=True, required=False), Field(DCNS('subject.type'), 'kinds', salias='kind', multiple=True, required=False), Field(DCNS('subject.genre'), 'genres', salias='genre', multiple=True, required=False), - + + Field(DCNS('subject.location'), 'location', required=False), + Field(DCNS('contributor.translator'), 'translators', - as_person, salias='translator', multiple=True, default=[]), + as_person, salias='translator', multiple=True, required=False), Field(DCNS('relation.hasPart'), 'parts', WLURI, strict=as_wluri_strict, multiple=True, required=False), Field(DCNS('relation.isVariantOf'), 'variant_of', WLURI, strict=as_wluri_strict, required=False), @@ -458,6 +464,12 @@ class BookInfo(WorkInfo): # WLCover-specific. Field(WLNS('coverBarColor'), 'cover_bar_color', required=False), Field(WLNS('coverBoxPosition'), 'cover_box_position', required=False), + Field(WLNS('coverClass'), 'cover_class', default=['default']), + Field('pdf-id', 'isbn_pdf', required=False), + Field('epub-id', 'isbn_epub', required=False), + Field('mobi-id', 'isbn_mobi', required=False), + Field('txt-id', 'isbn_txt', required=False), + Field('html-id', 'isbn_html', required=False), )