diff --git a/oml/library.py b/oml/library.py index 510e7d2..54902d1 100644 --- a/oml/library.py +++ b/oml/library.py @@ -44,11 +44,6 @@ class Peer(object): self.info['peers'] = {} if 'lists' not in self.info: self.info['lists'] = {} - for name in self.info['lists']: - if 'listorder' not in self.info: - self.info['listorder'] = [] - if name not in self.info['listorder']: - self.info['listorder'].append(name) def apply_log(self): changes = [] @@ -118,10 +113,6 @@ class Peer(object): query = args[1] if name not in self.info['lists']: self.info['lists'][name] = [] - if 'listorder' not in self.info: - self.info['listorder'] = [] - if name not in self.info['listorder']: - self.info['listorder'].append(name) elif action == 'editlist': name, new = args if name in self.info['lists']: diff --git a/oml/node/nodeapi.py b/oml/node/nodeapi.py index cf065d0..7355b94 100644 --- a/oml/node/nodeapi.py +++ b/oml/node/nodeapi.py @@ -84,7 +84,6 @@ def api_upload(user_id, items): if peer: l = List.get_or_create(':Public') if l: - logger.debug('%s added items to public folder: %s', user_id, items) l.add_items(items) return True return False diff --git a/oml/nodes.py b/oml/nodes.py index 70fae05..60e3596 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -462,7 +462,6 @@ class Node(Thread): return False def upload(self, items): - logger.debug('add items to %s\'s public folder: %s', self.id, items) r = self.request('upload', items) return bool(r) diff --git a/oml/queryparser.py b/oml/queryparser.py index 5ccc68a..27acd42 100644 --- a/oml/queryparser.py +++ b/oml/queryparser.py @@ -107,16 +107,33 @@ 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')) - return self.in_ids(ids, exclude) + 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 k == 'id': if op == '&': ids = v else: ids = [v] - return self.in_ids(ids, exclude) + in_op = operators.notin_op if exclude else operators.in_op + q = in_op(self._model.id, ids) + return q elif k == 'fulltext': ids = find_fulltext(v) - return self.in_ids(ids, exclude) + if ids: + in_op = operators.notin_op if exclude else operators.in_op + q = in_op(self._model.id, ids) + else: + # nothing + q = operators.eq(self._model.id, -1) + if exclude: + q = ~q + return q elif key_type in ("string", "text"): if isinstance(v, str): @@ -125,7 +142,9 @@ class Parser(object): if k != '*': q &= (self._find.key == k) ids = self._model.query.join(self._find).filter(q).options(load_only('id')) - return self.in_ids(ids, exclude) + in_op = operators.notin_op if exclude else operators.in_op + q = in_op(self._model.id, ids) + return q elif k == 'list': nickname, name = v.split(':', 1) if nickname: @@ -156,7 +175,9 @@ class Parser(object): ) else: ids = l.get_items().options(load_only('id')) - return self.in_ids(ids, exclude) + in_op = operators.notin_op if exclude else operators.in_op + q = in_op(self._model.id, ids) + return q elif key_type == 'date': def parse_date(d): while len(d) < 3: @@ -167,21 +188,15 @@ class Parser(object): vk = getattr(self._sort, k) q = get_operator(op, 'int')(vk, v) ids = self._model.query.join(self._find).filter(q).options(load_only('id')) - return self.in_ids(ids, exclude) + in_op = operators.notin_op if exclude else operators.in_op + q = in_op(self._model.id, ids) + return q else: #integer, float, time q = get_operator(op, 'int')(getattr(self._sort, k), v) ids = self._model.query.join(self._find).filter(q).options(load_only('id')) - return self.in_ids(ids, exclude) - - def in_ids(self, ids, exclude): - if isinstance(ids, list) and 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 + return q def parse_conditions(self, conditions, operator): ''' diff --git a/oml/user/api.py b/oml/user/api.py index 76525a9..6ecd50b 100644 --- a/oml/user/api.py +++ b/oml/user/api.py @@ -97,8 +97,6 @@ def setPreferences(data): u.save() if change_username: add_record('editusername', data['username']) - if state.nodes and state.nodes.local: - state.nodes.local._update_if_ip_changed() if change_contact: add_record('editcontact', data['contact']) if change_path: diff --git a/oml/user/models.py b/oml/user/models.py index 9679a00..0e09306 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -154,12 +154,15 @@ class User(db.Model): if username: self.info['username'] = username self.update_name() + # FIXME: need to set peered to False to not trigger changelog event + # before other side receives acceptPeering request + self.peered = False + self.save() if not was_peering: add_record('addpeer', self.id, self.nickname) if 'index' not in self.info: self.info['index'] = max([ u.info.get('index', -1) for u in User.query.filter_by(peered=True) - if u.id != self.id ] + [0]) + 1 self.peered = True self.save()