コード例 #1
0
ファイル: browser.py プロジェクト: mattboehm/otree-core
def initialize_bots(*, session_pk, num_players_total):
    if otree.common_internal.USE_REDIS:
        initialize_bots_redis(redis_conn=get_redis_conn(),
                              session_pk=session_pk,
                              num_players_total=num_players_total)
    else:
        initialize_bots_in_process(session_pk=session_pk)
コード例 #2
0
 def handle(self, *args, **options):
     redis_conn = get_redis_conn()
     otree.bots.browser.redis_flush_bots(redis_conn)
     worker = otree.bots.browser.Worker(redis_conn)
     session = create_session('misc_3p', num_participants=30)
     #participant_codes = session.participant_set.values_list('code', flat=True)
     worker.initialize_session(session_pk=session.pk)
コード例 #3
0
 def handle(self, *args, **options):
     redis_conn = get_redis_conn()
     otree.bots.browser.redis_flush_bots(redis_conn)
     worker = otree.bots.browser.Worker(redis_conn)
     session = create_session('misc_3p', num_participants=30)
     #participant_codes = session.participant_set.values_list('code', flat=True)
     worker.initialize_session(session_pk=session.pk)
コード例 #4
0
def initialize_bot(participant_code):
    if otree.common_internal.USE_REDIS:
        initialize_bot_redis(
            redis_conn=get_redis_conn(),
            participant_code=participant_code,
        )
    else:
        initialize_bot_in_process(participant_code)
コード例 #5
0
ファイル: browser.py プロジェクト: mattboehm/otree-core
def initialize_bots(*, session_pk, num_players_total):
    if otree.common_internal.USE_REDIS:
        initialize_bots_redis(
            redis_conn=get_redis_conn(),
            session_pk=session_pk,
            num_players_total=num_players_total
        )
    else:
        initialize_bots_in_process(session_pk=session_pk)
コード例 #6
0
ファイル: concrete.py プロジェクト: goakichang/otree-core
    def dispatch(self, request, *args, **kwargs):
        get_redis_conn()
        session_info = BrowserBotsLauncherSessionCode.objects.first()
        if session_info:
            session = Session.objects.get(code=session_info.code)
            with global_lock():
                participant = session.get_participants().filter(visited=False).order_by("start_order").first()
                if not participant:
                    return HttpResponseNotFound(NO_PARTICIPANTS_LEFT_MSG)

                # 2014-10-17: needs to be here even if it's also set in
                # the next view to prevent race conditions
                participant.visited = True
                participant.save()

            return HttpResponseRedirect(participant._start_url())
        else:
            ctx = {"view": self, "title_text": "Please wait", "body_text": "Waiting for browser bots session to begin"}
            return render_to_response("otree/WaitPage.html", ctx)
コード例 #7
0
ファイル: browser.py プロジェクト: shaf91/otree-core
def wrap_method_call(method_name: str, method_kwargs):
    if otree.common_internal.USE_REDIS:
        redis_conn = get_redis_conn()
        response_key = redis_enqueue_method_call(redis_conn=redis_conn,
                                                 method_name=method_name,
                                                 method_kwargs=method_kwargs)
        return redis_get_method_retval(redis_conn=redis_conn,
                                       response_key=response_key)
    else:
        method = getattr(browser_bot_worker, method_name)
        return method(**method_kwargs)
コード例 #8
0
def initialize_bots(*, session: Session, case_number):

    if otree.common_internal.USE_REDIS:
        initialize_bots_redis(
            redis_conn=get_redis_conn(),
            session_pk=session.pk,
            case_number=case_number,
        )
    else:
        initialize_bots_in_process(session_pk=session.pk,
                                   case_number=case_number)
コード例 #9
0
ファイル: browser.py プロジェクト: oTree-org/otree-core
def wrap_method_call(method_name: str, method_kwargs):
    if otree.common_internal.USE_REDIS:
        redis_conn = get_redis_conn()
        response_key = redis_enqueue_method_call(
            redis_conn=redis_conn, method_name=method_name,
            method_kwargs=method_kwargs)
        return redis_get_method_retval(
            redis_conn=redis_conn, response_key=response_key)
    else:
        method = getattr(browser_bot_worker, method_name)
        return method(**method_kwargs)
コード例 #10
0
ファイル: participant.py プロジェクト: dcthomas4679/oTree-1
    def dispatch(self, request):
        get_redis_conn() # why do we do this?
        session_info = BrowserBotsLauncherSessionCode.objects.first()
        if session_info:
            session = Session.objects.get(code=session_info.code)
            with get_redis_lock(name='start_links') or start_link_thread_lock:
                participant = session.participant_set.filter(
                    visited=False).order_by('id').first()
                if not participant:
                    return HttpResponseNotFound(NO_PARTICIPANTS_LEFT_MSG)

                # 2014-10-17: needs to be here even if it's also set in
                # the next view to prevent race conditions
                participant.visited = True
                participant.save()

            return HttpResponseRedirect(participant._start_url())
        else:
            ctx = {'view': self, 'title_text': 'Please wait',
                   'body_text': 'Waiting for browser bots session to begin'}
            return render(request, "otree/WaitPage.html", ctx)
コード例 #11
0
ファイル: participant.py プロジェクト: oTree-org/otree-core
    def dispatch(self, request, *args, **kwargs):
        get_redis_conn()
        session_info = BrowserBotsLauncherSessionCode.objects.first()
        if session_info:
            session = Session.objects.get(code=session_info.code)
            with get_redis_lock(name='start_links') or start_link_thread_lock:
                participant = session.participant_set.filter(
                    visited=False).order_by('id').first()
                if not participant:
                    return HttpResponseNotFound(NO_PARTICIPANTS_LEFT_MSG)

                # 2014-10-17: needs to be here even if it's also set in
                # the next view to prevent race conditions
                participant.visited = True
                participant.save()

            return HttpResponseRedirect(participant._start_url())
        else:
            ctx = {'view': self, 'title_text': 'Please wait',
                   'body_text': 'Waiting for browser bots session to begin'}
            return render_to_response("otree/WaitPage.html", ctx)
コード例 #12
0
ファイル: concrete.py プロジェクト: dcthomas4679/oTree-1
    def dispatch(self, request, *args, **kwargs):
        get_redis_conn()
        session_info = BrowserBotsLauncherSessionCode.objects.first()
        if session_info:
            session = Session.objects.get(code=session_info.code)
            with global_lock():
                participant = session.get_participants().filter(
                    visited=False).order_by('start_order').first()
                if not participant:
                    return HttpResponseNotFound(NO_PARTICIPANTS_LEFT_MSG)

                # 2014-10-17: needs to be here even if it's also set in
                # the next view to prevent race conditions
                participant.visited = True
                participant.save()

            return HttpResponseRedirect(participant._start_url())
        else:
            ctx = {
                'view': self,
                'title_text': 'Please wait',
                'body_text': 'Waiting for browser bots session to begin'
            }
            return render_to_response("otree/WaitPage.html", ctx)
コード例 #13
0
ファイル: botworker.py プロジェクト: goakichang/otree-core
 def handle(self, *args, **options):
     redis_conn = get_redis_conn()
     otree.bots.browser.redis_flush_bots(redis_conn)
     worker = otree.bots.browser.Worker(redis_conn)
     worker.redis_listen()
コード例 #14
0
 def __init__(self, view, redis_conn=None):
     self.view = view
     self.participant = view.participant
     self.session = self.view.session
     self.redis_conn = redis_conn or get_redis_conn()
     self.path = self.view.request.path
コード例 #15
0
ファイル: browser.py プロジェクト: ross2604/otree-core
 def __init__(self, view, redis_conn=None):
     self.view = view
     self.participant = view.participant
     self.session = self.view.session
     self.redis_conn = redis_conn or get_redis_conn()
     self.path = self.view.request.path
コード例 #16
0
 def handle(self, *args, **options):
     redis_conn = get_redis_conn()
     otree.bots.browser.redis_flush_bots(redis_conn)
     worker = otree.bots.browser.Worker(redis_conn)
     worker.redis_listen()
コード例 #17
0
ファイル: asgi.py プロジェクト: darijahalatova/HerokudOTree
import os
import channels.asgi
from . import configure_settings

configure_settings()
channel_layer = channels.asgi.get_channel_layer()

from otree.common_internal import (
    release_any_stale_locks, get_redis_conn  # noqa
)

# clear any tasks in Huey DB, so they don't pile up over time,
# especially if you run the server without the timeoutworker to consume the
# tasks.
# ideally we would only schedule a task in Huey if timeoutworker is running,
# so that we don't pile up messages that never get consumed, but I don't know
# how and when to check if Huey is running, in a performant way.
# this code is also in timeoutworker.
from huey.contrib.djhuey import HUEY  # noqa
HUEY.flush()

from otree.bots.browser import redis_flush_bots  # noqa
redis_flush_bots(get_redis_conn())

# needs to happen after Django setup
release_any_stale_locks()