view test/pytest_patcher.py @ 7812:ecc34b7917e2

chore(refactor): multiple changes/cleanups Simplify 'for x in [list val]; alist.append(x)' to 'alist = list([list val])'. Easier to read as copy of list. Also twice as fast although speed not an issue. Remove unneeded list() wrappers. Replace set(list comprehension) with set comprehension. Also add trailing ,'s to last element in tuples/lists. Add some noqa items for acceptable operations in context. Switch " ... \" ...\" ..." to: ' ... " ... " ...' to remove need to escape internal '"'. Change 'not x in y' to 'x not in y'.
author John Rouillard <rouilj@ieee.org>
date Sat, 16 Mar 2024 21:08:16 -0400
parents 1c94afabb2cb
children
line wrap: on
line source

"""
The following code was taken from:

    https://github.com/pytest-dev/pytest/issues/568#issuecomment-216569420

to resolve a bug with using pytest.mark.skip(). Once the bug is resolved in
pytest this file can be removed along with all the wrapper mark_class()
references in the other test files.
"""
import types


def mark_class(marker):
    '''Workaround for https://github.com/pytest-dev/pytest/issues/568'''
    def copy_func(f):
        try:
            return types.FunctionType(f.__code__, f.__globals__,
                                      name=f.__name__, argdefs=f.__defaults__,
                                      closure=f.__closure__)
        except AttributeError:
            return types.FunctionType(f.func_code, f.func_globals,
                                      name=f.func_name,
                                      argdefs=f.func_defaults,
                                      closure=f.func_closure)

    def mark(cls):
        if isinstance(cls, types.FunctionType):
            return marker(copy_func(cls))

        for method in dir(cls):
            if method.startswith('test'):
                f = copy_func(getattr(cls, method))
                setattr(cls, method, marker(f))
        return cls
    return mark

Roundup Issue Tracker: http://roundup-tracker.org/