From b0b97a2648bed1ee6dd966a2ad13f600241b8319 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 3 Mar 2021 00:46:15 +0100 Subject: [PATCH] fix bugs --- copyparty/httpcli.py | 4 +++- copyparty/u2idx.py | 6 +++--- copyparty/up2k.py | 30 ++++++++++++++++++++---------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index ba5587d7..b9a2c164 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -428,6 +428,7 @@ class HttpCli(object): body["ptop"] = vfs.realpath body["prel"] = rem body["addr"] = self.ip + body["vcfg"] = vfs.flags x = self.conn.hsrv.broker.put(True, "up2k.handle_json", body) response = x.get() @@ -1271,7 +1272,8 @@ class HttpCli(object): w = r[0][:16] tags = {} - for k, v in icur.execute("select k, v from mt where w = ?", (w,)): + q = "select k, v from mt where w = ? and k != 'x'" + for k, v in icur.execute(q, (w,)): taglist[k] = True tags[k] = v diff --git a/copyparty/u2idx.py b/copyparty/u2idx.py index 62cd8950..ee3a0001 100644 --- a/copyparty/u2idx.py +++ b/copyparty/u2idx.py @@ -37,7 +37,7 @@ class U2idx(object): fsize = body["size"] fhash = body["hash"] wark = up2k_wark_from_hashlist(self.args.salt, fsize, fhash) - return self.run_query(vols, "w = ?", [wark], "", []) + return self.run_query(vols, "w = ?", [wark], "", [])[0] def get_cur(self, ptop): cur = self.cur.get(ptop) @@ -115,7 +115,7 @@ class U2idx(object): w = hit["w"] del hit["w"] tags = {} - q = "select k, v from mt where w = ?" + q = "select k, v from mt where w = ? and k != 'x'" for k, v in cur.execute(q, (w,)): taglist[k] = True tags[k] = v @@ -124,7 +124,7 @@ class U2idx(object): ret.extend(sret) - return ret, taglist.keys() + return ret, list(taglist.keys()) def _open(ptop): diff --git a/copyparty/up2k.py b/copyparty/up2k.py index 2d69a5c2..54024aad 100644 --- a/copyparty/up2k.py +++ b/copyparty/up2k.py @@ -138,6 +138,16 @@ class Up2k(object): vols = auth.vfs.all_vols.values() t0 = time.time() + live_vols = [] + for vol in vols: + try: + os.listdir(vol.realpath) + live_vols.append(vol) + except: + self.log("\033[31mcannot access " + vol.realpath) + + vols = live_vols + # e2ds(a) volumes first, # also covers tags where e2ts is set for vol in vols: @@ -444,12 +454,9 @@ class Up2k(object): def _open_db(self, db_path): existed = os.path.exists(db_path) cur = self._orz(db_path) - try: - ver = self._read_ver(cur) - except: - ver = None - if not existed: - return self._create_db(db_path, cur) + ver = self._read_ver(cur) + if not existed and ver is None: + return self._create_db(db_path, cur) orig_ver = ver if not ver or ver < 3: @@ -571,6 +578,10 @@ class Up2k(object): return self._orz(db_path) def handle_json(self, cj): + if not self.register_vpath(cj["ptop"], cj["vcfg"]): + if cj["ptop"] not in self.registry: + raise Pebkac(410, "location unavailable") + cj["name"] = sanitize_fn(cj["name"]) cj["poke"] = time.time() wark = self._get_wark(cj) @@ -580,10 +591,9 @@ class Up2k(object): cur = self.cur.get(cj["ptop"], None) reg = self.registry[cj["ptop"]] if cur: - cur = cur.execute( - r"select * from up where substr(w,1,16) = ? and w = ?", - (wark[:16], wark,), - ) + q = r"select * from up where substr(w,1,16) = ? and w = ?" + argv = (wark[:16], wark) + cur = cur.execute(q, argv) for _, dtime, dsize, dp_dir, dp_fn in cur: if dp_dir.startswith("//") or dp_fn.startswith("//"): dp_dir, dp_fn = self.w8dec(dp_dir, dp_fn)