import functools import sys # from jaraco.functools 4.1 def identity(x): return x # from jaraco.functools 4.1 def apply(transform): def wrap(func): return functools.wraps(func)(compose(transform, func)) return wrap # from jaraco.functools 4.1 def compose(*funcs): def compose_two(f1, f2): return lambda *args, **kwargs: f1(f2(*args, **kwargs)) return functools.reduce(compose_two, funcs) def replace(pattern): r""" >>> replace(r'foo\z') 'foo\\Z' """ return pattern[:-2] + pattern[-2:].replace(r'\z', r'\Z') legacy_end_marker = apply(replace) if sys.version_info < (3, 14) else identity