Skip to content

Commit

Permalink
Support list or string for default_command config
Browse files Browse the repository at this point in the history
  • Loading branch information
Alex David committed May 14, 2020
1 parent 1e9d149 commit 5019f02
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 26 deletions.
1 change: 1 addition & 0 deletions AUTHORS.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ when copying code from elsewhere).
Authors are listed in alphabetical order.

* Anubha Agrawal <[email protected]>
* Alex David <[email protected]>
* Ben Moran <[email protected]>
* Benjamin Frank <[email protected]>
* Christian Geier <[email protected]>
Expand Down
21 changes: 8 additions & 13 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -847,28 +847,23 @@ def test_status_filtering(runner, todo_factory):
assert 'two' in result.output


def test_invoke_command(runner, tmpdir):
def test_default_command_string(runner, tmpdir):
path = tmpdir.join('config')
path.write('default_command = flush\n', 'a')

flush = mock.MagicMock()
with patch.dict(cli.commands, values=dict(flush=flush)):
result = runner.invoke(cli, catch_exceptions=False)

assert not result.exception
assert not result.output.strip()
assert flush.call_count == 1
result = runner.invoke(cli, catch_exceptions=False)
assert (
'Are you sure you want to delete all done tasks?' in result.output
)


def test_invoke_invalid_command(runner, tmpdir):
def test_default_command_list(runner, tmpdir):
path = tmpdir.join('config')
path.write('default_command = DoTheRobot\n', 'a')
path.write('default_command = show, 1234\n', 'a')

result = runner.invoke(cli, catch_exceptions=False)

assert result.exception
assert (
'Error: Invalid setting for [main][default_command]' in result.output
'No todo with id 1234.' in result.output
)


Expand Down
16 changes: 5 additions & 11 deletions todoman/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,19 +307,13 @@ def cli(click_ctx, colour, porcelain, humanize, config):
locale.setlocale(locale.LC_TIME, "")

if not click_ctx.invoked_subcommand:
invoke_command(
click_ctx,
ctx.config['main']['default_command'],
)
invoke_command(click_ctx, ctx.config['main']['default_command'])


def invoke_command(click_ctx, command):
name, *args = command.split(' ')
if name not in cli.commands:
raise click.ClickException(
'Invalid setting for [main][default_command]'
)
click_ctx.invoke(cli.commands[command], args)
def invoke_command(click_ctx, argv):
if not isinstance(argv, type([])):
argv = [argv]
cli.invoke(cli.make_context('default_command', argv, click_ctx))


try: # pragma: no cover
Expand Down
4 changes: 2 additions & 2 deletions todoman/confspec.ini
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ cache_path = cache_path(default='')
# partially-complete) # are also included.
startable = boolean(default=False)

# When running ``todo`` with no commands, run this command.
default_command = string(default='list')
# When running ``todo`` with no arguments, use the following values.
default_command = list(default='list')

# The default priority of a task on creation.
# Highest priority is 1, lowest priority is 10, and 0 means no priority at all.
Expand Down

0 comments on commit 5019f02

Please sign in to comment.