From 2e6513e4e013ab0b22ea6167d8ec686a2c72e585 Mon Sep 17 00:00:00 2001 From: Shantanu Oak Date: Fri, 3 Aug 2018 20:09:51 +0000 Subject: [PATCH 1/3] added a function to be used as a decorator to validate keyword arguments --- pandas/util/_decorators.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/pandas/util/_decorators.py b/pandas/util/_decorators.py index 82cd44113cb25..2192d6be02e8b 100644 --- a/pandas/util/_decorators.py +++ b/pandas/util/_decorators.py @@ -5,6 +5,21 @@ from textwrap import dedent, wrap from functools import wraps, update_wrapper, WRAPPER_ASSIGNMENTS +def validate_kwarg(): + def _validate_kwarg(func): + @wraps(func) + def wrapper(*args, **kwargs): + expected_keys=['io', 'sheet_name','header', 'names', 'index_col', 'usecols', 'squeeze', 'dtype', 'engine', + 'converters', 'true_values', 'false_values', 'skiprows', 'nrows', 'na_values', 'verbose', 'parse_dates', + 'date_parser', 'thousands', 'comment', 'skipfooter', 'convert_float'] + + if set(kwargs.keys()).difference(set(expected_keys)): + raise ValueError('invalid parameter found') + + return func(*args, **kwargs) + return wrapper + return _validate_kwarg + def deprecate(name, alternative, version, alt_name=None, klass=None, stacklevel=2, msg=None): From ad26c3c5b795f427aaabdb0a36baf75cde21c7a3 Mon Sep 17 00:00:00 2001 From: Shantanu Oak Date: Fri, 3 Aug 2018 20:22:20 +0000 Subject: [PATCH 2/3] Added a decorator to validate parameters --- pandas/io/excel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/io/excel.py b/pandas/io/excel.py index e2db6643c5ef0..e604cd0f46fa3 100644 --- a/pandas/io/excel.py +++ b/pandas/io/excel.py @@ -16,7 +16,7 @@ import numpy as np import pandas._libs.json as json -from pandas.util._decorators import Appender, deprecate_kwarg +from pandas.util._decorators import Appender, deprecate_kwarg, validate_kwarg from pandas.errors import EmptyDataError import pandas.compat as compat @@ -279,7 +279,7 @@ def get_writer(engine_name): raise ValueError("No Excel writer '{engine}'" .format(engine=engine_name)) - +@validate_kwarg() @Appender(_read_excel_doc) @deprecate_kwarg("parse_cols", "usecols") @deprecate_kwarg("skip_footer", "skipfooter") From 0a1f005fe39d028943ef1ff83c50ee214bccc608 Mon Sep 17 00:00:00 2001 From: Shantanu Oak Date: Sat, 4 Aug 2018 09:16:25 +0530 Subject: [PATCH 3/3] changed list to set --- pandas/util/_decorators.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pandas/util/_decorators.py b/pandas/util/_decorators.py index 2192d6be02e8b..0267c9c21d6ae 100644 --- a/pandas/util/_decorators.py +++ b/pandas/util/_decorators.py @@ -9,11 +9,11 @@ def validate_kwarg(): def _validate_kwarg(func): @wraps(func) def wrapper(*args, **kwargs): - expected_keys=['io', 'sheet_name','header', 'names', 'index_col', 'usecols', 'squeeze', 'dtype', 'engine', + expected_keys=set(['io', 'sheet_name','header', 'names', 'index_col', 'usecols', 'squeeze', 'dtype', 'engine', 'converters', 'true_values', 'false_values', 'skiprows', 'nrows', 'na_values', 'verbose', 'parse_dates', - 'date_parser', 'thousands', 'comment', 'skipfooter', 'convert_float'] + 'date_parser', 'thousands', 'comment', 'skipfooter', 'convert_float']) - if set(kwargs.keys()).difference(set(expected_keys)): + if set(kwargs.keys()).difference(expected_keys): raise ValueError('invalid parameter found') return func(*args, **kwargs)