Skip to content

Commit

Permalink
Extract parser building into its own function.
Browse files Browse the repository at this point in the history
  • Loading branch information
mblayman committed Jan 3, 2016
1 parent d1aebcb commit 543f3ad
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 33 deletions.
29 changes: 18 additions & 11 deletions handroll/entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@


def main(argv=sys.argv):
args = parse_args(argv)
args = parse(argv)

if args.verbose:
logger.setLevel(logging.INFO)
Expand All @@ -43,7 +43,22 @@ def main(argv=sys.argv):
sys.exit(_('Incomplete.'))


def parse_args(argv):
def parse(argv):
"""Parse the user arguments."""
parser = build_parser()

# argparse expects the executable to be removed from argv.
args = parser.parse_args(argv[1:])

# Normalize the site path so that all sites are handled consistently.
if args.site:
args.site = args.site.rstrip(os.sep)

return args


def build_parser():
"""Build the parser that will have all available commands and options."""
description = _('A website generator for software artisans')
parser = argparse.ArgumentParser(description=description)
parser.add_argument('site', nargs='?', help=_('the path to your website'))
Expand All @@ -69,15 +84,7 @@ def parse_args(argv):
parser.add_argument(
'-f', '--force', action='store_true',
help=_('force composers to write output'))

# argparse expects the executable to be removed from argv.
args = parser.parse_args(argv[1:])

# Normalize the site path so that all sites are handled consistently.
if args.site:
args.site = args.site.rstrip(os.sep)

return args
return parser


def prepare_director(args, site):
Expand Down
44 changes: 22 additions & 22 deletions handroll/tests/test_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,112 +17,112 @@ def setUp(self):
self.arguments = ['/fake/bin/handroll']

def test_verbose_argument(self):
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertFalse(args.verbose)

argv = list(self.arguments)
argv.append('-v')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.verbose)

argv = list(self.arguments)
argv.append('--verbose')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.verbose)

def test_debug_argument(self):
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertFalse(args.debug)

argv = list(self.arguments)
argv.append('-d')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.debug)

argv = list(self.arguments)
argv.append('--debug')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.debug)

def test_timing_argument(self):
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertFalse(args.timing)

argv = list(self.arguments)
argv.append('-t')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.timing)

argv = list(self.arguments)
argv.append('--timing')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.timing)

def test_watch_argument(self):
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertFalse(args.watch)

argv = list(self.arguments)
argv.append('-w')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.watch)

argv = list(self.arguments)
argv.append('--watch')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.watch)

def test_site_argument(self):
site = 'fake_site'
self.arguments.append(site)
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertEqual(site, args.site)

def test_site_argument_is_normalized(self):
"""Test that trailing path separator is removed so that a site is
consistently handled."""
site = 'fake_site' + os.sep
self.arguments.append(site)
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertEqual('fake_site', args.site)

def test_outdir_argument(self):
outdir = 'fake_outdir'
self.arguments.extend(['fake_site', outdir])
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertEqual(outdir, args.outdir)

def test_force_argument(self):
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertFalse(args.force)

argv = list(self.arguments)
argv.append('-f')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.force)

argv = list(self.arguments)
argv.append('--force')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertTrue(args.force)

def test_scaffold_argument(self):
args = entry.parse_args(self.arguments)
args = entry.parse(self.arguments)
self.assertIsNone(args.scaffold)

argv = list(self.arguments)
argv.append('-s')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertEqual(scaffolder.LIST_SCAFFOLDS, args.scaffold)

argv = list(self.arguments)
argv.append('--scaffold')
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertEqual(scaffolder.LIST_SCAFFOLDS, args.scaffold)

argv = list(self.arguments)
argv.extend(['--scaffold', 'default'])
args = entry.parse_args(argv)
args = entry.parse(argv)
self.assertEqual('default', args.scaffold)


Expand Down

0 comments on commit 543f3ad

Please sign in to comment.