diff --git a/README.md b/README.md index 7eec6654..a06e3405 100644 --- a/README.md +++ b/README.md @@ -203,6 +203,7 @@ using the matched rule and runs it. Rules enabled by default are as follows: * `has_exists_script` – prepends `./` when script/binary exists; * `heroku_not_command` – fixes wrong `heroku` commands like `heroku log`; * `history` – tries to replace command with most similar command from history; +* `hostscli` – tries to fix `hostscli` usage; * `ifconfig_device_not_found` – fixes wrong device names like `wlan0` to `wlp2s0`; * `java` – removes `.java` extension when running Java programs; * `javac` – appends missing `.java` when compiling Java files; diff --git a/tests/rules/test_hostscli.py b/tests/rules/test_hostscli.py new file mode 100644 index 00000000..740af43b --- /dev/null +++ b/tests/rules/test_hostscli.py @@ -0,0 +1,31 @@ +import pytest +from thefuck.rules.hostscli import no_website, get_new_command, match +from tests.utils import Command + + +no_website_long = ''' +%s: + +No Domain list found for website: a_website_that_does_not_exist + +Please raise a Issue here: https://github.com/dhilipsiva/hostscli/issues/new +if you think we should add domains for this website. + +type `hostscli websites` to see a list of websites that you can block/unblock +''' % no_website + + +@pytest.mark.parametrize('command', [ + Command( + 'sudo hostscli block a_website_that_does_not_exist', + stderr=no_website_long)]) +def test_match(command): + assert match(command) + + +@pytest.mark.parametrize('command, result', [( + Command( + 'sudo hostscli block a_website_that_does_not_exist', + stderr=no_website_long), ['hostscli websites'])]) +def test_get_new_command(command, result): + assert get_new_command(command) == result diff --git a/thefuck/rules/hostscli.py b/thefuck/rules/hostscli.py new file mode 100644 index 00000000..eea6a9ef --- /dev/null +++ b/thefuck/rules/hostscli.py @@ -0,0 +1,23 @@ +import re + +from thefuck.utils import replace_command + +no_command = "Error: No such command" +no_website = "hostscli.errors.WebsiteImportError" + + +def match(command): + errors = [no_command, no_website] + for error in errors: + if error in command.stderr: + return True + return False + + +def get_new_command(command): + if no_website in command.stderr: + return ['hostscli websites'] + misspelled_command = re.findall( + r'Error: No such command ".*"', command.stderr)[0] + commands = ['block', 'unblock', 'websites', 'block_all', 'unblock_all'] + return replace_command(command, misspelled_command, commands) diff --git a/thefuck/rules/sudo.py b/thefuck/rules/sudo.py index 91e5f4bb..0f85168a 100644 --- a/thefuck/rules/sudo.py +++ b/thefuck/rules/sudo.py @@ -20,7 +20,8 @@ patterns = ['permission denied', 'authentication is required', 'edspermissionerror', 'you don\'t have write permissions', - 'use `sudo`'] + 'use `sudo`', + 'SudoRequiredError'] def match(command):