class PoolDefault(Node): """ In : Name (key), Default Value Out : Object (value) """ def __init__(self, inputs, outputs): Node.__init__(self, inputs, outputs) self.pool = DataPool() def reset(self): if hasattr(self, 'key'): del self.pool[self.key] def __call__(self, inputs): """ inputs is the list of input values """ key = inputs[0] default_value = inputs[1] self.default = default_value self.key = key obj = self.pool.setdefault(key, default_value) if key in self.pool: self.set_caption("%s" % (key, )) else: self.set_caption("%s = %s" % (key, default_value)) return (obj, )
class AccuFloat(Node): """ Float Accumulator Add to a Float (in datapool) the receive value :param inputs: a list containing the value to append and the name of the datapool variable """ def __init__(self, inputs, outputs): Node.__init__(self, inputs, outputs) self.pool = DataPool() def __call__(self, inputs): varname = inputs[1] value = inputs[0] if(not varname): varname = "AccuFloat_%i" % (id(self)) # Create datapool variable if necessary if(not self.pool.has_key(varname) or not isinstance(self.pool[varname], float)): self.pool[varname] = 0. self.set_caption("float accumulator : %s" % (repr(str(varname)))) self.pool[varname] += float(value) return (self.pool[varname], )
class PoolDefault(Node): """ In : Name (key), Default Value Out : Object (value) """ def __init__(self, inputs, outputs): Node.__init__(self, inputs, outputs) self.pool = DataPool() def reset(self): if hasattr(self, 'key'): del self.pool[self.key] def __call__(self, inputs): """ inputs is the list of input values """ key = inputs[0] default_value = inputs[1] self.default = default_value self.key = key obj = self.pool.setdefault(key, default_value) if key in self.pool: self.set_caption("%s" % (key,)) else: self.set_caption("%s = %s" % (key, default_value)) return (obj, )
def __init__(self): Observed.__init__(self) self.workspaces = [] self.cworkspace = -1 # current workspace self.graphViews = weakref.WeakKeyDictionary() self.datapool = DataPool() # Use dictionary self.use_by_name = {} self.use_by_interface = {} self.pkgmanager = PackageManager() self.empty_cnode_factory = CompositeNodeFactory("Workspace") self.clipboard = CompositeNodeFactory("Clipboard") self.init()
class PoolReader(Node): """ In : Name (key) Out : Object (value) """ def __init__(self, inputs, outputs): Node.__init__(self, inputs, outputs) self.pool = DataPool() def __call__(self, inputs): """ inputs is the list of input values """ key = inputs[0] obj = self.pool.get(key) if key in self.pool: self.set_caption("%s" % (key, )) return (obj, )
class Session(Observed): """ A session is composed by different workspaces, and an user package. A workspace is an open node A session can be saved on disk. """ USR_PKG_NAME = "__my package__" def __init__(self): Observed.__init__(self) self.workspaces = [] self.cworkspace = -1 # current workspace self.graphViews = weakref.WeakKeyDictionary() self.datapool = DataPool() # Use dictionary self.use_by_name = {} self.use_by_interface = {} self.pkgmanager = PackageManager() self.empty_cnode_factory = CompositeNodeFactory("Workspace") self.clipboard = CompositeNodeFactory("Clipboard") self.init() # gengraph def simulate_workspace_addition(self): for ws in self.workspaces: self.notify_listeners(("workspace_added", ws)) #/gengraph def get_current_workspace(self, ): """ Return the current workspace object """ return self.workspaces[self.cworkspace] ws = property(get_current_workspace) def get_graph_views(self): return self.graphViews.keys() def add_graph_view(self, view): self.graphViews[view] = None def add_workspace(self, compositenode=None, notify=True): """ Open a new workspace in the session if compositenode = None, create a new empty compositenode """ if compositenode is None: compositenode = self.empty_cnode_factory.instantiate() compositenode.set_caption("") self.workspaces.append(compositenode) elif (compositenode not in self.workspaces): self.workspaces.append(compositenode) else: return compositenode if (notify): self.notify_listeners(("workspace_added", compositenode)) return compositenode def close_workspace(self, index, notify=True): """ Close workspace at index """ del self.workspaces[index] if (notify): self.notify_listeners() def init(self, create_workspace=True): """ Init the Session """ self.session_filename = None #self.workspaces = [] # init pkgmanager self.pkgmanager.find_and_register_packages() # Create user package if needed if (not self.pkgmanager.has_key(self.USR_PKG_NAME)): try: self.pkgmanager.create_user_package(self.USR_PKG_NAME, {}) except: pass if (create_workspace): self.add_workspace() self.cworkspace = 0 load_interfaces() self.notify_listeners() def clear(self, create_workspace=True): """ Reinit Session """ self.datapool.clear() self.pkgmanager.clear() self.init(create_workspace) def save(self, filename=None): """ Save session in filename user_pkg and workspaces data are saved Be careful, this method do not work very well if data are not persistent. """ if (filename): self.session_filename = filename d = shelve.open(self.session_filename, writeback=True) # modules modules_path = [] for k in sys.modules.keys(): m = sys.modules[k] if hasattr(m, '__file__'): modules_path.append((m.__name__, os.path.abspath(m.__file__))) d['__modules__'] = modules_path d.sync() # datapool d['datapool'] = {} for key in self.datapool: try: d['datapool'][key] = self.datapool[key] d.sync() except Exception, e: print e print "Unable to save %s in the datapool..." % str(key) del d['datapool'][key] # workspaces d['workspaces'] = [] for cpt, ws in enumerate(self.workspaces): try: d['workspaces'].append(ws) d.sync() except Exception, e: print e print "Unable to save workspace %i. Skip this." % (cpt, ) print " WARNING: Your session is not saved. Please save your dataflow as a composite node !!!!!" d['workspaces'].pop()
def __init__(self, inputs, outputs): Node.__init__(self, inputs, outputs) self.pool = DataPool()
class Session(Observed): """ A session is composed by different workspaces, and an user package. A workspace is an open node A session can be saved on disk. """ USR_PKG_NAME = "__my package__" def __init__(self): Observed.__init__(self) self.workspaces = [] self.cworkspace = -1 # current workspace self.graphViews = weakref.WeakKeyDictionary() self.datapool = DataPool() # Use dictionary self.use_by_name = {} self.use_by_interface = {} self.pkgmanager = PackageManager() self.empty_cnode_factory = CompositeNodeFactory("Workspace") self.clipboard = CompositeNodeFactory("Clipboard") self.init() # gengraph def simulate_workspace_addition(self): for ws in self.workspaces: self.notify_listeners(("workspace_added", ws)) #/gengraph def get_current_workspace(self, ): """ Return the current workspace object """ return self.workspaces[self.cworkspace] ws = property(get_current_workspace) def get_graph_views(self): return self.graphViews.keys() def add_graph_view(self, view): self.graphViews[view] = None def add_workspace(self, compositenode=None, notify=True): """ Open a new workspace in the session if compositenode = None, create a new empty compositenode """ if compositenode is None: compositenode = self.empty_cnode_factory.instantiate() compositenode.set_caption("") self.workspaces.append(compositenode) elif(compositenode not in self.workspaces): self.workspaces.append(compositenode) else: return compositenode if(notify): self.notify_listeners(("workspace_added", compositenode)) return compositenode def close_workspace(self, index, notify=True): """ Close workspace at index """ del self.workspaces[index] if(notify): self.notify_listeners() def init(self, create_workspace=True): """ Init the Session """ self.session_filename = None #self.workspaces = [] # init pkgmanager self.pkgmanager.find_and_register_packages() # Create user package if needed if (not self.pkgmanager.has_key(self.USR_PKG_NAME)): try: self.pkgmanager.create_user_package(self.USR_PKG_NAME, {}) except: pass if (create_workspace): self.add_workspace() self.cworkspace = 0 load_interfaces() self.notify_listeners() def clear(self, create_workspace=True): """ Reinit Session """ self.datapool.clear() self.pkgmanager.clear() self.init(create_workspace) def save(self, filename=None): """ Save session in filename user_pkg and workspaces data are saved Be careful, this method do not work very well if data are not persistent. """ if (filename): self.session_filename = filename d = shelve.open(self.session_filename, writeback=True) # modules modules_path = [] for k in sys.modules.keys(): m = sys.modules[k] if hasattr(m, '__file__'): modules_path.append((m.__name__, os.path.abspath(m.__file__))) d['__modules__'] = modules_path d.sync() # datapool d['datapool'] = {} for key in self.datapool: try: d['datapool'][key] = self.datapool[key] d.sync() except Exception, e: print e print "Unable to save %s in the datapool..." % str(key) del d['datapool'][key] # workspaces d['workspaces'] = [] for cpt, ws in enumerate(self.workspaces): try: d['workspaces'].append(ws) d.sync() except Exception, e: print e print "Unable to save workspace %i. Skip this." % (cpt, ) print " WARNING: Your session is not saved. Please save your dataflow as a composite node !!!!!" d['workspaces'].pop()