@@ -322,20 +322,26 @@ def platform_boolean_factory(
322
322
condition : bool ,
323
323
platform : str ,
324
324
versionadded : Optional [str ] = None ,
325
+ * ,
326
+ module : Optional [str ] = None ,
325
327
) -> Tuple [Callable [..., MarkDecorator ], Callable [..., MarkDecorator ]]:
326
328
"""
327
329
Factory function to return decorators such as :func:`~.not_pypy` and :func:`~.only_windows`.
328
330
329
331
:param condition: Should evaluate to :py:obj:`True` if the test should be skipped.
330
332
:param platform:
331
333
:param versionadded:
334
+ :param module: The module to set the function as belonging to in ``__module__``.
332
335
333
336
:return: 2-element tuple of ``not_function``, ``only_function``.
334
337
335
338
.. versionadded: 1.5.0
339
+
340
+ .. versionchanged: 1.7.1 Added the ``module`` keyword-only argument.
336
341
"""
337
342
338
343
default_reason = "{} required on Windows"
344
+ module = module or platform_boolean_factory .__module__
339
345
340
346
def not_function (reason : str = default_reason .format ("Not" )) -> MarkDecorator :
341
347
return pytest .mark .skipif (condition = condition , reason = reason )
@@ -355,10 +361,12 @@ def only_function(reason: str = default_reason.format("Only")) -> MarkDecorator:
355
361
if versionadded :
356
362
docstring += f"\n \n :rtype:\n \n .. versionadded:: { versionadded } "
357
363
358
- not_function .__name__ = f"not_{ platform .lower ()} "
364
+ not_function .__name__ = not_function .__qualname__ = f"not_{ platform .lower ()} "
365
+ not_function .__module__ = module
359
366
not_function .__doc__ = docstring .format (why = "if" , platform = platform )
360
367
361
- only_function .__name__ = f"only_{ platform .lower ()} "
368
+ only_function .__name__ = only_function .__qualname__ = f"only_{ platform .lower ()} "
369
+ only_function .__module__ = module
362
370
only_function .__doc__ = docstring .format (why = "unless" , platform = platform )
363
371
364
372
return not_function , only_function
@@ -405,7 +413,7 @@ def is_docker():
405
413
not_docker .__doc__ = cast (str , not_docker .__doc__ ).replace ("the current platform is" , "running on" )
406
414
only_docker .__doc__ = cast (str , only_docker .__doc__ ).replace ("the current platform is" , "running on" )
407
415
408
- not_pypy , only_pypy = platform_boolean_factory (condition = PYPY , platform = "Docker " , versionadded = "0.9.0" )
416
+ not_pypy , only_pypy = platform_boolean_factory (condition = PYPY , platform = "PyPy " , versionadded = "0.9.0" )
409
417
not_pypy .__doc__ = cast (str , not_pypy .__doc__ ).replace ("current platform" , "current Python implementation" )
410
418
only_pypy .__doc__ = cast (str , only_pypy .__doc__ ).replace ("current platform" , "current Python implementation" )
411
419
0 commit comments