From 5d01c8d9c3db28cc2fda7d386e8e2c07e71b3412 Mon Sep 17 00:00:00 2001 From: Tue Herlau <tuhe@dtu.dk> Date: Wed, 25 Oct 2023 18:19:17 +0200 Subject: [PATCH] Updated how the hidden tests are found --- src/unitgrade/utils.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/unitgrade/utils.py b/src/unitgrade/utils.py index 712297a..e106e10 100644 --- a/src/unitgrade/utils.py +++ b/src/unitgrade/utils.py @@ -258,10 +258,26 @@ def methodsWithDecorator(cls, decorator): print(inspect.getsourcelines(f) ) # How to get all hidden questions. """ for maybeDecorated in cls.__dict__.values(): - if hasattr(maybeDecorated, 'decorator'): - if maybeDecorated.decorator == decorator: - print(maybeDecorated) - yield maybeDecorated + from types import FunctionType + + def extract_wrapped(decorated): + if decorated.__closure__ is None: + return decorated + closure = (c.cell_contents for c in decorated.__closure__) + return next((c for c in closure if isinstance(c, FunctionType)), None) + import inspect + if inspect.isfunction(maybeDecorated): + # elif not isinstance(maybeDecorated, func): + f = extract_wrapped(maybeDecorated) + source, position = inspect.getsourcelines(f) + for l in source: + if l.strip().startswith("@hide"): + yield f + + # if hasattr(maybeDecorated, 'decorator'): + # if maybeDecorated.decorator == decorator: + # print(maybeDecorated) + # yield maybeDecorated """ Methods responsible for turning a dictionary into a string that can be pickled or put into a json file. """ -- GitLab