Evaluate skip and skipif marks on item, returning Skip if triggered.
(item: Item)
| 167 | |
| 168 | |
| 169 | def evaluate_skip_marks(item: Item) -> Skip | None: |
| 170 | """Evaluate skip and skipif marks on item, returning Skip if triggered.""" |
| 171 | for mark in item.iter_markers(name="skipif"): |
| 172 | if "condition" not in mark.kwargs: |
| 173 | conditions = mark.args |
| 174 | else: |
| 175 | conditions = (mark.kwargs["condition"],) |
| 176 | |
| 177 | # Unconditional. |
| 178 | if not conditions: |
| 179 | reason = mark.kwargs.get("reason", "") |
| 180 | return Skip(reason) |
| 181 | |
| 182 | # If any of the conditions are true. |
| 183 | for condition in conditions: |
| 184 | result, reason = evaluate_condition(item, mark, condition) |
| 185 | if result: |
| 186 | return Skip(reason) |
| 187 | |
| 188 | for mark in item.iter_markers(name="skip"): |
| 189 | try: |
| 190 | return Skip(*mark.args, **mark.kwargs) |
| 191 | except TypeError as e: |
| 192 | raise TypeError(str(e) + " - maybe you meant pytest.mark.skipif?") from None |
| 193 | |
| 194 | return None |
| 195 | |
| 196 | |
| 197 | @dataclasses.dataclass(frozen=True) |