def start_draft( self, users: t.Iterable[AbstractUser], pool_specification: PoolSpecification, infinites: Infinites, draft_format: str, reverse: bool, finished_callback: t.Callable[[Draft], None], ) -> t.Tuple[t.Tuple[AbstractUser, Drafter], ...]: drafters = tuple( ( user, Drafter( user, str(uuid.uuid4()), ), ) for user in users ) drafters_ring = Ring( drafter for _, drafter in drafters ) def _finished_callback(_draft: Draft): self.draft_complete(_draft) finished_callback(_draft) draft = Draft( key = str(uuid.uuid4()), drafters = drafters_ring, pool_specification = pool_specification, infinites = infinites, draft_format = draft_format, finished_callback = _finished_callback, reverse = reverse, ) draft.start() with self._lock: self._drafts.add(draft) for drafter in drafters_ring.all: self._drafters[drafter.key] = draft.get_draft_interface(drafter) return drafters