Skip to content

Commit 5c91b2b

Browse files
authored
Merge pull request #7 from ImageMarkup/clean-interrupt
Cleanup on keyboard interrupts
2 parents d3cb62f + 286eb42 commit 5c91b2b

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

isic_cli/cli/image.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import atexit
12
import csv
23
import itertools
34
from pathlib import Path
@@ -16,6 +17,11 @@
1617
from isic_cli.io.http import download_image, get_images, get_num_images
1718

1819

20+
def cleanup_partially_downloaded_files(directory: Path) -> None:
21+
for p in directory.glob('**/.isic-partial.*'):
22+
p.unlink()
23+
24+
1925
@click.group(short_help='Manage images.')
2026
@click.pass_obj
2127
def image(ctx):
@@ -73,6 +79,8 @@ def download(
7379
"""
7480
outdir.mkdir(exist_ok=True)
7581

82+
atexit.register(cleanup_partially_downloaded_files, outdir)
83+
7684
with Progress(console=Console(file=sys.stderr)) as progress:
7785
archive_num_images = get_num_images(ctx.session, search, collections)
7886
download_num_images = archive_num_images if limit == 0 else min(archive_num_images, limit)

isic_cli/io/http.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import logging
22
from pathlib import Path
3+
import shutil
4+
from tempfile import NamedTemporaryFile
35
from typing import Iterable, Optional, Union
46

57
from more_itertools import chunked
@@ -127,8 +129,12 @@ def download_image(image: dict, to: Path, progress, task) -> None:
127129
r = session.get(image['urls']['full'], stream=True)
128130
r.raise_for_status()
129131

130-
with open(to / f'{image["isic_id"]}.JPG', 'wb') as outfile:
132+
temp_file_name = None
133+
with NamedTemporaryFile(dir=to, prefix='.isic-partial.', delete=False) as outfile:
134+
temp_file_name = outfile.name
131135
for chunk in r.iter_content(1024 * 1024 * 5):
132136
outfile.write(chunk)
133137

138+
shutil.move(temp_file_name, to / f'{image["isic_id"]}.JPG')
139+
134140
progress.update(task, advance=1)

0 commit comments

Comments
 (0)