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: ) -> Stats:
if callable(func): if callable(func):
fr = 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__ fname = func.__name__
else: else:
# meh. means it's just a list.. not sure how to generate a name then # 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 Helper 'module' for test_guess_stats
""" """
from contextlib import contextmanager
from dataclasses import dataclass from dataclasses import dataclass
from datetime import datetime, timedelta from datetime import datetime, timedelta
from pathlib import Path from pathlib import Path
from typing import Iterable, Sequence from typing import Iterable, Sequence, Iterator
@dataclass @dataclass
@ -28,3 +28,9 @@ def iter_data() -> Iterable[Item]:
for path in inputs(): for path in inputs():
for i in range(3): for i in range(3):
yield Item(id=str(i), dt=dt + timedelta(days=i), source=path) 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'