3 gY@sLddgZddlmZddlTGdddeZGdddZGdddZd S) Scanner ScannerError)MarkedYAMLError)*c@s eZdZdS)rN)__name__ __module__ __qualname__r r =/Users/olari/OneDrive/sandbox/awsBlog2/lambda/yaml/scanner.pyr sc@seZdZddZdS) SimpleKeycCs(||_||_||_||_||_||_dS)N) token_numberrequiredindexlinecolumnmark)selfr r rrrrr r r __init__&s zSimpleKey.__init__N)rrrrr r r r r #sr c@sxeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ ddZ ddZ ddZddZddZddZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd)d*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8Zd9d:Zd;d<Z d=d>Z!d?d@Z"dAdBZ#dCdDZ$dEdFZ%dGdHZ&dIdJZ'dKdLZ(dMdNZ)dOdPZ*dQdRZ+dSdTZ,dUdVZ-dWdXZ.dYdZZ/d[d\Z0d]d^Z1d_d`Z2dadbZ3dcddZ4dedfZ5dgdhZ6didjZ7dkdlZ8dmdnZ9dodpZ:dqdrZ;dsdtZdydzZ?d{d|Z@d}d~ddddddddddddddddZAddddZBddZCddZDddZEddZFddZGddZHddZIddZJddZKdS)rcCs<d|_d|_g|_|jd|_d|_g|_d|_i|_dS)zInitialize the scanner.FrTN) done flow_leveltokensfetch_stream_start tokens_takenindentindentsallow_simple_keypossible_simple_keys)rr r r r0s zScanner.__init__cGsJx|jr|jqW|jrF|s$dSx |D]}t|jd|r*dSq*WdS)NTrF)need_more_tokensfetch_more_tokensr isinstance)rZchoicesZchoicer r r check_tokenqs   zScanner.check_tokencCs*x|jr|jqW|jr&|jdSdS)Nr)rr r)rr r r peek_token}s  zScanner.peek_tokencCs:x|jr|jqW|jr6|jd7_|jjdSdS)Nrr)rr rrpop)rr r r get_tokens   zScanner.get_tokencCs2|jr dS|jsdS|j|j|jkr.dSdS)NFT)rrstale_possible_simple_keysnext_possible_simple_keyr)rr r r rszScanner.need_more_tokenscCs|j|j|j|j|j}|dkr4|jS|dkrL|jrL|jS|dkrd|jrd|j S|dkr||j r||j S|dkr|j S|dkr|j S|dkr|jS|dkr|jS|d kr|jS|dkr|jr|jS|d kr|jr|jS|d kr|jr|jS|d kr*|jS|d kr<|jS|dkrN|jS|dkrj|j rj|jS|dkr|j r|jS|dkr|jS|dkr|jS|jr|j St!ddd||j"dS)N%-.[{]},?:r&!|>'"z!while scanning for the next tokenz.found character %r that cannot start any token)#scan_to_next_tokenr& unwind_indentrpeekfetch_stream_endcheck_directivefetch_directivecheck_document_startfetch_document_startcheck_document_endfetch_document_endfetch_flow_sequence_startfetch_flow_mapping_startfetch_flow_sequence_endfetch_flow_mapping_endfetch_flow_entrycheck_block_entryfetch_block_entry check_key fetch_key check_value fetch_value fetch_alias fetch_anchor fetch_tagr fetch_literal fetch_folded fetch_single fetch_double check_plain fetch_plainrget_mark)rchr r r r s^        zScanner.fetch_more_tokenscCs:d}x0|jD]&}|j|}|dks,|j|kr |j}q W|S)N)rr )rZmin_token_numberlevelkeyr r r r's    z Scanner.next_possible_simple_keycCs`xZt|jD]L}|j|}|j|jks6|j|jdkr |jrPtd|jd|j|j|=q WdS)Nizwhile scanning a simple keyzcould not find expected ':')listrrrr rrrW)rrYrZr r r r&s   z"Scanner.stale_possible_simple_keyscCs^|j o|j|jk}|jrZ|j|jt|j}t|||j |j |j|j }||j |j<dS)N) rrrrremove_possible_simple_keyrlenrr rrrWr)rr r rZr r r save_possible_simple_key$sz Scanner.save_possible_simple_keycCs@|j|jkr<|j|j}|jr2td|jd|j|j|j=dS)Nzwhile scanning a simple keyzcould not find expected ':')rrr rrrW)rrZr r r r\5s    z"Scanner.remove_possible_simple_keycCsD|jr dSx4|j|kr>|j}|jj|_|jjt||q WdS)N)rrrWrr$rappend BlockEndToken)rrrr r r r:Bs   zScanner.unwind_indentcCs&|j|kr"|jj|j||_dSdS)NTF)rrr_)rrr r r add_indentZs  zScanner.add_indentcCs$|j}|jjt|||jddS)N)encoding)rWrr_StreamStartTokenrb)rrr r r rds zScanner.fetch_stream_startcCsB|jd|jd|_i|_|j}|jjt||d|_dS)NrFTr) r:r\rrrWrr_StreamEndTokenr)rrr r r r<ps zScanner.fetch_stream_endcCs,|jd|jd|_|jj|jdS)NrFr)r:r\rrr_scan_directive)rr r r r>s zScanner.fetch_directivecCs|jtdS)N)fetch_document_indicatorDocumentStartToken)rr r r r@szScanner.fetch_document_startcCs|jtdS)N)rfDocumentEndToken)rr r r rBszScanner.fetch_document_endcCsH|jd|jd|_|j}|jd|j}|jj|||dS)NrFr)r:r\rrWforwardrr_)r TokenClass start_markend_markr r r rfs  z Scanner.fetch_document_indicatorcCs|jtdS)N)fetch_flow_collection_startFlowSequenceStartToken)rr r r rCsz!Scanner.fetch_flow_sequence_startcCs|jtdS)N)rnFlowMappingStartToken)rr r r rDsz Scanner.fetch_flow_mapping_startcCsJ|j|jd7_d|_|j}|j|j}|jj|||dS)NrT)r^rrrWrjrr_)rrkrlrmr r r rnsz#Scanner.fetch_flow_collection_startcCs|jtdS)N)fetch_flow_collection_endFlowSequenceEndToken)rr r r rEszScanner.fetch_flow_sequence_endcCs|jtdS)N)rqFlowMappingEndToken)rr r r rFszScanner.fetch_flow_mapping_endcCsJ|j|jd8_d|_|j}|j|j}|jj|||dS)NrF)r\rrrWrjrr_)rrkrlrmr r r rqsz!Scanner.fetch_flow_collection_endcCs<d|_|j|j}|j|j}|jjt||dS)NT)rr\rWrjrr_FlowEntryToken)rrlrmr r r rGs zScanner.fetch_flow_entrycCs|jsF|jstddd|j|j|jrF|j}|jjt||nd|_|j |j}|j |j}|jjt ||dS)Nz%sequence entries are not allowed hereT) rrrrWrarrr_BlockSequenceStartTokenr\rjBlockEntryToken)rrrlrmr r r rIs  zScanner.fetch_block_entrycCs|jsD|jstddd|j|j|jrD|j}|jjt|||j |_|j |j}|j |j}|jjt ||dS)Nz!mapping keys are not allowed here) rrrrWrarrr_BlockMappingStartTokenr\rjKeyToken)rrrlrmr r r rKs   zScanner.fetch_keycCs|j|jkr||j|j}|j|j=|jj|j|jt|j|j|jst|j|j rt|jj|j|jt |j|jd|_ n\|js|j st ddd|j |js|j|j r|j }|jjt |||j |_ |j|j }|j|j }|jjt||dS)NFz#mapping values are not allowed here)rrrinsertr rrxrrarrwrrrWr_r\rj ValueToken)rrZrrlrmr r r rMs2       zScanner.fetch_valuecCs$|jd|_|jj|jtdS)NF)r^rrr_ scan_anchor AliasToken)rr r r rNVszScanner.fetch_aliascCs$|jd|_|jj|jtdS)NF)r^rrr_r{ AnchorToken)rr r r rOaszScanner.fetch_anchorcCs"|jd|_|jj|jdS)NF)r^rrr_scan_tag)rr r r rPlszScanner.fetch_tagcCs|jdddS)Nr5)style)fetch_block_scalar)rr r r rQwszScanner.fetch_literalcCs|jdddS)Nr6)r)r)rr r r rRzszScanner.fetch_foldedcCs$d|_|j|jj|j|dS)NT)rr\rr_scan_block_scalar)rrr r r r}szScanner.fetch_block_scalarcCs|jdddS)Nr7)r)fetch_flow_scalar)rr r r rSszScanner.fetch_singlecCs|jdddS)Nr8)r)r)rr r r rTszScanner.fetch_doublecCs$|jd|_|jj|j|dS)NF)r^rrr_scan_flow_scalar)rrr r r rszScanner.fetch_flow_scalarcCs"|jd|_|jj|jdS)NF)r^rrr_ scan_plain)rr r r rVszScanner.fetch_plaincCs|jdkrdSdS)NrT)r)rr r r r=s zScanner.check_directivecCs.|jdkr*|jddkr*|jddkr*dSdS)Nrriz---u …

T)rprefixr;)rr r r r?s zScanner.check_document_startcCs.|jdkr*|jddkr*|jddkr*dSdS)Nrriz...u …

T)rrr;)rr r r rAs zScanner.check_document_endcCs|jddkS)Nru …

)r;)rr r r rHszScanner.check_block_entrycCs|jr dS|jddkSdS)NTru …

)rr;)rr r r rJszScanner.check_keycCs|jr dS|jddkSdS)NTru …

)rr;)rr r r rLszScanner.check_valuecCs6|j}|dkp4|jddko4|dkp4|j o4|dkS)Nu …

-?:,[]{}#&*!|>'"%@`ru …

r*z?:)r;r)rrXr r r rUszScanner.check_plaincCs|jdkr|jdkr|jd}xb|sx|jdkr@|jq*W|jdkrhx|jdkrf|jqPW|jr~|jsd|_q$d}q$WdS)NruF #u …

T)rr;rjscan_line_breakrr)rfoundr r r r9s   zScanner.scan_to_next_tokencCs|j}|j|j|}d}|dkr:|j|}|j}n>|dkrV|j|}|j}n"|j}x|jdkrv|jq`W|j|t||||S)NZYAMLZTAGu …

)rWrjscan_directive_namescan_yaml_directive_valuescan_tag_directive_valuer;scan_directive_ignored_lineDirectiveToken)rrlnamevaluermr r r res       zScanner.scan_directivecCsd}|j|}xfd|ko"dkns`d|ko:dkns`d|koRdkns`|dkrt|d 7}|j|}qW|std |d ||j|j|}|j||j}|d krtd |d ||j|S) Nr09AZazz-_rzwhile scanning a directivez6expected alphabetic or numeric character, but found %ru …

)r;rrWrrj)rrllengthrXrr r r r#s$ J  zScanner.scan_directive_namecCsx|jdkr|jqW|j|}|jdkrJtd|d|j|j|j|j|}|jdkrtd|d|j|j||fS)Nrr+zwhile scanning a directivez%expected a digit or '.', but found %ru …

z%expected a digit or ' ', but found %r)r;rjscan_yaml_directive_numberrrW)rrlmajorminorr r r r8s         z!Scanner.scan_yaml_directive_valuecCs|j}d|kodkns6td|d||jd}x*d|j|koTdknrd|d7}q|jq(W|j}|dkrftd|d||j|jdS)Nrru …

zwhile scanning a directivez0expected a comment or a line break, but found %r)r;rjrrWr)rrlrXr r r rrs   z#Scanner.scan_directive_ignored_linec Cs|j}|j}|dkrd}nd}|jd}|j|}xfd|koLdknsd|koddknsd |ko|d kns|d kr|d 7}|j|}q:W|std ||d||j|j|}|j||j}|dkrtd ||d||j|j}||||S)Nraliasanchorrrrrrrrz-_rzwhile scanning an %sz6expected alphabetic or numeric character, but found %ru …

?:,]}%@`)rWr;rjrr) rrkrlZ indicatorrrrXrrmr r r r{s2  J    zScanner.scan_anchorc Cs&|j}|jd}|dkrdd}|jd|jd|}|jdkrZtd|d|j|j|jn~|dkr~d}d }|jndd}d }x,|d kr|d krd }P|d7}|j|}qWd }|r|jd|}n d }|j|jd|}|j}|d kr td |d||j||f}|j}t|||S)Nr<tagr6zwhile parsing a tagzexpected '>', but found %ru …

r4Fu …

Tzwhile scanning a tagzexpected ' ', but found %r)rWr;rjrrrTagToken) rrlrXrsuffixrZ use_handlerrmr r r r~sH           zScanner.scan_tagcCs|dkrd}nd}g}|j}|j|j|\}}|j||jd}|dkrTd}|dkrv|j\}} } t|| } n||d} |j| \}} d} x|j| ko|j dkrt|j ||j dk} d}x|j |d kr|d7}qW|j |j ||j||j } |j| \}} |j| krp|j dkrp|rd| d krd| rd|j dkrd|sn|j d n |j | qPqW|dk r|j | |dkr|j |tdj|d|| |S) Nr6TFrr(z ru …

 r)rWrjscan_block_scalar_indicatorsscan_block_scalar_ignored_linerscan_block_scalar_indentationmaxscan_block_scalar_breaksrr;extendr_rr ScalarTokenjoin)rrZfoldedchunksrlchomping incrementZ min_indentbreaks max_indentrmr line_breakZleading_non_spacerr r r rsP              zScanner.scan_block_scalarcCsd}d}|j}|dkrn|dkr&d}nd}|j|j}|dkrt|}|dkrdtd|d|j|jn\|dkrt|}|dkrtd|d|j|j|j}|dkr|dkrd}nd}|j|j}|d krtd|d ||j||fS) Nz+-+TFZ 0123456789rzwhile scanning a block scalarz|jq(W|j}|dkrftd|d||j|jdS)Nrru …

zwhile scanning a block scalarz0expected a comment or a line break, but found %r)r;rjrrWr)rrlrXr r r rAs    z&Scanner.scan_block_scalar_ignored_linecCshg}d}|j}xL|jdkr\|jdkrB|j|j|j}q|j|j|kr|j}qW|||fS)Nru …

r)rWr;r_rrjr)rrrrmr r r rOs    z%Scanner.scan_block_scalar_indentationcCsg}|j}x"|j|kr.|jdkr.|jqWxJ|jdkrz|j|j|j}x"|j|krv|jdkrv|jqVWq2W||fS)Nru …

)rWrr;rjr_r)rrrrmr r r r^s z Scanner.scan_block_scalar_breakscCs|dkrd}nd}g}|j}|j}|j|j|j||x4|j|krt|j|j|||j|j||qBW|j|j}tdj|d|||S)Nr8TFr)rWr;rjrscan_flow_scalar_non_spacesscan_flow_scalar_spacesrr)rrdoublerrlZquotermr r r rkszScanner.scan_flow_scalarr( r   rr8\… u
u
)rrbtrnvfrerr8rN_LPr)xuUcCsg}xd}x|j|dkr&|d7}qW|rF|j|j||j||j}| r|dkr|jddkr|jd|jdq|r|dks| r|dkr|j||jq|o|dkr|j|j}||jkr|j|j||jn||jkr||j|}|jxBt|D]6}|j|dkrtd |d ||j|f|jqWt |j|d }|jt ||j|n<|d kr|j |j |j ||ntd |d ||jq|SqWdS)Nru'"\ …

rr7rz"\r0123456789ABCDEFabcdefz%while scanning a double-quoted scalarz?expected escape sequence of %d hexdecimal numbers, but found %ru …

z!found unknown escape character %r)r;r_rrjESCAPE_REPLACEMENTS ESCAPE_CODESrangerrWrchrrrscan_flow_scalar_breaks)rrrlrrrXkcoder r r rsL            z#Scanner.scan_flow_scalar_non_spacesc Csg}d}x|j|dkr"|d7}q W|j|}|j||j}|dkr\td|d|jnT|dkr|j}|j||}|dkr|j|n|s|jd |j|n |j||S) Nrz rr(zwhile scanning a quoted scalarzfound unexpected end of streamu …

rr) r;rrjrrWrrr_r) rrrlrr whitespacesrXrrr r r rs(        zScanner.scan_flow_scalar_spacescCsg}xx|jd}|dks |dkr@|jddkr@td|d|jx|jdkrX|jqBW|jdkrv|j|jq|SqWdS) Nriz---z...u …

zwhile scanning a quoted scalarz#found unexpected document separatorz u …

)rr;rrWrjr_r)rrrlrrr r r rs    zScanner.scan_flow_scalar_breakscCsNg}|j}|}|jd}g}xd}|jdkr4PxP|j|}|dksx|j rj|dkrj|j|ddksx|jrz|dkrzP|d7}q6W|jr|dkr|j|ddkr|j|td|d |jd |dkrPd |_|j||j|j ||j||j}|j ||}| s4|jdks4|j r"|j |kr"Pq"Wt d j |d ||S)Nrrru …

r2z,:?[]{}u …

,[]{}zwhile scanning a plain scalarzfound unexpected ':'zGPlease check http://pyyaml.org/wiki/YAMLColonInFlowContext for details.FrT)rWrr;rrjrrrr_rscan_plain_spacesrrr)rrrlrmrZspacesrrXr r r rsF        zScanner.scan_plainc Cs.g}d}x|j|dkr"|d7}q W|j|}|j||j}|dkr|j}d|_|jd}|dksr|dkr|jdd krdSg} x`|jd kr|jdkr|jq| j|j|jd}|dks|dkr|jdd krdSqW|d kr|j|n| s|jd|j| n|r*|j||S) Nrrru …

Triz---z...u …

u …

r)r;rrjrrr_r) rrrlrrrrXrrrr r r r!s>            zScanner.scan_plain_spacescCs|j}|dkr*td||d||jd}|j|}|dkrxfd|koTdknsd|kold knsd |kod kns|d kr|d7}|j|}qBW|dkr|j|td||d||j|d7}|j|}|j||S) Nr4zwhile scanning a %szexpected '!', but found %rrrrrrrrrz-_)r;rrWrjr)rrrlrXrrr r r rFs&  J    zScanner.scan_tag_handlecCsg}d}|j|}xd|ko&dknsdd|ko>dknsdd|koVdknsd|dkr|d kr|j|j||j|d}|j|j||n|d 7}|j|}qW|r|j|j||j|d}|std ||d ||jd j|S)Nrrrrrrrz-;/?:@&=+$,_.!~*'()[]%r)rzwhile parsing a %szexpected URI, but found %rr)r;r_rrjscan_uri_escapesrrWr)rrrlrrrXr r r r^s( J   zScanner.scan_tag_uricCsg}|j}xx|jdkr|jx>tdD]2}|j|dkr,td||d|j||jq,W|jt|jdd|jdqWyt|j d}Wn8t k r}ztd||t ||WYdd}~XnX|S)Nr)rrzwhile scanning a %szBexpected URI escape sequence of 2 hexdecimal numbers, but found %rrzutf-8) rWr;rjrrr_rrbytesdecodeUnicodeDecodeErrorstr)rrrlZcodesrrrexcr r r rws  (zScanner.scan_uri_escapescCsN|j}|dkr6|jddkr*|jdn|jdS|dkrJ|j|SdS)Nu …rz ru

r)r;rrj)rrXr r r rs  zScanner.scan_line_breakN)Lrrrrr"r#r%rr r'r&r^r\r:rarr<r>r@rBrfrCrDrnrErFrqrGrIrKrMrNrOrPrQrRrrSrTrrVr=r?rArHrJrLrUr9rerrrrrrrr{r~rrrrrrrrrrrrrrrrrr r r r r.sA   l    !8       #    $)L( +/%N)__all__errorrrrr rr r r r s