Spaces:
Running
on
Zero
Running
on
Zero
# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
import multiprocessing | |
import os.path | |
import pathlib | |
import tempfile | |
import pytest | |
def test_workspace_exist_and_empty_when_created(): | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
tempdir = pathlib.Path(tempdir) | |
workspace = Workspace(tempdir / "workspace") | |
assert workspace._workspace_path.exists() | |
assert workspace.exists() | |
assert workspace.is_empty() | |
assert len(os.listdir(workspace._workspace_path)) == 0 | |
assert workspace.path == workspace._workspace_path | |
def test_workspace_not_exist_and_empty_when_removed(): | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
tempdir = pathlib.Path(tempdir) | |
workspace = Workspace(tempdir / "workspace") | |
os.rmdir(workspace._workspace_path) | |
assert not workspace.exists() | |
assert workspace.is_empty() | |
def test_workspace_initializer_raises_error_when_workspace_directory_already_exists(): | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
tempdir = pathlib.Path(tempdir) | |
workspace = Workspace(tempdir / "workspace") | |
# Exception should be raised at second creation in the same path | |
with pytest.raises(FileExistsError): | |
_ = Workspace(workspace.path) | |
def test_workspace_clean(): | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
tempdir = pathlib.Path(tempdir) | |
workspace = Workspace(tempdir / "workspace") | |
open(workspace.path / "file.txt", "w").close() | |
(workspace.path / "dir").mkdir() | |
assert not workspace.is_empty() | |
workspace.clean() | |
assert workspace.is_empty() | |
assert not workspace.exists() | |
# No exception should be raised at second clean | |
workspace.clean() | |
assert not workspace.exists() | |
def test_tmp_workspace_exist_when_created(): | |
import pytriton.constants as constants | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
constants.PYTRITON_HOME = pathlib.Path(tempdir) | |
workspace = Workspace() | |
assert workspace.exists() | |
def test_tmp_workspace_not_exist_when_deleted(): | |
import pytriton.constants as constants | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
constants.PYTRITON_HOME = pathlib.Path(tempdir) | |
workspace = Workspace() | |
assert workspace.exists() | |
p = workspace.path | |
del workspace | |
assert not p.exists() | |
def test_tmp_workspace_not_exist_when_cleaned(): | |
import pytriton.constants as constants | |
from pytriton.utils.workspace import Workspace | |
with tempfile.TemporaryDirectory() as tempdir: | |
constants.PYTRITON_HOME = pathlib.Path(tempdir) | |
workspace = Workspace() | |
assert workspace.exists() | |
workspace.clean() | |
assert not workspace.exists() | |
def _check(pytriton_home=None): | |
if pytriton_home is not None: | |
os.environ["PYTRITON_HOME"] = pytriton_home | |
else: | |
pytriton_home = pathlib.Path.home() / ".cache" / "pytriton" | |
from pytriton.constants import PYTRITON_HOME | |
assert PYTRITON_HOME == pathlib.Path(pytriton_home), f"{PYTRITON_HOME} != {pytriton_home}" | |
from pytriton.utils.workspace import Workspace | |
workspace = Workspace() | |
# below line will raise ValueError if workspace is not in pytriton_home | |
workspace.path.relative_to(pytriton_home) | |
def test_use_env_variable_to_set_pytriton_home(): | |
ctx = multiprocessing.get_context("spawn") | |
process = ctx.Process(target=_check) # no pytriton_home environment | |
process.start() | |
process.join() | |
assert process.exitcode == 0 | |
with tempfile.TemporaryDirectory() as tempdir: | |
process = ctx.Process(target=_check, args=(tempdir,)) | |
process.start() | |
process.join() | |
assert process.exitcode == 0 | |