From ed69f778e91decbf1870802c6ac124bb1bbb8d92 Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Thu, 6 Feb 2025 17:57:36 +0000 Subject: [PATCH 1/3] Assert temp files don't exist in cwd --- tests/test_viewers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/test_viewers.py b/tests/test_viewers.py index 533a4a70..9a110ce3 100644 --- a/tests/test_viewers.py +++ b/tests/test_viewers.py @@ -1,3 +1,5 @@ +from pathlib import Path + import ase import pytest import traitlets as tl @@ -107,6 +109,10 @@ def test_structure_data_viewer_storage(structure_data_object): # fmt: on v._render_structure() + # Make sure we don't polute current working dir with tempfiles + assert not Path("__temp__.pov").exists() + assert not Path("Si2.png").exists() + @pytest.mark.usefixtures("aiida_profile_clean") def test_structure_data_viewer_selection(structure_data_object): From 23f3ce051f4eb987b67f3735e16410d9023ad2f0 Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Thu, 6 Feb 2025 18:00:29 +0000 Subject: [PATCH 2/3] Use tmpdir for povray rendering --- aiidalab_widgets_base/viewers.py | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/aiidalab_widgets_base/viewers.py b/aiidalab_widgets_base/viewers.py index 37743a73..3b6982b1 100644 --- a/aiidalab_widgets_base/viewers.py +++ b/aiidalab_widgets_base/viewers.py @@ -4,6 +4,8 @@ import base64 import copy +import os +import pathlib import re import warnings @@ -868,6 +870,7 @@ def _download_tab(self): def _render_structure(self, change=None): """Render the structure with POVRAY.""" + from tempfile import TemporaryDirectory if not isinstance(self.displayed_structure, ase.Atoms): return @@ -957,16 +960,24 @@ def _render_structure(self, change=None): scene = vapory.Scene(camera, objects=objects) fname = bb.get_chemical_formula() + ".png" - scene.render( - fname, - width=2560, - height=1440, - antialiasing=0.000, - quality=11, - remove_temp=False, - ) - with open(fname, "rb") as raw: - payload = base64.b64encode(raw.read()).decode() + + with TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir: + cwd = pathlib.Path.cwd() + try: + os.chdir(tmpdir) + scene.render( + fname, + width=2560, + height=1440, + antialiasing=0.000, + quality=11, + remove_temp=False, + ) + with open(fname, "rb") as raw: + payload = base64.b64encode(raw.read()).decode() + finally: + os.chdir(cwd) + self._download(payload=payload, filename=fname) self.render_btn.disabled = False From d06764a1bf01ee4734e8f6b1107a089dafe12788 Mon Sep 17 00:00:00 2001 From: Daniel Hollas Date: Thu, 6 Feb 2025 18:20:02 +0000 Subject: [PATCH 3/3] Fix python 3.9 --- aiidalab_widgets_base/viewers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/aiidalab_widgets_base/viewers.py b/aiidalab_widgets_base/viewers.py index 3b6982b1..6b58dfc3 100644 --- a/aiidalab_widgets_base/viewers.py +++ b/aiidalab_widgets_base/viewers.py @@ -961,7 +961,7 @@ def _render_structure(self, change=None): scene = vapory.Scene(camera, objects=objects) fname = bb.get_chemical_formula() + ".png" - with TemporaryDirectory(ignore_cleanup_errors=True) as tmpdir: + with TemporaryDirectory() as tmpdir: cwd = pathlib.Path.cwd() try: os.chdir(tmpdir)