Example #1
0
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, )
Example #2
0
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], )
Example #3
0
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, )
Example #4
0
    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()
Example #5
0
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, )
Example #6
0
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, )
Example #7
0
    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()
Example #8
0
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()
Example #9
0
    def __init__(self, inputs, outputs):

        Node.__init__(self, inputs, outputs)
        self.pool = DataPool()
Example #10
0
    def __init__(self, inputs, outputs):

        Node.__init__(self, inputs, outputs)
        self.pool = DataPool()
Example #11
0
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()