summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnthon van der Neut <anthon@mnt.org>2017-06-24 07:18:46 +0200
committerAnthon van der Neut <anthon@mnt.org>2017-06-24 07:18:46 +0200
commit325d9d4f536aad2f1ee2f0cd74d61791b3561fac (patch)
treee3dc7cb1b883d339d2cf33f02c5de026f9b47a81
parent84b55be25f6969f4df3a3ad7badad7bde6da1dc0 (diff)
downloadruamel.yaml-325d9d4f536aad2f1ee2f0cd74d61791b3561fac.tar.gz
fix issue #130: regression in nested merges
-rw-r--r--CHANGES4
-rw-r--r--README.rst4
-rw-r--r--_test/test_anchor.py23
-rw-r--r--constructor.py2
-rw-r--r--setup.py5
5 files changed, 36 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 68c5adc..2a13d6a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,7 @@
+[0, 15, 10]: 2017-06-24
+ - fix for issue 130, regression in nested merge keys (reported by
+ `David Fee <https://bitbucket.org/dfee/>`_)
+
[0, 15, 10]: 2017-06-23
- top level PreservedScalarString not indented if not explicitly asked to
- remove Makefile (not very useful anyway)
diff --git a/README.rst b/README.rst
index a92fd7e..f11e877 100644
--- a/README.rst
+++ b/README.rst
@@ -32,6 +32,10 @@ ChangeLog
.. should insert NEXT: at the beginning of line for next key
+0.15.10 (2017-06-24):
+ - fix for issue 130, regression in nested merge keys (reported by
+ `David Fee <https://bitbucket.org/dfee/>`_)
+
0.15.10 (2017-06-23):
- top level PreservedScalarString not indented if not explicitly asked to
- remove Makefile (not very useful anyway)
diff --git a/_test/test_anchor.py b/_test/test_anchor.py
index fc4a881..47c9f94 100644
--- a/_test/test_anchor.py
+++ b/_test/test_anchor.py
@@ -244,6 +244,29 @@ class TestAnchorsAliases:
with pytest.warns(ReusedAnchorWarning):
data = round_trip(yaml) # NOQA
+ def test_issue_130(self):
+ # issue 130 reported by Devid Fee
+ import ruamel.yaml
+ ys = dedent("""\
+ components:
+ server: &server_component
+ type: spark.server:ServerComponent
+ host: 0.0.0.0
+ port: 8000
+ shell: &shell_component
+ type: spark.shell:ShellComponent
+
+ services:
+ server: &server_service
+ <<: *server_component
+ shell: &shell_service
+ <<: *shell_component
+ components:
+ server: {<<: *server_service}
+ """)
+ data = ruamel.yaml.safe_load(ys)
+ assert data['services']['shell']['components']['server']['port'] == 8000
+
class TestMergeKeysValues:
diff --git a/constructor.py b/constructor.py
index a37f794..19fe5ca 100644
--- a/constructor.py
+++ b/constructor.py
@@ -342,7 +342,7 @@ class SafeConstructor(BaseConstructor):
index += 1
if bool(merge):
node.merge = merge # separate merge keys to be able to update without duplicate
- # node.value = merge + node.value
+ node.value = merge + node.value
def construct_mapping(self, node, deep=False):
# type: (Any, bool) -> Any
diff --git a/setup.py b/setup.py
index dbb552e..334af24 100644
--- a/setup.py
+++ b/setup.py
@@ -237,7 +237,8 @@ class MySdist(_sdist):
def initialize_options(self):
_sdist.initialize_options(self)
# because of unicode_literals
- self.formats = [b'bztar'] if sys.version_info < (3, ) else ['bztar']
+ fmt = getattr(self, 'tarfmt', None)
+ self.formats = fmt if fmt else [b'bztar'] if sys.version_info < (3, ) else ['bztar']
dist_base = os.environ.get('PYDISTBASE')
fpn = getattr(getattr(self, 'nsp', self), 'full_package_name', None)
if fpn and dist_base:
@@ -828,6 +829,8 @@ def main():
nsp.check()
nsp.create_dirs()
MySdist.nsp = nsp
+ if pkg_data.get('tarfmt'):
+ MySdist.tarfmt = pkg_data.get('tarfmt')
MyBdistWheel.nsp = nsp
kw = dict(
name=nsp.full_package_name,