diff --git a/oml/item/handlers.py b/oml/item/handlers.py index ca3733a..8bf1544 100644 --- a/oml/item/handlers.py +++ b/oml/item/handlers.py @@ -22,6 +22,7 @@ import tornado.concurrent from oxtornado import json_dumps, json_response from media import get_id +import state import logging logger = logging.getLogger(__name__) @@ -183,6 +184,9 @@ class UploadHandler(tornado.web.RequestHandler): with open(import_name, 'wb') as fd: fd.write(upload.body) file = add_file(id, import_name, prefix_books) + else: + user = state.user() + file.item.add_user(user) if listname and ids: l = List.get(settings.USER_ID, listname) if l: diff --git a/oml/item/models.py b/oml/item/models.py index fbf53c9..8326648 100644 --- a/oml/item/models.py +++ b/oml/item/models.py @@ -92,10 +92,12 @@ class Item(db.Model): return item def add_user(self, user): - self.users.append(user) + if not user in self.users: + self.users.append(user) l = user.library - l.items.append(self) - state.db.session.add(l) + if not self in l.items: + l.items.append(self) + state.db.session.add(l) def json(self, keys=None): j = {} @@ -382,7 +384,11 @@ class Item(db.Model): primaryid = self.meta.get('primaryid') logger.debug('scrape %s', primaryid) if primaryid: - m = meta.lookup(*primaryid) + try: + m = meta.lookup(*primaryid) + except: + logger.debug('meta.lookup %s failed:', primaryid, exc_info=True) + m = None if m: m['primaryid'] = primaryid self.meta = m