Пример #1
0
    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