From 3a8429b9ac897137f4ae68024f83eecc388e3bbb Mon Sep 17 00:00:00 2001 From: j Date: Sat, 19 Jan 2019 13:59:35 +0530 Subject: [PATCH 1/5] append to listorder --- oml/library.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/oml/library.py b/oml/library.py index 54902d1..510e7d2 100644 --- a/oml/library.py +++ b/oml/library.py @@ -44,6 +44,11 @@ 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 = [] @@ -113,6 +118,10 @@ 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']: From 98bd2f6cf3f611470ca14dd59bcddccb401e41cf Mon Sep 17 00:00:00 2001 From: j Date: Sat, 19 Jan 2019 14:22:08 +0530 Subject: [PATCH 2/5] dont query for empty list --- oml/queryparser.py | 45 +++++++++++++++------------------------------ 1 file changed, 15 insertions(+), 30 deletions(-) diff --git a/oml/queryparser.py b/oml/queryparser.py index 27acd42..5ccc68a 100644 --- a/oml/queryparser.py +++ b/oml/queryparser.py @@ -107,33 +107,16 @@ 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')) - 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 + return self.in_ids(ids, exclude) elif k == 'id': if op == '&': ids = v else: ids = [v] - in_op = operators.notin_op if exclude else operators.in_op - q = in_op(self._model.id, ids) - return q + return self.in_ids(ids, exclude) elif k == 'fulltext': ids = find_fulltext(v) - 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 + return self.in_ids(ids, exclude) elif key_type in ("string", "text"): if isinstance(v, str): @@ -142,9 +125,7 @@ class Parser(object): if k != '*': q &= (self._find.key == k) ids = self._model.query.join(self._find).filter(q).options(load_only('id')) - in_op = operators.notin_op if exclude else operators.in_op - q = in_op(self._model.id, ids) - return q + return self.in_ids(ids, exclude) elif k == 'list': nickname, name = v.split(':', 1) if nickname: @@ -175,9 +156,7 @@ class Parser(object): ) else: ids = l.get_items().options(load_only('id')) - in_op = operators.notin_op if exclude else operators.in_op - q = in_op(self._model.id, ids) - return q + return self.in_ids(ids, exclude) elif key_type == 'date': def parse_date(d): while len(d) < 3: @@ -188,15 +167,21 @@ 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')) - in_op = operators.notin_op if exclude else operators.in_op - q = in_op(self._model.id, ids) - return q + return self.in_ids(ids, exclude) 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): ''' From 038b04c1784022652b4b2846d20c6575e55ecdd9 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 19 Jan 2019 14:37:15 +0530 Subject: [PATCH 3/5] add debugging --- oml/node/nodeapi.py | 1 + oml/nodes.py | 1 + 2 files changed, 2 insertions(+) diff --git a/oml/node/nodeapi.py b/oml/node/nodeapi.py index 7355b94..cf065d0 100644 --- a/oml/node/nodeapi.py +++ b/oml/node/nodeapi.py @@ -84,6 +84,7 @@ 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 60e3596..70fae05 100644 --- a/oml/nodes.py +++ b/oml/nodes.py @@ -462,6 +462,7 @@ 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) From 1adbcc3d0b5daefae8089f1ee2462dc885a97362 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 19 Jan 2019 16:11:05 +0530 Subject: [PATCH 4/5] broadcast name changes --- oml/user/api.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/oml/user/api.py b/oml/user/api.py index 6ecd50b..76525a9 100644 --- a/oml/user/api.py +++ b/oml/user/api.py @@ -97,6 +97,8 @@ 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: From 9344b84d86e9eebd1e65bc0191aff57d786cd2c4 Mon Sep 17 00:00:00 2001 From: j Date: Sat, 19 Jan 2019 16:40:06 +0530 Subject: [PATCH 5/5] remove double peering issues --- oml/user/models.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/oml/user/models.py b/oml/user/models.py index 0e09306..9679a00 100644 --- a/oml/user/models.py +++ b/oml/user/models.py @@ -154,15 +154,12 @@ 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()