1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-09-18 19:22:32 +01:00

Use decorator library

This commit is contained in:
nvbn
2015-08-27 16:52:26 +03:00
parent 0c283ff2b8
commit ebe53f0d18
5 changed files with 52 additions and 61 deletions

View File

@@ -22,7 +22,7 @@ elif (3, 0) < version < (3, 3):
VERSION = '2.8' VERSION = '2.8'
install_requires = ['psutil', 'colorama', 'six'] install_requires = ['psutil', 'colorama', 'six', 'decorator']
extras_require = {':python_version<"3.4"': ['pathlib']} extras_require = {':python_version<"3.4"': ['pathlib']}
setup(name='thefuck', setup(name='thefuck',

View File

@@ -13,6 +13,8 @@ from tests.utils import Command
(False, 'sudo ls', 'ls', False), (False, 'sudo ls', 'ls', False),
(False, 'ls', 'ls', False)]) (False, 'ls', 'ls', False)])
def test_sudo_support(return_value, command, called, result): def test_sudo_support(return_value, command, called, result):
fn = Mock(return_value=return_value, __name__='') def fn(command, settings):
assert command == Command(called)
return return_value
assert sudo_support(fn)(Command(command), None) == result assert sudo_support(fn)(Command(command), None) == result
fn.assert_called_once_with(Command(called), None)

View File

@@ -1,19 +1,19 @@
from functools import wraps
import re import re
from shlex import split from shlex import split
from decorator import decorator
from ..types import Command from ..types import Command
from ..utils import quote, for_app from ..utils import quote, is_app
def git_support(fn): @decorator
def git_support(fn, command, settings):
"""Resolves git aliases and supports testing for both git and hub.""" """Resolves git aliases and supports testing for both git and hub."""
# supports GitHub's `hub` command # supports GitHub's `hub` command
# which is recommended to be used with `alias git=hub` # which is recommended to be used with `alias git=hub`
# but at this point, shell aliases have already been resolved # but at this point, shell aliases have already been resolved
if not is_app(command, 'git', 'hub'):
return False
@for_app('git', 'hub')
@wraps(fn)
def wrapper(command, settings):
# perform git aliases expansion # perform git aliases expansion
if 'trace: alias expansion:' in command.stderr: if 'trace: alias expansion:' in command.stderr:
search = re.search("trace: alias expansion: ([^ ]*) => ([^\n]*)", search = re.search("trace: alias expansion: ([^ ]*) => ([^\n]*)",
@@ -30,5 +30,3 @@ def git_support(fn):
command = Command._replace(command, script=new_script) command = Command._replace(command, script=new_script)
return fn(command, settings) return fn(command, settings)
return wrapper

View File

@@ -1,12 +1,11 @@
from functools import wraps
import six import six
from decorator import decorator
from ..types import Command from ..types import Command
def sudo_support(fn): @decorator
def sudo_support(fn, command, settings):
"""Removes sudo before calling fn and adds it after.""" """Removes sudo before calling fn and adds it after."""
@wraps(fn)
def wrapper(command, settings):
if not command.script.startswith('sudo '): if not command.script.startswith('sudo '):
return fn(command, settings) return fn(command, settings)
@@ -21,4 +20,3 @@ def sudo_support(fn):
return [u'sudo {}'.format(x) for x in result] return [u'sudo {}'.format(x) for x in result]
else: else:
return result return result
return wrapper

View File

@@ -1,5 +1,6 @@
from difflib import get_close_matches from difflib import get_close_matches
from functools import wraps from functools import wraps
from decorator import decorator
import os import os
import pickle import pickle
@@ -47,12 +48,9 @@ def wrap_settings(params):
print(settings.apt) print(settings.apt)
""" """
def decorator(fn): def _wrap_settings(fn, command, settings):
@wraps(fn)
def wrapper(command, settings):
return fn(command, settings.update(**params)) return fn(command, settings.update(**params))
return wrapper return decorator(_wrap_settings)
return decorator
def memoize(fn): def memoize(fn):
@@ -110,11 +108,9 @@ def replace_argument(script, from_, to):
u' {} '.format(from_), u' {} '.format(to), 1) u' {} '.format(from_), u' {} '.format(to), 1)
def eager(fn): @decorator
@wraps(fn) def eager(fn, *args, **kwargs):
def wrapper(*args, **kwargs):
return list(fn(*args, **kwargs)) return list(fn(*args, **kwargs))
return wrapper
@eager @eager
@@ -146,13 +142,10 @@ def is_app(command, *app_names):
def for_app(*app_names): def for_app(*app_names):
"""Specifies that matching script is for on of app names.""" """Specifies that matching script is for on of app names."""
def decorator(fn): def _for_app(fn, command, settings):
@wraps(fn)
def wrapper(command, settings):
if is_app(command, *app_names): if is_app(command, *app_names):
return fn(command, settings) return fn(command, settings)
else: else:
return False return False
return wrapper return decorator(_for_app)
return decorator