This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author serhiy.storchaka
Recipients davin, pitrou, serhiy.storchaka, sobolevn, vstinner
Date 2021-08-30.13:20:29
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1630329629.44.0.087918553813.issue45042@roundup.psfhosted.org>
In-reply-to
Content
Here is the implementation of the second option:

def requires_hashdigest(digestname, openssl=None, usedforsecurity=True):
    def decorator(func):
        if isinstance(func, type):
            setUpClass = func.__dict__.get('setUpClass')
            if setUpClass is None:
                def setUpClass(cls):
                    super(func, cls).setUpClass()
                setUpClass.__qualname__ = func.__qualname__ + '.setUpClass'
                setUpClass.__module__ = func.__module__
            else:
                setUpClass = setUpClass.__func__
            setUpClass = classmethod(decorator(setUpClass))
            func.setUpClass = setUpClass
            return func
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            try:
                if openssl and _hashlib is not None:
                    _hashlib.new(digestname, usedforsecurity=usedforsecurity)
                else:
                    hashlib.new(digestname, usedforsecurity=usedforsecurity)
            except ValueError:
                raise unittest.SkipTest(
                    f"hash digest '{digestname}' is not available."
                )
            return func(*args, **kwargs)
        return wrapper
    return decorator
History
Date User Action Args
2021-08-30 13:20:29serhiy.storchakasetrecipients: + serhiy.storchaka, pitrou, vstinner, davin, sobolevn
2021-08-30 13:20:29serhiy.storchakasetmessageid: <1630329629.44.0.087918553813.issue45042@roundup.psfhosted.org>
2021-08-30 13:20:29serhiy.storchakalinkissue45042 messages
2021-08-30 13:20:29serhiy.storchakacreate