From 77b2966094580c36df6ae03bec834b529271468b Mon Sep 17 00:00:00 2001 From: pkoprda <47797196+pkoprda@users.noreply.github.com> Date: Wed, 5 Feb 2025 02:03:31 +0100 Subject: [PATCH] fix(client): Support playbooks with unicode for Python 3.12+ (#4342) * Card ID: CCT-644 Some Unicode characters, like the zero-width joiner in emojis, were not processed correctly. This update improves Unicode support, mainly aimed for Python 3.12+. Signed-off-by: pkoprda (cherry picked from commit c4467937f01d3db6a856055a084d5cd29efa0673) --- .../ansible/playbook_verifier/serializer.py | 3 + .../client/apps/playbooks/unicode.digest.bin | Bin 32 -> 32 bytes .../apps/playbooks/unicode.serialized.bin | 2 +- .../tests/client/apps/playbooks/unicode.yml | 54 +++++++++++------- .../client/apps/test_playbook_verifier.py | 21 +++++-- 5 files changed, 55 insertions(+), 25 deletions(-) diff --git a/insights/client/apps/ansible/playbook_verifier/serializer.py b/insights/client/apps/ansible/playbook_verifier/serializer.py index 12daafe5a0..9bf8751c71 100644 --- a/insights/client/apps/ansible/playbook_verifier/serializer.py +++ b/insights/client/apps/ansible/playbook_verifier/serializer.py @@ -57,6 +57,9 @@ def _str(cls, value): "\\": "\\\\", "\n": "\\n", "\t": "\\t", + "\u200b": "\\u200b", # Zero-width space + "\u200c": "\\u200c", # Zero-width non-joiner + "\u200d": "\\u200d", # Zero-width joiner } escaped_string = "" for char in value: diff --git a/insights/tests/client/apps/playbooks/unicode.digest.bin b/insights/tests/client/apps/playbooks/unicode.digest.bin index 74969d2570cabb0eb04603dd626b997a0227a4f0..dff74670da20133597198f39a3530419f8e408c1 100644 GIT binary patch literal 32 ocmWG;7W$&g^QTTj`kc&;OIz6Q-ea&h5}a!Ei)mG()_P`B0P5on+W-In literal 32 ocmXp#(rh#@lS4;(!rn&v= (3, 12): - raise pytest.xfail("Known RFE in Unicode serialization.") + if filename == "unicode" and sys.version_info < (3, 7): + raise pytest.skip("Python 3.7 or later is required to test playbooks containing unicode") parent = os.path.dirname(__file__) # type: str with open("{parent}/playbooks/{filename}.yml".format(parent=parent, filename=filename), "r") as f: