Skip to content

Commit

Permalink
add show seeds (#87)
Browse files Browse the repository at this point in the history
  • Loading branch information
tsv1 authored Jul 14, 2024
1 parent 892ed81 commit d2d111b
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
7 changes: 5 additions & 2 deletions tests/plugins/seeder/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,14 @@ def make_scenario_result(vscenario: Optional[VirtualScenario] = None) -> Scenari

async def fire_arg_parsed_event(dispatcher: Dispatcher, *,
seed: Optional[str] = None,
fixed_seed: bool = False) -> None:
fixed_seed: bool = Seeder.use_fixed_seed,
show_seeds: bool = Seeder.show_seeds) -> None:
arg_parse_event = ArgParseEvent(ArgumentParser())
await dispatcher.fire(arg_parse_event)

arg_parsed_event = ArgParsedEvent(Namespace(seed=seed, fixed_seed=fixed_seed))
arg_parsed_event = ArgParsedEvent(Namespace(seed=seed,
fixed_seed=fixed_seed,
show_seeds=show_seeds))
await dispatcher.fire(arg_parsed_event)


Expand Down
20 changes: 19 additions & 1 deletion tests/plugins/seeder/test_seeder_plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from vedro.core import Dispatcher
from vedro.core import MonotonicScenarioScheduler as Scheduler
from vedro.core import Report, ScenarioResult
from vedro.events import CleanupEvent, StartupEvent
from vedro.events import CleanupEvent, ScenarioRunEvent, StartupEvent
from vedro.plugins.seeder import Seeder, SeederPlugin, StandardRandomGenerator

from ._utils import (
Expand Down Expand Up @@ -278,3 +278,21 @@ async def test_dont_show_summary(get_scenario_results: Callable[[], List[Scenari

with then:
assert report.summary == []


async def test_show_seeds(*, seeder: SeederPlugin, dispatcher: Dispatcher):
with given:
await fire_arg_parsed_event(dispatcher, seed=SEED_INITIAL, show_seeds=True)

vscenario = make_vscenario("scenario-1.py")
scheduler = Scheduler(scenarios=[vscenario])
await fire_startup_event(dispatcher, scheduler)

scenario_result = ScenarioResult(vscenario)
event = ScenarioRunEvent(scenario_result)

with when:
await dispatcher.fire(event)

with then:
assert scenario_result.extra_details == ["seed: 75fc9f22..3b0238c4"]
15 changes: 15 additions & 0 deletions vedro/plugins/seeder/_seeder.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ def __init__(self, config: Type["Seeder"], *, random: RandomGenerator = _random)
super().__init__(config)
self._random = random
self._use_fixed_seed = config.use_fixed_seed
self._show_seeds = config.show_seeds
self._initial_seed: Union[str, None] = None
self._history: Dict[str, int] = {}

Expand All @@ -37,9 +38,16 @@ def on_arg_parse(self, event: ArgParseEvent) -> None:
default=self._use_fixed_seed,
help=help_msg)

help_msg = "Show concrete seeds for each scenario run"
event.arg_parser.add_argument("--show-seeds",
action="store_true",
default=self._show_seeds,
help=help_msg)

def on_arg_parsed(self, event: ArgParsedEvent) -> None:
self._initial_seed = event.args.seed or self._gen_initial_seed()
self._use_fixed_seed = event.args.fixed_seed
self._show_seeds = event.args.show_seeds

self._random.set_seed(self._initial_seed)

Expand All @@ -53,6 +61,10 @@ def on_scenario_run(self, event: ScenarioRunEvent) -> None:
seed = self._create_seed(self._initial_seed, unique_id, index)
self._random.set_seed(seed)

if self._show_seeds:
seed_repr = self._get_seed_repr(seed)
event.scenario_result.add_extra_details(f"seed: {seed_repr[:8]}..{seed_repr[-8:]}")

def on_cleanup(self, event: CleanupEvent) -> None:
if (event.report.passed + event.report.failed) > 0:
assert self._initial_seed is not None # for type checker
Expand All @@ -79,3 +91,6 @@ class Seeder(PluginConfig):

# Use the same seed when a scenario is run multiple times in the same execution
use_fixed_seed: bool = False

# Show concrete seeds for each scenario run
show_seeds: bool = False

0 comments on commit d2d111b

Please sign in to comment.