
commit bdbe7c3e1ba234ace53aee89ecd90bdd134161f8 Author: Damian Johnson <atagar@torproject.org> Date: Sun Jan 17 15:09:33 2016 -0800 expand_path() helper function Adding a small util method for expanding relative paths and taking into account chroots. --- nyx/graph_panel.py | 1 - nyx/torrc_panel.py | 7 ++++--- nyx/util/__init__.py | 23 +++++++++++++++++++++++ test/util/expand_path.py | 21 +++++++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) diff --git a/nyx/graph_panel.py b/nyx/graph_panel.py index f988125..086d04d 100644 --- a/nyx/graph_panel.py +++ b/nyx/graph_panel.py @@ -81,7 +81,6 @@ CONFIG = conf.config_dict('nyx', { 'features.panels.show.connection': True, 'features.graph.bw.transferInBytes': False, 'features.graph.bw.accounting.show': True, - 'tor.chroot': '', }, conf_handler) diff --git a/nyx/torrc_panel.py b/nyx/torrc_panel.py index 65dca26..0c70f37 100644 --- a/nyx/torrc_panel.py +++ b/nyx/torrc_panel.py @@ -8,7 +8,7 @@ import threading import nyx.popups -from nyx.util import panel, tor_config, tor_controller, ui_tools +from nyx.util import expand_path, panel, tor_config, tor_controller, ui_tools from stem.control import State from stem.util import conf, str_tools @@ -170,10 +170,11 @@ class TorrcPanel(panel.Panel): rendered_contents, corrections, conf_location = None, {}, None loaded_torrc = tor_config.get_torrc() + controller = tor_controller() - with loaded_torrc.get_lock(): - conf_location = loaded_torrc.get_config_location() + conf_location = expand_path(controller.get_info('config-file', None)) + with loaded_torrc.get_lock(): if not loaded_torrc.is_loaded(): rendered_contents = ['### Unable to load the torrc ###'] else: diff --git a/nyx/util/__init__.py b/nyx/util/__init__.py index a7b2e8d..350e96e 100644 --- a/nyx/util/__init__.py +++ b/nyx/util/__init__.py @@ -10,6 +10,7 @@ import stem.connection import stem.control import stem.util.conf import stem.util.log +import stem.util.system from nyx.util import log @@ -65,6 +66,28 @@ def init_controller(*args, **kwargs): return TOR_CONTROLLER +@uses_settings +def expand_path(path, config): + """ + Expands relative paths and include our chroot if one was set. + + :param str path: path to be expanded + + :returns: **str** with the expanded path + """ + + if path is None: + return None + + try: + chroot = config.get('tor.chroot', '') + tor_cwd = stem.util.system.cwd(tor_controller().get_pid(None)) + return chroot + stem.util.system.expand_path(path, tor_cwd) + except IOError as exc: + stem.util.log.info('Unable to expand a relative path (%s): %s' % (path, exc)) + return path + + def join(entries, joiner = ' ', size = None): """ Joins a series of strings similar to str.join(), but only up to a given size. diff --git a/test/util/expand_path.py b/test/util/expand_path.py new file mode 100644 index 0000000..3f3d5ff --- /dev/null +++ b/test/util/expand_path.py @@ -0,0 +1,21 @@ +import unittest + +from nyx.util import expand_path, uses_settings + +from mock import patch, Mock + + +class TestExpandPath(unittest.TestCase): + @patch('nyx.util.tor_controller') + @patch('stem.util.system.cwd', Mock(return_value = '/your_cwd')) + @uses_settings + def test_expand_path(self, tor_controller_mock, config): + tor_controller_mock().get_pid.return_value = 12345 + self.assertEqual('/absolute/path/to/torrc', expand_path('/absolute/path/to/torrc')) + self.assertEqual('/your_cwd/torrc', expand_path('torrc')) + + config.set('tor.chroot', '/chroot') + self.assertEqual('/chroot/absolute/path/to/torrc', expand_path('/absolute/path/to/torrc')) + self.assertEqual('/chroot/your_cwd/torrc', expand_path('torrc')) + + config.set('tor.chroot', None)