fix python nodes being blocked by log

...when ran on command line with meshroom_photogrammetry or meshroom_compute
This commit is contained in:
ChemicalXandco 2020-02-07 22:47:27 +00:00
parent 95a28cb0a7
commit f75fc91436
3 changed files with 58 additions and 64 deletions

View file

@ -132,9 +132,6 @@ class LogManager:
def __init__(self, chunk): def __init__(self, chunk):
self.chunk = chunk self.chunk = chunk
self.chunk.statusChanged.connect(self.clear)
self.progressBar = False
self.cleared = False
self.logger = logging.getLogger(chunk.node.getName()) self.logger = logging.getLogger(chunk.node.getName())
class Formatter(logging.Formatter): class Formatter(logging.Formatter):
@ -151,27 +148,22 @@ class LogManager:
handler.setFormatter(formatter) handler.setFormatter(formatter)
self.logger.addHandler(handler) self.logger.addHandler(handler)
def clear(self): def start(self, level):
if self.chunk.statusName == 'RUNNING' and not self.cleared: # Clear log file
open(self.chunk.logFile, 'w').close() open(self.chunk.logFile, 'w').close()
self.configureLogger() self.configureLogger()
self.cleared = True self.logger.setLevel(self.textToLevel(level))
# When the node gets ran again the log needs to be cleared self.progressBar = False
elif self.chunk.statusName in ['ERROR', 'SUCCESS']:
def end(self):
for handler in self.logger.handlers[:]: for handler in self.logger.handlers[:]:
# Stops the file being locked # Stops the file being locked
handler.close() handler.close()
self.cleared = False
self.progressBar = False
def waitUntilCleared(self):
while not self.cleared:
time.sleep(0.01)
def makeProgressBar(self, end, message=''): def makeProgressBar(self, end, message=''):
assert end > 0 assert end > 0
assert not self.progressBar assert not self.progressBar
self.waitUntilCleared()
self.progressEnd = end self.progressEnd = end
self.currentProgressTics = 0 self.currentProgressTics = 0
@ -194,7 +186,6 @@ class LogManager:
def updateProgressBar(self, value): def updateProgressBar(self, value):
assert self.progressBar assert self.progressBar
assert value <= self.progressEnd assert value <= self.progressEnd
self.waitUntilCleared()
tics = round((value/self.progressEnd)*51) tics = round((value/self.progressEnd)*51)

View file

@ -50,8 +50,8 @@ class Publish(desc.Node):
return paths return paths
def processChunk(self, chunk): def processChunk(self, chunk):
chunk.logManager.waitUntilCleared() try:
chunk.logger.setLevel(chunk.logManager.textToLevel(chunk.node.verboseLevel.value)) chunk.logManager.start(chunk.node.verboseLevel.value)
if not chunk.node.inputFiles: if not chunk.node.inputFiles:
chunk.logger.warning('Nothing to publish') chunk.logger.warning('Nothing to publish')
@ -74,3 +74,5 @@ class Publish(desc.Node):
chunk.logger.info('Publish file {} into {}'.format(iFile, oFile)) chunk.logger.info('Publish file {} into {}'.format(iFile, oFile))
shutil.copyfile(iFile, oFile) shutil.copyfile(iFile, oFile)
chunk.logger.info('Publish end') chunk.logger.info('Publish end')
finally:
chunk.logManager.end()

View file

@ -216,9 +216,9 @@ class SketchfabUpload(desc.Node):
return self._stopped return self._stopped
def processChunk(self, chunk): def processChunk(self, chunk):
try:
self._stopped = False self._stopped = False
chunk.logManager.waitUntilCleared() chunk.logManager.start(chunk.node.verboseLevel.value)
chunk.logger.setLevel(chunk.logManager.textToLevel(chunk.node.verboseLevel.value))
if not chunk.node.inputFiles: if not chunk.node.inputFiles:
chunk.logger.warning('Nothing to upload') chunk.logger.warning('Nothing to upload')
@ -240,7 +240,6 @@ class SketchfabUpload(desc.Node):
chunk.logger.error('Maximum of 42 separate tags.') chunk.logger.error('Maximum of 42 separate tags.')
raise RuntimeError() raise RuntimeError()
try:
data = { data = {
'name': chunk.node.title.value, 'name': chunk.node.title.value,
'description': chunk.node.description.value, 'description': chunk.node.description.value,
@ -276,5 +275,7 @@ class SketchfabUpload(desc.Node):
os.remove(uploadFile) os.remove(uploadFile)
chunk.logger.debug('Deleted {}'.format(uploadFile)) chunk.logger.debug('Deleted {}'.format(uploadFile))
chunk.logManager.end()
def stopProcess(self, chunk): def stopProcess(self, chunk):
self._stopped = True self._stopped = True