Files
ResInsight/ThirdParty/Ert/python/ecl/util/test/test_area.py
T
Magne Sjaastad 04091ad77d #4266 Update libecl
Use commit 0e1e780fd6f18ce93119061e36a4fca9711bc020

Excluded multibuild folder, as this caused git issues
2019-05-09 08:40:32 +02:00

133 lines
4.7 KiB
Python

# Copyright (C) 2013 Equinor ASA, Norway.
#
# The file 'test_work_area.py' is part of ERT - Ensemble based Reservoir Tool.
#
# ERT is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ERT is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.
#
# See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
# for more details.
import os.path
from cwrap import BaseCClass
from ecl import EclPrototype
class TestArea(BaseCClass):
_test_area_alloc = EclPrototype("void* test_work_area_alloc__( char*, bool )" , bind = False)
_free = EclPrototype("void test_work_area_free( test_area )")
_install_file = EclPrototype("void test_work_area_install_file( test_area , char* )")
_copy_directory = EclPrototype("void test_work_area_copy_directory( test_area , char* )")
_copy_file = EclPrototype("void test_work_area_copy_file( test_area , char* )")
_copy_directory_content = EclPrototype("void test_work_area_copy_directory_content( test_area , char* )")
_copy_parent_directory = EclPrototype("void test_work_area_copy_parent_directory( test_area , char* )")
_copy_parent_content = EclPrototype("void test_work_area_copy_parent_content( test_area , char* )")
_get_cwd = EclPrototype("char* test_work_area_get_cwd( test_area )")
_get_original_cwd = EclPrototype("char* test_work_area_get_original_cwd( test_area )")
def __init__(self, test_name, store_area=False , c_ptr = None):
if c_ptr is None:
c_ptr = self._test_area_alloc(test_name, store_area)
super(TestArea, self).__init__(c_ptr)
def get_original_cwd(self):
return self._get_original_cwd()
def get_cwd(self):
return self._get_cwd()
def orgPath(self , path):
if os.path.isabs( path ):
return path
else:
return os.path.abspath( os.path.join( self.get_original_cwd( ) , path ) )
# All the methods install_file() , copy_directory(),
# copy_parent_directory(), copy_parent_content(),
# copy_directory_content() and copy_file() expect an input
# argument which is relative to the original CWD - or absolute.
def install_file( self, filename):
if os.path.isfile(self.orgPath(filename)):
self._install_file(filename)
else:
raise IOError("No such file:%s" % filename)
def copy_directory( self, directory):
if os.path.isdir( self.orgPath(directory) ):
self._copy_directory(directory)
else:
raise IOError("No such directory: %s" % directory)
def copy_parent_directory( self , path):
if os.path.exists( self.orgPath(path) ):
self._copy_parent_directory( path)
else:
raise IOError("No such file or directory: %s" % path)
def copy_parent_content( self , path):
if os.path.exists( self.orgPath(path) ):
self._copy_parent_content(path)
else:
raise IOError("No such file or directory: %s" % path)
def copy_directory_content( self, directory):
if os.path.isdir( self.orgPath(directory) ):
self._copy_directory_content(directory)
else:
raise IOError("No such directory: %s" % directory )
def copy_file( self, filename):
if os.path.isfile( self.orgPath(filename) ):
self._copy_file(filename)
else:
raise IOError("No such file:%s" % filename)
def free(self):
self._free()
def getFullPath(self , path):
if not os.path.exists( path ):
raise IOError("Path not found:%s" % path)
if os.path.isabs( path ):
raise IOError("Path:%s is already absolute" % path)
return os.path.join( self.get_cwd() , path )
class TestAreaContext(object):
def __init__(self, test_name, store_area=False):
self.test_name = test_name
self.store_area = store_area
def __enter__(self):
"""
@rtype: TestArea
"""
self.test_area = TestArea(self.test_name, store_area = self.store_area )
return self.test_area
def __exit__(self, exc_type, exc_val, exc_tb):
self.test_area.free() # free the TestData object (and cd back to the original dir)
self.test_area.free = None # avoid double free
del self.test_area
return False