Skip to content

Commit fbda956

Browse files
authored
Allow users to use from pytask import mark. (#442)
1 parent 624ecdf commit fbda956

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

Diff for: docs/source/changes.md

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ releases are available on [PyPI](https://pypi.org/project/pytask) and
5656
{func}`pytask.is_task_function`.
5757
- {pull}`438` clarifies some types.
5858
- {pull}`440` refines more types.
59+
- {pull}`442` allows users to import `from pytask import mark` and use `@mark.skip`.
5960

6061
## 0.3.2 - 2023-06-07
6162

Diff for: src/_pytask/collect.py

+7
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from _pytask.console import get_file
2323
from _pytask.console import is_jupyter
2424
from _pytask.exceptions import CollectionError
25+
from _pytask.mark import MarkGenerator
2526
from _pytask.mark_utils import has_mark
2627
from _pytask.node_protocols import PNode
2728
from _pytask.node_protocols import PPathNode
@@ -183,6 +184,12 @@ def pytask_collect_file(
183184

184185
collected_reports = []
185186
for name, obj in inspect.getmembers(mod):
187+
# Skip mark generator since it overrides __getattr__ and seems like any
188+
# object. Happens when people do ``from pytask import mark`` and
189+
# ``@mark.x``.
190+
if isinstance(obj, MarkGenerator):
191+
continue
192+
186193
# Ensures that tasks with this decorator are only collected once.
187194
if has_mark(obj, "task"):
188195
continue

Diff for: src/_pytask/report.py

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ def from_exception(
3131
exc_info: OptionalExceptionInfo,
3232
node: MetaNode | None = None,
3333
) -> CollectionReport:
34-
exc_info = remove_internal_traceback_frames_from_exc_info(exc_info)
3534
return cls(outcome=outcome, node=node, exc_info=exc_info)
3635

3736

Diff for: tests/test_mark.py

+14
Original file line numberDiff line numberDiff line change
@@ -395,3 +395,17 @@ def task_write_text(): ...
395395
check=False,
396396
)
397397
assert b"FutureWarning: '@pytask.mark.task'" in result.stdout
398+
399+
400+
@pytest.mark.end_to_end()
401+
def test_different_mark_import(runner, tmp_path):
402+
source = """
403+
from pytask import mark
404+
405+
@mark.skip
406+
def task_write_text(): ...
407+
"""
408+
tmp_path.joinpath("task_module.py").write_text(textwrap.dedent(source))
409+
result = runner.invoke(cli, [tmp_path.as_posix()])
410+
assert result.exit_code == ExitCode.OK
411+
assert "Skipped" in result.output

0 commit comments

Comments
 (0)