The yaml.org site is nice because it links to the specs. (It's also
entertaining because the site itself presents as a YAML document.)

Whatever library is being used to handle YAML parsing should declare the
spec version(s) that are supported, and those spec documents helped me when
learning to use it. That's where I learned about anchors and merging map
structures, and I use those features day-to-day now.

On Fri, Apr 26, 2019 at 2:50 PM Walt Karas <wka...@verizonmedia.com.invalid>
wrote:

> TL;DR love of Satan
>
> On Fri, Apr 26, 2019 at 2:48 PM Derek Dagit <da...@apache.org> wrote:
>
> > I think it should be consistent.
> >
> > The first line establishes an indentation width of 2 spaces.
> >
> > The second line is a list element that itself is a map of one entry, and
> > your multi-line text is the value for this entry.
> >
> > Since it is nested, in effect we need to indent twice, and so I think
> that
> > is why 4 spaces works when 2 does not in this case.
> >
> > On Fri, Apr 26, 2019 at 2:32 PM Walt Karas <wka...@verizonmedia.com
> > .invalid>
> > wrote:
> >
> > > So, it seems that with YAML, it sometimes matters whether you use 4
> > spaces
> > > of indentation rather that 2 space of indentation.  Is there some
> reason
> > we
> > > are choosing to use YAML, other than sheer love of Satan?
> > >
> > > $ cat load.py
> > >
> > > import yaml
> > >
> > > import sys
> > >
> > > f = open(sys.argv[1], 'r')
> > >
> > > y = yaml.load(f)
> > >
> > > print(y)
> > >
> > > $
> > >
> > > $ cat y1.yaml
> > >
> > > a:
> > >
> > >   - b: |
> > >
> > >       one
> > >
> > >       two
> > >
> > >   - c: |
> > >
> > >       three
> > >
> > >       four
> > >
> > > $
> > >
> > > $ cat y2.yaml
> > >
> > > a:
> > >
> > >   - b: |
> > >
> > >     one
> > >
> > >     two
> > >
> > >   - c: |
> > >
> > >     three
> > >
> > >     four
> > >
> > > $
> > >
> > > $ python load.py y1.yaml
> > >
> > > {'a': [{'b': 'one\ntwo\n'}, {'c': 'three\nfour\n'}]}
> > >
> > > $
> > >
> > > $ python load.py y2.yaml
> > >
> > > Traceback (most recent call last):
> > >
> > >   File "load.py", line 4, in <module>
> > >
> > >     y = yaml.load(f)
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/__init__.py", line
> > 71,
> > > in load
> > >
> > >     return loader.get_single_data()
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/constructor.py",
> line
> > > 37, in get_single_data
> > >
> > >     node = self.get_single_node()
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 36,
> > > in get_single_node
> > >
> > >     document = self.compose_document()
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 55,
> > > in compose_document
> > >
> > >     node = self.compose_node(None, None)
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 84,
> > > in compose_node
> > >
> > >     node = self.compose_mapping_node(anchor)
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 133,
> > > in compose_mapping_node
> > >
> > >     item_value = self.compose_node(node, item_key)
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 82,
> > > in compose_node
> > >
> > >     node = self.compose_sequence_node(anchor)
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 111,
> > > in compose_sequence_node
> > >
> > >     node.value.append(self.compose_node(node, index))
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 84,
> > > in compose_node
> > >
> > >     node = self.compose_mapping_node(anchor)
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/composer.py", line
> > 127,
> > > in compose_mapping_node
> > >
> > >     while not self.check_event(MappingEndEvent):
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/parser.py", line
> 98,
> > in
> > > check_event
> > >
> > >     self.current_event = self.state()
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/parser.py", line
> 428,
> > > in parse_block_mapping_key
> > >
> > >     if self.check_token(KeyToken):
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/scanner.py", line
> > 115,
> > > in check_token
> > >
> > >     while self.need_more_tokens():
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/scanner.py", line
> > 149,
> > > in need_more_tokens
> > >
> > >     self.stale_possible_simple_keys()
> > >
> > >   File "/usr/local/lib/python2.7/site-packages/yaml/scanner.py", line
> > 289,
> > > in stale_possible_simple_keys
> > >
> > >     "could not find expected ':'", self.get_mark())
> > >
> > > yaml.scanner.ScannerError: while scanning a simple key
> > >
> > >   in "y2.yaml", line 3, column 5
> > >
> > > could not find expected ':'
> > >
> > >   in "y2.yaml", line 4, column 5
> > >
> >
>

Reply via email to