summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2021-12-24 14:30:59 +0100
committerAnthon van der Neut <anthon@mnt.org>2021-12-24 14:30:59 +0100
commit613279066c0a31e3df94047014e530c4095aeb8e (patch)
treeb4d3b158aa9a6535ae7e816d0f92c253e6c75ddf
parentb3b16d923784da2209ff80e894c5751e398ad416 (diff)
downloadruamel.yaml-613279066c0a31e3df94047014e530c4095aeb8e.tar.gz
fix indent for empty seq/map0.17.18
-rw-r--r--CHANGES6
-rw-r--r--README.rst12
-rw-r--r--__init__.py5
-rw-r--r--_doc/_static/pypi.svg2
-rw-r--r--emitter.py52
-rw-r--r--parser.py3
-rw-r--r--setup.py2
-rwxr-xr-xtox.ini2
8 files changed, 59 insertions, 25 deletions
diff --git a/CHANGES b/CHANGES
index 4099578..ec981e8 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,9 @@
+[0, 17, 18]: 2021-12-24
+ - copy-paste error in folded scalar comment attachment (reported by `Stephan Geulette
+ <https://sourceforge.net/u/sgeulette/profile/>`__)
+ - fix 411, indent error comment between key empty seq value (reported by `Guillermo Julián
+ <https://sourceforge.net/u/gjulianm/profile/>`__)
+
[0, 17, 17]: 2021-10-31
- extract timestamp matching/creation to util
diff --git a/README.rst b/README.rst
index 68056d7..35a0129 100644
--- a/README.rst
+++ b/README.rst
@@ -4,8 +4,8 @@ ruamel.yaml
``ruamel.yaml`` is a YAML 1.2 loader/dumper package for Python.
-:version: 0.17.17
-:updated: 2021-10-31
+:version: 0.17.18
+:updated: 2021-12-24
:documentation: http://yaml.readthedocs.io
:repository: https://sourceforge.net/projects/ruamel-yaml/
:pypi: https://pypi.org/project/ruamel.yaml/
@@ -55,10 +55,10 @@ when the status of the API is stable enough to make the transition.
.. image:: https://bestpractices.coreinfrastructure.org/projects/1128/badge
:target: https://bestpractices.coreinfrastructure.org/projects/1128
-.. image:: https://sourceforge.net/p/ruamel-yaml/code/ci/default/tree/_doc/_static/license.svg?format=raw
+.. image:: https://sourceforge.net/p/ruamel-yaml-base/code/ci/default/tree/_doc/_static/license.svg?format=raw
:target: https://opensource.org/licenses/MIT
-.. image:: https://sourceforge.net/p/ruamel-yaml/code/ci/default/tree/_doc/_static/pypi.svg?format=raw
+.. image:: https://sourceforge.net/p/ruamel-yaml-base/code/ci/default/tree/_doc/_static/pypi.svg?format=raw
:target: https://pypi.org/project/ruamel.yaml/
.. image:: https://sourceforge.net/p/oitnb/code/ci/default/tree/_doc/_static/oitnb.svg?format=raw
@@ -72,9 +72,11 @@ ChangeLog
.. should insert NEXT: at the beginning of line for next key (with empty line)
-NEXT:
+0.17.18 (2021-12-24):
- copy-paste error in folded scalar comment attachment (reported by `Stephan Geulette
<https://sourceforge.net/u/sgeulette/profile/>`__)
+ - fix 411, indent error comment between key empty seq value (reported by `Guillermo Julián
+ <https://sourceforge.net/u/gjulianm/profile/>`__)
0.17.17 (2021-10-31):
- extract timestamp matching/creation to util
diff --git a/__init__.py b/__init__.py
index 65a3423..f7d767a 100644
--- a/__init__.py
+++ b/__init__.py
@@ -5,8 +5,9 @@ if False: # MYPY
_package_data = dict(
full_package_name='ruamel.yaml',
- version_info=(0, 17, 17),
- __version__='0.17.17',
+ version_info=(0, 17, 18),
+ __version__='0.17.18',
+ version_timestamp='2021-12-24 14:28:35',
author='Anthon van der Neut',
author_email='a.van.der.neut@ruamel.eu',
description='ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order', # NOQA
diff --git a/_doc/_static/pypi.svg b/_doc/_static/pypi.svg
index 35042d8..ca071d2 100644
--- a/_doc/_static/pypi.svg
+++ b/_doc/_static/pypi.svg
@@ -1 +1 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h33v20H0z"/><path fill="#007ec6" d="M33 0h53v20H33z"/><path fill="url(#b)" d="M0 0h86v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" textLength="230">pypi</text><text x="585" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">0.17.17</text><text x="585" y="140" transform="scale(.1)" textLength="430">0.17.17</text></g> </svg>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="86" height="20"><linearGradient id="b" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="a"><rect width="86" height="20" rx="3" fill="#fff"/></clipPath><g clip-path="url(#a)"><path fill="#555" d="M0 0h33v20H0z"/><path fill="#007ec6" d="M33 0h53v20H33z"/><path fill="url(#b)" d="M0 0h86v20H0z"/></g><g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110"> <text x="175" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="230">pypi</text><text x="175" y="140" transform="scale(.1)" textLength="230">pypi</text><text x="585" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="430">0.17.18</text><text x="585" y="140" transform="scale(.1)" textLength="430">0.17.18</text></g> </svg>
diff --git a/emitter.py b/emitter.py
index a17e0e5..b66cffa 100644
--- a/emitter.py
+++ b/emitter.py
@@ -54,7 +54,7 @@ class Indents:
# replacement for the list based stack of None/int
def __init__(self):
# type: () -> None
- self.values = [] # type: List[Tuple[int, bool]]
+ self.values = [] # type: List[Tuple[Any, bool]]
def append(self, val, seq):
# type: (Any, Any) -> None
@@ -73,13 +73,18 @@ class Indents:
except IndexError:
return False
- def seq_flow_align(self, seq_indent, column):
+ def seq_flow_align(self, seq_indent, column, pre_comment=False):
# type: (int, int) -> int
# extra spaces because of dash
+ nprint('seq_flow_align', self.values, pre_comment)
if len(self.values) < 2 or not self.values[-1][1]:
- return 0
- # -1 for the dash
+ if len(self.values) == 0 or not pre_comment:
+ return 0
base = self.values[-1][0] if self.values[-1][0] is not None else 0
+ if pre_comment:
+ return base + seq_indent
+ # return (len(self.values)) * seq_indent
+ # -1 for the dash
return base + seq_indent - column - 1
def __len__(self):
@@ -405,6 +410,7 @@ class Emitter:
# type: (bool, bool, bool, bool) -> None
self.root_context = root
self.sequence_context = sequence # not used in PyYAML
+ force_flow_indent = False
self.mapping_context = mapping
self.simple_key_context = simple_key
if isinstance(self.event, AliasEvent):
@@ -430,20 +436,27 @@ class Emitter:
# nprint('@', self.indention, self.no_newline, self.column)
i2, n2 = self.indention, self.no_newline # NOQA
if self.event.comment:
- if self.event.flow_style is False and self.event.comment:
+ if self.event.flow_style is False:
if self.write_post_comment(self.event):
self.indention = False
self.no_newline = True
+ if self.event.flow_style:
+ column = self.column
if self.write_pre_comment(self.event):
+ if self.event.flow_style:
+ # force_flow_indent = True
+ force_flow_indent = not self.indents.values[-1][1]
self.indention = i2
self.no_newline = not self.indention
+ if self.event.flow_style:
+ self.column = column
if (
self.flow_level
or self.canonical
or self.event.flow_style
or self.check_empty_sequence()
):
- self.expect_flow_sequence()
+ self.expect_flow_sequence(force_flow_indent)
else:
self.expect_block_sequence()
elif isinstance(self.event, MappingStartEvent):
@@ -451,13 +464,16 @@ class Emitter:
self.write_post_comment(self.event)
if self.event.comment and self.event.comment[1]:
self.write_pre_comment(self.event)
+ if self.event.flow_style:
+ force_flow_indent = not self.indents.values[-1][1]
if (
self.flow_level
or self.canonical
or self.event.flow_style
or self.check_empty_mapping()
):
- self.expect_flow_mapping(single=self.event.nr_items == 1)
+ self.expect_flow_mapping(single=self.event.nr_items == 1,
+ force_flow_indent=force_flow_indent)
else:
self.expect_block_mapping()
else:
@@ -481,11 +497,15 @@ class Emitter:
# Flow sequence handlers.
- def expect_flow_sequence(self):
- # type: () -> None
- ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column)
+ def expect_flow_sequence(self, force_flow_indent=False):
+ # type: (bool) -> None
+ if force_flow_indent:
+ self.increase_indent(flow=True, sequence=True)
+ ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column,
+ force_flow_indent)
self.write_indicator(' ' * ind + '[', True, whitespace=True)
- self.increase_indent(flow=True, sequence=True)
+ if not force_flow_indent:
+ self.increase_indent(flow=True, sequence=True)
self.flow_context.append('[')
self.state = self.expect_first_flow_sequence_item
@@ -533,9 +553,12 @@ class Emitter:
# Flow mapping handlers.
- def expect_flow_mapping(self, single=False):
+ def expect_flow_mapping(self, single=False, force_flow_indent=False):
# type: (Optional[bool]) -> None
- ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column)
+ if force_flow_indent:
+ self.increase_indent(flow=True, sequence=False)
+ ind = self.indents.seq_flow_align(self.best_sequence_indent, self.column,
+ force_flow_indent)
map_init = '{'
if (
single
@@ -548,7 +571,8 @@ class Emitter:
map_init = ''
self.write_indicator(' ' * ind + map_init, True, whitespace=True)
self.flow_context.append(map_init)
- self.increase_indent(flow=True, sequence=False)
+ if not force_flow_indent:
+ self.increase_indent(flow=True, sequence=False)
self.state = self.expect_first_flow_mapping_key
def expect_first_flow_mapping_key(self):
diff --git a/parser.py b/parser.py
index 48e5c48..a2fab43 100644
--- a/parser.py
+++ b/parser.py
@@ -233,7 +233,8 @@ class Parser:
# end_mark.line != self.scanner.peek_token().start_mark.line:
# self.loader.scalar_after_indicator = False
event = DocumentStartEvent(
- start_mark, end_mark, explicit=True, version=version, tags=tags, comment=token.comment
+ start_mark, end_mark, explicit=True, version=version, tags=tags,
+ comment=token.comment
) # type: Any
self.states.append(self.parse_document_end)
self.state = self.parse_document_content
diff --git a/setup.py b/setup.py
index a6632f1..70bdff0 100644
--- a/setup.py
+++ b/setup.py
@@ -527,7 +527,7 @@ class NameSpacePackager(object):
if package_name is None:
package_name = self.full_package_name
if not script_name:
- script_name = package_name.split('.')[-1]
+ script_name = package_name.rsplit('.', 1)[-1]
return {
'console_scripts': [
'{0} = {1}'.format(script_name, pckg_entry_point(package_name))
diff --git a/tox.ini b/tox.ini
index 4e16d23..d581f3d 100755
--- a/tox.ini
+++ b/tox.ini
@@ -1,6 +1,6 @@
[tox]
# toxworkdir = /data1/DATA/tox/ruamel.yaml
-envlist = cs,py39,py38,py37,py36,py35
+envlist = cs,py310,py39,py38,py37,py36,py35
[testenv]
install_command = pip install --disable-pip-version-check {opts} {packages}