rospy: #3055 support for __ns remapping
This commit is contained in:
parent
2751c343f6
commit
f003bdd331
|
@ -55,14 +55,21 @@ PRIV_NAME = '~'
|
||||||
REMAP = ":="
|
REMAP = ":="
|
||||||
ANYTYPE = '*'
|
ANYTYPE = '*'
|
||||||
|
|
||||||
def get_ros_namespace(env=None):
|
def get_ros_namespace(env=None, argv=None):
|
||||||
"""
|
"""
|
||||||
@param env: environment dictionary (defaults to os.environ)
|
@param env: environment dictionary (defaults to os.environ)
|
||||||
@type env: dict
|
@type env: dict
|
||||||
|
@param argv: command-line arguments (defaults to sys.argv)
|
||||||
|
@type argv: [str]
|
||||||
@return: ROS namespace of current program
|
@return: ROS namespace of current program
|
||||||
@rtype: str
|
@rtype: str
|
||||||
"""
|
"""
|
||||||
#we force command-line-specified namespaces to be globally scoped
|
#we force command-line-specified namespaces to be globally scoped
|
||||||
|
if argv is None:
|
||||||
|
argv = sys.argv
|
||||||
|
for a in argv:
|
||||||
|
if a.startswith('__ns:='):
|
||||||
|
return make_global_ns(a[len('__ns:='):])
|
||||||
if env is None:
|
if env is None:
|
||||||
env = os.environ
|
env = os.environ
|
||||||
return make_global_ns(env.get(ROS_NAMESPACE, GLOBALNS))
|
return make_global_ns(env.get(ROS_NAMESPACE, GLOBALNS))
|
||||||
|
|
|
@ -41,27 +41,46 @@ import rostest
|
||||||
class NamesTest(unittest.TestCase):
|
class NamesTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_get_ros_namespace(self):
|
def test_get_ros_namespace(self):
|
||||||
if 'ROS_NAMESPACE' is os.environ:
|
if 'ROS_NAMESPACE' in os.environ:
|
||||||
rosns = os.environ['ROS_NAMESPACE']
|
rosns = os.environ['ROS_NAMESPACE']
|
||||||
del os.environ['ROS_NAMESPACE']
|
del os.environ['ROS_NAMESPACE']
|
||||||
else:
|
else:
|
||||||
rosns = None
|
rosns = None
|
||||||
self.assertEquals('/', roslib.names.get_ros_namespace())
|
sysargv = sys.argv
|
||||||
self.assertEquals('/', roslib.names.get_ros_namespace(env={}))
|
|
||||||
|
|
||||||
os.environ['ROS_NAMESPACE'] = 'unresolved'
|
try:
|
||||||
self.assertEquals('/unresolved/', roslib.names.get_ros_namespace())
|
sys.argv = []
|
||||||
self.assertEquals('/unresolved/', roslib.names.get_ros_namespace(env={'ROS_NAMESPACE': 'unresolved'}))
|
self.assertEquals('/', roslib.names.get_ros_namespace())
|
||||||
|
self.assertEquals('/', roslib.names.get_ros_namespace(argv=[]))
|
||||||
os.environ['ROS_NAMESPACE'] = '/resolved/'
|
self.assertEquals('/', roslib.names.get_ros_namespace(env={}))
|
||||||
self.assertEquals('/resolved/', roslib.names.get_ros_namespace())
|
self.assertEquals('/', roslib.names.get_ros_namespace(env={}, argv=[]))
|
||||||
self.assertEquals('/resolved/', roslib.names.get_ros_namespace(env={'ROS_NAMESPACE': '/resolved'}))
|
|
||||||
|
os.environ['ROS_NAMESPACE'] = 'unresolved'
|
||||||
del os.environ['ROS_NAMESPACE']
|
self.assertEquals('/unresolved/', roslib.names.get_ros_namespace())
|
||||||
|
self.assertEquals('/unresolved/', roslib.names.get_ros_namespace(env={'ROS_NAMESPACE': 'unresolved'}))
|
||||||
# restore
|
sys.argv = ['foo', '__ns:=unresolved_override']
|
||||||
if rosns:
|
self.assertEquals('/unresolved_override/', roslib.names.get_ros_namespace(env={'ROS_NAMESPACE': 'unresolved'}))
|
||||||
os.environ['ROS_NAMESPACE'] = rosns
|
self.assertEquals('/override2/', roslib.names.get_ros_namespace(env={'ROS_NAMESPACE': 'unresolved'}, argv=['foo', '__ns:=override2']))
|
||||||
|
|
||||||
|
sys.argv = []
|
||||||
|
os.environ['ROS_NAMESPACE'] = '/resolved/'
|
||||||
|
self.assertEquals('/resolved/', roslib.names.get_ros_namespace())
|
||||||
|
self.assertEquals('/resolved/', roslib.names.get_ros_namespace(env={'ROS_NAMESPACE': '/resolved'}))
|
||||||
|
|
||||||
|
del os.environ['ROS_NAMESPACE']
|
||||||
|
|
||||||
|
sys.argv = ['foo', '__ns:=unresolved_ns']
|
||||||
|
self.assertEquals('/unresolved_ns/', roslib.names.get_ros_namespace())
|
||||||
|
self.assertEquals('/unresolved_ns2/', roslib.names.get_ros_namespace(argv=['foo', '__ns:=unresolved_ns2']))
|
||||||
|
sys.argv = ['foo', '__ns:=/resolved_ns/']
|
||||||
|
self.assertEquals('/resolved_ns/', roslib.names.get_ros_namespace())
|
||||||
|
self.assertEquals('/resolved_ns2/', roslib.names.get_ros_namespace(argv=['foo', '__ns:=resolved_ns2']))
|
||||||
|
finally:
|
||||||
|
sys.argv = sysargv
|
||||||
|
|
||||||
|
# restore
|
||||||
|
if rosns:
|
||||||
|
os.environ['ROS_NAMESPACE'] = rosns
|
||||||
|
|
||||||
def test_make_global_ns(self):
|
def test_make_global_ns(self):
|
||||||
from roslib.names import make_global_ns
|
from roslib.names import make_global_ns
|
||||||
|
|
Loading…
Reference in New Issue