o
    
i\                     @   sZ   d dl mZmZmZ d dlZd dlZddlmZmZm	Z	m
Z
mZmZmZ G dd dZdS )    )absolute_importprint_functionunicode_literalsN   )
round_tripna_round_tripround_trip_loadround_trip_dumpdedentsave_and_runYAMLc                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdZdZdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Z d;d< Z!d=d> Z"d?d@ Z#dAdB Z$dCdD Z%dEdF Z&dGdH Z'dIdJ Z(dKdL Z)dMdN Z*dOdP Z+dQdR Z,dSdT Z-dUdV Z.dWdX Z/dYdZ Z0d[d\ Z1d]d^ Z2d_d` Z3dadb Z4dcdd Z5dedf Z6dgdh Z7diS )j
TestIssuesc                 C   sr   dd l }td}|j|}t|d t|d ksJ tjdkr-t|d dks+J d S t|d dks7J d S )Nr   z
        def1: &ANCHOR1
            key1: value1
        def: &ANCHOR
            <<: *ANCHOR1
            key: value
        comb:
            <<: *ANCHOR
        combdef)      z/ordereddict({'key': 'value', 'key1': 'value1'})z3ordereddict([('key', 'value'), ('key1', 'value1')]))srsly.ruamel_yamlr
   ruamel_yamlr   strsysversion_info)selfsrslysdata r   W/home/ubuntu/.local/lib/python3.10/site-packages/srsly/tests/ruamel_yaml/test_issues.pytest_issue_61   s   
zTestIssues.test_issue_61c                 C      d}t t||dksJ d S )Nao  
        from __future__ import print_function

        import srsly.ruamel_yaml as yaml

        import re


        class SINumber(yaml.YAMLObject):
            PREFIXES = {'k': 1e3, 'M': 1e6, 'G': 1e9}
            yaml_loader = yaml.Loader
            yaml_dumper = yaml.Dumper
            yaml_tag = u'!si'
            yaml_implicit_pattern = re.compile(
                r'^(?P<value>[0-9]+(?:\.[0-9]+)?)(?P<prefix>[kMG])$')

            @classmethod
            def from_yaml(cls, loader, node):
                return cls(node.value)

            @classmethod
            def to_yaml(cls, dumper, data):
                return dumper.represent_scalar(cls.yaml_tag, str(data))

            def __init__(self, *args):
                m = self.yaml_implicit_pattern.match(args[0])
                self.value = float(m.groupdict()['value'])
                self.prefix = m.groupdict()['prefix']

            def __str__(self):
                return str(self.value)+self.prefix

            def __int__(self):
                return int(self.value*self.PREFIXES[self.prefix])

        # This fails:
        yaml.add_implicit_resolver(SINumber.yaml_tag, SINumber.yaml_implicit_pattern)

        ret = yaml.load("""
        [1,2,3, !si 10k, 100G]
        """, Loader=yaml.Loader)
        for idx, l in enumerate([1, 2, 3, 10000, 100000000000]):
            assert int(ret[idx]) == l
        r   r   r
   r   tmpdirprogram_srcr   r   r   test_issue_82/   s   ,zTestIssues.test_issue_82c                 C   s   d}t |dd}d S )Nz[1, 2, 3, !si 10k, 100G]
Tpreserve_quotesr   )r   r!   yaml_strxr   r   r   test_issue_82rt^   s   zTestIssues.test_issue_82rtc                 C      t d}t|dd}d S )Nz
        var1: #empty
        var2: something #notempty
        var3: {} #empty object
        var4: {a: 1} #filled object
        var5: [] #empty array
        Tr$   r
   r   )r   r'   r(   r   r   r   test_issue_102b   s   	zTestIssues.test_issue_102c                 C   sB   ddl m} d}| }||}|d }dtdi |v sJ d S )Nr   r   z        base: &base_key
          first: 123
          second: 234

        child:
          <<: *base_key
          third: 345
        childsecondr   )r   r   loaddict)r   r   inpyamlr   r.   r   r   r   test_issue_150n   s   	
zTestIssues.test_issue_150c                 C   sZ   ddl m} td}t|}|d d d= | }t||dd td}| |ks+J d S )	Nr   StringIOzq        root:
            # a comment
            - {some_key: "value"}

        foo: 32
        bar: 32
        rootsome_key   )block_seq_indentz`        root:
            # a comment
            - {}

        foo: 32
        bar: 32
        )srsly.ruamel_yaml.compatr6   r
   r   r	   getvalue)r   r6   r   abufexpr   r   r   test_issue_160   s   

zTestIssues.test_issue_160c                 C   (   t d}dD ]}||}t|}qd S )NA        mapping-A:
          key-A:{}
        mapping-B:
        ) z # no-newlinez  # some comment

r
   formatr   r   r'   commentr   resr   r   r   test_issue_161      

zTestIssues.test_issue_161c                 C   rA   )NrB   )z

# betweenrE   rG   r   r   r   test_issue_161a   rK   zTestIssues.test_issue_161ac                 C   r*   )Nz?        some-list:
        # List comment
        - {}
        Tr$   r+   )r   r   r(   r   r   r   test_issue_163   s   zTestIssues.test_issue_163z{"sshKeys":[{"name":"AETROS\/google-k80-1","uses":0,"getLastUse":0,"fingerprint":"MD5:19:dd:41:93:a1:a3:f5:91:4a:8e:9b:d0:ae:ce:66:4c","created":1509497961}]}z{"abc":[{"a":"1", "uses":0}]}c                 C   s   t tj}t tj}d S )N)r   r   	json_str2json_str)r   r(   r   r   r   test_issue_172   s   
zTestIssues.test_issue_172c                 C   s0   ddl m} | }|d}g d|d d < d S )Nr   r-   z[1,2,3])r      r   r9   )r   r   r0   )r   r   r3   seqr   r   r   test_issue_176   s   
zTestIssues.test_issue_176c                 C   sJ   t d}t|}ddg|dd d< t|}||dddd	ks#J d S )
Nz}        - a
        - b  # comment
        - c  # commment c
        # comment c+
        - d

        - e # comment
        BDr   rQ   z b z B z d
z D
)r
   r   r	   replace)r   r'   rR   rI   r   r   r   =test_issue_176_preserve_comments_on_extended_slice_assignment   s    zHTestIssues.test_issue_176_preserve_comments_on_extended_slice_assignmentc                 C   s@  ddl m} td}t|dksJ |dd g ksJ |dd ddgks(J |dd d ddgks5J |d d  }d	g|dd< |g d
ksJJ |d d  }g d|d d< |g dks`J |d d  }g d|dd < |g dksvJ |d d  }g d|d d < |g dksJ |d d  }g d|dd< |g dksJ |d d  }d	dg|dd d< |g dksJ |d d  }|rtjtdd g d|dd d< W d    n1 sw   Y  n tjtdd g d|dd d< W d    n1 sw   Y  |r&tjtdd d	g|dd d< W d    n	1 s w   Y  n tjtdd d	g|dd d< W d    n	1 sAw   Y  |d d  }|dg7 }g d|dd d< |g dkscJ |d d  }|dd= |g dkswJ |d d  }|d d d= |ddgksJ |d d  }|d d = |g ksJ d S )Nr   )PY2z[0, 1, 2, 3, 4]   rQ   r9   r   r   *   )r   r   rZ   rQ   r   r9   )rZ   +   ,   )rZ   r[   r\   r   r9   )r   r   rZ   r[   r\   )r   r   rZ   r[   r\   r9   r[   )r   rZ   rQ   r[   r9   zattempt to assignmatchztoo manyz
not enough)r   rZ   rQ   r[   r9   r\   )r   r   r9   )r;   rX   r   lenpytestraises
ValueError	TypeError)r   rX   mssmr   r   r   test_issue_176_test_slicing   sl   


z&TestIssues.test_issue_176_test_slicingc                 C   s<   t d}t|}d|d< |dd t||d ksJ d S )NzQ        test::test:
          # test
          foo:
            bar: baz
        foobartest1zbar: foo # test1
)r
   r   yaml_add_eol_commentr	   r   r'   dr   r   r   test_issue_184  s   zTestIssues.test_issue_184c                 C      t d}t|}d S )Nz,        [StackName: AWS::StackName]
        r
   r   rk   r   r   r   test_issue_219-  s   zTestIssues.test_issue_219c                 C   rn   )Nz4        [StackName:
        AWS::StackName]
        ro   rk   r   r   r   test_issue_219a5  s   zTestIssues.test_issue_219ac                 C   s"   d}t t||dddksJ d S )Nz
        from srsly.ruamel_yaml import YAML

        yaml_str = u"""\
        ---
        foo: ["bar"]
        """

        yaml = YAML(typ='safe', pure=True)
        d = yaml.load(yaml_str)
        print(d)
        T)	optimizedr   r   r    r   r   r   test_issue_220>  s   zTestIssues.test_issue_220c                 C   s(   ddl m} |g d}|ddg  d S )Nr   )CommentedSeq)r   rQ   r   r9   rY   )srsly.ruamel_yaml.commentsrt   )r   rt   r=   r   r   r   test_issue_221_addM  s   zTestIssues.test_issue_221_addc                 C   sj   ddl m} ddlm} | }td}|t|}|  | }||| td}| |ks3J d S )Nr   r-   r5   X        - d
        - a  # 1
        - c  # 3
        - e  # 5
        - b  # 2
        zX        - a  # 1
        - b  # 2
        - c  # 3
        - d
        - e  # 5
        	r   r   r;   r6   r
   r0   sortdumpr<   r   r   r6   r3   r2   r=   r>   r?   r   r   r   test_issue_221_sortS  s   		zTestIssues.test_issue_221_sortc                 C   sn   ddl m} ddlm} | }td}|t|}|jdd | }||| td}| |ks5J d S )Nr   r-   r5   rw   T)reversezX        - e  # 5
        - d
        - c  # 3
        - b  # 2
        - a  # 1
        rx   r{   r   r   r   test_issue_221_sort_reversep  s   		z&TestIssues.test_issue_221_sort_reversec                 C   sp   ddl m} ddlm} | }td}|t|}|jtjd | }|	|| td}|
 |ks6J d S )Nr   r-   r5   k        - four
        - One    # 1
        - Three  # 3
        - five   # 5
        - two    # 2
        )keyzk        - five   # 5
        - four
        - One    # 1
        - Three  # 3
        - two    # 2
        r   r   r;   r6   r
   r0   ry   r   lowerrz   r<   r{   r   r   r   test_issue_221_sort_key  s   		z"TestIssues.test_issue_221_sort_keyc                 C   sr   ddl m} ddlm} | }td}|t|}|jtjdd | }|	|| td}|
 |ks7J d S )Nr   r-   r5   r   T)r   r}   zk        - two    # 2
        - Three  # 3
        - One    # 1
        - four
        - five   # 5
        r   r{   r   r   r   test_issue_221_sort_key_reverse  s   		z*TestIssues.test_issue_221_sort_key_reversec                 C   s>   dd l }ddlm} | }|jdg| | dksJ d S )Nr   r5   012923z['012923']
)r   r;   r6   r   	safe_dumpr<   )r   r   r6   r>   r   r   r   test_issue_222  s
   zTestIssues.test_issue_222c                 C   s$   dd l }|jjdd}|d d S )Nr   safetypzphone: 0123456789)r   r   r   r0   r   r   r3   r   r   r   test_issue_223  s   zTestIssues.test_issue_223c                 C   s   dd l }dd l m} t|jjj |d W d    n1 s"w   Y  t|jjj |d W d    d S 1 s@w   Y  d S )Nr   ]z{])r   r   r`   ra   parserParserError	safe_loadr   r   r   r   test_issue_232  s   "zTestIssues.test_issue_232c                 C   2   ddl m} dd l}| }|d}||}d S )Nr   r-   z{}r   r   jsonr0   dumpsr   r   r   r3   r   rO   r   r   r   test_issue_233  
   
zTestIssues.test_issue_233c                 C   r   )Nr   r-   z[]r   r   r   r   r   test_issue_233a  r   zTestIssues.test_issue_233ac                 C   sR   ddl m} td}|ddd}||}|d d }tt| d|vs'J d S )	Nr   r-   z        - key: key1
          ctx: [one, two]
          help: one
          cmd: >
            foo bar
            foo bar
        r   Tr   purecmd)r   r   r
   r0   printrepr)r   r   r2   r3   r   foldr   r   r   test_issue_234  s   

zTestIssues.test_issue_234c                 C   s   d}t |dd}d S )NzI
        conf:
          xx: {a: "b", c: []}
          asd: "nn"
        Tr$   r&   r   r2   rl   r   r   r   test_issue_236  s   zTestIssues.test_issue_236c                 C   r   )Na  
        import srsly.ruamel_yaml
        from srsly.ruamel_yaml.compat import StringIO

        yaml = srsly.ruamel_yaml.YAML(typ='unsafe')


        class A:
            def __setstate__(self, d):
                self.__dict__ = d


        class B:
            pass


        a = A()
        b = B()

        a.x = b
        b.y = [b]
        assert a.x.y[0] == a.x

        buf = StringIO()
        yaml.dump(a, buf)

        data = yaml.load(buf.getvalue())
        assert data.x.y[0] == data.x
        r   r   r    r   r   r   test_issue_238	  s   zTestIssues.test_issue_238c                 C   s   d}t  |}d S )Na~  
        first_name: Art
        occupation: Architect
        # I'm safe
        about: Art Vandelay is a fictional character that George invents...
        # we are not :(
        # help me!
        ---
        # what?!
        hello: world
        # someone call the Batman
        foo: bar # or quz
        # Lost again
        ---
        I: knew
        # final words
        )r   round_trip_allr   r   r   r   test_issue_239)  s   zTestIssues.test_issue_239c                 C   s*   ddl m} |dg}|d dksJ d S )Nr   )CommentedMapr=   br=   r   )ru   r   )r   r   d0r   r   r   test_issue_242=  s   
zTestIssues.test_issue_242c                 C   sz   ddl m} d}dD ]0}|drd}|d d }nd }|||d}d	|_||}t||j|j |d
 du s:J q
d S )Nr   r-   z
        d: yes
        )safepurertr   r   Tr   r   r   rl   )r   r   endswithversionr0   r   r   resolver)r   r   r2   r   r   r3   rl   r   r   r   test_issue_245C  s   

zTestIssues.test_issue_245c                 C   s(   t  }td}td}|j||d d S )NzN        # comment
        -
          - 1
          - 2
          - 3
        zD        # comment
        - - 1
          - 2
          - 3
        )outp)r   r
   r   )r   r3   r2   r?   r   r   r   test_issue_249V  s   	zTestIssues.test_issue_249c                 C      d}t |}d S )Nz[
        # 1.
        - - 1
        # 2.
        - map: 2
        # 3.
        - 4
        r&   r   r   r   r   test_issue_250k  s   zTestIssues.test_issue_250c                 C   sp   ddl m} ddlm} | }|jddd td}||}| }||| t|	  |	 |ks6J d S )Nr   r-   r5   r9   rQ   )sequenceoffsetz        experiments:
          - datasets:
        # ATLAS EWK
              - {dataset: ATLASWZRAP36PB, frac: 1.0}
              - {dataset: ATLASZHIGHMASS49FB, frac: 1.0}
        )
r   r   r;   r6   indentr
   r0   rz   r   r<   r   r   r6   r3   r2   r=   r>   r   r   r   test_issue_279w  s   
	zTestIssues.test_issue_279c                 C   s   ddl m} ddlm} ddlm} ddlm} |dd}|dd	}| }tj	|d
d |
d|i| W d    d S 1 s@w   Y  d S )Nr   r-   )RepresenterError)
namedtuple)stdoutTr   r   rQ   zcannot representr]   t)r   r   srsly.ruamel_yaml.representerr   collectionsr   r   r   r`   ra   rz   )r   r   r   r   r   r   r   r3   r   r   r   test_issue_280  s   

"zTestIssues.test_issue_280c                 C   sX   dd l }|jjddg}|dg |ddd d| v s#J d|jv s*J d S )	Nr   )r=   apple)r   banana)c
cantaloupedatekiwi)rl   kr   )r   r   commentsr   updatekeys_ok)r   r   	yaml_datar   r   r   test_issue_282  s   zTestIssues.test_issue_282c                 C   s   dd l }td}|jjdd}d|_||}|d  d u sJ |jjdd}d|_tj|jjj	dd ||}W d    d S 1 sDw   Y  d S )	Nr   zf        plain key: in-line value
        : # Both empty
        "quoted key":
        - entry
        r   r   )r   rQ   r   zexpected <block end>r]   )
r   r
   r   r   r   r0   r`   ra   r   r   )r   r   r2   r3   rl   r   r   r   test_issue_284  s   

"zTestIssues.test_issue_284c                 C   sX   ddl m} | }td}||}|d sJ |d sJ |d r$J |d r*J d S )Nr   r-   zV        %YAML 1.1
        ---
        - y
        - n
        - Y
        - N
        rQ   r   r   r   r   r
   r0   )r   r   r3   r2   r=   r   r   r   test_issue_285  s   

zTestIssues.test_issue_285c                 C   s`   ddl m} ddlm} | }td}||}d|d< | }||| | ds.J d S )Nr   r-   r5   z?        parent_key:
        - sub_key: sub_value

        # xxx	new_valuenew_keyzxxx
new_key: new_value
)	r   r   r;   r6   r
   r0   rz   r<   r   r   r   r   r   test_issue_286  s   
zTestIssues.test_issue_286c                 C      dd l }ddlm} ddlm} td}| }|jdddd d|_d|_|j	|_
||}| }||| | |ks?J d S )	Nr   r5   r-   aN          ---
        # Reusable values
        aliases:
          # First-element comment
          - &firstEntry First entry
          # Second-element comment
          - &secondEntry Second entry

          # Third-element comment is
          # a multi-line value
          - &thirdEntry Third entry

        # EOF Comment
        rQ   r9   mappingr   r   Tr   r;   r6   r   r   r
   r   explicit_startr%   maxsizewidthr0   rz   r<   r   r   r6   r   yamldocr3   r   r>   r   r   r   test_issue_288     
zTestIssues.test_issue_288c                 C   r   )	Nr   r5   r-   aO          ---
        # Reusable values
        aliases:
          # First-element comment
          - &firstEntry First entry
          # Second-element comment
          - &secondEntry Second entry

          # Third-element comment is
           # a multi-line value
          - &thirdEntry Third entry

        # EOF Comment
        rQ   r9   r   Tr   r   r   r   r   test_issue_288a  r   zTestIssues.test_issue_288ac                 C   r   	Nr   r5   r-   a          ---
        aliases:
          # Folded-element comment
          # for a multi-line value
          - &FoldedEntry >
            THIS IS A
            FOLDED, MULTI-LINE
            VALUE

          # Literal-element comment
          # for a multi-line value
          - &literalEntry |
            THIS IS A
            LITERAL, MULTI-LINE
            VALUE

          # Plain-element comment
          - &plainEntry Plain entry
        rQ   r9   r   Tr   r   r   r   r   test_issue_290#     
zTestIssues.test_issue_290c                 C   r   r   r   r   r   r   r   test_issue_290aI  r   zTestIssues.test_issue_290ac                 C   s6   dd l }td}t|}||}t||ksJ d S )Nr   z
        A:
          b:
          # comment
          - l1
          - l2

        C:
          d: e
          f:
          # comment2
          - - l31
            - l32
            - l33: '5'
        )copyr
   r   deepcopyr	   )r   r   r2   r   dcr   r   r   test_issue_295p  s   
zTestIssues.test_issue_295c                 C   s$   ddl m} td}| | d S )Nr   r-   zf
        %YAML 1.2
        %TAG ! tag:example.com,2019/path#fragment
        ---
        null
        r   )r   r   r2   r   r   r   test_issue_300  s
   zTestIssues.test_issue_300c                 C   sZ   dd l }td}t }tj|jjjdd || W d    d S 1 s&w   Y  d S )Nr   zf
        %YAML 1.1
        %TAG ! tag:example.com,2019/path#fragment
        ---
        null
        zwhile scanning a directiver]   )	r   r
   r   r`   ra   r   scannerScannerErrorr0   )r   r   r2   r3   r   r   r   test_issue_300a  s   
"zTestIssues.test_issue_300ac                 C   r   )Nzj
        %YAML 1.2
        %TAG ! tag:example.com,2019:
        ---
        !foo null
        ...
        r   r   r   r   r   test_issue_304     zTestIssues.test_issue_304c                 C   r   )Nza
        %YAML 1.2
        ---
        !<tag:example.com,2019/path#foo> null
        ...
        r   r   r   r   r   test_issue_305  s   zTestIssues.test_issue_305c                 C   r   )Nzj
        %YAML 1.2
        %TAG ! tag:example.com,2019/path#
        ---
        null
        ...
        r   r   r   r   r   test_issue_307  r   zTestIssues.test_issue_307N)8__name__
__module____qualname__r   r#   r)   r,   r4   r@   rJ   rL   rM   rO   rN   rP   rS   rW   rf   rm   rp   rq   rs   rv   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      sn    /<		 !!&'
	r   )
__future__r   r   r   r`   r   	roundtripr   r   r   r	   r
   r   r   r   r   r   r   r   <module>   s
   $