import files that are relative to the source as nepi.full.path
[nepi.git] / src / nepi / resources / netns / netnswrapper.py
index 34120af..c9e661d 100644 (file)
@@ -3,9 +3,8 @@
 #    Copyright (C) 2013 INRIA
 #
 #    This program is free software: you can redistribute it and/or modify
-#    it under the terms of the GNU General Public License as published by
-#    the Free Software Foundation, either version 3 of the License, or
-#    (at your option) any later version.
+#    it under the terms of the GNU General Public License version 2 as
+#    published by the Free Software Foundation;
 #
 #    This program is distributed in the hope that it will be useful,
 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -23,11 +22,6 @@ import os
 import sys
 import uuid
 
-try:
-    import netns
-except ImportError:
-    pass
-
 class NetNSWrapper(object):
     def __init__(self, loglevel = logging.INFO, enable_dump = False):
         super(NetNSWrapper, self).__init__()
@@ -39,7 +33,7 @@ class NetNSWrapper(object):
         self._logger.setLevel(loglevel)
 
         # Object to dump instructions to reproduce and debug experiment
-        from netnswrapper_debug import NetNSWrapperDebuger
+        from nepi.resources.netns.netnswrapper_debug import NetNSWrapperDebuger
         self._debuger = NetNSWrapperDebuger(enabled = enable_dump)
 
     @property
@@ -58,6 +52,7 @@ class NetNSWrapper(object):
  
     def create(self, clazzname, *args):
         """ This method should be used to construct netns objects """
+        import netns
 
         if clazzname not in ['open'] and not hasattr(netns, clazzname):
             msg = "Type %s not supported" % (clazzname) 
@@ -74,6 +69,7 @@ class NetNSWrapper(object):
         if clazzname == "open":
             path = args[0] 
             mode = args[1] 
+            # xxx Thierry: not sure where this gets closed
             obj = open(path, mode)
         else:
             clazz = getattr(netns, clazzname)
@@ -117,8 +113,9 @@ class NetNSWrapper(object):
         # If the result is an object (not a base value),
         # then keep track of the object a return the object
         # reference (newuuid)
+        # xxx the two instances of `int` are from 2to3
         if not (result is None or type(result) in [
-                bool, float, long, str, int]):
+                bool, float, int, str, int]):
             self._objects[newuuid] = result
             result = newuuid
 
@@ -168,9 +165,13 @@ class NetNSWrapper(object):
         self.debuger.dump_shutdown()
         ########
 
+        ### FLUSH PIPES
         sys.stdout.flush()
         sys.stderr.flush()
 
+        ### RELEASE OBJECTS
+        del self._objects 
+
         ### DEBUG
         self.logger.debug("SHUTDOWN")
         ########
@@ -184,7 +185,7 @@ class NetNSWrapper(object):
     def replace_kwargs(self, kwargs):
         realkwargs = dict([(k, self.get_object(v) \
                 if str(v).startswith("uuid") else v) \
-                for k,v in kwargs.iteritems()])
+                for k,v in kwargs.items()])
  
         return realkwargs