-__all__ = ['import_inpx']
-
import os
from zipfile import ZipFile
-from sqlobject import sqlhub, SQLObjectNotFound
+from sqlobject import sqlhub
+from sqlobject.sqlbuilder import Select
from .db import Author, Book, Extension, Genre, Language, \
insert_name, insert_author
+__all__ = ['import_inpx']
+
EOT = chr(4) # INP field separator
def import_inp_line(archive, parts):
authors, genres, title, series, ser_no, file, size, lib_id, deleted, \
extension, date, language = parts
- try:
- Book.archive_file_idx.get(archive, file)
- except SQLObjectNotFound:
- pass
- else:
- return
try:
ser_no = int(ser_no)
except ValueError:
lib_id=lib_id, deleted=deleted,
extension=extension_row, date=date,
language=language_row)
- for author in authors.split(':'):
+ authors = authors.split(':')
+ seen_authors = set()
+ for author in authors:
if author:
+ if author in seen_authors:
+ continue
+ seen_authors.add(author)
alist = author.split(',', 2)
surname = alist[0]
if len(alist) > 1:
def import_inp(archive, inp):
+ files = set()
+ connection = sqlhub.processConnection
+ for file, in connection.queryAll(connection.sqlrepr(
+ Select(Book.q.file, Book.q.archive == archive))):
+ files.add(file)
for line in inp:
- import_inp_line(archive, split_line(line))
+ parts = split_line(line)
+ file = parts[5]
+ if file not in files:
+ files.add(file)
+ import_inp_line(archive, parts)
def import_inpx(path):