# -*- 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