From 1c6e288428c6b90178fc498fc874db03646d32c5 Mon Sep 17 00:00:00 2001 From: Dale Phurrough Date: Wed, 25 Aug 2021 02:14:48 +0200 Subject: [PATCH 1/2] another fix opencv/opencv#20575 --- testdata/dnn/download_models.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/testdata/dnn/download_models.py b/testdata/dnn/download_models.py index 6eca15c29..c1d325aa4 100755 --- a/testdata/dnn/download_models.py +++ b/testdata/dnn/download_models.py @@ -82,7 +82,12 @@ def get(self): print(' done') print(' file {}'.format(self.filename)) - return self.verify() + candidate_verify = self.verify() + if not candidate_verify: + if os.path.exists(self.filename): + print(' deleting invalid file') + os.remove(self.filename) + return candidate_verify def download(self): try: From 778223b5dd74bb7bec1f03ac8b0f3f124a88c735 Mon Sep 17 00:00:00 2001 From: Alexander Alekhin Date: Mon, 30 Aug 2021 18:36:37 +0000 Subject: [PATCH 2/2] download_models: rename downloaded content for further investigation --- testdata/dnn/download_models.py | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/testdata/dnn/download_models.py b/testdata/dnn/download_models.py index c1d325aa4..7cbbd4d40 100755 --- a/testdata/dnn/download_models.py +++ b/testdata/dnn/download_models.py @@ -51,7 +51,8 @@ def verify(self): break sha.update(buf) print(' actual {}'.format(sha.hexdigest())) - return self.sha == sha.hexdigest() + self.sha_actual = sha.hexdigest() + return self.sha == self.sha_actual except Exception as e: print(' catch {}'.format(e)) @@ -84,9 +85,7 @@ def get(self): print(' file {}'.format(self.filename)) candidate_verify = self.verify() if not candidate_verify: - if os.path.exists(self.filename): - print(' deleting invalid file') - os.remove(self.filename) + self.handle_bad_download() return candidate_verify def download(self): @@ -117,6 +116,27 @@ def save(self, r): print('>', end='') sys.stdout.flush() + def handle_bad_download(self): + if os.path.exists(self.filename): + # rename file for further investigation + try: + # NB: using `self.sha_actual` may create unbounded number of files + rename_target = self.filename + '.invalid' + # TODO: use os.replace (Python 3.3+) + try: + if os.path.exists(rename_target): # avoid FileExistsError on Windows from os.rename() + os.remove(rename_target) + finally: + os.rename(self.filename, rename_target) + print(' renaming invalid file to ' + rename_target) + except: + import traceback + traceback.print_exc() + finally: + if os.path.exists(self.filename): + print(' deleting invalid file') + os.remove(self.filename) + def GDrive(gid): def download_gdrive(dst):