From 111a1a76c6735db70eb10d66b2195c43ba2562fb Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Sat, 27 Mar 2021 07:35:49 +0100 Subject: [PATCH] cleaning --- processing/pre/mentat_pbcOnBoxMesh.py | 4 +- processing/pre/mentat_spectralBox.py | 2 +- python/damask/_test.py | 4 +- python/damask/util.py | 130 +++++++++++--------------- python/tests/test_Grid.py | 4 + 5 files changed, 61 insertions(+), 83 deletions(-) diff --git a/processing/pre/mentat_pbcOnBoxMesh.py b/processing/pre/mentat_pbcOnBoxMesh.py index 5a4891002..1cf18eeda 100755 --- a/processing/pre/mentat_pbcOnBoxMesh.py +++ b/processing/pre/mentat_pbcOnBoxMesh.py @@ -236,7 +236,7 @@ if remote: sys.path.append(str(damask.solver.Marc().library_path)) import py_mentat - damask.util.report(scriptName, 'waiting to connect...') + print(scriptName+': waiting to connect...') filenames = [os.path.join(tempfile._get_default_tempdir(), next(tempfile._get_candidate_names()) + '.mfd')] try: py_mentat.py_connect('',options.port) @@ -251,7 +251,7 @@ if remote: for name in filenames: while remote and not os.path.exists(name): time.sleep(0.5) with open( name,'r') if name is not None else sys.stdin as fileIn: - damask.util.report(scriptName, name) + print(scriptName+': '+name) mfd = parseMFD(fileIn) add_servoLinks(mfd,[options.x,options.y,options.z]) diff --git a/processing/pre/mentat_spectralBox.py b/processing/pre/mentat_spectralBox.py index d2c966f3f..72206a8f4 100755 --- a/processing/pre/mentat_spectralBox.py +++ b/processing/pre/mentat_spectralBox.py @@ -194,7 +194,7 @@ if options.port is not None: if filenames == []: filenames = [None] for name in filenames: - damask.util.report(scriptName,name) + print(scriptName+': '+name) geom = damask.Grid.load(StringIO(''.join(sys.stdin.read())) if name is None else name) material = geom.material.flatten(order='F') diff --git a/python/damask/_test.py b/python/damask/_test.py index e62b9e8cc..d5c946034 100644 --- a/python/damask/_test.py +++ b/python/damask/_test.py @@ -270,10 +270,10 @@ class Test: raise FileNotFoundError - def execute_inCurrentDir(self,cmd,streamIn=None,env=None): + def execute_inCurrentDir(self,cmd,env=None): logging.info(cmd) - out,error = damask.util.execute(cmd,streamIn,self.dirCurrent()) + out,error = damask.util.execute(cmd,self.dirCurrent()) logging.info(error) logging.debug(out) diff --git a/python/damask/util.py b/python/damask/util.py index cdedd73ed..5f2a8b1ff 100644 --- a/python/damask/util.py +++ b/python/damask/util.py @@ -15,7 +15,6 @@ from . import version # limit visibility __all__=[ 'srepr', - 'report', 'emph','deemph','warn','strikeout', 'execute', 'show_progress', @@ -29,6 +28,21 @@ __all__=[ 'DREAM3D_base_group', 'DREAM3D_cell_data_group' ] +# https://svn.blender.org/svnroot/bf-blender/trunk/blender/build_files/scons/tools/bcolors.py +# https://stackoverflow.com/questions/287871 +_colors = { + 'header' : '\033[95m', + 'OK_blue': '\033[94m', + 'OK_green': '\033[92m', + 'warning': '\033[93m', + 'fail': '\033[91m', + 'end_color': '\033[0m', + 'bold': '\033[1m', + 'dim': '\033[2m', + 'underline': '\033[4m', + 'crossout': '\033[9m' + } + #################################################################################################### # Functions #################################################################################################### @@ -51,38 +65,24 @@ def srepr(arg,glue = '\n'): return arg if isinstance(arg,str) else repr(arg) -def report(who = None, - what = None): - """ - Report script and file name. - - DEPRECATED - - """ - print( (emph(who)+': ' if who is not None else '') + (what if what is not None else '') + '\n' ) - - def emph(what): """Formats string with emphasis.""" - return bcolors.BOLD+srepr(what)+bcolors.ENDC + return _colors['bold']+srepr(what)+_colors['end_color'] def deemph(what): """Formats string with deemphasis.""" - return bcolors.DIM+srepr(what)+bcolors.ENDC + return _colors['dim']+srepr(what)+_colors['end_color'] def warn(what): """Formats string for warning.""" - return bcolors.WARNING+emph(what)+bcolors.ENDC + return _colors['warning']+emph(what)+_colors['end_color'] def strikeout(what): """Formats string as strikeout.""" - return bcolors.CROSSOUT+srepr(what)+bcolors.ENDC + return _colors['crossout']+srepr(what)+_colors['end_color'] -def execute(cmd, - stream_in = None, - wd = './', - env = None): +def execute(cmd,wd='./',env=None): """ Execute command. @@ -90,33 +90,26 @@ def execute(cmd, ---------- cmd : str Command to be executed. - stream_in : file object, optional - Input (via pipe) for executed process. wd : str, optional Working directory of process. Defaults to ./ . env : dict, optional Environment for execution. """ - initialPath = os.getcwd() - myEnv = os.environ if env is None else env - os.chdir(wd) print(f"executing '{cmd}' in '{wd}'") - process = subprocess.Popen(shlex.split(cmd), - stdout = subprocess.PIPE, - stderr = subprocess.PIPE, - stdin = subprocess.PIPE, - env = myEnv) - stdout, stderr = [i for i in (process.communicate() if stream_in is None - else process.communicate(stream_in.read().encode('utf-8')))] - os.chdir(initialPath) - stdout = stdout.decode('utf-8').replace('\x08','') - stderr = stderr.decode('utf-8').replace('\x08','') + process = subprocess.run(shlex.split(cmd), + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + env = os.environ if env is None else env, + cwd = wd, + encoding = 'utf-8') + if process.returncode != 0: - print(stdout) - print(stderr) + print(process.stdout) + print(process.stderr) raise RuntimeError(f"'{cmd}' failed with returncode {process.returncode}") - return stdout, stderr + + return process.stdout, process.stderr def show_progress(iterable,N_iter=None,prefix='',bar_length=50): @@ -403,9 +396,30 @@ def DREAM3D_cell_data_group(fname): return cell_data_group + #################################################################################################### # Classes #################################################################################################### +class return_message: + """Object with formatted return message.""" + + def __init__(self,message): + """ + Sets return message. + + Parameters + ---------- + message : str or list of str + message for output to screen + + """ + self.message = message + + def __repr__(self): + """Return message suitable for interactive shells.""" + return srepr(self.message) + + class _ProgressBar: """ Report progress of an interation as a status bar. @@ -454,43 +468,3 @@ class _ProgressBar: if iteration == self.total - 1: sys.stderr.write('\n') sys.stderr.flush() - - -class bcolors: - """ - ASCII colors. - - https://svn.blender.org/svnroot/bf-blender/trunk/blender/build_files/scons/tools/bcolors.py - https://stackoverflow.com/questions/287871 - """ - - HEADER = '\033[95m' - OKBLUE = '\033[94m' - OKGREEN = '\033[92m' - WARNING = '\033[93m' - FAIL = '\033[91m' - ENDC = '\033[0m' - BOLD = '\033[1m' - DIM = '\033[2m' - UNDERLINE = '\033[4m' - CROSSOUT = '\033[9m' - - -class return_message: - """Object with formatted return message.""" - - def __init__(self,message): - """ - Sets return message. - - Parameters - ---------- - message : str or list of str - message for output to screen - - """ - self.message = message - - def __repr__(self): - """Return message suitable for interactive shells.""" - return srepr(self.message) diff --git a/python/tests/test_Grid.py b/python/tests/test_Grid.py index 7e94686ee..51b4f1d29 100644 --- a/python/tests/test_Grid.py +++ b/python/tests/test_Grid.py @@ -431,6 +431,10 @@ class TestGrid: reference = VTK.load(ref_path/f'get_grain_boundaries_8g12x15x20_{"".join(direction)}_{periodic}.vtu') assert current.__repr__() == reference.__repr__() + @pytest.mark.parametrize('directions',[(1,2,'y'),('a','b','x'),[1]]) + def test_get_grain_boundaries_invalid(self,default,directions): + with pytest.raises(ValueError): + default.get_grain_boundaries(directions=directions) def test_load_DREAM3D(self,ref_path): grain = Grid.load_DREAM3D(ref_path/'2phase_irregularGrid.dream3d','FeatureIds')