@@ -322,20 +322,26 @@ def platform_boolean_factory(
322322 condition : bool ,
323323 platform : str ,
324324 versionadded : Optional [str ] = None ,
325+ * ,
326+ module : Optional [str ] = None ,
325327 ) -> Tuple [Callable [..., MarkDecorator ], Callable [..., MarkDecorator ]]:
326328 """
327329 Factory function to return decorators such as :func:`~.not_pypy` and :func:`~.only_windows`.
328330
329331 :param condition: Should evaluate to :py:obj:`True` if the test should be skipped.
330332 :param platform:
331333 :param versionadded:
334+ :param module: The module to set the function as belonging to in ``__module__``.
332335
333336 :return: 2-element tuple of ``not_function``, ``only_function``.
334337
335338 .. versionadded: 1.5.0
339+
340+ .. versionchanged: 1.7.1 Added the ``module`` keyword-only argument.
336341 """
337342
338343 default_reason = "{} required on Windows"
344+ module = module or platform_boolean_factory .__module__
339345
340346 def not_function (reason : str = default_reason .format ("Not" )) -> MarkDecorator :
341347 return pytest .mark .skipif (condition = condition , reason = reason )
@@ -355,10 +361,12 @@ def only_function(reason: str = default_reason.format("Only")) -> MarkDecorator:
355361 if versionadded :
356362 docstring += f"\n \n :rtype:\n \n .. versionadded:: { versionadded } "
357363
358- not_function .__name__ = f"not_{ platform .lower ()} "
364+ not_function .__name__ = not_function .__qualname__ = f"not_{ platform .lower ()} "
365+ not_function .__module__ = module
359366 not_function .__doc__ = docstring .format (why = "if" , platform = platform )
360367
361- only_function .__name__ = f"only_{ platform .lower ()} "
368+ only_function .__name__ = only_function .__qualname__ = f"only_{ platform .lower ()} "
369+ only_function .__module__ = module
362370 only_function .__doc__ = docstring .format (why = "unless" , platform = platform )
363371
364372 return not_function , only_function
@@ -405,7 +413,7 @@ def is_docker():
405413not_docker .__doc__ = cast (str , not_docker .__doc__ ).replace ("the current platform is" , "running on" )
406414only_docker .__doc__ = cast (str , only_docker .__doc__ ).replace ("the current platform is" , "running on" )
407415
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" )
409417not_pypy .__doc__ = cast (str , not_pypy .__doc__ ).replace ("current platform" , "current Python implementation" )
410418only_pypy .__doc__ = cast (str , only_pypy .__doc__ ).replace ("current platform" , "current Python implementation" )
411419
0 commit comments