From adf6cbd33639a7f51d4b78826d8a61c60a34a689 Mon Sep 17 00:00:00 2001 From: Elisa Prana Date: Mon, 3 Aug 2015 12:02:20 +0200 Subject: [PATCH 1/2] Step added in job decomposition --- src/puliclient/jobs.py | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/puliclient/jobs.py b/src/puliclient/jobs.py index 1c12160b..dfa6ec23 100644 --- a/src/puliclient/jobs.py +++ b/src/puliclient/jobs.py @@ -347,6 +347,7 @@ class DefaultTaskDecomposer(TaskDecomposer): # DEFAULT FIELDS USED TO DECOMPOSE A TASK START_LABEL = "start" END_LABEL = "end" + STEP_LABEL = "step" PACKETSIZE_LABEL = "packetSize" FRAMESLIST_LABEL = "framesList" @@ -368,10 +369,11 @@ def __init__(self, task): start = task.arguments.get(self.START_LABEL, 1) end = task.arguments.get(self.END_LABEL, 1) + step = task.arguments.get(self.STEP_LABEL, 1) packetSize = task.arguments.get(self.PACKETSIZE_LABEL, 1) framesList = task.arguments.get(self.FRAMESLIST_LABEL, "") - self.decompose(start=start, end=end, packetSize=packetSize, callback=self, framesList=framesList) + self.decompose(start=start, end=end, step=step, packetSize=packetSize, callback=self, framesList=framesList) else: # If arguments given but no standard behaviour, simply transmit task arguments to single command @@ -393,11 +395,12 @@ def addCommand(self, packetStart, packetEnd): cmdName = "%s_%s_%s" % (self.task.name, str(packetStart), str(packetEnd)) self.task.addCommand(cmdName, cmdArgs) - def decompose(self, start, end, packetSize, callback, framesList=""): + def decompose(self, start, end, step, packetSize, callback, framesList=""): ''' Method extracted from PuliActionHelper. Default behaviour for decompozing a task. :param start: Integer representing the first frame :param end: Integer representing the last frame + :param step: Integer representing the steps :param packetSize: The number of frames to process in each command :param callback: A specific callback given to replace default's "addCommand" if necessary :param framesList: A string representing a list of frames @@ -430,18 +433,22 @@ def decompose(self, start, end, packetSize, callback, framesList=""): start = int(start) end = int(end) - length = end - start + 1 - fullPacketCount, lastPacketCount = divmod(length, packetSize) + packetCount = (end - start) // packetSize + 1 + stepCount = packetCount // step + commandCount = (end - start + 1) - (step-1) * stepCount + fullPacketCount, lastPacketCount = divmod(commandCount, packetSize) - if length < packetSize: + if commandCount < packetSize: callback.addCommand(start, end) else: for i in range(fullPacketCount): - packetStart = start + i * packetSize + packetStart = start + i * (packetSize + step - 1) packetEnd = packetStart + packetSize - 1 callback.addCommand(packetStart, packetEnd) if lastPacketCount: - packetStart = start + (i + 1) * packetSize + packetStart = start + (i + 1) * (packetSize + step - 1) + if packetStart > end: + return callback.addCommand(packetStart, end) From 5619a46642ec1ab25a5b18a7cac1f749bbb61d06 Mon Sep 17 00:00:00 2001 From: Elisa Prana Date: Fri, 14 Aug 2015 18:28:06 +0200 Subject: [PATCH 2/2] Fix : step --- src/puliclient/jobs.py | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/puliclient/jobs.py b/src/puliclient/jobs.py index dfa6ec23..0b2f7b41 100644 --- a/src/puliclient/jobs.py +++ b/src/puliclient/jobs.py @@ -322,6 +322,7 @@ def __init__(self, taskGroup): class TaskDecomposer(object): """ | Base class for Decomposer hierarchy. + | Implements a minimalist "addCommand" method. """ @@ -404,6 +405,8 @@ def decompose(self, start, end, step, packetSize, callback, framesList=""): :param packetSize: The number of frames to process in each command :param callback: A specific callback given to replace default's "addCommand" if necessary :param framesList: A string representing a list of frames + + .. note:: packetSize has priority on step ''' packetSize = int(packetSize) if len(framesList) != 0: @@ -433,24 +436,24 @@ def decompose(self, start, end, step, packetSize, callback, framesList=""): start = int(start) end = int(end) - packetCount = (end - start) // packetSize + 1 - stepCount = packetCount // step - commandCount = (end - start + 1) - (step-1) * stepCount - fullPacketCount, lastPacketCount = divmod(commandCount, packetSize) - - if commandCount < packetSize: - callback.addCommand(start, end) - else: - for i in range(fullPacketCount): - packetStart = start + i * (packetSize + step - 1) - packetEnd = packetStart + packetSize - 1 - callback.addCommand(packetStart, packetEnd) - if lastPacketCount: - packetStart = start + (i + 1) * (packetSize + step - 1) - if packetStart > end: - return - callback.addCommand(packetStart, end) + if packetSize > 1: + length = end - start + 1 + fullPacketCount, lastPacketCount = divmod(length, packetSize) + if length < packetSize: + callback.addCommand(start, end) + else: + for i in range(fullPacketCount): + packetStart = start + i * packetSize + packetEnd = packetStart + packetSize - 1 + callback.addCommand(packetStart, packetEnd) + if lastPacketCount: + packetStart = start + (i + 1) * packetSize + callback.addCommand(packetStart, end) + elif step > 1: + frames = range(start, end, step) + for frame in frames: + callback.addCommand(frame, frame) def _load(name, motherClass): try: