From c0497034261b8b2c899f9ae26f8ada8ebaf972e8 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Mon, 25 Oct 2021 22:34:56 -0500 Subject: [PATCH 01/15] test multiple re-encryptions --- tests/test_commands_eyaml_rotate_keys.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tests/test_commands_eyaml_rotate_keys.py b/tests/test_commands_eyaml_rotate_keys.py index 372c1f29..f07b21da 100644 --- a/tests/test_commands_eyaml_rotate_keys.py +++ b/tests/test_commands_eyaml_rotate_keys.py @@ -86,12 +86,15 @@ def test_good_multi_replacements(self, script_runner, tmp_path_factory, old_eyam EurCwzBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBAwcy7jvcOGcMfLEtug LEXbgCBkocdckuDe14mVGmUmM++xN34OEVRCeGVWWUnWq1DJ4Q==] - &stringStyle ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAIu44u62q5sVfzC7kytLi2Z/EzH2DKr4vDsoqDBeSZ71aRku/uSrjyiO4lyoq9Kva+eBAyjBay5fnqPVBaU3Rud2pdEoZEoyofi02jn4hxUKpAO1W0AUgsQolGe53qOdM4U8RbwnTR0gr3gp2mCd18pH3SRMP9ryrsBAxGzJ6mR3RgdZnlTlqVGXCeWUeVpbH+lcHw3uvd+o/xkvJ/3ypxz+rWILiAZ3QlCirzn/qb2fHuKf3VBh8RVFuQDaM5voajZlgjD6KzNCsbATOqOA6eJI4j0ngPdDlIjGHAnahuyluQ5f5SIaIjLC+ZeCOfIYni0MQ+BHO0JNbccjq2Unb7TBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCYmAI0Ao3Ok1cSmVw0SgQGgCBK62z1r5RfRjf1xKfqDxTsGUHfsUmM3EjGJfnWzCRvuQ==] - block: *blockStyle - string: *stringStyle + block1: *blockStyle + string1: *stringStyle + duplicates: + block2: *blockStyle + string2: *stringStyle """ simple_file = create_temp_yaml_file(tmp_path_factory, simple_content) anchored_file = create_temp_yaml_file(tmp_path_factory, anchored_content) - + result = script_runner.run( self.command, "--newprivatekey={}".format(new_eyaml_keys[0]), From 6a2124ac08bfa9864cfc4d74a617a2c9ad7b6000 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 11:11:56 -0500 Subject: [PATCH 02/15] Disable pylint C0209 --- .pylintrc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.pylintrc b/.pylintrc index c48f2b40..ded117dc 100644 --- a/.pylintrc +++ b/.pylintrc @@ -67,8 +67,12 @@ confidence= # false-positives. # WWK-2019-05-30: Disable R0801 because similar command-line tools necessarily # share duplicate code. This is by design so each can stand-alone. +# WWK-2021-10-26: Disable C0209 because it is merely a performance-enhancing +# suggestion, not a breaking issue. I will be interested in revisiting +# this later, but not when I have a critical bug that I'm trying to fix. disable=R0401, - R0801 + R0801, + C0209 # Enable the message, report, category or checker with the given id(s). You can # either give multiple identifier separated by comma (,) or put this option From a1ebd32fe2c269d6c3bbb9c1e709ae374b2f9ec1 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 15:02:27 -0500 Subject: [PATCH 03/15] Update test to include dotted keys --- tests/test_commands_eyaml_rotate_keys.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/test_commands_eyaml_rotate_keys.py b/tests/test_commands_eyaml_rotate_keys.py index f07b21da..7cd91c04 100644 --- a/tests/test_commands_eyaml_rotate_keys.py +++ b/tests/test_commands_eyaml_rotate_keys.py @@ -86,11 +86,10 @@ def test_good_multi_replacements(self, script_runner, tmp_path_factory, old_eyam EurCwzBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBAwcy7jvcOGcMfLEtug LEXbgCBkocdckuDe14mVGmUmM++xN34OEVRCeGVWWUnWq1DJ4Q==] - &stringStyle ENC[PKCS7,MIIBiQYJKoZIhvcNAQcDoIIBejCCAXYCAQAxggEhMIIBHQIBADAFMAACAQEwDQYJKoZIhvcNAQEBBQAEggEAIu44u62q5sVfzC7kytLi2Z/EzH2DKr4vDsoqDBeSZ71aRku/uSrjyiO4lyoq9Kva+eBAyjBay5fnqPVBaU3Rud2pdEoZEoyofi02jn4hxUKpAO1W0AUgsQolGe53qOdM4U8RbwnTR0gr3gp2mCd18pH3SRMP9ryrsBAxGzJ6mR3RgdZnlTlqVGXCeWUeVpbH+lcHw3uvd+o/xkvJ/3ypxz+rWILiAZ3QlCirzn/qb2fHuKf3VBh8RVFuQDaM5voajZlgjD6KzNCsbATOqOA6eJI4j0ngPdDlIjGHAnahuyluQ5f5SIaIjLC+ZeCOfIYni0MQ+BHO0JNbccjq2Unb7TBMBgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEqBBCYmAI0Ao3Ok1cSmVw0SgQGgCBK62z1r5RfRjf1xKfqDxTsGUHfsUmM3EjGJfnWzCRvuQ==] - block1: *blockStyle - string1: *stringStyle - duplicates: - block2: *blockStyle - string2: *stringStyle + block: *blockStyle + string: *stringStyle + yet_another: + 'more.complex.child': *blockStyle """ simple_file = create_temp_yaml_file(tmp_path_factory, simple_content) anchored_file = create_temp_yaml_file(tmp_path_factory, anchored_content) From b0024062a3f2af60e2649d84031e91834a825d49 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 15:03:14 -0500 Subject: [PATCH 04/15] Use common code for anchors and paths must exist --- yamlpath/commands/eyaml_rotate_keys.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yamlpath/commands/eyaml_rotate_keys.py b/yamlpath/commands/eyaml_rotate_keys.py index 441ed154..bc75df4a 100644 --- a/yamlpath/commands/eyaml_rotate_keys.py +++ b/yamlpath/commands/eyaml_rotate_keys.py @@ -15,7 +15,7 @@ from ruamel.yaml.scalarstring import FoldedScalarString from yamlpath import __version__ as YAMLPATH_VERSION -from yamlpath.common import Parsers +from yamlpath.common import Anchors, Parsers from yamlpath.eyaml.exceptions import EYAMLCommandException from yamlpath.eyaml import EYAMLProcessor from yamlpath.wrappers import ConsolePrinter @@ -136,14 +136,14 @@ def main(): processor.data = yaml_data for yaml_path in processor.find_eyaml_paths(): # Use ::get_nodes() instead of ::get_eyaml_values() here in order - # to ignore values that have already been decrypted via their + # to ignore values that have already been rotated via their # Anchors. - for node_coordinate in processor.get_nodes(yaml_path): - node = node_coordinate.node + for node_coordinate in processor.get_nodes( + yaml_path, mustexist=True + ): # Ignore values which are Aliases for those already decrypted - anchor_name = ( - node.anchor.value if hasattr(node, "anchor") else None - ) + node = node_coordinate.node + anchor_name = Anchors.get_node_anchor(node) if anchor_name is not None: if anchor_name in seen_anchors: continue From cd209cef6a10d01808d92afa8a8804ac9c4def74 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 15:03:39 -0500 Subject: [PATCH 05/15] Safely construct YAMLPaths while seeking EYAML --- yamlpath/eyaml/eyamlprocessor.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/yamlpath/eyaml/eyamlprocessor.py b/yamlpath/eyaml/eyamlprocessor.py index 0ab827b4..2d7a43da 100644 --- a/yamlpath/eyaml/eyamlprocessor.py +++ b/yamlpath/eyaml/eyamlprocessor.py @@ -12,8 +12,9 @@ from ruamel.yaml.comments import CommentedSeq, CommentedMap from yamlpath import YAMLPath +from yamlpath.common import Anchors from yamlpath.eyaml.enums import EYAMLOutputFormats -from yamlpath.enums import YAMLValueFormats +from yamlpath.enums import YAMLValueFormats, PathSeperators from yamlpath.eyaml.exceptions import EYAMLCommandException from yamlpath.wrappers import ConsolePrinter from yamlpath import Processor @@ -52,7 +53,7 @@ def __init__( # pylint: disable=locally-disabled,too-many-branches def _find_eyaml_paths( - self, data: Any, build_path: str = "" + self, data: Any, build_path: YAMLPath ) -> Generator[YAMLPath, None, None]: """ Find every encrypted value and report each as a YAML Path. @@ -62,7 +63,7 @@ def _find_eyaml_paths( Parameters: 1. data (Any) The parsed YAML data to process - 2. build_path (str) A YAML Path under construction + 2. build_path (YAMLPath) A YAML Path under construction Returns: (Generator[Path, None, None]) each YAML Path entry as they are discovered @@ -70,27 +71,28 @@ def _find_eyaml_paths( Raises: N/A """ if isinstance(data, CommentedSeq): - build_path += "[" for idx, ele in enumerate(data): - if hasattr(ele, "anchor") and ele.anchor.value is not None: - tmp_path = build_path + "&" + ele.anchor.value + "]" + node_anchor = Anchors.get_node_anchor(ele) + if node_anchor is not None: + escaped_section = YAMLPath.escape_path_section( + node_anchor, PathSeperators.DOT) + tmp_path_segment = f"[&{escaped_section}]" else: - tmp_path = build_path + str(idx) + "]" + tmp_path_segment = f"[{idx}]" + tmp_path = build_path + tmp_path_segment if self.is_eyaml_value(ele): - yield YAMLPath(tmp_path) + yield tmp_path else: for subpath in self._find_eyaml_paths(ele, tmp_path): yield subpath elif isinstance(data, CommentedMap): - if build_path: - build_path += "." - for key, val in data.non_merged_items(): - tmp_path = build_path + str(key) + tmp_path = build_path + YAMLPath.escape_path_section( + key, PathSeperators.DOT) if self.is_eyaml_value(val): - yield YAMLPath(tmp_path) + yield tmp_path else: for subpath in self._find_eyaml_paths(val, tmp_path): yield subpath @@ -107,7 +109,7 @@ def find_eyaml_paths(self) -> Generator[YAMLPath, None, None]: Raises: N/A """ # Initiate the scan from the data root - for path in self._find_eyaml_paths(self.data): + for path in self._find_eyaml_paths(self.data, YAMLPath()): yield path def decrypt_eyaml(self, value: str) -> str: From 5ecf1045536cc15330a1d17e6decf4b99f03ca0c Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 15:11:54 -0500 Subject: [PATCH 06/15] Fix R0402 --- yamlpath/types/pathattributes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yamlpath/types/pathattributes.py b/yamlpath/types/pathattributes.py index ff0b0fcc..c2d97e80 100644 --- a/yamlpath/types/pathattributes.py +++ b/yamlpath/types/pathattributes.py @@ -6,7 +6,7 @@ from typing import Union from yamlpath.path import CollectorTerms -import yamlpath.path.searchterms as searchterms +from yamlpath.path import searchterms PathAttributes = Union[str, int, CollectorTerms, searchterms.SearchTerms, None] From 1b1a75d239ac2042560b30fef6500bef92b4e26d Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 15:35:04 -0500 Subject: [PATCH 07/15] Fix W1514, set default file encoding to utf-8 --- setup.py | 2 +- yamlpath/commands/eyaml_rotate_keys.py | 2 +- yamlpath/commands/yaml_merge.py | 2 +- yamlpath/commands/yaml_set.py | 6 +++--- yamlpath/common/parsers.py | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/setup.py b/setup.py index 299774e2..02bd3e48 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ """Build this project.""" from setuptools import find_packages, setup -with open("README.md", "r") as fh: +with open("README.md", "r", encoding="utf-8") as fh: long_description = fh.read() setup( diff --git a/yamlpath/commands/eyaml_rotate_keys.py b/yamlpath/commands/eyaml_rotate_keys.py index bc75df4a..14c8ad9d 100644 --- a/yamlpath/commands/eyaml_rotate_keys.py +++ b/yamlpath/commands/eyaml_rotate_keys.py @@ -190,7 +190,7 @@ def main(): copy2(yaml_file, backup_file) log.verbose("Writing changed data to {}.".format(yaml_file)) - with open(yaml_file, 'w') as yaml_dump: + with open(yaml_file, 'w', encoding='utf-8') as yaml_dump: yaml.dump(yaml_data, yaml_dump) sys.exit(exit_state) diff --git a/yamlpath/commands/yaml_merge.py b/yamlpath/commands/yaml_merge.py index 1c6abf94..f7d9ab85 100644 --- a/yamlpath/commands/yaml_merge.py +++ b/yamlpath/commands/yaml_merge.py @@ -295,7 +295,7 @@ def write_output_document( dumps.append(doc.data) if args.output: - with open(args.output, 'w') as out_fhnd: + with open(args.output, 'w', encoding='utf-8') as out_fhnd: if document_is_json: if len(dumps) > 1: for dump in dumps: diff --git a/yamlpath/commands/yaml_set.py b/yamlpath/commands/yaml_set.py index c1a48016..e4fbf5a2 100644 --- a/yamlpath/commands/yaml_set.py +++ b/yamlpath/commands/yaml_set.py @@ -297,7 +297,7 @@ def validateargs(args, log): def save_to_json_file(args, log, yaml_data): """Save to a JSON file.""" log.verbose("Writing changed data as JSON to {}.".format(args.yaml_file)) - with open(args.yaml_file, 'w') as out_fhnd: + with open(args.yaml_file, 'w', encoding='utf-8') as out_fhnd: json.dump(Parsers.jsonify_yaml_data(yaml_data), out_fhnd) def save_to_yaml_file(args, log, yaml_parser, yaml_data, backup_file): @@ -307,7 +307,7 @@ def save_to_yaml_file(args, log, yaml_parser, yaml_data, backup_file): with open(args.yaml_file, 'rb') as inhnd: copyfileobj(inhnd, tmphnd) - with open(args.yaml_file, 'w') as yaml_dump: + with open(args.yaml_file, 'w', encoding='utf-8') as yaml_dump: try: yaml_parser.dump(yaml_data, yaml_dump) # Tell pycov to ignore this block because it is impossible to @@ -471,7 +471,7 @@ def main(): consumed_stdin = True has_new_value = True elif args.file: - with open(args.file, 'r') as fhnd: + with open(args.file, 'r', encoding='utf-8') as fhnd: new_value = fhnd.read().rstrip() has_new_value = True elif args.null: diff --git a/yamlpath/common/parsers.py b/yamlpath/common/parsers.py index d7924e95..c002c250 100644 --- a/yamlpath/common/parsers.py +++ b/yamlpath/common/parsers.py @@ -119,7 +119,7 @@ def get_yaml_data( if literal: yaml_data = parser.load(source) else: - with open(source, 'r') as fhnd: + with open(source, 'r', encoding='utf-8') as fhnd: yaml_data = parser.load(fhnd) except KeyboardInterrupt: logger.error("Aborting data load due to keyboard interrupt!") @@ -227,7 +227,7 @@ def get_yaml_multidoc_data( for document in parser.load_all(source): yield (document, True) else: - with open(source, 'r') as fhnd: + with open(source, 'r', encoding='utf-8') as fhnd: for document in parser.load_all(fhnd): logger.debug( "Yielding document from {}:" From a8c13e9117cfc499f4f10d08ae61bf929f956695 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 15:53:37 -0500 Subject: [PATCH 08/15] Try Python 3.10 --- .github/workflows/build.yml | 2 +- .github/workflows/python-publish-to-test-pypi.yml | 2 +- setup.py | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ceed8a8b..2f2abdcf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9, 3.10] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/python-publish-to-test-pypi.yml b/.github/workflows/python-publish-to-test-pypi.yml index 5de23892..9c7d121a 100644 --- a/.github/workflows/python-publish-to-test-pypi.yml +++ b/.github/workflows/python-publish-to-test-pypi.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9] + python-version: [3.6, 3.7, 3.8, 3.9, 3.10] steps: - uses: actions/checkout@v2 diff --git a/setup.py b/setup.py index 02bd3e48..f3157420 100644 --- a/setup.py +++ b/setup.py @@ -19,6 +19,7 @@ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Operating System :: OS Independent", "Environment :: Console", "Topic :: Utilities", From 8c886c52eb20f7befa2265827395a60aae671578 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:01:58 -0500 Subject: [PATCH 09/15] Add CHANGES --- CHANGES | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES b/CHANGES index cd138977..c1f627b6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,12 @@ +3.6.2: +Bug Fixes: +* The eyaml-rotate-keys command-line tool would generate a stack-dump when the + key for an encrypted value contained dots. The underlying library for this + tool now safely generates the internal YAMLPaths it uses. + +Enhancements: +* Python 3.10 is now supported. + 3.6.1: Enhancements: * Enable verified support for ruamel.yaml up to version 0.17.10. From 827c3f8e2d9eef70668bd6c16fd6c061537a07ed Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:02:22 -0500 Subject: [PATCH 10/15] Version bump --- yamlpath/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yamlpath/__init__.py b/yamlpath/__init__.py index d01f70b3..cab52f69 100644 --- a/yamlpath/__init__.py +++ b/yamlpath/__init__.py @@ -1,6 +1,6 @@ """Core YAML Path classes.""" # Establish the version number common to all components -__version__ = "3.6.1" +__version__ = "3.6.2" from yamlpath.yamlpath import YAMLPath from yamlpath.processor import Processor From 264f4990c6034a2533c9ea95e8a3653e348792c3 Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:09:38 -0500 Subject: [PATCH 11/15] Python 3.10 requires a string version --- .github/workflows/build.yml | 2 +- .github/workflows/python-publish-to-prod-pypi.yml | 2 +- .github/workflows/python-publish-to-test-pypi.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2f2abdcf..86209d7a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, 3.10] + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/python-publish-to-prod-pypi.yml b/.github/workflows/python-publish-to-prod-pypi.yml index 3cb4dfe7..dfa69766 100644 --- a/.github/workflows/python-publish-to-prod-pypi.yml +++ b/.github/workflows/python-publish-to-prod-pypi.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Python 3.9 uses: actions/setup-python@v2 with: - python-version: 3.9 + python-version: '3.9' - name: Install Build Tools run: | python -m pip install --upgrade pip diff --git a/.github/workflows/python-publish-to-test-pypi.yml b/.github/workflows/python-publish-to-test-pypi.yml index 9c7d121a..2f8d8785 100644 --- a/.github/workflows/python-publish-to-test-pypi.yml +++ b/.github/workflows/python-publish-to-test-pypi.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8, 3.9, 3.10] + python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] steps: - uses: actions/checkout@v2 @@ -60,7 +60,7 @@ jobs: - name: Set up Python 3.9 uses: actions/setup-python@v2 with: - python-version: 3.9 + python-version: '3.9' - name: Install Build Tools run: | python -m pip install --upgrade pip From 051bb318c012e3770b218394ada83ebfd704d4fd Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:12:22 -0500 Subject: [PATCH 12/15] Python 3.10 tests fail; revisit later --- .github/workflows/build.yml | 2 +- .github/workflows/python-publish-to-test-pypi.yml | 2 +- setup.py | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 86209d7a..e789ca1b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + python-version: ['3.6', '3.7', '3.8', '3.9'] steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/python-publish-to-test-pypi.yml b/.github/workflows/python-publish-to-test-pypi.yml index 2f8d8785..1885c5b8 100644 --- a/.github/workflows/python-publish-to-test-pypi.yml +++ b/.github/workflows/python-publish-to-test-pypi.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.6', '3.7', '3.8', '3.9', '3.10'] + python-version: ['3.6', '3.7', '3.8', '3.9'] steps: - uses: actions/checkout@v2 diff --git a/setup.py b/setup.py index f3157420..02bd3e48 100644 --- a/setup.py +++ b/setup.py @@ -19,7 +19,6 @@ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", "Operating System :: OS Independent", "Environment :: Console", "Topic :: Utilities", From f87d6f349e36a8784ffe35f57134634f2340243d Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:20:06 -0500 Subject: [PATCH 13/15] Update Codacy badge; provider URL changed --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eb864c79..06a89f69 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![PyPI version](https://badge.fury.io/py/yamlpath.svg)](https://pypi.org/project/yamlpath/) [![Downloads](https://pepy.tech/badge/yamlpath)](https://pepy.tech/project/yamlpath) [![Coverage Status](https://coveralls.io/repos/github/wwkimball/yamlpath/badge.svg?branch=master)](https://coveralls.io/github/wwkimball/yamlpath?branch=master) -[![Codacy Badge](https://api.codacy.com/project/badge/Grade/6bcc1f2767854390923a8d25a2e4a191)](https://www.codacy.com/manual/wwkimball/yamlpath?utm_source=github.com&utm_medium=referral&utm_content=wwkimball/yamlpath&utm_campaign=Badge_Grade) +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/b146b032a098413cbc2825cdf73fd7b2)](https://www.codacy.com/gh/wwkimball/yamlpath/dashboard?utm_source=github.com&utm_medium=referral&utm_content=wwkimball/yamlpath&utm_campaign=Badge_Grade) Along with providing a [standard for defining YAML Paths](https://github.com/wwkimball/yamlpath/wiki/Segments-of-a-YAML-Path), From 321f536ae6ab8590ca32382310289dca8adea2ce Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:33:21 -0500 Subject: [PATCH 14/15] Support for Python 3.10 will wait for another day --- CHANGES | 3 --- 1 file changed, 3 deletions(-) diff --git a/CHANGES b/CHANGES index c1f627b6..0bd90fd2 100644 --- a/CHANGES +++ b/CHANGES @@ -4,9 +4,6 @@ Bug Fixes: key for an encrypted value contained dots. The underlying library for this tool now safely generates the internal YAMLPaths it uses. -Enhancements: -* Python 3.10 is now supported. - 3.6.1: Enhancements: * Enable verified support for ruamel.yaml up to version 0.17.10. From 98413aec7d6b0ac4bb2e97bdf3dec6344f9bd2ef Mon Sep 17 00:00:00 2001 From: William Kimball <30981667+wwkimball@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:35:49 -0500 Subject: [PATCH 15/15] Mention the fix for #140 --- CHANGES | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES b/CHANGES index 0bd90fd2..60be4e3c 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,8 @@ Bug Fixes: * The eyaml-rotate-keys command-line tool would generate a stack-dump when the key for an encrypted value contained dots. The underlying library for this tool now safely generates the internal YAMLPaths it uses. +* The default encoding when opening files is now set to utf-8 to support + extended character sets on Windows. 3.6.1: Enhancements: