o
    µh   ã                
   @  s  d dl mZ d dlmZmZmZ d dlmZmZmZ d dl	Z	d dl
mZmZmZ d dlmZ d dlmZmZ eƒ Zeedd	ƒZd.dd„Zd/dd„Zejdededdddeddeddeddeddddedddfd0d(d)„ƒZejd*edd1d,d-„ƒZdS )2é    )Úannotations)ÚdatetimeÚtimezoneÚ	timedelta)ÚOptionalÚDictÚListN)Ú	APIRouterÚRequestÚQuery)ÚHTMLResponse)Ú	templatesÚsbé	   )ÚhoursÚdtúOptional[str]Úreturnc                 C  sD   | sd S zt  |  dd¡¡}| t¡ d¡W S  ty!   |  Y S w )NÚZz+00:00z%Y-%m-%d %H:%M)r   ÚfromisoformatÚreplaceÚ
astimezoneÚKSTÚstrftimeÚ	Exception)r   Úd© r   ú3/var/www/html/bot/app/web/pages/congress/changes.pyÚ_to_kst   s   ÿr   Ú	full_nameÚroom_noÚstrc                 C  s2   | pd  ¡ › d|p
d  ¡ › }t | d¡¡ ¡ S )NÚ ú|zutf-8)ÚstripÚhashlibÚsha1ÚencodeÚ	hexdigest)r   r    Úbaser   r   r   Ú_person_key   s   r*   z/congress/changes)Úresponse_classé   é   ém  )ÚdefaultÚgeÚle)r/   éÈ   é
   iÐ  )r/   r0   Úrequestr
   ÚdaysÚintÚeventÚ	committeeÚpartyÚlimitÚpagec                 Ã  sL  t  tj¡t|d  ¡ }t  tj¡tdd  ¡ }t d¡ d¡ 	d|¡j
 dd¡jddd d	¡ ¡ }	t d¡ d
¡ 	d|¡j
 d
d¡jd
dd d	¡ ¡ }
tdd„ |	jpYg D ƒƒ}tdd„ |
jpeg D ƒƒ}t d¡ d¡ 	d|¡}|r}| d|¡}|r…| d|¡}|r| d
|¡}|jddd d	¡}| ¡ jpg }i }|D ]7}t| d¡| d¡ƒ}||vrÙ|| d¡t| d¡ƒ| d¡| d
¡| d¡| d¡| d¡pÔg dœ||< q¢t| ¡ ƒ}t|ƒ}|}|d | }|| }|||… }|r|| d | nd}||kr
g }t d| |||pd|pd|pd||||||dœ¡S )u  
    congress_member_events ë·°ì—ì„œ ê°€ì ¸ì˜¤ë˜,
    ë™ì¼ ì¸ë¬¼ ê¸°ì¤€(full_name + room_no)ìœ¼ë¡œ ë¬¶ì–´ "ì‚¬ëžŒ 1ëª… = 1í–‰"ë§Œ ë…¸ì¶œ.
    ê°€ìž¥ ìµœì‹  ì´ë²¤íŠ¸ë¥¼ ëŒ€í‘œë¡œ ì‚¬ìš©.
    ë¦¬ìŠ¤íŠ¸ ì»¬ëŸ¼: ì¼ì‹œ / ì´ë¦„ / ì •ë‹¹ / ì´ë²¤íŠ¸ / ë³€ê²½ ë‚´ìš© / ìƒì„¸ë³´ê¸°
    )r5   r.   Úcongress_member_eventsÚcommittee_nameÚ
valid_fromÚnullF©Údescéˆ  r9   c                 S  ó   h | ]}|  d ¡r|d  ’qS ©r=   ©Úget©Ú.0Úrr   r   r   Ú	<setcomp>I   ó    z#congress_changes.<locals>.<setcomp>c                 S  rC   )r9   rE   rG   r   r   r   rJ   J   rK   Ú*Ú
event_typeTr   r    Úchanged_fields)Ú
person_keyÚlatest_valid_fromÚlatest_valid_from_kstr   r9   r    rM   rN   r-   zcongress/changes.htmlr"   )r4   Úrowsr5   r7   r8   r9   r:   r;   ÚpagesÚtotalÚ
committeesÚparties)r   Únowr   Úutcr   Ú	isoformatr   ÚtableÚselectÚgteÚnot_Úis_Úorderr:   ÚexecuteÚsortedÚdataÚeqr*   rF   r   ÚlistÚvaluesÚlenr   ÚTemplateResponse)r4   r5   r7   r8   r9   r:   r;   ÚsinceÚ	opt_sinceÚcommittees_resÚparties_resrU   rV   ÚqrR   ÚgroupedrI   ÚpkeyÚpeopleÚtotal_peopleÚ	page_sizeÚstartÚendÚ	page_rowsrS   r   r   r   Úcongress_changes!   sŠ   €
üù

üù	
ø€
ôru   z/congress/person/{person_key}rO   c                 Ã  sî  t  d¡ d¡jddd d¡ ¡ jpg }d\}}|D ]}t| d¡| d	¡ƒ|kr8| d¡| d	¡}} nq|sIt	 
d
| |dg g g ddœ¡S t  d¡ d¡ d|¡ d	|¡jddd d¡ ¡ jpeg }|D ]}t| d¡ƒ|d< t| d¡ƒ|d< qhi }|D ]}| | d¡p‹dg ¡ |¡ qd'dd„}	g }
| ¡ D ](\}}t|ƒD ]\}}|d t|ƒk r·||d  nd}|
 ||	||ƒdœ¡ q¥q|
jdd „ dd! td"d#„ |D ƒƒ}td$d#„ |D ƒƒ}|rç|d% nd}t	 
d
| |||
||d&dœ¡S )(u  
    ë™ì¼ ì¸ë¬¼(ì´ë¦„ + ë°©í˜¸ìˆ˜)ì˜ ì „ì²´ ížˆìŠ¤í† ë¦¬ë¥¼ ëª¨ì•„ ë³´ì—¬ì¤€ë‹¤.
    - key íƒìƒ‰: events ì „ì²´ì—ì„œ person_key = sha1(full_name|room_no)
    - ê·¸ ì´ë¦„/ë°©í˜¸ìˆ˜ë¡œ hist ì „ì²´ë¥¼ ë¶ˆëŸ¬ì˜¤ê³ ,
      ìœ„ì›íšŒë³„ë¡œë§Œ ì´ì „ ë²„ì „ê³¼ ë¹„êµ(diff)í•œë‹¤.
    r<   zfull_name,room_nor>   Tr@   i'  )NNr   r    zcongress/person.htmlN)r4   rO   ÚcurÚtimelineÚcurrent_committeesÚall_committeesÚ	not_foundÚcongress_member_histrL   rB   Ú_valid_from_kstÚvalid_toÚ_valid_to_kstr=   ú-ÚaÚdictÚbúOptional[dict]r   ú
List[dict]c                   s$   ˆsg S g d¢}‡ ‡fdd„|D ƒS )N)Ú	role_namer9   ÚdistrictÚphoner    Ú	photo_urlÚprofile_urlÚmember_page_urlÚ
aide_staffÚaide_secretaryÚaide_secretary2Úelection_countc                   s8   g | ]}ˆ   |¡ˆ  |¡kr|ˆ  |¡ˆ   |¡d œ‘qS ))ÚfieldÚbeforeÚafterrE   )rH   Úf©r€   r‚   r   r   Ú
<listcomp>Ç   s
    þz5congress_person.<locals>._changes.<locals>.<listcomp>r   )r€   r‚   Úfieldsr   r“   r   Ú_changes¾   s   þz!congress_person.<locals>._changesr-   )rv   Údiffc                 S  s   | d   d¡pdS )Nrv   r>   r"   rE   )Úxr   r   r   Ú<lambda>Õ   s    z!congress_person.<locals>.<lambda>)ÚkeyÚreversec                 S  s6   h | ]}|  d ¡r|  d¡du r|  d¡r|d ’qS )Ú
is_currentr}   Nr=   rE   rG   r   r   r   rJ   Ù   s   6 z"congress_person.<locals>.<setcomp>c                 S  rC   rD   rE   rG   r   r   r   rJ   Û   rK   r   F)r€   r   r‚   rƒ   r   r„   )r   rZ   r[   r_   r:   r`   rb   r*   rF   r   rg   rc   r   Ú
setdefaultÚappendÚitemsÚ	enumeraterf   Úsortra   )r4   rO   Úevqr   r    ÚeÚhistrI   Úby_commr–   rw   ÚcommrR   Úirv   Úprevrx   ry   r   r   r   Úcongress_person„   s†   €
þûù	þùüù÷
 þÿùr©   )r   r   r   r   )r   r   r    r   r   r!   )r4   r
   r5   r6   r7   r   r8   r   r9   r   r:   r6   r;   r6   )r4   r
   rO   r!   )Ú
__future__r   r   r   r   Útypingr   r   r   r%   Úfastapir	   r
   r   Úfastapi.responsesr   Úapp.web.depsr   r   Úrouterr   r   r*   rF   ru   r©   r   r   r   r   Ú<module>   s*   



ùb