visualizer: Python 3 compatibility fixes

This commit is contained in:
Micolaj Chwalisz
2019-04-15 12:00:57 -07:00
committed by Tom Henderson
parent 5396fc911e
commit c189ab5ce1
10 changed files with 40 additions and 30 deletions

View File

@@ -81,7 +81,7 @@ class MyMultiSectionFactory(MultiSectionFactory):
def close(self):
self.header_sink.file.close()
self.main_sink.file.close()
for sink in self.section_sinks.itervalues():
for sink in self.section_sinks.values():
sink.file.close()

View File

@@ -112,11 +112,17 @@ VisualSimulatorImpl::IsFinished (void) const
void
VisualSimulatorImpl::Run (void)
{
if (!Py_IsInitialized ())
if (!Py_IsInitialized ())
{
const char *argv[] = { "python", NULL};
Py_Initialize ();
PySys_SetArgv (1, (char**) argv);
#if PY_MAJOR_VERSION >= 3
const wchar_t *argv[] = { L"python", NULL};
Py_Initialize ();
PySys_SetArgv (1, (wchar_t**) argv);
#else
const char *argv[] = { "python", NULL};
Py_Initialize ();
PySys_SetArgv (1, (char**) argv);
#endif
PyRun_SimpleString (
"import visualizer\n"
"visualizer.start();\n"

View File

@@ -1,3 +1,3 @@
from core import start, register_plugin, set_bounds, add_initialization_hook
from .core import start, register_plugin, set_bounds, add_initialization_hook

View File

@@ -1,3 +1,4 @@
from __future__ import print_function
import ns.point_to_point
import ns.csma
import ns.wifi
@@ -5,7 +6,6 @@ import ns.bridge
import ns.internet
import ns.mesh
import ns.wimax
import ns.wimax
import ns.lte
from gi.repository import GObject
@@ -126,15 +126,15 @@ def load_plugins():
continue
try:
plugin_module = __import__(name)
except ImportError, ex:
print >> sys.stderr, "Could not load plugin %r: %s" % (filename, str(ex))
except ImportError as ex:
print("Could not load plugin %r: %s" % (filename, str(ex)), file=sys.stderr)
continue
try:
plugin_func = plugin_module.register
except AttributeError:
print >> sys.stderr, "Plugin %r has no 'register' function" % name
print("Plugin %r has no 'register' function" % name, file=sys.stderr)
else:
#print >> sys.stderr, "Plugin %r registered" % name
#print("Plugin %r registered" % name, file=sys.stderr)
register_plugin(plugin_func, name, plugin_module)
sys.path = old_path

View File

@@ -31,6 +31,9 @@ import math
import os
import sys
if sys.version_info > (3,):
long = int
try:
import gi
gi.require_version('GooCanvas', '2.0')
@@ -45,13 +48,14 @@ try:
from gi.repository import Pango
from gi.repository import GooCanvas
import threading
import hud
from . import hud
#import time
try:
import svgitem
except ImportError:
svgitem = None
except ImportError as _import_error:
except ImportError as e:
_import_error = e
import dummy_threading as threading
else:
_import_error = None
@@ -61,10 +65,10 @@ try:
except ImportError:
ipython_view = None
from base import InformationWindow, PyVizObject, Link, lookup_netdevice_traits, PIXELS_PER_METER
from base import transform_distance_simulation_to_canvas, transform_point_simulation_to_canvas
from base import transform_distance_canvas_to_simulation, transform_point_canvas_to_simulation
from base import load_plugins, register_plugin, plugins
from .base import InformationWindow, PyVizObject, Link, lookup_netdevice_traits, PIXELS_PER_METER
from .base import transform_distance_simulation_to_canvas, transform_point_simulation_to_canvas
from .base import transform_distance_canvas_to_simulation, transform_point_canvas_to_simulation
from .base import load_plugins, register_plugin, plugins
PI_OVER_2 = math.pi/2
PI_TIMES_2 = math.pi*2
@@ -773,7 +777,7 @@ class Visualizer(GObject.GObject):
assert isinstance(mode, ShowTransmissionsMode)
self._show_transmissions_mode = mode
if self._show_transmissions_mode == ShowTransmissionsMode.ALL:
self.simulation.set_nodes_of_interest(range(ns.network.NodeList.GetNNodes()))
self.simulation.set_nodes_of_interest(list(range(ns.network.NodeList.GetNNodes())))
elif self._show_transmissions_mode == ShowTransmissionsMode.NONE:
self.simulation.set_nodes_of_interest([])
elif self._show_transmissions_mode == ShowTransmissionsMode.SELECTED:
@@ -854,7 +858,7 @@ class Visualizer(GObject.GObject):
settings_hbox.pack_start(vbox, False, False, 6)
self.node_size_adjustment = scale.get_adjustment()
def node_size_changed(adj):
for node in self.nodes.itervalues():
for node in self.nodes.values():
node.set_size(adj.get_value())
self.node_size_adjustment.connect("value-changed", node_size_changed)
self.node_size_adjustment.set_lower(0.01)
@@ -1218,7 +1222,7 @@ class Visualizer(GObject.GObject):
self.emit("update-view")
def _update_node_positions(self):
for node in self.nodes.itervalues():
for node in self.nodes.values():
if node.has_mobility:
ns3_node = ns.network.NodeList.GetNode(node.node_index)
mobility = ns3_node.GetObject(ns.mobility.MobilityModel.GetTypeId())
@@ -1300,7 +1304,7 @@ class Visualizer(GObject.GObject):
k = self.node_size_adjustment.get_value()/5
for (transmitter_id, receiver_id), (rx_bytes, rx_count) in transmissions_average.iteritems():
for (transmitter_id, receiver_id), (rx_bytes, rx_count) in transmissions_average.items():
transmitter = self.get_node(transmitter_id)
receiver = self.get_node(receiver_id)
try:
@@ -1381,7 +1385,7 @@ class Visualizer(GObject.GObject):
k = self.node_size_adjustment.get_value()/5
for transmitter_id, (drop_bytes, drop_count) in drops_average.iteritems():
for transmitter_id, (drop_bytes, drop_count) in drops_average.items():
transmitter = self.get_node(transmitter_id)
try:
arrow, label = old_arrows.pop()
@@ -1497,7 +1501,7 @@ class Visualizer(GObject.GObject):
if not self.nodes:
return
self._update_node_positions()
positions = [node.get_position() for node in self.nodes.itervalues()]
positions = [node.get_position() for node in self.nodes.values()]
min_x, min_y = min(x for (x,y) in positions), min(y for (x,y) in positions)
max_x, max_y = max(x for (x,y) in positions), max(y for (x,y) in positions)
min_x_px, min_y_px = self.canvas.convert_to_pixels(min_x, min_y)

View File

@@ -1,5 +1,5 @@
import core
import math
from . import core
from gi.repository import Pango
from gi.repository import Gtk
from gi.repository import GooCanvas

View File

@@ -319,11 +319,11 @@ class IterableIPShell:
@return none
"""
stat = 0
if verbose or debug: print header+cmd
if verbose or debug: print(header+cmd)
# flush stdout so we don't mangle python's buffering
if not debug:
input, output = os.popen4(cmd)
print output.read()
print(output.read())
output.close()
input.close()

View File

@@ -120,7 +120,7 @@ def populate_node_menu(viz, node, menu):
ns3_node = ns.network.NodeList.GetNode(node.node_index)
olsr = ns3_node.GetObject(ns.olsr.olsr.RoutingProtocol.GetTypeId())
if olsr is None:
print "No OLSR"
print("No OLSR")
return
menu_item = Gtk.MenuItem("Show OLSR Routing Table")

View File

@@ -131,7 +131,7 @@ class WifiLinkMonitor(object):
self.access_points = {}
self.stations = []
for node in viz.nodes.itervalues():
for node in viz.nodes.values():
ns3_node = ns.network.NodeList.GetNode(node.node_index)
for devI in range(ns3_node.GetNDevices()):
dev = ns3_node.GetDevice(devI)

View File

@@ -120,7 +120,7 @@ class SvgItem(GooCanvas.ItemSimple):
self.changed(True)
else:
raise AttributeError, 'unknown property %s' % pspec.name
raise AttributeError('unknown property %s' % pspec.name)
def _size_changed(self):
"""!
@@ -172,7 +172,7 @@ class SvgItem(GooCanvas.ItemSimple):
return self.height
else:
raise AttributeError, 'unknown property %s' % pspec.name
raise AttributeError('unknown property %s' % pspec.name)
def do_simple_paint(self, cr, bounds):
"""!