From 3fc0ef33e7a09a04a9f9055f9085e64255e62299 Mon Sep 17 00:00:00 2001
From: Samo Penic <samo.penic@gmail.com>
Date: Wed, 04 Jan 2017 21:35:46 +0000
Subject: [PATCH] Added even more readability in using the trisurf.py's runner class

---
 python/trisurf/trisurf.py |   75 ++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 31 deletions(-)

diff --git a/python/trisurf/trisurf.py b/python/trisurf/trisurf.py
index 3a1689e..b1dc092 100644
--- a/python/trisurf/trisurf.py
+++ b/python/trisurf/trisurf.py
@@ -2,7 +2,7 @@
 import xml.etree.ElementTree as ET
 import base64
 import zlib
-import io
+import sys,io
 import os
 from itertools import islice
 import mmap
@@ -236,14 +236,19 @@
 		try:
 			self.dT=int(epoch2)-int(epoch1)
 			self.last=n2
-			print(epoch1)
-			print(epoch2)
-			print(self.dT)
-			print(self.last)
+			#print(epoch1)
+			#print(epoch2)
+			#print(self.dT)
+			#print(self.last)
 			self.startDate=os.path.getmtime(os.path.join(self.path,'.lock'))
 		except:
 			return(False)
 		return(True)
+
+	def readText(self):
+		with open(self.fullname, 'r+') as fin:
+			cont=fin.read()
+		return cont
 
 	def read_old(self):
 		'''
@@ -297,6 +302,16 @@
 	'''
 	Class Runner consists of a single running or terminated instance of the trisurf. It manages starting, stopping, verifying the running process and printing the reports of the configured instances.
 	'''
+
+	@property
+	def Dir(self):
+		return Directory(maindir=self.maindir,simdir=self.subdir)
+
+
+	@property
+	def Statistics(self):
+		return Statistics(self.Dir.fullpath(), "statistics.csv")
+
 	def __init__(self, subdir='run0', tape=None, snapshot=None, runArgs=[]):
 		self.subdir=subdir
 		self.runArgs=runArgs
@@ -309,9 +324,9 @@
 
 
 	def initFromTape(self, tape):
-		self.tape=Tape()
-		self.tape.readTape(tape)
-		self.tapeFile=tape
+		self.Tape=Tape()
+		self.Tape.readTape(tape)
+		self.tapeFilename=tape
 
 	def initFromSnapshot(self, snapshotfile):
 		try:
@@ -324,12 +339,10 @@
 		root = tree.getroot()
 		tapetxt=root.find('tape')
 		version=root.find('trisurfversion')
-		self.tape=Tape()
-		self.tape.setTape(tapetxt.text)
+		self.Tape=Tape()
+		self.Tape.setTape(tapetxt.text)
 
 	def getPID(self):
-		self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
-		#self.Dir.makeifnotexist()
 		try:
 			fp = open(os.path.join(self.Dir.fullpath(),'.lock'))
 		except IOError as e:
@@ -339,8 +352,6 @@
 		return int(pid)
 
 	def getLastIteration(self):
-		self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
-		#self.Dir.makeifnotexist()
 		try:
 			fp = open(os.path.join(self.Dir.fullpath(),'.status'))
 		except IOError as e:
@@ -350,7 +361,7 @@
 		return int(status)
 
 	def isCompleted(self):
-		if (int(self.tape.getValue("iterations"))==self.getLastIteration()+1):
+		if int(self.Tape.getValue("iterations"))+int(self.Tape.getValue("inititer"))==self.getLastIteration()+1:
 			return True
 		else:
 			return False
@@ -386,20 +397,19 @@
 			if(shutil.which('trisurf')==None):
 				print("Error. Trisurf executable not found in PATH. Please install trisurf prior to running trisurf manager.")
 				exit(1)
-			self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
 #Symlinks tape file to the directory or create tape file from snapshot in the direcory...
 			if(self.Dir.makeifnotexist()):
 				if(self.fromSnapshot==False):
 					try:
-						os.symlink(os.path.abspath(self.tapeFile), self.Dir.fullpath()+"/tape")
+						os.symlink(os.path.abspath(self.tapeFilename), self.Dir.fullpath()+"/tape")
 					except:
-						print("Error while symlinking "+os.path.abspath(self.tapeFile)+" to "+self.Dir.fullpath()+"/tape")
+						print("Error while symlinking "+os.path.abspath(self.tapeFilename)+" to "+self.Dir.fullpath()+"/tape")
 						exit(1)
 				else:
 					try:
 						with open (os.path.join(self.Dir.fullpath(),"tape"), "w") as myfile:
 							#myfile.write("#This is automatically generated tape file from snapshot")
-							myfile.write(str(self.tape.rawText))
+							myfile.write(str(self.Tape.rawText))
 					except:
 						print("Error -- cannot make tapefile  "+ os.path.join(self.Dir.fullpath(),"tape")+" from the snapshot in the running directory")
 						exit(1)
@@ -442,9 +452,11 @@
 		maindir=""
 		for p,v in zip(prefix,variables):
 			if(v=="xk0"):
-				tv=str(round(float(self.tape.config[v])))
+				tv=str(round(float(self.Tape.config[v])))
+				if sys.version_info<(3,0):
+					tv=str(int(float(self.Tape.config[v])))
 			else:
-				tv=self.tape.config[v]
+				tv=self.Tape.config[v]
 			maindir=maindir+p+tv
 		self.maindir=maindir
 		return
@@ -454,13 +466,11 @@
 		return
 
 	def getStatistics(self, statfile="statistics.csv"):
-		self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
-		self.statistics=Statistics(self.Dir.fullpath(), statfile)
 		self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment"))
 		pid=self.getPID()
 		status=self.getStatus()
-		if(self.statistics.fileOK):
-			ETA=str(datetime.timedelta(microseconds=(int(self.tape.config['iterations'])-int(self.statistics.last))*self.statistics.dT)*1000000)
+		if(self.Statistics.fileOK):
+			ETA=str(datetime.timedelta(microseconds=(int(self.Tape.config['iterations'])-int(self.Statistics.last))*self.Statistics.dT)*1000000)
 		if(status==TS_NONEXISTANT or status==TS_NOLOCK):
 			statustxt="Not running"
 			pid=""
@@ -475,25 +485,28 @@
 		else:
 			statustxt="Running"
 
-		if(self.statistics.fileOK):
-			report=[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(self.statistics.startDate))),ETA, statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()]
+		if(self.Statistics.fileOK):
+			report=[time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(int(self.Statistics.startDate))),ETA, statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()]
 		else:
 			report=["N/A","N/A",statustxt, pid, str(self.Dir.fullpath()), self.Comment.getText()]
 		return report
 
 
 	def stop(self):
-		p=psutil.Process(self.getPID())
-		p.kill()
+		try:
+			p=psutil.Process(self.getPID())
+			p.kill()
+		except:
+			print("Could not stop the process. Is the process running? Do you have sufficient privileges?")
+
 
 	def writeComment(self, data, mode='w'):
-		self.Dir=Directory(maindir=self.maindir,simdir=self.subdir)
 		self.Comment=FileContent(os.path.join(self.Dir.fullpath(),".comment"))
 		self.Comment.writefile(data,mode=mode)
 
 
 	def getLastVTU(self):
-		vtuidx=self.getLastIteration()
+		vtuidx=self.getLastIteration()-int(self.Tape.getValue("inititer"))
 		if vtuidx<0:
 			return None
 		else:

--
Gitblit v1.9.3