improve duplicate handling
This commit is contained in:
+41
-14
@@ -512,6 +512,7 @@ class AnonGui(wx.App):
|
|||||||
self.silent_fail = silent_fail
|
self.silent_fail = silent_fail
|
||||||
self.clear_files_on_start = clear_files
|
self.clear_files_on_start = clear_files
|
||||||
self.clear_files_on_close = clear_files_on_close
|
self.clear_files_on_close = clear_files_on_close
|
||||||
|
self.clear_files_on_upload = True
|
||||||
self.remove_files_on_annonymisation = remove_files_on_annonymisation
|
self.remove_files_on_annonymisation = remove_files_on_annonymisation
|
||||||
|
|
||||||
self.rqst = None
|
self.rqst = None
|
||||||
@@ -1027,7 +1028,17 @@ base site url: {self.base_site_url}
|
|||||||
path in self.file_duplicate_check
|
path in self.file_duplicate_check
|
||||||
and self.file_duplicate_check[path]["id"]
|
and self.file_duplicate_check[path]["id"]
|
||||||
):
|
):
|
||||||
menu.Append(3, "View on site")
|
if self.file_duplicate_check[path]["type"] == "series":
|
||||||
|
menu.Append(3, "View on site (series)")
|
||||||
|
menu.Bind(
|
||||||
|
wx.EVT_MENU,
|
||||||
|
lambda evt: webbrowser.open(
|
||||||
|
f"{self.base_site_url}{self.file_duplicate_check[path]['url']}"
|
||||||
|
),
|
||||||
|
id=3,
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
menu.Append(3, "View on site (uncategorised)")
|
||||||
menu.Bind(
|
menu.Bind(
|
||||||
wx.EVT_MENU,
|
wx.EVT_MENU,
|
||||||
lambda evt: webbrowser.open(
|
lambda evt: webbrowser.open(
|
||||||
@@ -1118,8 +1129,12 @@ base site url: {self.base_site_url}
|
|||||||
|
|
||||||
dlg.ShowModal()
|
dlg.ShowModal()
|
||||||
|
|
||||||
def ClearFiles(self, event=None, load_dir: bool = True):
|
def ClearFiles(self, event=None, load_dir: bool = True, files:None| list[(str, str)] = None):
|
||||||
|
if files is None:
|
||||||
files = Path(self.dir).glob("*")
|
files = Path(self.dir).glob("*")
|
||||||
|
else:
|
||||||
|
files = [Path(self.dir, f) for f, file_hash in files]
|
||||||
|
|
||||||
for f in files:
|
for f in files:
|
||||||
os.remove(f)
|
os.remove(f)
|
||||||
|
|
||||||
@@ -1243,7 +1258,7 @@ base site url: {self.base_site_url}
|
|||||||
|
|
||||||
if f in self.file_detail_map:
|
if f in self.file_detail_map:
|
||||||
d, hash, d2 = self.file_detail_map[f]
|
d, hash, d2 = self.file_detail_map[f]
|
||||||
print("in map")
|
print(f"{n}: in map")
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
dataset = pydicom.dcmread(f)
|
dataset = pydicom.dcmread(f)
|
||||||
@@ -1329,8 +1344,13 @@ base site url: {self.base_site_url}
|
|||||||
|
|
||||||
def upload(self):
|
def upload(self):
|
||||||
files_to_upload = []
|
files_to_upload = []
|
||||||
|
duplicate_files_not_uploaded = []
|
||||||
logger.debug("Upload files")
|
logger.debug("Upload files")
|
||||||
for f in self.files:
|
for f in self.files:
|
||||||
|
if f in self.file_duplicate_check:
|
||||||
|
# duplicate the api return format so ClearFiles works
|
||||||
|
duplicate_files_not_uploaded.append((f.name, "..."))
|
||||||
|
else:
|
||||||
files_to_upload.append(("files", open(str(f), "rb")))
|
files_to_upload.append(("files", open(str(f), "rb")))
|
||||||
|
|
||||||
# chunck files
|
# chunck files
|
||||||
@@ -1350,6 +1370,7 @@ base site url: {self.base_site_url}
|
|||||||
|
|
||||||
upload_file_list = []
|
upload_file_list = []
|
||||||
duplicate_file_list = []
|
duplicate_file_list = []
|
||||||
|
failed = []
|
||||||
|
|
||||||
for n, files in enumerate(chunked_files):
|
for n, files in enumerate(chunked_files):
|
||||||
|
|
||||||
@@ -1372,35 +1393,41 @@ base site url: {self.base_site_url}
|
|||||||
|
|
||||||
logger.debug(f"n: {n}")
|
logger.debug(f"n: {n}")
|
||||||
# try to upload the files
|
# try to upload the files
|
||||||
|
|
||||||
|
for i in range(3):
|
||||||
resp = upload_files(files)
|
resp = upload_files(files)
|
||||||
if resp.status_code == 200:
|
if resp.status_code == 200:
|
||||||
upload_file_list.extend(resp.json()["uploaded"])
|
upload_file_list.extend(resp.json()["uploaded"])
|
||||||
duplicate_file_list.extend(resp.json()["duplicates"])
|
duplicate_file_list.extend(resp.json()["duplicates"])
|
||||||
|
failed.extend(resp.json()["failed"])
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
logger.debug(f"n: {n} fail")
|
logger.debug(f"n: {n} fail (attempt {i})")
|
||||||
# try again if we fail
|
|
||||||
resp = upload_files(files)
|
|
||||||
if resp.status_code == 200:
|
|
||||||
upload_file_list.extend(resp.json()["uploaded"])
|
|
||||||
duplicate_file_list.extend(resp.json()["duplicates"])
|
|
||||||
continue
|
|
||||||
|
|
||||||
# progress_dialog.Destroy()
|
# progress_dialog.Destroy()
|
||||||
|
|
||||||
print(upload_file_list)
|
print(upload_file_list)
|
||||||
print(duplicate_file_list)
|
print("dup", duplicate_file_list)
|
||||||
|
print("failed", failed)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wx.CallAfter(
|
wx.CallAfter(
|
||||||
self.upload_complete_message, upload_file_list, duplicate_file_list
|
self.upload_complete_message, upload_file_list, duplicate_file_list, failed, duplicate_files_not_uploaded
|
||||||
)
|
)
|
||||||
|
|
||||||
def upload_complete_message(self, upload_file_list, duplicate_file_list):
|
if self.clear_files_on_upload:
|
||||||
|
all_files = upload_file_list + duplicate_file_list + duplicate_files_not_uploaded
|
||||||
|
print(all_files)
|
||||||
|
self.ClearFiles(event=None, load_dir=True, files=all_files)
|
||||||
|
|
||||||
|
def upload_complete_message(self, upload_file_list, duplicate_file_list, failed, duplicate_files_not_uploaded):
|
||||||
wx.MessageBox(
|
wx.MessageBox(
|
||||||
f"Files uploaded: {len(upload_file_list)}\nDuplicate files (not uploaded): {len(duplicate_file_list)}"
|
f"""Files uploaded: {len(upload_file_list)}
|
||||||
|
Duplicate files (not uploaded): {len(duplicate_file_list)}
|
||||||
|
Failed to upload: {len(failed)}
|
||||||
|
Duplicate files (not uploaded): {len(duplicate_files_not_uploaded)}"""
|
||||||
)
|
)
|
||||||
self.file_duplicate_check = {}
|
self.file_duplicate_check = {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user