Python wrapper for running instances of trisurf-ng
Samo Penic
2017-09-17 a4f8eb21f85326596a491b39e0330882ee8017f0
trisurf/tsmgr.py
@@ -15,7 +15,7 @@
else:
   from urlparse import urlparse
   from vtk import *
   from . import VTKRendering
#import io
from IPython import embed
@@ -56,6 +56,7 @@
   parser.add_argument('-R','--raw',help='print status and the rest of the information in raw format', action="store_true")
   parser.add_argument('-x','--local-only',help='do not attempt to contact remote hosts. Run all operations only on local machine',action='store_true')
   parser.add_argument('--originating-host',nargs=1,help='specify which host started the remote connections. Useful mainly fo internal functionaly of tsmgr and analyses.')
   parser.add_argument('--analysis-options', nargs='+', help='options passed down to analyses')
   args = parser.parse_args(arguments)
   return args
@@ -80,7 +81,7 @@
   for h in hosts:
      for r in h['runs']:
         if(r.isFromSnapshot):
            file_list.append(r.snapshotFilename)
            file_list.append(r.snapshotFile)
         else:
            file_list.append(r.tapeFilename)
   file_list.append(main.__file__)
@@ -202,9 +203,9 @@
   exit(0)
def analyze(args,host,a_dict, analysis,hosts):
   if len(a_dict)==0:
      print ('Error: no analyses are specified in the tsmgr.start()!')
def analyze(args,host,analysis,hosts):
   if len(trisurf._analysis_list)==0:
      print ('Error: no decorated function with @analysis decorator!')
      exit(1)
   target_runs=getTargetRunIdxList(args)
   if target_runs==None:
@@ -212,11 +213,11 @@
   for i in target_runs:
      for anal in analysis:
         if(anal not in a_dict):
            print("Analysis '"+anal+"' is not known. Available analyses: "+", ".join(a_dict.keys())+".")
         if(anal not in trisurf._analysis_list):
            print("Analysis '"+anal+"' is not known. Available analyses: "+", ".join(trisurf._analysis_list.keys())+".")
            exit(0)
      for anal in analysis:
         retval=a_dict[anal](host['runs'][i-1],host=host, args=args, hosts=hosts)
         retval=trisurf._analysis_list[anal](host['runs'][i-1],host=host, args=args, hosts=hosts)
         #try:
         if(retval):
            exit(0)
@@ -247,7 +248,7 @@
      embed()
      exit(0)
   elif args['analysis']!= None:
      analyze(args,host,kwargs.get('analyses', {}), args['analysis'],kwargs.get('hosts',None))
      analyze(args,host, args['analysis'],kwargs.get('hosts',None))
      exit(0)
   else: #version requested
      print(getTrisurfVersion())
@@ -256,12 +257,16 @@
def preview_vtu(args,host):
   #only for localhost at the moment
   if sys.version_info>=(3,0):
      print("Preview works only with python 2.7")
      exit(1)
   from . import VTKRendering
   target_runs=getTargetRunIdxList(args)
   if target_runs==None:
      target_runs=list(range(1,len(host['runs'])+1))
   if host['name'] == socket.gethostname():
      VTKRendering.Renderer(args,host)
      for i in target_runs:
         VTKRendering.Renderer(args,host,host['runs'][i-1])
   else:
      print("VTK rendering currently works on localhost only!")
def getListOfHostConfigurationByHostname(hosts,host):
   rhost=[]
@@ -272,7 +277,7 @@
def start(hosts,argv=sys.argv[1:], analyses={}):
def start(hosts,argv=sys.argv[1:]):
   args=vars(ParseCLIArguments(argv))
   #Backward compatibility... If running just on localmode, the host specification is unnecessary. Check if only Runs are specified
   try:
@@ -300,7 +305,7 @@
            print("Host <font color='orange'>"+host['name']+"</font> reports:")
         else:
            print("Host "+bcolors.WARNING+host['name']+bcolors.ENDC+" reports:")
         perform_action(args,host, analyses=analyses, hosts=hosts)
         perform_action(args,host, hosts=hosts)
      elif not args['local_only']:
         if('remotebasepath' in host):
            remote_dir=host['remotebasepath']
@@ -310,7 +315,7 @@
         #print(remote_dir)
         #print(main.__file__)
         #print('python3 '+main.__file__+' -x '+" ".join(argv))
         output=host['_conn'].execute('cd '+remote_dir+ '; python3 '+main.__file__+' -x --originating-host ' +socket.gethostname()+" ".join(argv))
         output=host['_conn'].execute('cd '+remote_dir+ '; python3 '+main.__file__+' -x --originating-host ' +socket.gethostname()+" "+" ".join(argv))
         for line in output:
            print(line.replace('\n',''))