Open l0b0 opened 3 years ago
I think a PR allowing to use timedelta
in there would be acceptable.
Here's an idea...
marker = item.get_closest_marker(name="timeout")
if marker.args:
# Old marker
if len(marker.args) > 1:
raise RuntimeError("The `timeout` marker only accepts one argument.")
if marker.kwargs:
raise RuntimeError("The `timeout` marker does not accept keyword arguments when arguments are passed.")
timeout = timedelta(seconds=marker.args[0])
elif marker.kwargs:
timeout = timedelta(**marker.kwargs)
else:
raise RuntimeError("The `timeout` marker needs either argument or keyword arguments passed.")
In a statement like
@mark.timeout(50)
there is nothing to say the duration is defined in seconds. This has a few disadvantages:1200
or0.00005
have more cognitive overhead, since converting to the "natural" unit of minutes/microseconds etc isn't always trivial.It would be nice if it instead were self-documenting. Some alternatives:
@mark.timeout(seconds=50)
would make it pretty obvious, and would make it easy to support several units.@mark.timeout(timedelta(minutes=5))
would make it more explicit, while supporting the widest possible range of units at no extra cost.@mark.timeout(seconds=timedelta(minutes=5).total_seconds())
is a clunky workaround.