]> git.phdru.name Git - m_librarian.git/blobdiff - m_librarian/inp.py
Docs: Update TODO
[m_librarian.git] / m_librarian / inp.py
index f46bea62fe2a5270cb2075ec36fdb4ecd2f55df3..6d3bd7d120ce0d15e4157dbf7a41cc42bfddc3c0 100644 (file)
@@ -1,8 +1,10 @@
 
 import os
 from zipfile import ZipFile
-from sqlobject import sqlhub
+
+from sqlobject import dberrors, sqlhub
 from sqlobject.sqlbuilder import Select
+
 from .db import Author, Book, Extension, Genre, Language, \
     insert_name, insert_author
 
@@ -69,7 +71,17 @@ def import_inp_line(archive, parts):
     for genre in genres.split(':'):
         if genre:
             genre_row = insert_name(Genre, genre, title=genre)
-            book.addGenre(genre_row)
+            try:
+                book.addGenre(genre_row)
+            except dberrors.DuplicateEntryError:
+                pass  # The genre has already been added
+
+
+def tounicode(s):
+    if isinstance(s, bytes):
+        return s.decode('utf-8')
+    else:
+        return s
 
 
 def import_inp(archive, inp):
@@ -78,7 +90,7 @@ def import_inp(archive, inp):
     connection = sqlhub.processConnection
     for file, in connection.queryAll(connection.sqlrepr(
             Select(Book.q.file, Book.q.archive == archive))):
-        files.add((archive, file.decode('utf-8')))
+        files.add((archive, tounicode(file)))
     for line in inp:
         line = line.decode('utf-8')
         _archive, parts = split_line(line)
@@ -86,7 +98,7 @@ def import_inp(archive, inp):
             archives.add(_archive)
             for file, in connection.queryAll(connection.sqlrepr(
                     Select(Book.q.file, Book.q.archive == _archive))):
-                files.add((_archive, file.decode('utf-8')))
+                files.add((_archive, tounicode(file)))
         file = parts[5]
         if (_archive or archive, file) not in files:
             files.add((_archive or archive, file))