diff --git a/oml/library.py b/oml/library.py index 775f19f..52c1fa8 100644 --- a/oml/library.py +++ b/oml/library.py @@ -183,6 +183,15 @@ class Peer(object): os.unlink(self._infopath) def sync_db(self): + ids = set(self.library.keys()) + changed = False + for name, l in self.info.get('lists', {}).items(): + removed = set(l) - ids + if removed: + self.info['lists'][name] = list(set(l) - removed) + changed = True + if changed: + self.sync_info() import item.models import user.models c_user_id = item.models.user_items.columns['user_id'] diff --git a/oml/queryparser.py b/oml/queryparser.py index ea4f9c0..7761495 100644 --- a/oml/queryparser.py +++ b/oml/queryparser.py @@ -103,8 +103,13 @@ class Parser(object): vk = getattr(self._sort, k) q = operators.eq(vk, v) ids = self._model.query.join(self._sort).filter(q).options(load_only('id')) - in_op = operators.notin_op if exclude else operators.in_op - q = in_op(self._model.id, ids) + if not ids: + q = operators.eq(self._model.id, '') + if exclude: + q = ~q + else: + in_op = operators.notin_op if exclude else operators.in_op + q = in_op(self._model.id, ids) return q elif key_type in ("string", "text"): if isinstance(v, str): diff --git a/oml/user/models.py b/oml/user/models.py index eee1c87..d260867 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -132,7 +132,7 @@ class User(db.Model): 'type': 'library' }) index = 0 - for name in peer.info['listorder']: + for name in peer.info.get('listorder', peer.info.get('lists', []).keys()): lists.append({ 'id': '%s:%s' % (self.nickname, name), 'user': self.name,