X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=m_librarian%2Finp.py;h=6d3bd7d120ce0d15e4157dbf7a41cc42bfddc3c0;hb=HEAD;hp=f46bea62fe2a5270cb2075ec36fdb4ecd2f55df3;hpb=35ed1dae004da9bc8b17c867735eb0b275d30d81;p=m_librarian.git diff --git a/m_librarian/inp.py b/m_librarian/inp.py index f46bea6..6d3bd7d 100644 --- a/m_librarian/inp.py +++ b/m_librarian/inp.py @@ -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))