From 325d9d4f536aad2f1ee2f0cd74d61791b3561fac Mon Sep 17 00:00:00 2001 From: Anthon van der Neut Date: Sat, 24 Jun 2017 07:18:46 +0200 Subject: fix issue #130: regression in nested merges --- CHANGES | 4 ++++ README.rst | 4 ++++ _test/test_anchor.py | 23 +++++++++++++++++++++++ constructor.py | 2 +- setup.py | 5 ++++- 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 `_) + [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 `_) + 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, -- cgit v1.2.1