Skip to content

Commit 8d8c566

Browse files
jkeifergadomski
authored andcommitted
don't remove workdir by default if user specified
1 parent da73ae8 commit 8d8c566

File tree

4 files changed

+40
-17
lines changed

4 files changed

+40
-17
lines changed

CHANGELOG.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,22 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
77

88
## [Unreleased]
99

10+
### Changed
11+
12+
- When a `workdir` is set for a `Task` the `workdir` will no longer be removed
13+
by default [#51](https://github.com/stac-utils/stac-task/pull/51)). That is,
14+
the `save_workdir` argument to `Task` constructor now defaults to `None`, and
15+
if left as `None` the default behavior is now conditional on whether or not a
16+
`workdir` is specified.
17+
18+
- If `workdir` is `None`, a temp directory will be created and `save_workdir`
19+
will default to `False` (remove working directory).
20+
- If a `workdir` is specified, then `save_workdir` will default to `True`
21+
(keep working directory).
22+
23+
In either case, an explicit `True` or `False` value for `save_workdir` will
24+
take precedence.
25+
1026
## [v0.1.1] - 2023-07-12
1127

1228
### Fixed

stactask/task.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def __init__(
6060
self: "Task",
6161
payload: Dict[str, Any],
6262
workdir: Optional[PathLike] = None,
63-
save_workdir: bool = False,
63+
save_workdir: Optional[bool] = None,
6464
skip_upload: bool = False,
6565
skip_validation: bool = False,
6666
):
@@ -76,16 +76,19 @@ def __init__(
7676
raise FailedValidation()
7777

7878
# set instance variables
79-
self._save_workdir = save_workdir
8079
self._skip_upload = skip_upload
8180
self._payload = payload
8281

8382
# create temporary work directory if workdir is None
8483
if workdir is None:
8584
self._workdir = Path(mkdtemp())
85+
# if we are using a temp workdir we want to rm by default
86+
self._save_workdir = save_workdir if save_workdir is not None else False
8687
else:
8788
self._workdir = Path(workdir)
8889
makedirs(self._workdir, exist_ok=True)
90+
# if a workdir was specified we don't want to rm by default
91+
self._save_workdir = save_workdir if save_workdir is not None else True
8992

9093
def __del__(self) -> None:
9194
# remove work directory if not running locally

tests/test_task.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python
22
import json
33
from pathlib import Path
4-
from typing import Any, Dict
4+
from typing import Any, Dict, Optional
55

66
import pytest
77

@@ -54,26 +54,32 @@ def test_edit_items2(nothing_task: Task) -> None:
5454
assert nothing_task._payload["features"][0]["type"] == "Feature"
5555

5656

57-
def test_tmp_workdir(items: Dict[str, Any]) -> None:
58-
nothing_task = NothingTask(items)
59-
assert nothing_task._save_workdir is False
57+
@pytest.mark.parametrize("save_workdir", [False, True, None])
58+
def test_tmp_workdir(items: Dict[str, Any], save_workdir: Optional[bool]) -> None:
59+
nothing_task = NothingTask(items, save_workdir=save_workdir)
60+
expected = save_workdir if save_workdir is not None else False
61+
assert nothing_task._save_workdir is expected
6062
workdir = nothing_task._workdir
6163
assert workdir.parts[-1].startswith("tmp")
6264
assert workdir.is_dir() is True
6365
del nothing_task
64-
assert workdir.is_dir() is False
65-
66-
67-
def test_workdir(items: Dict[str, Any]) -> None:
68-
t = NothingTask(items, workdir=testpath / "test_task", save_workdir=True)
69-
assert t._save_workdir is True
66+
assert workdir.is_dir() is expected
67+
68+
69+
@pytest.mark.parametrize("save_workdir", [False, True, None])
70+
def test_workdir(
71+
items: Dict[str, Any],
72+
tmp_path: Path,
73+
save_workdir: Optional[bool],
74+
) -> None:
75+
t = NothingTask(items, workdir=tmp_path / "test_task", save_workdir=save_workdir)
76+
expected = save_workdir if save_workdir is not None else True
77+
assert t._save_workdir is expected
7078
workdir = t._workdir
7179
assert workdir.parts[-1] == "test_task"
7280
assert workdir.is_dir() is True
7381
del t
74-
assert workdir.is_dir() is True
75-
workdir.rmdir()
76-
assert workdir.is_dir() is False
82+
assert workdir.is_dir() is expected
7783

7884

7985
def test_parameters(items: Dict[str, Any]) -> None:

tests/test_task_download.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ def test_download_item_asset(tmp_path: Path, item_collection: Dict[str, Any]) ->
3333
fname = item["assets"]["tileinfo_metadata"]["href"]
3434
filename = Path(fname)
3535
assert filename.is_file() is True
36-
del t
37-
assert filename.is_file() is False
3836

3937

4038
# @vcr.use_cassette(str(cassettepath / 'download_assets'))

0 commit comments

Comments
 (0)