commit 774ed43694a0130c55b750fad581532c55d44364
Author: Damian Johnson <atagar(a)torproject.org>
Date: Sat Oct 22 12:16:15 2016 -0700
Let users disable on-disk caching
Some users may not want us to cache information to disk. Including a nyxrc
option to disable this.
Also shortening these option names. Plan is for user-facing nyxrc options to be
short, while internal options use namespacing.
---
nyx/__init__.py | 7 ++++++-
nyx/arguments.py | 4 ++--
nyx/panel/config.py | 28 +++++++++++++++-------------
nyx/panel/log.py | 4 ++--
nyx/starter.py | 2 +-
nyxrc.sample | 12 +++++++++---
6 files changed, 35 insertions(+), 22 deletions(-)
diff --git a/nyx/__init__.py b/nyx/__init__.py
index 75dde99..a66c95b 100644
--- a/nyx/__init__.py
+++ b/nyx/__init__.py
@@ -85,7 +85,6 @@ CONFIG = stem.util.conf.config_dict('nyx', {
NYX_INTERFACE = None
TOR_CONTROLLER = None
BASE_DIR = os.path.sep.join(__file__.split(os.path.sep)[:-1])
-DEFAULT_DATA_DIR = os.path.expanduser('~/.nyx')
TESTING = False
# technically can change but we use this query a *lot* so needs to be cached
@@ -238,6 +237,12 @@ def init_controller(*args, **kwargs):
@uses_settings
+def data_directory(config):
+ path = config.get('data_directory', '~/.nyx')
+ return None if path == 'disabled' else os.path.expanduser(path)
+
+
+@uses_settings
def expand_path(path, config):
"""
Expands relative paths and include our chroot if one was set.
diff --git a/nyx/arguments.py b/nyx/arguments.py
index 9b53e35..efb95ee 100644
--- a/nyx/arguments.py
+++ b/nyx/arguments.py
@@ -14,7 +14,7 @@ import nyx.log
import stem.util.connection
-from nyx import DEFAULT_DATA_DIR, msg
+from nyx import msg
DEFAULT_ARGS = {
'control_address': '127.0.0.1',
@@ -22,7 +22,7 @@ DEFAULT_ARGS = {
'user_provided_port': False,
'control_socket': '/var/run/tor/control',
'user_provided_socket': False,
- 'config': os.path.join(DEFAULT_DATA_DIR, 'nyxrc'),
+ 'config': os.path.join(os.path.expanduser('~/.nyx'), 'nyxrc'),
'debug_path': None,
'logged_events': 'NOTICE,WARN,ERR,NYX_NOTICE,NYX_WARNING,NYX_ERROR',
'print_version': False,
diff --git a/nyx/panel/config.py b/nyx/panel/config.py
index 8390ac5..0f454f3 100644
--- a/nyx/panel/config.py
+++ b/nyx/panel/config.py
@@ -19,7 +19,7 @@ import stem.util.connection
from nyx.curses import WHITE, NORMAL, BOLD, HIGHLIGHT
from nyx.menu import MenuItem, Submenu
-from nyx import DEFAULT_DATA_DIR, tor_controller, input_prompt, show_message
+from nyx import tor_controller, data_directory, input_prompt, show_message
from stem.util import conf, enum, log, str_tools
@@ -41,7 +41,6 @@ CONFIG = conf.config_dict('nyx', {
'features.config.order': [SortAttr.MAN_PAGE_ENTRY, SortAttr.NAME, SortAttr.IS_SET],
'features.config.state.showPrivateOptions': False,
'features.config.state.showVirtualOptions': False,
- 'startup.data_directory': DEFAULT_DATA_DIR,
}, conf_handler)
@@ -131,21 +130,24 @@ class ConfigPanel(nyx.panel.Panel):
self._sort_order = CONFIG['features.config.order']
self._show_all = False # show all options, or just the important ones
- cached_manual_path = os.path.join(CONFIG['startup.data_directory'], 'manual')
+ data_dir = data_directory()
- if os.path.exists(cached_manual_path):
- manual = stem.manual.Manual.from_cache(cached_manual_path)
- else:
- try:
- manual = stem.manual.Manual.from_man()
+ if data_dir:
+ cached_manual_path = os.path.join(data_dir, 'manual')
+ if os.path.exists(cached_manual_path):
+ manual = stem.manual.Manual.from_cache(cached_manual_path)
+ else:
try:
- manual.save(cached_manual_path)
+ manual = stem.manual.Manual.from_man()
+
+ try:
+ manual.save(cached_manual_path)
+ except IOError as exc:
+ log.debug("Unable to cache manual information to '%s'. This is fine, but means starting Nyx takes a little longer than usual: " % (cached_manual_path, exc))
except IOError as exc:
- log.debug("Unable to cache manual information to '%s'. This is fine, but means starting Nyx takes a little longer than usual: " % (cached_manual_path, exc))
- except IOError as exc:
- log.debug("Unable to use 'man tor' to get information about config options (%s), using bundled information instead" % exc)
- manual = stem.manual.Manual.from_cache()
+ log.debug("Unable to use 'man tor' to get information about config options (%s), using bundled information instead" % exc)
+ manual = stem.manual.Manual.from_cache()
try:
for line in tor_controller().get_info('config/names').splitlines():
diff --git a/nyx/panel/log.py b/nyx/panel/log.py
index 10e2645..6e1d14d 100644
--- a/nyx/panel/log.py
+++ b/nyx/panel/log.py
@@ -40,7 +40,7 @@ CONFIG = conf.config_dict('nyx', {
'features.log.prepopulate': True,
'features.log.prepopulateReadLimit': 5000,
'features.log.regex': [],
- 'startup.events': 'NOTICE,WARN,ERR,NYX_NOTICE,NYX_WARNING,NYX_ERROR',
+ 'logged_events': 'NOTICE,WARN,ERR,NYX_NOTICE,NYX_WARNING,NYX_ERROR',
}, conf_handler)
UPDATE_RATE = 0.3
@@ -69,7 +69,7 @@ class LogPanel(nyx.panel.DaemonPanel):
def __init__(self):
nyx.panel.DaemonPanel.__init__(self, UPDATE_RATE)
- logged_events = CONFIG['startup.events'].split(',')
+ logged_events = CONFIG['logged_events'].split(',')
tor_events = tor_controller().get_info('events/names', '').split()
invalid_events = list(filter(lambda event: not event.startswith('NYX_') and event not in tor_events, logged_events))
diff --git a/nyx/starter.py b/nyx/starter.py
index dbb6d8c..d23e157 100644
--- a/nyx/starter.py
+++ b/nyx/starter.py
@@ -32,7 +32,7 @@ def main(config):
try:
args = nyx.arguments.parse(sys.argv[1:])
- config.set('startup.events', args.logged_events)
+ config.set('logged_events', args.logged_events)
except ValueError as exc:
print(exc)
sys.exit(1)
diff --git a/nyxrc.sample b/nyxrc.sample
index c9ff604..bbce437 100644
--- a/nyxrc.sample
+++ b/nyxrc.sample
@@ -1,6 +1,12 @@
-# Startup options
-startup.events N3
-startup.dataDirectory ~/.nyx
+# Events that are shown by default in the log. You can also set these with
+# 'nyx --log <events>'.
+
+logged_events NOTICE,WARN,ERR,NYX_NOTICE,NYX_WARNING,NYX_ERROR
+
+# Location where information is cached. You can disable caching by setting this
+# to 'disabled'.
+
+data_directory ~/.nyx
# Seconds between querying information