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', '.'])
|
||||
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
|
||||
|
|
|
@ -4,9 +4,13 @@
|
|||
from __future__ import absolute_import, division, print_function
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
import argparse
|
||||
import copy as _copy
|
||||
|
||||
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
|
||||
|
||||
import tldp.typeguesser
|
||||
|
@ -16,6 +20,30 @@ logger = logging.getLogger(__name__)
|
|||
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):
|
||||
ap = DefaultFreeArgumentParser()
|
||||
|
||||
|
@ -63,15 +91,15 @@ def collectconfiguration(tag, argv):
|
|||
help='subdirs to copy during build [%(default)s]')
|
||||
ap.add_argument('--sourcedir', '--source-dir', '--source-directory',
|
||||
'-s',
|
||||
action='append', default='', type=arg_isdirectory,
|
||||
default=[], action=DirectoriesExist,
|
||||
help='a directory containing LDP source documents')
|
||||
ap.add_argument('--pubdir', '--output', '--outputdir', '--outdir',
|
||||
'-o',
|
||||
default=None, type=arg_isdirectory,
|
||||
default=None, action=DirectoryExists,
|
||||
help='a directory containing LDP output documents')
|
||||
ap.add_argument('--builddir', '--build-dir', '--build-directory',
|
||||
'-d',
|
||||
default=None, type=arg_isdirectory,
|
||||
default=None, action=DirectoryExists,
|
||||
help='a scratch directory used for building')
|
||||
ap.add_argument('--configfile', '--config-file', '--cfg',
|
||||
'-c',
|
||||
|
|
Loading…
Reference in New Issue