# permission to convey the resulting work.
import logging
+import urllib2
+import socket
from terra.core.manager import Manager
from terra.core.task import Task
from terra.core.model import ModelFolder, Model
+from terra.core.threaded_func import ThreadedFunction
from client import Client
class ServiceModelFolder(ModelFolder):
terra_type = "Model/Folder/Task/Apps/RTM/Service"
+ threaded_search = True
empty_msg = "No tasks found"
def __init__(self, name, parent):
ModelFolder.__init__(self, name, parent)
+ self.callback_notify = None
# TODO change token
self.client = Client('1e6e489de9374b43ba280ab9741d290c', 'c7197d30f722247d', '1f4c8846175f4bafcf70f7742f4670e41b0ab046')
def do_load(self):
self.search()
- def search(self):
+ def search(self, end_callback=None):
del self.children[:]
- for c in self.do_search():
- self.children.append(c)
- return
+ if not self.threaded_search:
+ for item in self.do_search():
+ self.children.append(item)
+ return
+
+ def refresh():
+ return self.do_search()
+
+ def refresh_finished(exception, retval):
+ if not self.is_loading:
+ log.info("model is not loading")
+ return
+
+ if exception is not None:
+ if type(exception) is socket.gaierror or \
+ type(exception) is urllib2.URLError:
+ emsg = "Unable to connect to server.<br>" + \
+ "Check your connection and try again."
+ else:
+ emsg = "An unknown error has occured."
+
+ log.error(exception)
+
+ if self.callback_notify:
+ self.callback_notify(CanolaError(emsg))
+
+ if retval is None:
+ self.inform_loaded()
+ return
+
+ for item in retval:
+ self.children.append(item)
+
+ if end_callback:
+ end_callback()
+
+ self.inform_loaded()
+
+ self.is_loading = True
+ ThreadedFunction(refresh_finished, refresh).start()
def do_search(self):
raise NotImplementedError("must be implemented by subclasses")