Skip to content
Snippets Groups Projects
Select Git revision
  • ac823cf85452762365f1fb6d42a045efb3bf3884
  • 2023 default protected
2 results

vmd.py

Blame
  • conftest.py 2.44 KiB
    import os
    import re
    import shutil
    import pytest
    import mock
    
    
    def pytest_runtest_teardown(item, nextitem):
        """
        Teardown method to clean up folder creations during testing. This method is called after each test, but performs
        deletions only after an entire test class was executed.
        :param item: tested item
        :param nextitem: next item (could be None, if no following test is available)
        """
        if nextitem is None or item.cls != nextitem.cls:
            # clean up all TestExperiment and data folder that have been created during testing
            rel_path = os.path.relpath(item.fspath.dirname, os.path.abspath(__file__))
            path = os.path.dirname(__file__)
            for stage in filter(None, rel_path.replace("..", ".").split("/")):
                path = os.path.abspath(os.path.join(path, stage))
                execute_removing(path)
            execute_removing(os.path.dirname(__file__))
        else:
            pass  # nothing to do if next test is from same test class
    
    
    def execute_removing(path):
        list_dir = os.listdir(path)
        if "data" in list_dir and path != os.path.dirname(__file__):  # do not delete data folder in src
            shutil.rmtree(os.path.join(path, "data"), ignore_errors=True)
        # remove TestExperiment folders
        remove_files_from_regex(list_dir, path, re.compile(r"TestExperiment.*"))
        # remove all tracking json
        remove_files_from_regex(list_dir, path, re.compile(r"tracking_\d*\.json"))
        # remove all tracking pdf
        remove_files_from_regex(list_dir, path, re.compile(r"tracking_\d*\.pdf"))
        # remove all tracking json
        remove_files_from_regex(list_dir, path, re.compile(r"logging_\d*\.log"))
    
    
    def remove_files_from_regex(list_dir, path, regex):
        r = list(filter(regex.search, list_dir))
        if len(r) > 0:
            for e in r:
                del_path = os.path.join(path, e)
                try:
                    if os.path.isfile(del_path):
                        os.remove(del_path)
                    else:
                        shutil.rmtree(os.path.join(path, e), ignore_errors=True)
                except:
                    pass
    
    
    @pytest.fixture(scope="session", autouse=True)
    def default_session_fixture(request):
        """
        :type request: _pytest.python.SubRequest
        :return:
        """
        # patched = mock.patch("multiprocessing.cpu_count", return_value=1)
        # patched.__enter__()
    
        # def unpatch():
        #    patched.__exit__()
    
        # request.addfinalizer(unpatch)
    
        with mock.patch("psutil.cpu_count", return_value=1):
            yield