mirror of https://github.com/tLDP/python-tldp
provide directory existence feedback to user
instead of bailing with an obnoxious error message, or silently ignoring a command-line option of a directory, squawk to STDERR with the problem and provide (possibly redundant, but maybe informative) traceback
This commit is contained in:
parent
a84a285168
commit
8cbdeab558
|
@ -21,5 +21,12 @@ class TestConfigWorks(unittest.TestCase):
|
||||||
config, args = collectconfiguration('tag', ['--pubdir', '.'])
|
config, args = collectconfiguration('tag', ['--pubdir', '.'])
|
||||||
self.assertEqual(config.pubdir, '.')
|
self.assertEqual(config.pubdir, '.')
|
||||||
|
|
||||||
|
def test_nonexistent_directory(self):
|
||||||
|
argv = ['--pubdir', '/path/to/nonexistent/directory']
|
||||||
|
with self.assertRaises(ValueError) as ecm:
|
||||||
|
config, args = collectconfiguration('tag', argv)
|
||||||
|
e = ecm.exception
|
||||||
|
self.assertTrue("/path/to/nonexistent/directory" in e.args[0])
|
||||||
|
|
||||||
#
|
#
|
||||||
# -- end of file
|
# -- end of file
|
||||||
|
|
|
@ -4,9 +4,13 @@
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import os
|
||||||
|
import argparse
|
||||||
|
import copy as _copy
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from tldp.utils import arg_isdirectory, arg_isloglevel, arg_isreadablefile
|
from tldp.utils import arg_isloglevel, arg_isreadablefile
|
||||||
from tldp.cascadingconfig import CascadingConfig, DefaultFreeArgumentParser
|
from tldp.cascadingconfig import CascadingConfig, DefaultFreeArgumentParser
|
||||||
|
|
||||||
import tldp.typeguesser
|
import tldp.typeguesser
|
||||||
|
@ -16,6 +20,30 @@ logger = logging.getLogger(__name__)
|
||||||
DEFAULT_CONFIGFILE = '/etc/ldptool/ldptool.ini'
|
DEFAULT_CONFIGFILE = '/etc/ldptool/ldptool.ini'
|
||||||
|
|
||||||
|
|
||||||
|
class DirectoriesExist(argparse._AppendAction):
|
||||||
|
|
||||||
|
def __call__(self, parser, namespace, values, option_string=None):
|
||||||
|
if not os.path.isdir(values):
|
||||||
|
message = "No such directory: %r for option %r, removing..."
|
||||||
|
message = message % (values, option_string)
|
||||||
|
logger.critical(message)
|
||||||
|
raise ValueError(message)
|
||||||
|
items = _copy.copy(argparse._ensure_value(namespace, self.dest, []))
|
||||||
|
items.append(values)
|
||||||
|
setattr(namespace, self.dest, items)
|
||||||
|
|
||||||
|
|
||||||
|
class DirectoryExists(argparse._StoreAction):
|
||||||
|
|
||||||
|
def __call__(self, parser, namespace, values, option_string=None):
|
||||||
|
if not os.path.isdir(values):
|
||||||
|
message = "No such directory: %r for option %r, removing..."
|
||||||
|
message = message % (values, option_string)
|
||||||
|
logger.critical(message)
|
||||||
|
raise ValueError(message)
|
||||||
|
setattr(namespace, self.dest, values)
|
||||||
|
|
||||||
|
|
||||||
def collectconfiguration(tag, argv):
|
def collectconfiguration(tag, argv):
|
||||||
ap = DefaultFreeArgumentParser()
|
ap = DefaultFreeArgumentParser()
|
||||||
|
|
||||||
|
@ -63,15 +91,15 @@ def collectconfiguration(tag, argv):
|
||||||
help='subdirs to copy during build [%(default)s]')
|
help='subdirs to copy during build [%(default)s]')
|
||||||
ap.add_argument('--sourcedir', '--source-dir', '--source-directory',
|
ap.add_argument('--sourcedir', '--source-dir', '--source-directory',
|
||||||
'-s',
|
'-s',
|
||||||
action='append', default='', type=arg_isdirectory,
|
default=[], action=DirectoriesExist,
|
||||||
help='a directory containing LDP source documents')
|
help='a directory containing LDP source documents')
|
||||||
ap.add_argument('--pubdir', '--output', '--outputdir', '--outdir',
|
ap.add_argument('--pubdir', '--output', '--outputdir', '--outdir',
|
||||||
'-o',
|
'-o',
|
||||||
default=None, type=arg_isdirectory,
|
default=None, action=DirectoryExists,
|
||||||
help='a directory containing LDP output documents')
|
help='a directory containing LDP output documents')
|
||||||
ap.add_argument('--builddir', '--build-dir', '--build-directory',
|
ap.add_argument('--builddir', '--build-dir', '--build-directory',
|
||||||
'-d',
|
'-d',
|
||||||
default=None, type=arg_isdirectory,
|
default=None, action=DirectoryExists,
|
||||||
help='a scratch directory used for building')
|
help='a scratch directory used for building')
|
||||||
ap.add_argument('--configfile', '--config-file', '--cfg',
|
ap.add_argument('--configfile', '--config-file', '--cfg',
|
||||||
'-c',
|
'-c',
|
||||||
|
|
Loading…
Reference in New Issue