CRLF in epub
[librarian.git] / librarian / dcparser.py
index fd3eec5..f8dfaf9 100644 (file)
@@ -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),
     )