From 38925ca3d08ba206af27c85539146cb43ced3940 Mon Sep 17 00:00:00 2001 From: Francis Charette Migneault Date: Mon, 23 Jan 2023 14:30:26 -0500 Subject: [PATCH] fix dynamic regex definitions for schema validation with colander>=2 that modifies URL_REGEX pattern (relates to https://github.com/Pylons/colander/pull/352) --- CHANGES.rst | 3 ++- weaver/wps_restapi/colander_extras.py | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 56122c44a..57a982f80 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -16,7 +16,8 @@ Changes: Fixes: ------ -- No change. +- Fix dynamic regex definitions for schema validation with ``colander>=2`` that modifies ``URL_REGEX`` pattern + (relates to `Pylons/colander#352 `_). .. _changes_4.28.0: diff --git a/weaver/wps_restapi/colander_extras.py b/weaver/wps_restapi/colander_extras.py index 1d6cec684..042ec77fa 100644 --- a/weaver/wps_restapi/colander_extras.py +++ b/weaver/wps_restapi/colander_extras.py @@ -354,7 +354,9 @@ def __init__(self, schemes=None, path_pattern=None, msg=None, flags=re.IGNORECAS if path_pattern: if isinstance(path_pattern, RegexPattern): path_pattern = path_pattern.pattern - regex = f"{regex[:-1] + path_pattern}$" + # depending colander version: $ end-of-line, \Z end-of-string (before \n if any), or \z end-of-string (\0) + index = -2 if regex.lower().endswith(r"\z") else -1 if regex.endswith("$") else 0 + regex = rf"{regex[:index] + path_pattern}\Z" super(SchemeURL, self).__init__(regex, msg=msg, flags=flags)