3 gYc@sNddgZddlmZddlTddlTddlTGdddeZGdddZdS)Parser ParserError)MarkedYAMLError)*c@s eZdZdS)rN)__name__ __module__ __qualname__r r Z d?d@Z!dAdBZ"dCS)Gr!ztag:yaml.org,2002:)r z!!cCs*d|_d|_i|_g|_g|_|j|_dS)N) current_event yaml_version tag_handlesstatesmarksparse_stream_startstate)selfr r r __init__Qs zParser.__init__cCsg|_d|_dS)N)rr)rr r r disposeYszParser.disposecGsN|jdkr|jr|j|_|jdk rJ|s,dSx|D]}t|j|r2dSq2WdS)NTF)r r isinstance)rchoiceschoicer r r check_event^s     zParser.check_eventcCs |jdkr|jr|j|_|jS)N)r r)rr r r peek_eventks  zParser.peek_eventcCs*|jdkr|jr|j|_|j}d|_|S)N)r r)rvaluer r r get_eventrs   zParser.get_eventcCs(|j}t|j|j|jd}|j|_|S)N)encoding) get_tokenStreamStartEvent start_markend_markrparse_implicit_document_startr)rtokeneventr r r rs   zParser.parse_stream_startcCs\|jtttsP|j|_|j}|j}}t||dd}|j j |j |j |_ |S|jSdS)NF)explicit) check_tokenDirectiveTokenDocumentStartTokenStreamEndToken DEFAULT_TAGSr peek_tokenr DocumentStartEventrappendparse_document_endparse_block_noderparse_document_start)rr#r r!r$r r r r"s z$Parser.parse_implicit_document_startcCsx|jtr|jqW|jts|j}|j}|j\}}|jtsdtddd|jj |jj|j}|j }t ||d||d}|j j |j|j|_n4|j}t|j|j }|j st|j std|_|S)Nz)expected '', but found %rT)r%versiontags)r&DocumentEndTokenrr)r+r process_directivesr(ridr!r,rr-r.parse_document_contentrStreamEndEventAssertionErrorr)rr#r r1r2r!r$r r r r0s.           zParser.parse_document_startcCsL|j}|j}}d}|jtr2|j}|j}d}t|||d}|j|_|S)NFT)r%) r+r r&r3rr!DocumentEndEventr0r)rr#r r!r%r$r r r r.s  zParser.parse_document_endcCs<|jttttr0|j|jj}|jj |_ |S|j SdS)N) r&r'r(r3r)process_empty_scalarr+r rpoprr/)rr$r r r r6s   zParser.parse_document_contentcCsd|_i|_x|jtr|j}|jdkrp|jdk rDtddd|j|j\}}|dkrftddd|j|j|_q|jdkr|j\}}||jkrtddd||j||j|<qW|jr|j|jj f}n |jdf}x(|j D]}||jkr|j ||j|<qW|S)NYAMLzfound duplicate YAML directiverz:found incompatible YAML document (version 1.* is required)TAGzduplicate tag handle %r) r rr&r'rnamerr rcopyr*)rr#majorminorhandleprefixrkeyr r r r4s8            zParser.process_directivescCs |jddS)NT)block) parse_node)rr r r r/szParser.parse_block_nodecCs|jS)N)rF)rr r r parse_flow_node szParser.parse_flow_nodecCs|jdddS)NT)rEindentless_sequence)rF)rr r r 'parse_block_node_or_indentless_sequencesz.Parser.parse_block_node_or_indentless_sequenceFc CsR|jtr4|j}t|j|j|j}|jj|_ nd}d}d}}} |jt r|j}|j}|j}|j}|jt r|j}|j} |j}|j}nF|jt r|j}|j}} |j}|j}|jt r|j}|j}|j}|dk r&|\} } | dk r"| |j krt d|d| | |j | | }n| }|dkr>|jj}}d}|dkpR|dk} |r|jtr|jj}t||| ||}|j|_ n|jtr|j}|j}|jr|dks|dkrd } n|dkrd} nd} t||| |j|||jd}|jj|_ nH|jtr<|jj}t||| ||dd}|j|_ n|jtrp|jj}t||| ||dd}|j|_ n|r|jtr|jj}t||| ||dd}|j|_ n|r|jtr|jj}t||| ||dd}|j|_ nj|dk s|dk rt||| dfd||}|jj|_ n2|r(d } nd } |j}t d | |d |j|j|S)Nzwhile parsing a nodezfound undefined tag handle %rr TF)style) flow_stylerEZflowzwhile parsing a %s nodez'expected the node content, but found %r)TF)FT)FF) r& AliasTokenr AliasEventrr r!rr;r AnchorTokenTagTokenrrr+BlockEntryTokenSequenceStartEventparse_indentless_sequence_entry ScalarTokenplain ScalarEventrJFlowSequenceStartTokenparse_flow_sequence_first_entryFlowMappingStartTokenMappingStartEventparse_flow_mapping_first_keyBlockSequenceStartToken parse_block_sequence_first_entryBlockMappingStartTokenparse_block_mapping_first_keyr5)rrErHr#r$anchortagr r!Ztag_markrBsuffiximplicitnoder r r rFs                               zParser.parse_nodecCs|j}|jj|j|jS)N)rrr-r parse_block_sequence_entry)rr#r r r r]xsz'Parser.parse_block_sequence_first_entrycCs|jtrH|j}|jtts4|jj|j|jS|j|_|j |j S|jtsv|j }t d|j dd|j|j|j}t|j|j }|jj|_|j j|S)Nz while parsing a block collectionrz"expected , but found %r)r&rQr BlockEndTokenrr-rer/rr:r!r+rrr5r SequenceEndEventr;)rr#r$r r r re}s        z!Parser.parse_block_sequence_entrycCsr|jtrL|j}|jtttts8|jj|j|j S|j|_ |j |j S|j }t|j|j}|jj|_ |S)N)r&rQrKeyToken ValueTokenrgrr-rSr/rr:r!r+rhr r;)rr#r$r r r rSs    z&Parser.parse_indentless_sequence_entrycCs|j}|jj|j|jS)N)rrr-r parse_block_mapping_key)rr#r r r r_sz$Parser.parse_block_mapping_first_keycCs|jtrJ|j}|jttts6|jj|j|jS|j|_ |j |j S|jtsx|j }t d|jdd|j|j|j}t|j|j }|jj|_ |jj|S)Nzwhile parsing a block mappingrz"expected , but found %rrf)r&rirrjrgrr-parse_block_mapping_valuerIrr:r!r+rrr5r MappingEndEventr;)rr#r$r r r rks       zParser.parse_block_mapping_keycCsl|jtrL|j}|jttts6|jj|j|jS|j|_ |j |j Sn|j|_ |j }|j |j SdS)N)r&rjrrirgrr-rkrIrr:r!r+r )rr#r r r rls z Parser.parse_block_mapping_valuecCs"|j}|jj|j|jddS)NT)first)rrr-r parse_flow_sequence_entry)rr#r r r rXsz&Parser.parse_flow_sequence_first_entrycCs|jts|sF|jtr"|jn$|j}td|jdd|j|j|jt r||j}t ddd|j|j dd}|j |_ |S|jts|jj|j|jS|j}t|j|j }|jj|_ |jj|S)Nzwhile parsing a flow sequencerzexpected ',' or ']', but got %rT)rKrf)r&FlowSequenceEndTokenFlowEntryTokenrr+rrr5r rirZr!%parse_flow_sequence_entry_mapping_keyrrr-rorGrhr;)rrnr#r$r r r ros,        z Parser.parse_flow_sequence_entrycCsD|j}|jttts,|jj|j|jS|j|_ |j |j SdS)N) rr&rjrqrprr-'parse_flow_sequence_entry_mapping_valuerGrr:r!)rr#r r r rrsz,Parser.parse_flow_sequence_entry_mapping_keycCsj|jtrJ|j}|jtts4|jj|j|jS|j|_ |j |j Sn|j|_ |j }|j |j SdS)N)r&rjrrqrprr-%parse_flow_sequence_entry_mapping_endrGrr:r!r+r )rr#r r r rss  z.Parser.parse_flow_sequence_entry_mapping_valuecCs|j|_|j}t|j|jS)N)rorr+rmr )rr#r r r rtsz,Parser.parse_flow_sequence_entry_mapping_endcCs"|j}|jj|j|jddS)NT)rn)rrr-r parse_flow_mapping_key)rr#r r r r[sz#Parser.parse_flow_mapping_first_keycCs|jts|sF|jtr"|jn$|j}td|jdd|j|j|jt r|j}|jt tts||j j |j |jS|j |_|j|jSn |jts|j j |j|jS|j}t|j|j}|j j|_|jj|S)Nzwhile parsing a flow mappingrzexpected ',' or '}', but got %rrf)r&FlowMappingEndTokenrqrr+rrr5r rirjrr-parse_flow_mapping_valuerGrr:r!parse_flow_mapping_empty_valuermr;)rrnr#r$r r r rus.        zParser.parse_flow_mapping_keycCsj|jtrJ|j}|jtts4|jj|j|jS|j|_ |j |j Sn|j|_ |j }|j |j SdS)N)r&rjrrqrvrr-rurGrr:r!r+r )rr#r r r rw9s  zParser.parse_flow_mapping_valuecCs|j|_|j|jjS)N)rurr:r+r )rr r r rxGsz%Parser.parse_flow_mapping_empty_valuecCstdddd||S)NTFrL)TF)rV)rmarkr r r r:KszParser.process_empty_scalarN)FF)F)F)#rrrr*rrrrrrr"r0r.r6r4r/rGrIrFr]rerSr_rkrlrXrorrrsrtr[rurwrxr:r r r r rHsB    / g    N)__all__errorrtokenseventsscannerrrr r r r >s