Skip to content

Commit

Permalink
Merge pull request #345 from jdebacker/cs_validator
Browse files Browse the repository at this point in the history
CS year validator
  • Loading branch information
jdebacker committed Apr 4, 2021
2 parents 6309475 + 727703e commit 278d397
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 3 deletions.
35 changes: 33 additions & 2 deletions cs-config/cs_config/functions.py
Expand Up @@ -45,14 +45,40 @@ class MetaParams(paramtools.Parameters):
}
}

def dump(self, *args, **kwargs):
"""
This method extends the default ParamTools dump method by
swapping the when validator for a choice validator. This is
required because C/S does not yet implement the when validator.
"""
data = super().dump(*args, **kwargs)
if self.data_source == "CPS":
data["year"]["validators"] = {
"choice": {
"choices": list(range(2014, TC_LAST_YEAR))
}
}
else:
data["year"]["validators"] = {
"choice": {
"choices": list(range(2013, TC_LAST_YEAR))
}
}
return data


def get_inputs(meta_params_dict):
'''
Function to get user input parameters from COMP
'''
# Get meta-params from web app
meta_params = MetaParams()
meta_params.adjust(meta_params_dict)
with meta_params.transaction(defer_validation=True):
meta_params.adjust(meta_params_dict)
# Year must be at least 2014 when using the CPS. This rule is
# validated in the validate_inputs function below.
if meta_params.data_source == "CPS" and meta_params.year < 2014:
meta_params.adjust({"year": 2014})
# Set default CCC params
ccc_params = Specification(year=meta_params.year)
filtered_ccc_params = OrderedDict()
Expand Down Expand Up @@ -91,7 +117,12 @@ def validate_inputs(meta_param_dict, adjustment, errors_warnings):
'''
Validates user inputs for parameters
'''
# ccc doesn't look at meta_param_dict for validating inputs.
# Validate meta parameter inputs
meta_params = MetaParams()
meta_params.adjust(meta_param_dict, raise_errors=False)
errors_warnings["Business Tax Parameters"]["errors"].update(
meta_params.errors)
# Validate CCC parameter inputs
params = Specification()
params.adjust(adjustment["Business Tax Parameters"],
raise_errors=False)
Expand Down
28 changes: 28 additions & 0 deletions cs-config/cs_config/tests/test_functions.py
Expand Up @@ -5,6 +5,34 @@
from cs_config import functions


def test_start_year_with_data_source():
"""
Test interaction between PUF and CPS data sources and the start year.
"""
data = functions.get_inputs({"data_source": "PUF"})
assert (
data["meta_parameters"]["year"]["validators"]["choice"]
["choices"][0] == 2013)
data = functions.get_inputs({"data_source": "CPS"})
assert (
data["meta_parameters"]["year"]["validators"]["choice"]
["choices"][0] == 2014)

ew = {
"Business Tax Parameters": {"errors": {}, "warnings": {}},
"Individual and Payroll Tax Parameters":
{"errors": {}, "warnings": {}}
}
res = functions.validate_inputs(
{"data_source": "CPS", "year": 2013},
{"Business Tax Parameters": {},
"Individual and Payroll Tax Parameters": {}}, ew
)
assert (
res["errors_warnings"]["Business Tax Parameters"]
["errors"].get("year"))


class TestFunctions1(CoreTestFunctions):
get_version = functions.get_version
get_inputs = functions.get_inputs
Expand Down
2 changes: 1 addition & 1 deletion environment.yml
Expand Up @@ -4,7 +4,7 @@ channels:
dependencies:
- python
- "taxcalc>=3.1.0"
- "paramtools>=0.14.2"
- "paramtools>=0.18.0"
- "bokeh>=1.4.0"
- setuptools
- pip
Expand Down

0 comments on commit 278d397

Please sign in to comment.