B
    a]                 @   s0  d dl Zd dl mZ d dlZd dlZd dlmZ d dlZd dl	Z	d dl
Zd dlZd dlZd dlZd dlZddgdfddZG d	d
 d
eZG dd deZdd Zedkr,d dlZd dlZd dlmZ ejdejd ee edZeeZejddZ e!e"  ej#$dd de  e!e"  dS )    N)ServerProxy)
MethodTypeynTc             C   s6   |rt t| }x ||kr0t tdt| }qW |S )Nz%Answer not understood (%s) try again:)evalinputstr)ZquestionanswersZbipanswer r   +/home/dice/stardice/scheduler/subsystems.pyask   s
    
r   c               @   s   e Zd Zdd ZdS )ProxyWithCompletionc             C   s
   | j  S )N)systemZlistMethods)selfr   r   r   __dir__   s    zProxyWithCompletion.__dir__N)__name__
__module____qualname__r   r   r   r   r   r      s   r   c               @   sp   e Zd Zg Zdd Zdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )	Subsystemc                s    fdd}t || S )Nc                sd   t | d  }|dkr|S ||kr`td| j t|f  t | jd  | t| d  | |S )N_ZIDLEz%s: Setting %s to %sZset_)getattrloggingdebugnamer   serversetattr)r   valuev)r   r   r   func"   s    z>Subsystem._default_setter_for_tracked_properties.<locals>.func)typesr   )r   r   r   r   )r   r   &_default_setter_for_tracked_properties!   s    	z0Subsystem._default_setter_for_tracked_propertiesc             C   sL   t ||j| _| jr$t| jdd| _t ||| _|| _i | _|| _|| _	d S )NT)
allow_none)
r   addrZ_addrr   r   configr   Z_interactive	schedulerZ_entire_config)r   r$   r   r%   r   r   r   __init__.   s    zSubsystem.__init__c             C   sr   |    x\| jD ]R}d| }|t| kr<t| |t| j| d| }|t| krt| || | qW |   d S )Nzget_%szset_%s)_configtracked_propertiesdirr   r   r   r!   sync_tracked_properties)r   pZgetter_nameZsetter_namer   r   r   	configure9   s    zSubsystem.configurec             C   s2   x,| j D ]"}t| d| t| jd|   qW d S )Nz_%szget_%s)r(   r   r   r   )r   r+   r   r   r   r*   D   s    z!Subsystem.sync_tracked_propertiesc             C   sV   |  |}xF|D ]>}|| jkr6t| d| ||  q|j||| i| jd qW d S )Nzset_%s)prefix)_process_paramsr(   r   appendr   )r   exposurefitsbuilderresr+   r   r   r   before_exposureH   s
    


zSubsystem.before_exposurec             C   s   d S )Nr   )r   r0   r1   r   r   r   r0   P   s    zSubsystem.exposurec             C   s   |j |  | jd d S )N)r-   )r/   statusr   )r   r0   r1   r   r   r   after_exposureS   s    zSubsystem.after_exposurec             C   s6   |   }d}x$|D ]}|d|t|| f 7 }qW |S )N z%s: %s
)r4   r   )r   r4   stkr   r   r   stateV   s
    
zSubsystem.statec             C   s8   i }x | j D ]}t| d| ||< qW ||   |S )Nz_%s)r(   r   update_extended_status)r   statr+   r   r   r   r4   ]   s
    zSubsystem.statusc             C   s   i S )Nr   )r   r   r   r   r;   d   s    zSubsystem._extended_statusc             C   s   d S )Nr   )r   r   r   r   r'   g   s    zSubsystem._configc             C   sh   i }x^| j D ]T}d| j|f }y|| ||< W q tk
r^   td|t| j | f  Y qX qW |S )Nz%s.%sz=parameter %s not found in config file, using default value %s)expected_paramsr   KeyErrorr   warningr   )r   r0   r2   r+   r   r   r   r   r.   j   s    &zSubsystem._process_paramsN)r   r   r   r(   r!   r&   r,   r*   r3   r0   r5   r9   r4   r;   r'   r.   r   r   r   r   r      s   r   c             C   sP   dt | d jd  }tjt|| d jtjd}|| d | d< | d= | S )Nz<%dHZ
binarydata   )dtypeshapepixels)lendatanparraystructunpackuint16reshape)IfmtrC   r   r   r   decodet   s
    rN   __main__)configfilesz%(asctime)s %(message)s)formatlevelzdummy_scheduler.cfgz./)
output_dirBi)ZFILTERZFOCUSPOS)%Zxmlrpc.clientZxmlrpcr   r   timer    r   numpyrF   rH   Zstardice.qlastardice
subprocessospdbr   r   objectr   rN   r   r%   r1   rP   basicConfigDEBUGreloadConfigr$   	SchedulersFitsBuilderfbprintr9   focusr3   r   r   r   r   <module>   s4   	V


