commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 24/101: grc-refactor: the hopeless cause of


From: git
Subject: [Commit-gnuradio] [gnuradio] 24/101: grc-refactor: the hopeless cause of bus ports...
Date: Thu, 16 Mar 2017 14:58:00 +0000 (UTC)

This is an automated email from the git hooks/post-receive script.

jcorgan pushed a commit to branch python3
in repository gnuradio.

commit 4b60db7deaa89a998715b45e942fa0c69dd5be1a
Author: Sebastian Koslowski <address@hidden>
Date:   Sat Jun 18 21:16:14 2016 -0700

    grc-refactor: the hopeless cause of bus ports...
---
 grc/core/Block.py     | 107 ++++++++++++++++++++++++--------------------------
 grc/core/FlowGraph.py |  81 +++++++++++++++++---------------------
 grc/core/Port.py      |  27 ++++++-------
 grc/gui/FlowGraph.py  |   4 +-
 4 files changed, 102 insertions(+), 117 deletions(-)

diff --git a/grc/core/Block.py b/grc/core/Block.py
index c6d743e..743c9de 100644
--- a/grc/core/Block.py
+++ b/grc/core/Block.py
@@ -578,26 +578,30 @@ class Block(Element):
         Returns:
             true for change
         """
-        changed = False
+        type_templates = ' '.join(p._type for p in self.get_children())
         type_param = None
         for key, param in six.iteritems(self.params):
-            children = self.get_children()
+            if not param.is_enum():
+                continue
             # Priority to the type controller
-            if param.key in ' '.join([p._type for p in children]): type_param 
= param
+            if param.key in type_templates:
+                type_param = param
+                break
             # Use param if type param is unset
             if not type_param:
                 type_param = param
-        if type_param:
-            # Try to increment the enum by direction
-            try:
-                keys = type_param.get_option_keys()
-                old_index = keys.index(type_param.get_value())
-                new_index = (old_index + direction + len(keys)) % len(keys)
-                type_param.set_value(keys[new_index])
-                changed = True
-            except:
-                pass
-        return changed
+        if not type_param:
+            return False
+
+        # Try to increment the enum by direction
+        try:
+            keys = type_param.get_option_keys()
+            old_index = keys.index(type_param.get_value())
+            new_index = (old_index + direction + len(keys)) % len(keys)
+            type_param.set_value(keys[new_index])
+            return True
+        except:
+            return False
 
     def port_controller_modify(self, direction):
         """
@@ -611,7 +615,7 @@ class Block(Element):
         """
         changed = False
         # Concat the nports string from the private nports settings of all 
ports
-        nports_str = ' '.join([port._nports for port in self.get_ports()])
+        nports_str = ' '.join(port._nports for port in self.get_ports())
         # Modify all params whose keys appear in the nports string
         for key, param in six.iteritems(self.params):
             if param.is_enum() or param.key not in nports_str:
@@ -682,12 +686,9 @@ class Block(Element):
     ##############################################
 
     def get_bus_structure(self, direction):
-        if direction == 'source':
-            bus_structure = self._bus_structure_source
-        else:
-            bus_structure = self._bus_structure_sink
-
-        bus_structure = self.resolve_dependencies(bus_structure)
+        bus_structure = self.resolve_dependencies(
+            self._bus_structure_source if direction == 'source' else
+            self._bus_structure_sink)
 
         if not bus_structure:
             return ''  # TODO: Don't like empty strings. should change this to 
None eventually
@@ -706,70 +707,66 @@ class Block(Element):
         return buslist or ports
 
     def _import_bus_stuff(self, n):
-        bussinks = n.get('bus_sink', [])
-        if len(bussinks) > 0 and not self._bussify_sink:
+        bus_sinks = n.get('bus_sink', [])
+        if len(bus_sinks) > 0 and not self._bussify_sink:
             self.bussify({'name': 'bus', 'type': 'bus'}, 'sink')
-        elif len(bussinks) > 0:
+        elif len(bus_sinks) > 0:
             self.bussify({'name': 'bus', 'type': 'bus'}, 'sink')
             self.bussify({'name': 'bus', 'type': 'bus'}, 'sink')
-        bussrcs = n.get('bus_source', [])
-        if len(bussrcs) > 0 and not self._bussify_source:
+        bus_sources = n.get('bus_source', [])
+        if len(bus_sources) > 0 and not self._bussify_source:
             self.bussify({'name': 'bus', 'type': 'bus'}, 'source')
-        elif len(bussrcs) > 0:
+        elif len(bus_sources) > 0:
             self.bussify({'name': 'bus', 'type': 'bus'}, 'source')
             self.bussify({'name': 'bus', 'type': 'bus'}, 'source')
 
     def form_bus_structure(self, direc):
-        if direc == 'source':
-            get_p = self.get_sources
-            get_p_gui = self.get_sources_gui
-            bus_structure = self.get_bus_structure('source')
-        else:
-            get_p = self.get_sinks
-            get_p_gui = self.get_sinks_gui
-            bus_structure = self.get_bus_structure('sink')
+        ports = self.sources if direc == 'source' else self.sinks
+        struct = self.get_bus_structure(direc)
 
-        struct = [list(range(len(get_p())))]
-        if True in [isinstance(a.get_nports(), int) for a in get_p()]:
-            structlet = []
-            last = 0
-            for j in [i.get_nports() for i in get_p() if 
isinstance(i.get_nports(), int)]:
-                structlet.extend([a+last for a in range(j)])
-                last = structlet[-1] + 1
-                struct = [structlet]
-        if bus_structure:
+        if not struct:
+            struct = [list(range(len(ports)))]
 
-            struct = bus_structure
+        elif any(isinstance(p.get_nports(), int) for p in ports):
+            last = 0
+            structlet = []
+            for port in ports:
+                nports = port.get_nports()
+                if not isinstance(nports, int):
+                    continue
+                structlet.extend(a + last for a in range(nports))
+                last += nports
+            struct = [structlet]
 
         self.current_bus_structure[direc] = struct
         return struct
 
     def bussify(self, n, direc):
         if direc == 'source':
-            get_p = self.get_sources
             get_p_gui = self.get_sources_gui
         else:
-            get_p = self.get_sinks
             get_p_gui = self.get_sinks_gui
 
-        for elt in get_p():
+        ports = self.sources if direc == 'source' else self.sinks
+
+        for elt in ports:
             for connect in elt.get_connections():
                 self.parent.remove_element(connect)
 
-        if ('bus' not in [a.get_type() for a in get_p()]) and len(get_p()) > 0:
+        if ports and all('bus' != p.get_type() for p in ports):
             struct = self.form_bus_structure(direc)
             self.current_bus_structure[direc] = struct
-            if get_p()[0].get_nports():
-                n['nports'] = str(1)
+            if ports[0].get_nports():
+                n['nports'] = '1'
 
             for i in range(len(struct)):
-                n['key'] = str(len(get_p()))
+                n['key'] = str(len(ports))
                 n = dict(n)
                 port = self.parent.parent.Port(block=self, n=n, dir=direc)
-                get_p().append(port)
-        elif 'bus' in [a.get_type() for a in get_p()]:
+                ports.append(port)
+        elif any('bus' == p.get_type() for p in ports):
             for elt in get_p_gui():
-                get_p().remove(elt)
+                ports.remove(elt)
             self.current_bus_structure[direc] = ''
 
     def _init_bus_ports(self, n):
diff --git a/grc/core/FlowGraph.py b/grc/core/FlowGraph.py
index 53c4b78..16bcb3b 100644
--- a/grc/core/FlowGraph.py
+++ b/grc/core/FlowGraph.py
@@ -461,52 +461,41 @@ class FlowGraph(Element):
     ##############################################
     def bus_ports_rewrite(self):
         # todo: move to block.rewrite()
-        for block in self.blocks:
-            for direc in ['source', 'sink']:
-                if direc == 'source':
-                    get_p = block.get_sources
-                    get_p_gui = block.get_sources_gui
-                    bus_structure = block.form_bus_structure('source')
-                else:
-                    get_p = block.get_sinks
-                    get_p_gui = block.get_sinks_gui
-                    bus_structure = block.form_bus_structure('sink')
-
-                if 'bus' in [a.get_type() for a in get_p_gui()]:
-                    if len(get_p_gui()) > len(bus_structure):
-                        times = range(len(bus_structure), len(get_p_gui()))
-                        for i in times:
-                            for connect in get_p_gui()[-1].get_connections():
-                                block.parent.remove_element(connect)
-                            get_p().remove(get_p_gui()[-1])
-                    elif len(get_p_gui()) < len(bus_structure):
-                        n = {'name': 'bus', 'type': 'bus'}
-                        if any(isinstance(a.get_nports(), int) for a in 
get_p()):
-                            n['nports'] = str(1)
-
-                        times = range(len(get_p_gui()), len(bus_structure))
-
-                        for i in times:
-                            n['key'] = str(len(get_p()))
-                            n = dict(n)
-                            port = block.parent.parent.Port(
-                                block=block, n=n, dir=direc)
-                            get_p().append(port)
-
-                if 'bus' in [a.get_type() for a in block.get_sources_gui()]:
-                    for i in range(len(block.get_sources_gui())):
-                        if len(block.get_sources_gui()[
-                                   i].get_connections()) > 0:
-                            source = block.get_sources_gui()[i]
-                            sink = []
-
-                            for j in range(len(source.get_connections())):
-                                sink.append(
-                                    source.get_connections()[j].sink_port)
-                            for elt in source.get_connections():
-                                self.remove_element(elt)
-                            for j in sink:
-                                self.connect(source, j)
+        def doit(block, ports, ports_gui, direc):
+            bus_structure = block.form_bus_structure(direc)
+
+            if any('bus' == a.get_type() for a in ports_gui):
+                if len(ports_gui) > len(bus_structure):
+                    for _ in range(len(bus_structure), len(ports_gui)):
+                        for connect in ports_gui[-1].get_connections():
+                            block.parent.remove_element(connect)
+                        ports.remove(ports_gui[-1])
+                elif len(ports_gui) < len(bus_structure):
+                    n = {'name': 'bus', 'type': 'bus'}
+                    if any(isinstance(a.get_nports(), int) for a in ports):
+                        n['nports'] = str(1)
+                    for _ in range(len(ports_gui), len(bus_structure)):
+                        n['key'] = str(len(ports))
+                        port = block.parent.parent.Port(block=block, 
n=dict(n), dir=direc)
+                        ports.append(port)
+
+            if 'bus' in [a.get_type() for a in block.get_sources_gui()]:
+                for i in range(len(block.get_sources_gui())):
+                    if not block.get_sources_gui()[i].get_connections():
+                        continue
+                    source = block.get_sources_gui()[i]
+                    sink = []
+
+                    for j in range(len(source.get_connections())):
+                        sink.append(source.get_connections()[j].sink_port)
+                    for elt in source.get_connections():
+                        self.remove_element(elt)
+                    for j in sink:
+                        self.connect(source, j)
+
+        for blk in self.blocks:
+            doit(blk, blk.sources, blk.get_sources_gui(), 'source')
+            doit(blk, blk.sinks, blk.get_sinks_gui(), 'sinks')
 
 
 def _update_old_message_port_keys(source_key, sink_key, source_block, 
sink_block):
diff --git a/grc/core/Port.py b/grc/core/Port.py
index d0362ff..bb1e1fa 100644
--- a/grc/core/Port.py
+++ b/grc/core/Port.py
@@ -363,18 +363,17 @@ class Port(Element):
     def get_associated_ports(self):
         if not self.get_type() == 'bus':
             return [self]
+
+        block = self.parent_block
+        if self.is_source:
+            block_ports = block.sources
+            bus_structure = block.current_bus_structure['source']
         else:
-            flowgraph = self.parent_flowgraph
-            if self.is_source:
-                get_ports = flowgraph.get_sources
-                bus_structure = flowgraph.current_bus_structure['source']
-            else:
-                get_ports = flowgraph.get_sinks
-                bus_structure = flowgraph.current_bus_structure['sink']
-
-            ports = [i for i in get_ports() if not i.get_type() == 'bus']
-            if bus_structure:
-                busses = [i for i in get_ports() if i.get_type() == 'bus']
-                bus_index = busses.index(self)
-                ports = [a for a in ports if ports.index(a) in 
bus_structure[bus_index]]
-            return ports
+            block_ports = block.sinks
+            bus_structure = block.current_bus_structure['sink']
+
+        ports = [i for i in block_ports if not i.get_type() == 'bus']
+        if bus_structure:
+            bus_index = [i for i in block_ports if i.get_type() == 
'bus'].index(self)
+            ports = [p for i, p in enumerate(ports) if i in 
bus_structure[bus_index]]
+        return ports
diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py
index 1c4960f..f6a57ef 100644
--- a/grc/gui/FlowGraph.py
+++ b/grc/gui/FlowGraph.py
@@ -259,7 +259,7 @@ class FlowGraph(Element, _Flowgraph):
         Returns:
             true for change
         """
-        return any([sb.type_controller_modify(direction) for sb in 
self.get_selected_blocks()])
+        return any(sb.type_controller_modify(direction) for sb in 
self.get_selected_blocks())
 
     def port_controller_modify_selected(self, direction):
         """
@@ -271,7 +271,7 @@ class FlowGraph(Element, _Flowgraph):
         Returns:
             true for changed
         """
-        return any([sb.port_controller_modify(direction) for sb in 
self.get_selected_blocks()])
+        return any(sb.port_controller_modify(direction) for sb in 
self.get_selected_blocks())
 
     def enable_selected(self, enable):
         """



reply via email to

[Prev in Thread] Current Thread [Next in Thread]