core/stats: exclude contextmanagers from guess_stats

This commit is contained in:
karlicoss 2023-10-27 21:28:38 +01:00
parent fb2b3e07de
commit 70bf51a125
2 changed files with 12 additions and 2 deletions

View file

@ -409,6 +409,10 @@ def stat(
) -> Stats:
if callable(func):
fr = func()
if hasattr(fr, '__enter__') and hasattr(fr, '__exit__'):
# context managers has Iterable type, but they aren't data providers
# sadly doesn't look like there is a way to tell from typing annotations
return {}
fname = func.__name__
else:
# meh. means it's just a list.. not sure how to generate a name then

View file

@ -1,11 +1,11 @@
"""
Helper 'module' for test_guess_stats
"""
from contextlib import contextmanager
from dataclasses import dataclass
from datetime import datetime, timedelta
from pathlib import Path
from typing import Iterable, Sequence
from typing import Iterable, Sequence, Iterator
@dataclass
@ -28,3 +28,9 @@ def iter_data() -> Iterable[Item]:
for path in inputs():
for i in range(3):
yield Item(id=str(i), dt=dt + timedelta(days=i), source=path)
@contextmanager
def some_contextmanager() -> Iterator[str]:
# this shouldn't end up in guess_stats because context manager is not a data provider
yield 'hello'