3 D\@s@dZddlZddlZddlmZddlmZGdddeZdS)a Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. N)CloudFormationLintRule) RuleMatchc@s^eZdZdZdZdZdZdZdgZddZ d d Z d d Z d dZ ddZ ddZddZdS)Defaultz,Check if Parameters are configured correctlyZE2015z-Default value is within parameter constraintszhMaking sure the parameters have a default value inside AllowedValues, MinValue, MaxValue, AllowedPatternz`https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/parameters-section-structure.html parameterscCs^d}y tj|t|s"t||gSWn4tjk rX}z|jjd||WYdd}~XnXgS)zA Check allowed value against allowed pattern z+Default should be allowed by AllowedPatternz0Regex pattern "%s" isn't supported by Python: %sN)rematchstrrerrorloggerdebug)self allowed_valueallowed_patternpathmessageexrz/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-emcbgzcf/cfn-lint/cfnlint/rules/parameters/Default.pycheck_allowed_patterns"zDefault.check_allowed_patterncCs4d}t|tjr0t|tjr0||kr0t||gSgS)z; Check allowed value against min value z2Default should be equal to or higher than MinValue) isinstancesix integer_typesr)r r min_valuerrrrrcheck_min_value,s  zDefault.check_min_valuecCs4d}t|tjr0t|tjr0||kr0t||gSgS)z; Check allowed value against max value z0Default should be less than or equal to MaxValue)rrrr)r r max_valuerrrrrcheck_max_value8s  zDefault.check_max_valuecCsd}||krt||gSgS)z@ Check allowed value against allowed values z.Default should be a value within AllowedValues)r)r r allowed_valuesrrrrrcheck_allowed_valuesDs zDefault.check_allowed_valuescCs,d}t|tjr(t||kr(t||gSgS)z; Check allowed value against MinLength z8Default should have a length above or equal to MinLength)rrrlenr)r r min_lengthrrrrrcheck_min_lengthOs    zDefault.check_min_lengthcCs,d}t|tjr(t||kr(t||gSgS)z; Check allowed value against MaxLength z8Default should have a length below or equal to MaxLength)rrrrr)r r max_lengthrrrrrcheck_max_length[s    zDefault.check_max_lengthc Csg}x|jjD]\}}|jd}|dk rd|dg}|jd}|r\|j|j||||jd}|r~|j|j||||jd} | dk r|j|j|| ||jd} | r|j|j|| ||jd} | dk r|j|j|| ||jd } | dk r|j|j || |qW|S) zCheck CloudFormation ParametersrNZ ParametersZAllowedPatternZMinValueZMaxValueZ AllowedValuesZ MinLengthZ MaxLength) Zget_parametersitemsgetextendrrrrr r") r ZcfnmatchesZ paramnameZ paramvalue default_valuerrrrrrr!rrrrgsH             z Default.matchN)__name__ __module__ __qualname____doc__idZ shortdesc descriptionZ source_urltagsrrrrr r"rrrrrrs      r)r+rrZcfnlintrrrrrrrs