o
    [hN                     @   s~   d dl Zd dlmZ d dlmZmZmZ d dl	m
Z
 d dlZd dlmZ eeZdd ZG dd	 d	eZd
d Zdd ZdS )    N)utils)Participant
BasePlayer	BaseGroup)get_page_lookup)NoResultFoundc              	      s  zt j| d}W n ty   td|   Y d S w t|j|j}|j}t	j
|}|j}||jkrFtd|  d|j d| d d S |jj|j|d}|j}	|j}
t|
||}|s_d S t|tsjd}t||j}d	d
 |j|	dt |jt jD }d|v rt|dkrtdn|D ]}||vrdt| }t|qi }| D ]\}}|||d}|d ur|||< qt|j|j|I d H  d S )N)codezParticipant not found: zIgnoring liveSend message from z because they are on page z, not .)round_numberparticipantzlive method must return a dictc                 S   s   i | ]	}|d  |d qS )r       ).0dr   r   q/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/otree/live.py
<dictcomp>6   s    z)live_payload_function.<locals>.<dictcomp>)groupr   r   zMIf dict returned by live_method has key 0, it must not contain any other keyszAlive_method has invalid return value. No player with id_in_group=) r   Zobjects_getr   loggerwarningr   Z_session_codeZ_index_in_pagesapp_nameotreecommonZget_models_moduleZ
page_class__name__Playerr
   r   live_methodcall_live_method_compat
isinstancedictLiveMethodBadReturnValueZobjects_filterjoinZwith_entitiesZid_in_groupr   lenrepritemsget_live_send_back)Zparticipant_codeZ	page_namepayloadr   lookupr   Zmodels_moduleZ	PageClassplayerr   r   retvalmsgr   Zpcodes_dictpidpcode_retvalpcoder   r   r   live_payload_function   sr   




r-   c                   @   s   e Zd ZdS )r   N)r   
__module____qualname__r   r   r   r   r   S   s    r   c                    s:   |  D ]\}}t| ||}tj||dI dH  qdS )z%separate function for easier patching)r   dataN)r"   channel_utilsZ
live_groupZ
group_send)Zsession_codeZ
page_indexr+   r,   r(   
group_namer   r   r   r$   W   s   r$   c                 C   s    t | tr|| |S | ||S )N)r   strZcall_user_defined)r   r'   r%   r   r   r   r   a   s   

r   )Zotree.commonr   Zotree.channelsr   r1   Zotree.modelsr   r   r   Zotree.lookupr   loggingZotree.databaser   	getLoggerr   r   r-   	Exceptionr   r$   r   r   r   r   r   <module>   s    
H
