# -*- coding: utf-8 -*- """ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, see . @author: RaNaN """ from time import time from module.Api import InteractionTask as BaseInteractionTask from module.Api import Input, Output #noinspection PyUnresolvedReferences class InteractionTask(BaseInteractionTask): """ General Interaction Task extends ITask defined by thrift with additional fields and methods. """ #: Plugins can put needed data here storage = None #: Timestamp when task expires wait_until = 0 #: The received result result = None #: List of registered handles handler = None #: Error Message error = None #: Timeout locked locked = False def __init__(self, *args, **kwargs): BaseInteractionTask.__init__(self, *args, **kwargs) # additional internal attributes self.storage = {} self.handler = [] self.wait_until = 0 def convertResult(self, value): #TODO: convert based on input/output return value def getResult(self): return self.result def setResult(self, value): self.result = self.convertResult(value) def setWaiting(self, sec, lock=False): if not self.locked: self.wait_until = max(time() + sec, self.wait_until) if lock: self.locked = True def isWaiting(self): if self.result or self.error or time() > self.waitUntil: return False return True def timedOut(self): return time() > self.wait_until > 0 def correct(self): [x.taskCorrect(self) for x in self.handler] def invalid(self): [x.taskInvalid(self) for x in self.handler] def __str__(self): return "" % self.id