Skip to content

Commit c2bbf2f

Browse files
committed
Refactored TemporaryFile and GitRepository into context managers.
Signed-off-by: dblock <[email protected]>
1 parent 42dfa6e commit c2bbf2f

File tree

27 files changed

+162
-136
lines changed

27 files changed

+162
-136
lines changed

src/assemble_workflow/bundle.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
import shutil
1111
import subprocess
1212
import tarfile
13-
import tempfile
1413
from abc import ABC, abstractmethod
1514

1615
from paths.script_finder import ScriptFinder
16+
from system.temporary_directory import TemporaryDirectory
1717

1818
"""
1919
This class is responsible for executing the build of the full bundle and passing results to a bundle recorder.
@@ -34,7 +34,7 @@ def __init__(self, build_manifest, artifacts_dir, bundle_recorder):
3434
self.plugins = self.__get_plugins(build_manifest.components)
3535
self.artifacts_dir = artifacts_dir
3636
self.bundle_recorder = bundle_recorder
37-
self.tmp_dir = tempfile.TemporaryDirectory()
37+
self.tmp_dir = TemporaryDirectory()
3838
self.installed_plugins = []
3939
self.min_tarball_path = self._copy_component(self.min_tarball, "dist")
4040
self.__unpack_min_tarball(self.tmp_dir.name)

src/git/git_repository.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
import logging
88
import os
99
import subprocess
10-
import tempfile
1110
from pathlib import Path
1211

12+
from system.temporary_directory import TemporaryDirectory
13+
1314

1415
class GitRepository:
1516
"""
@@ -22,7 +23,7 @@ def __init__(self, url, ref, directory=None, working_subdirectory=None):
2223
self.url = url
2324
self.ref = ref
2425
if directory is None:
25-
self.temp_dir = tempfile.TemporaryDirectory()
26+
self.temp_dir = TemporaryDirectory()
2627
self.dir = os.path.realpath(self.temp_dir.name)
2728
else:
2829
self.temp_dir = None
@@ -41,6 +42,13 @@ def __checkout__(self):
4142
self.sha = self.output("git rev-parse HEAD", self.dir)
4243
logging.info(f"Checked out {self.url}@{self.ref} into {self.dir} at {self.sha}")
4344

45+
def __enter__(self):
46+
return self
47+
48+
def __exit__(self, exc_type, exc_value, exc_traceback):
49+
if self.temp_dir:
50+
self.temp_dir.__exit__(exc_type, exc_value, exc_traceback)
51+
4452
@property
4553
def working_directory(self):
4654
if self.working_subdirectory:

src/manifests_workflow/component_opensearch.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,18 @@ def checkout(
2323
snapshot=False,
2424
working_directory=None,
2525
):
26-
return ComponentOpenSearch(
27-
name,
28-
GitRepository(
29-
f"https://github.com/opensearch-project/{name}.git",
30-
branch,
31-
path,
32-
working_directory,
33-
),
34-
opensearch_version,
35-
snapshot,
36-
)
26+
with GitRepository(
27+
f"https://github.com/opensearch-project/{name}.git",
28+
branch,
29+
path,
30+
working_directory,
31+
) as repo:
32+
return ComponentOpenSearch(
33+
name,
34+
repo,
35+
opensearch_version,
36+
snapshot,
37+
)
3738

3839
def __init__(self, name, repo, opensearch_version, snapshot=False):
3940
super().__init__(name, repo, snapshot)

src/manifests_workflow/component_opensearch_dashboards_min.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,15 @@ def branches(self):
2121

2222
@classmethod
2323
def checkout(self, path, branch="main", snapshot=False):
24-
return ComponentOpenSearchDashboardsMin(
25-
GitRepository(
26-
"https://github.com/opensearch-project/OpenSearch-Dashboards.git",
27-
branch,
28-
path,
29-
),
30-
snapshot,
31-
)
24+
with GitRepository(
25+
"https://github.com/opensearch-project/OpenSearch-Dashboards.git",
26+
branch,
27+
path,
28+
) as repo:
29+
return ComponentOpenSearchDashboardsMin(
30+
repo,
31+
snapshot,
32+
)
3233

3334
@property
3435
def properties(self):

src/manifests_workflow/input_manifests.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,16 @@ def update(self, min_klass, component_klass, keep=False):
4040
known_versions = self.versions
4141
logging.info(f"Known versions: {known_versions}")
4242
main_versions = {}
43-
with TemporaryDirectory(keep=keep) as work_dir:
44-
logging.info(f"Checking out components into {work_dir}")
45-
os.chdir(work_dir)
43+
with TemporaryDirectory.mkdtemp(keep=keep) as work_dir:
44+
logging.info(f"Checking out components into {work_dir.name}")
45+
os.chdir(work_dir.name)
4646

4747
# check out and build #main, 1.x, etc.
4848
branches = min_klass.branches()
4949
logging.info(f"Checking {self.name} {branches} branches")
5050
for branch in branches:
5151
c = min_klass.checkout(
52-
path=os.path.join(work_dir, f"{self.name.replace(' ', '')}/{branch}"),
52+
path=os.path.join(work_dir.name, f"{self.name.replace(' ', '')}/{branch}"),
5353
branch=branch,
5454
)
5555
version = c.version
@@ -67,7 +67,7 @@ def update(self, min_klass, component_klass, keep=False):
6767
logging.info(f"Checking out {component.name}#main")
6868
component = component_klass.checkout(
6969
name=component.name,
70-
path=os.path.join(work_dir, component.name),
70+
path=os.path.join(work_dir.name, component.name),
7171
version=manifest.build.version,
7272
branch="main",
7373
)

src/run_assemble.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@
1010
import logging
1111
import os
1212
import sys
13-
import tempfile
1413

1514
from assemble_workflow.bundle_recorder import BundleRecorder
1615
from assemble_workflow.bundles import Bundles
1716
from manifests.build_manifest import BuildManifest
1817
from system import console
18+
from system.temporary_directory import TemporaryDirectory
1919

2020

2121
def main():
@@ -40,10 +40,10 @@ def main():
4040
output_dir = os.path.join(os.getcwd(), "bundle")
4141
os.makedirs(output_dir, exist_ok=True)
4242

43-
with tempfile.TemporaryDirectory() as work_dir:
43+
with TemporaryDirectory.mkdtemp() as work_dir:
4444
logging.info(f"Bundling {build.name} ({build.architecture}) on {build.platform} into {output_dir} ...")
4545

46-
os.chdir(work_dir)
46+
os.chdir(work_dir.name)
4747

4848
bundle_recorder = BundleRecorder(build, output_dir, artifacts_dir)
4949

src/run_build.py

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ def main():
2525
console.configure(level=args.logging_level)
2626
manifest = InputManifest.from_file(args.manifest)
2727

28-
with TemporaryDirectory(keep=args.keep) as work_dir:
28+
with TemporaryDirectory.mkdtemp(keep=args.keep) as work_dir:
2929
output_dir = os.path.join(os.getcwd(), "artifacts")
3030

31-
logging.info(f"Building in {work_dir}")
31+
logging.info(f"Building in {work_dir.name}")
3232

33-
os.chdir(work_dir)
33+
os.chdir(work_dir.name)
3434

3535
target = BuildTarget(
3636
name=manifest.build.name,
@@ -52,20 +52,19 @@ def main():
5252
continue
5353

5454
logging.info(f"Building {component.name}")
55-
repo = GitRepository(
55+
with GitRepository(
5656
component.repository,
5757
component.ref,
58-
os.path.join(work_dir, component.name),
58+
os.path.join(work_dir.name, component.name),
5959
component.working_directory,
60-
)
61-
62-
try:
63-
builder = Builder(component.name, repo, build_recorder)
64-
builder.build(target)
65-
builder.export_artifacts()
66-
except:
67-
logging.error(f"Error building {component.name}, retry with: {args.component_command(component.name)}")
68-
raise
60+
) as repo:
61+
try:
62+
builder = Builder(component.name, repo, build_recorder)
63+
builder.build(target)
64+
builder.export_artifacts()
65+
except:
66+
logging.error(f"Error building {component.name}, retry with: {args.component_command(component.name)}")
67+
raise
6968

7069
build_recorder.write_manifest()
7170

src/run_bwc_test.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@
1818
def main():
1919
args = TestArgs()
2020
console.configure(level=args.logging_level)
21-
with TemporaryDirectory(keep=args.keep) as work_dir:
22-
logging.info("Switching to temporary work_dir: " + work_dir)
21+
with TemporaryDirectory.mkdtemp(keep=args.keep) as work_dir:
22+
logging.info("Switching to temporary work_dir: f{work_dir.name}")
2323
bundle_manifest = BundleManifest.from_s3(
2424
args.s3_bucket,
2525
args.build_id,
2626
args.opensearch_version,
2727
args.architecture,
28-
work_dir,
28+
work_dir.name,
2929
)
30-
BwcTestSuite(bundle_manifest, work_dir, args.component, args.keep).execute()
30+
BwcTestSuite(bundle_manifest, work_dir.name, args.component, args.keep).execute()
3131

3232

3333
if __name__ == "__main__":

src/run_checkout.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,22 @@ def main():
2222
console.configure(level=args.logging_level)
2323
manifest = InputManifest.from_file(args.manifest)
2424

25-
with TemporaryDirectory(keep=True) as work_dir:
26-
logging.info(f"Checking out into {work_dir}")
25+
with TemporaryDirectory(keep=True).mkdtemp() as work_dir:
26+
logging.info(f"Checking out into {work_dir.name}")
2727

28-
os.chdir(work_dir)
28+
os.chdir(work_dir.name)
2929

3030
for component in manifest.components:
3131

3232
logging.info(f"Checking out {component.name}")
3333
GitRepository(
3434
component.repository,
3535
component.ref,
36-
os.path.join(work_dir, component.name),
36+
os.path.join(work_dir.name, component.name),
3737
component.working_directory,
3838
)
3939

40-
logging.info(f"Done, checked out into {work_dir}.")
40+
logging.info(f"Done, checked out into {work_dir.name}.")
4141

4242

4343
if __name__ == "__main__":

src/run_ci.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ def main():
2626

2727
target = CiTarget(version=manifest.build.version, snapshot=args.snapshot)
2828

29-
with TemporaryDirectory(keep=args.keep) as work_dir:
30-
logging.info(f"Sanity-testing in {work_dir}")
29+
with TemporaryDirectory.mkdtemp(keep=args.keep) as work_dir:
30+
logging.info(f"Sanity-testing in {work_dir.name}")
3131

32-
os.chdir(work_dir)
32+
os.chdir(work_dir.name)
3333

3434
logging.info(f"Sanity testing {manifest.build.name}")
3535

@@ -40,19 +40,18 @@ def main():
4040
continue
4141

4242
logging.info(f"Sanity checking {component.name}")
43-
repo = GitRepository(
43+
with GitRepository(
4444
component.repository,
4545
component.ref,
46-
os.path.join(work_dir, component.name),
46+
os.path.join(work_dir.name, component.name),
4747
component.working_directory,
48-
)
49-
50-
try:
51-
ci = Ci(component, repo, target)
52-
ci.check()
53-
except:
54-
logging.error(f"Error checking {component.name}, retry with: {args.component_command(component.name)}")
55-
raise
48+
) as repo:
49+
try:
50+
ci = Ci(component, repo, target)
51+
ci.check()
52+
except:
53+
logging.error(f"Error checking {component.name}, retry with: {args.component_command(component.name)}")
54+
raise
5655

5756
logging.info("Done.")
5857

src/run_integ_test.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,27 @@ def main():
4040
for component in test_manifest.components:
4141
if component.integ_test is not None:
4242
integ_test_config[component.name] = component
43-
with TemporaryDirectory(keep=args.keep) as work_dir:
44-
logging.info("Switching to temporary work_dir: " + work_dir)
45-
test_recorder = TestRecorder(args.test_run_id, "integ-test", work_dir)
46-
os.chdir(work_dir)
43+
with TemporaryDirectory.mkdtemp(keep=args.keep) as work_dir:
44+
logging.info(f"Switching to temporary work_dir: {work_dir.name}")
45+
test_recorder = TestRecorder(args.test_run_id, "integ-test", work_dir.name)
46+
os.chdir(work_dir.name)
4747
bundle_manifest = BundleManifest.from_s3(
4848
args.s3_bucket,
4949
args.build_id,
5050
args.opensearch_version,
5151
args.platform,
5252
args.architecture,
53-
work_dir,
53+
work_dir.name,
5454
)
5555
build_manifest = BuildManifest.from_s3(
5656
args.s3_bucket,
5757
args.build_id,
5858
args.opensearch_version,
5959
args.platform,
6060
args.architecture,
61-
work_dir,
61+
work_dir.name,
6262
)
63-
pull_build_repo(work_dir)
63+
pull_build_repo(work_dir.name)
6464
DependencyInstaller(build_manifest.build).install_all_maven_dependencies()
6565
all_results = TestSuiteResults()
6666
for component in bundle_manifest.components:
@@ -70,7 +70,7 @@ def main():
7070
integ_test_config[component.name],
7171
bundle_manifest,
7272
build_manifest,
73-
work_dir,
73+
work_dir.name,
7474
args.s3_bucket,
7575
test_recorder,
7676
)

src/run_perf_test.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ def get_infra_repo_url():
4141

4242

4343
def main():
44-
with TemporaryDirectory(keep=args.keep) as work_dir:
45-
os.chdir(work_dir)
46-
current_workspace = os.path.join(work_dir, "infra")
44+
with TemporaryDirectory.mkdtemp(keep=args.keep) as work_dir:
45+
os.chdir(work_dir.name)
46+
current_workspace = os.path.join(work_dir.name, "infra")
4747
GitRepository(get_infra_repo_url(), "main", current_workspace)
4848
security = False
4949
for component in manifest.components:

src/system/temporary_directory.py

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,23 @@
77
import logging
88
import shutil
99
import tempfile
10-
from contextlib import contextmanager
1110

1211

13-
@contextmanager
14-
def TemporaryDirectory(keep=False):
15-
name = tempfile.mkdtemp()
16-
try:
17-
yield name
18-
finally:
19-
if keep:
20-
logging.info(f"Keeping {name}")
12+
class TemporaryDirectory:
13+
def __init__(self, keep=False):
14+
self.keep = keep
15+
self.name = tempfile.mkdtemp()
16+
17+
def __enter__(self):
18+
return self
19+
20+
def __exit__(self, exc_type, exc_value, exc_traceback):
21+
if self.keep:
22+
logging.info(f"Keeping {self.name}")
2123
else:
22-
shutil.rmtree(name)
24+
logging.debug(f"Removing {self.name}")
25+
shutil.rmtree(self.name)
26+
27+
@classmethod
28+
def mkdtemp(cls, keep=False):
29+
return cls(keep)

0 commit comments

Comments
 (0)