U
    —âñjØ.  ã                   @   sz   d dl T ddlmZ ddlmZ dd„ Zddd	„Zddd„Zdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zddd„ZdS )é   )Ú*é    )Údatetime)Útqdmc                 C   s6   t | ƒtkr| dkrdS | S nt | ƒtkr.| S dS dS )u>  ! Realiza la verificaciÃ³n del tipo de dato resultante para la estructura de posicion del documento transformado. 
    @param value Valor de la estructura de validaciÃ³n que se busca verificar. 
    @return El valor validado. En el caso de que la validaciÃ³n no pueda ser realizada, retorna el valor por defecto. 
    Ú-N)ÚtypeÚstrÚint)Úvalue© r   úƒ/var/www/itgmanager/itgmanager/Analytic/scapp_database/refactorization/timeseries_transformation_scripts/TransformationFunctions.pyÚcheck_position_values   s    r   Nc                 C   s8   |  ¡ }|}| |kr(||  dkr(||  }|r4||ƒ}|S )uå  ! Revisa si el valor pasado como llave existe en el diccionario, en caso contrario, retorna valor por defecto.
    @param key Llave para obtener el valor desde <data>
    @param data La estructura que se busca verificar.
    @param Valor por defecto para <data[key]> en caso de no estar presente. 
    @param transformator Permite realizar la transformaciÃ³n del valor a ser retornado, mediante una funciÃ³n lambda. 
    @return Retorna el valor validado frente al <default_value>
    N)Úkeys)ÚkeyÚdataÚdefault_valueZtransformatorZ	data_keysr
   r   r   r   Úcheck_key_against_data!   s    r   ú%Y-%m-%d %H:%M:%Sc                 C   s   t  | |¡}|S )u0  ! Realiza la conversiÃ³n de un string con representaciÃ³n de fecha-hora, en su representaciÃ³n de objeto fecha.
    @param date El string a convertir
    @param formater El string que contiene el formato de fecha-hora a utilizar en la conversiÃ³n. 
    @return El objeto fecha (datetime) resultante.
    )r   Ústrptime)ÚdateZformaterZtimestamp_objr   r   r   Úconvert_data_iso5   s    r   c                 C   s
   | |dœS )u  ! Retorna un diccionario con el formato de metadata para la colecciÃ³n transformada.
    @param day String con la representaciÃ³n de la fecha en formato YYYY-mm-dd.
    @param cage String con el nombre de la jaula. 
    @return Retorna diccionario con la metadata.

    )ÚDiaZJaular   )ÚdayZcager   r   r   Úparse_metadata>   s    r   c                 C   s2   | d | d | d ddœ}t d| dƒ}||d< |S )u‹  ! Convierte la informaciÃ³n de la jaula proveniente del documento de la colecciÃ³n original, al formato de la estructura
    de 'Detecciones' en la colecciÃ³n transformada. 
    @param data InformaciÃ³n de la entrada asociada a la jaula, proveniente de la colecciÃ³n original. 
    @return Retorna un diccionario con la estructura esperada para 'Detecciones' en la colecciÃ³n transformada. 
    ÚperdidosÚdeteccionesÚnivel_actividadé   )r   Ú
detectadosr   Úumbral_alarmaZperdidos_propiosr   )r   )r   Úreturn_dictZperdidos_propios_valuer   r   r   Úparse_deteccionesG   s    û	r!   c                 C   sà   |   dd¡td| td dd„ ƒdœ}td| dƒ}td	| dƒ}td
| ddd„ ƒ}td| dƒ}td| ddd„ ƒ}td| dƒ}td| dƒ}td| dƒ}	td| dƒ}
||d< ||d	< ||d
< ||d< ||d< ||d< ||d< |
|d< |S )u�  ! Convierte la informaciÃ³n de la jaula proveniente del documento de la colecciÃ³n original, al formato de la estructura
    de 'AlimentaciÃ³n' en la colecciÃ³n transformada. 
    @param data InformaciÃ³n de la entrada asociada a la jaula, proveniente de la colecciÃ³n original. 
    @return Retorna un diccionario con la estructura esperada para 'AlimentaciÃ³n' en la colecciÃ³n transformada. 
    Úuse_feeding_apiFÚdetection_activec                 S   s   t | ƒS ©N)Úbool)Úbr   r   r   Ú<lambda>e   ó    z$parse_alimentacion.<locals>.<lambda>)r"   r#   ÚComida_entregadar   ZMeta_diaÚPorc_entregadoc                 S   s   t | ƒS r$   )r	   ©Útr   r   r   r'   l   r(   ÚTasar   c                 S   s   t | ƒS r$   )Úfloatr+   r   r   r   r'   p   r(   ÚFeeding_activeÚUnidad_Medidazkg/minZMetodo_alimentacionÚSaciedadÚfeeding_api_typeZAkvaControl)Úgetr   ZNEW_ALIMENTACION_STRUCTURE)r   r    Zcomida_entregada_valueZmeta_dia_valueZporc_entregado_valueÚ
tasa_valueZ	dia_valueZfeeding_active_valueZunidad_medida_keyZmetodo_alimentacion_keyr2   r   r   r   Úparse_alimentacion\   s*    
þr5   c                 C   s,   | d | d t | d ƒt | d ƒddœ}|S )ud  ! FunciÃ³n que convierte las entradas de visitas, del formato asociado a la colecciÃ³n original 
    al formato de la colecciÃ³n transformada. Principalmente realiza la transformaciÃ³n de las fechas a 
    ISODATE. 
    @param visit Entrada de visita a convertir al formato de la colecciÃ³n transformada. 
    @return Retorna la entrada transformada. 
    ÚduracionÚracionÚinicioÚfinalr1   )r6   r7   r8   r9   Zmetodo_alimentacion)r   )ÚvisitZ	new_visitr   r   r   Úrectify_visita‡   s    

û
r;   c                 C   s`   t d| td d ƒ}g }t|ƒdks,|dkr0g S |D ]&}t|| ƒ}|d dkr4| |¡ q4|S )uƒ  ! Convierte la informaciÃ³n de la jaula proveniente del documento de la colecciÃ³n original, al formato de la estructura
    de 'Visitas' en la colecciÃ³n transformada. 
    @param data InformaciÃ³n de la entrada asociada a la jaula, proveniente de la colecciÃ³n original. 
    @return Retorna un diccionario con la estructura esperada para 'Visitas' en la colecciÃ³n transformada. 
    ÚVisitasÚdefaultr   Nr6   )r   ZOLD_CAGE_STRUCTUREÚlenr;   Úappend)r   ÚvisitasZreturn_listZ	visit_keyZ
rect_visitr   r   r   Úparse_visitasš   s    rA   c                 C   s4   t d| dtƒ}t d| dtƒ}t d| dƒ}|||dœS )u…  ! Convierte la informaciÃ³n de la jaula proveniente del documento de la colecciÃ³n original, al formato de la estructura
    de 'Posicion' en la colecciÃ³n transformada. 
    @param data InformaciÃ³n de la entrada asociada a la jaula, proveniente de la colecciÃ³n original. 
    @return Retorna un diccionario con la estructura esperada para 'Posicion' en la colecciÃ³n transformada. 
    Úx_posr   Úy_posÚwinche_connectedF)rB   rC   rD   )r   r   )r   Zx_pos_valueZy_pos_valueZwinche_valuer   r   r   Úparse_posicion­   s    ýrE   Tc              	   C   sö   g }i }| d }| d }| D ]¬}| | }t |ƒtkr8qq|D ]Š}	t|	d ƒ}
t|	ƒ}t|	ƒ}t|	ƒ}t|	ƒ}dtd|	dƒi}|dkr’td|› �ƒ |
|||||dœ}| 	|¡ |r<|||d	œ}|||< q<q|rî|rî| 
d
|› dt|ƒ› d�¡ ||fS )uú  ! Funcion que tomar un documento de la colecciÃ³n original y lo transforma en documentos de la colecciÃ³n transformada (salida). 
    @param doc Documento proveniente de la colecciÃ³n original
    @param verbose Indica si se muestran los prints de procesamiento.
    @param progress_bar Referencia a la barra de progreso utilizada. 
    @return Retorna un listado con las ids de los documentos generados en la colecciÃ³n transformadas, asociados al documento de entrada 
    de la colecciÃ³n original.
    Ú_idÚdiaÚhoraÚtempr   NzNone error found  _id : )Ú	timestampÚ	camera_idÚDeteccionesÚAlimentacionZPosicionZSensores)rK   r   r<   z[INFO] Document with _id: z was transformed onto z
 documents)r   Úlistr   r!   r5   rA   rE   r   Úprintr?   Úwriter>   )ÚdocÚverboseZprogress_barÚnew_docsÚnew_visits_docsZentry_idZ	entry_dayZ
cage_entryZ	cage_dataZcage_updaterJ   r   Zalimentacionr@   Z
posicionesÚsensoresZtransformed_entryZtransformed_visitsr   r   r   Údocument_transformer¿   sD    	ù

ýrV   )N)r   )TN)ZDataDefinitionsr   r   r   r   r   r   r!   r5   r;   rA   rE   rV   r   r   r   r   Ú<module>
   s   

		+