o
    [h                     @   s   U d dl Z d dlmZ d dlmZ d dlmZ d dlmZ ddl	m
Z
mZ ddlmZ d dlm  mZ d	Ze d
ZG dd deZdZG dd dZdZeed< dd ZdefddZdefddZdd Z dd Z!dS )    N)rng)OrderedDict)Dict)Session   )ParticipantBot
Submission)	make_botsP   zotree.test.browser_botsc                   @   s   e Zd ZdS )BadRequestErrorN)__name__
__module____qualname__ r   r   y/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/otree/bots/browser.pyr      s    r   zBot for Participant {participant_code} not loaded. This can happen for several reasons: (1) You restarted the server after creating the session (2) The bots expired (the server stores bots for only the most recent {prune_limit} sessions).c                   @   sP   e Zd Zdd Zdd Zdd Zdd Zd	efd
dZd	e	fddZ
dd ZdS )	BotWorkerc                 C   s   t  | _i | _i | _d S N)r   participants_by_sessionbrowser_botsqueued_post_data)selfr   r   r   __init__'   s   
zBotWorker.__init__c           	      C   s   |    g | j|< tj|d}|d u r)ddlm} ||j}| }t	t
|}t||dd}|D ]}| j| |j || j|j< q2d S )N)idr   )SessionConfigT)
session_pkcase_numberZuse_browser_bots)pruner   r   Zobjects_getZotree.sessionr   configZget_num_bot_casesr   choiceranger	   appendparticipant_coder   )	r   r   r   sessionr   r   Z	num_casesZbotsbotr   r   r   initialize_session,   s   

zBotWorker.initialize_sessionc                 C   s@   t | jtkr| jjdd\}}|D ]}| j|d qdS dS )zto avoid memory leaksF)lastN)lenr   SESSIONS_PRUNE_LIMITpopitemr   pop)r   _Zp_codesr!   r   r   r   r   @   s   zBotWorker.prunec                 C   s2   z| j | W S  ty   tj|td}t|w )N)r!   Zprune_limit)r   KeyError PARTICIPANT_NOT_IN_BOTWORKER_MSGformatr'   r   )r   r!   msgr   r   r   get_botG   s   zBotWorker.get_botreturnc                 C   sD   | j }||v r	dS | |}z	| ||< W dS  ty!   Y dS w )NTF)r   r/   Zget_next_submitStopIteration)r   r!   Zqpdr#   r   r   r   enqueue_next_post_dataP   s   
z BotWorker.enqueue_next_post_datac                 C   s   | j |}|jS r   )r   r)   Z	post_data)r   r!   Z
submissionr   r   r   pop_enqueued_post_datad   s   z BotWorker.pop_enqueued_post_datac                 C   s   |  |}||_||_d S r   )r/   pathhtml)r   r!   request_pathr5   r#   r   r   r   set_attributesj   s   

zBotWorker.set_attributesN)r   r   r   r   r$   r   r/   boolr2   r   r3   r7   r   r   r   r   r   &   s    	r   browser_bot_workerc                  K   s   t jdi |  d S Nr   )r9   r7   kwargsr   r   r   r7   u   s   r7   r0   c                  K      t jdi | S r:   )r9   r2   r;   r   r   r   r2   y      r2   c                  K   r=   r:   )r9   r3   r;   r   r   r   r3   }   r>   r3   c                  K   r=   r:   )r9   r$   r;   r   r   r   r$      r>   r$   c                 C   s"   t | }t j|t|dd d S )N)r!   )groupdata)channel_utilsZbrowser_bots_launcher_groupZsync_group_senddict)Zsession_coder!   
group_namer   r   r   send_completion_message   s   


rD   )"loggingZotree.commonr   collectionsr   typingr   Zotree.modelsr   r#   r   r   runnerr	   Zotree.channels.utilsZchannelsutilsrA   r'   	getLoggerlogger	Exceptionr   r,   r   r9   __annotations__r7   r8   r2   rB   r3   r$   rD   r   r   r   r   <module>   s(   
 


L