3 D\@sdZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZddl mZdd l mZdd lmZdd lmZddlZdd lmZmZmZydd lmZdZWn$ek rddlmZdZYnXddgZdZ ej!e"Z#GdddeZ$GdddeZ%e%j&de%j'e%j&de%j(e%j&de%j)e%j&de%j*Gdddee eee%e Z+ddZ,d d!Z-d&d"d#Z.d$d%Z/dS)'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)Composer)Reader)Scanner)Resolver) ScalarNode) SequenceNode) MappingNode)SafeConstructor)ConstructorError)str_node dict_node list_node)CParserT)ParserFZRef ConditionzFn::cs"eZdZdZdfdd ZZS) CfnParseErrorz; Error thrown when the template contains Cfn Error  c sbtt|j|||_||_||_||_tj|d|d|d|dt ||tj |d|_ dS)N)message) superr__init__filename line_number column_numberrcfnlintZMatchlen ParseErrormatch)selfrrrrkey) __class__q/private/var/folders/pf/wv4htv3x0qs2c2mp0dnn0kchsvlck3/T/pip-install-emcbgzcf/cfn-lint/cfnlint/decode/cfn_yaml.pyr2szCfnParseError.__init__)r)__name__ __module__ __qualname____doc__r __classcell__r!r!)r r"r.srcs@eZdZdZfddZddZddZdd Zd d ZZ S) NodeConstructorz? Node Constructors for loading different types in Yaml cstt|j||_dS)N)rr(rr)rr)r r!r"rFszNodeConstructor.__init__cCsi}xd|jD]Z\}}|j|d}|j|d}||kr^t|jdj||jjd|jj|jj||||<q Wtj ||\}t ||j|j S)NFz'Duplicate resource found "{}" (line {})r) valueZconstruct_objectrrformat start_marklinecolumnr construct_yaml_mapr end_mark)rnodemappingZkey_nodeZ value_noderr)objr!r!r"r.Qs   z"NodeConstructor.construct_yaml_mapcCs,tj||}t|tjstt||j|jS)N) r construct_yaml_str isinstancesix string_typesAssertionErrorr r+r/)rr0r2r!r!r"r3es z"NodeConstructor.construct_yaml_strcCs,tj||\}t|tstt||j|jS)N)r construct_yaml_seqr4listr7r r+r/)rr0r2r!r!r"r8jsz"NodeConstructor.construct_yaml_seqcCs6t|jdj|jjd|jjd|jj|jjddS)zThrow a null errorz!Null value at line {0} column {1}rrN)rrr*r+r,r-)rr0r!r!r"construct_yaml_null_errorosz)NodeConstructor.construct_yaml_null_error) r#r$r%r&rr.r3r8r:r'r!r!)r r"r(As  r(ztag:yaml.org,2002:mapztag:yaml.org,2002:strztag:yaml.org,2002:seqztag:yaml.org,2002:nullc@seZdZdZddZdS) MarkedLoaderz' Class for marked loading YAML cCs`tj||tj|tr(tj||n tj|tj|tj|tj|tj||dS)N) rrrcyamlrrr rr()rstreamrr!r!r"rs      zMarkedLoader.__init__N)r#r$r%r&rr!r!r!r"r;sr;cCs~|tkrdjt|}d}|dkr&t}n@t|tr8|j}n.t|trJ|j}nt|t r\|j }n dj|t |||i|j |j S)z. Deal with !Ref style function format z{}{}Nz Fn::GetAttz Bad tag: !{})UNCONVERTED_SUFFIXESr* FN_PREFIXconstruct_getattr4rZconstruct_scalarrZconstruct_sequencerZconstruct_mappingr r+r/)loaderZ tag_suffixr0 constructorr!r!r"multi_constructors     rCcCsft|jtjr&t|jjd|j|jSt|jtrNtdd|jD|j|jSt dj t |jdS)z) Reconstruct !GetAtt into a list .cSsg|] }|jqSr!)r)).0sr!r!r" sz$construct_getatt..zUnexpected node type: {}N) r4r)r5r6r splitr+r/r9 ValueErrorr*type)r0r!r!r"r@s  r@cCs.t||}|jdt|j}|dkr*i}|S)z$ Load the given YAML string !N)r;Zadd_multi_constructorrCZget_single_data)Z yaml_stringfnamerAtemplater!r!r"loadss   rNc CsTd}tjjs.x:tj|dD] }||}qWnt|}|j}WdQRXt||S)z" Load the given YAML file )filesN)sysstdinisatty fileinputinputopenreadrN)rcontentr,fpr!r!r"loads  rZ)N)0r&rTloggingrQr5Z yaml.composerrZ yaml.readerrZ yaml.scannerrZ yaml.resolverrZyamlrrrZyaml.constructorr r rZcfnlint.decode.noder r r Z yaml.cyamlrrr< ImportErrorZ yaml.parserr>r? getLoggerr#LOGGERrr(Zadd_constructorr.r3r8r:r;rCr@rNrZr!r!r!r"sV             6