o
    â|¥h÷.  ã                   @  s(  U 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mZmZm	Z	 d dl
mZ d dlmZmZmZmZmZ d dlZd dlmZ d dlmZ e d¡Zd[dd„Zeƒ ZeeeƒdZeƒ Zg d¢Zg d¢Ze  ¡ Z!e "d¡dfe "d¡dfe "d¡dfgZ#de$d< d\dd„Z%d]dd „Z&d^d$d%„Z'd_d)d*„Z(d`d.d/„Z)dad1d2„Z*dbd3d4„Z+dcd5d6„Z,ddd8d9„Z-dedfd?d@„Z.dgdBdC„Z/	D	;	E	FdhdidNdO„Z0djdQdR„Z1djdSdT„Z2dUdV„ Z3dcdWd6„Z,zdXdYl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= W n e>y   g Z5g Z6i Z7g Z8g Z9g Z:g Z;i Z<g Z=Y nw g dZ¢Z?dS )ké    )ÚannotationsN)ÚdatetimeÚdateÚ	timedelta)ÚPath)ÚOptionalÚListÚDictÚAnyÚTuple)ÚJinja2Templates)Ú
get_clientz
govbot.webÚreturnr   c                  C  sV   t tƒ ¡ } | jd d | jd d | jd d g}|D ]
}| ¡ r&|  S q|d S )Né   Ú	templatesé   r   )r   Ú__file__ÚresolveÚparentsÚexists)ÚhereÚ
candidatesÚd© r   ú!/var/www/html/bot/app/web/deps.pyÚ_find_templates_dir   s   ýÿr   )Ú	directory)õ   í•œêµ­ì „ë ¥ê³µì‚¬õ   í•œêµ­ë‚¨ë™ë°œì „õ   í•œêµ­ì¤‘ë¶€ë°œì „õ   í•œêµ­ì„œë¶€ë°œì „õ   í•œêµ­ë‚¨ë¶€ë°œì „õ   í•œêµ­ë™ì„œë°œì „õ   í•œêµ­ìˆ˜ë ¥ì›ìžë ¥õ	   í•œì „KPSõ	   í•œì „KDNõ   í•œêµ­ì „ë ¥ê¸°ìˆ õ   í•œì „ì›ìžë ¥ì—°ë£Œ)u   ìƒìž„ê¸°ê´€ìž¥u   ìƒìž„ê°ì‚¬u   ìƒìž„ì´ì‚¬u   ë¹„ìƒìž„ì´ì‚¬uA   ^\s*(\d{4})[.\-/ë…„\s]*(\d{1,2})[.\-/ì›”\s]*(\d{1,2})[ì¼\s]*\s*$Úymdu0   ^\s*(\d{4})[.\-/ë…„\s]*(\d{1,2})[.\-/ì›”\s]*\s*$Úymz^\s*(\d{4})\s*$ÚyzList[Tuple[re.Pattern, str]]Ú_DATE_PATTERNSú	List[str]c                 C  sä   | d u rg S t | tƒrdd„ | D ƒS t | tƒrk|  ¡ }|r#| ¡ dkr%g S | d¡rM| d¡rMzt |¡}t |tƒrBdd„ |D ƒW S W n	 t	yL   Y nw d|v rZdd„ | 
¡ D ƒS d	|v rhd
d„ | d	¡D ƒS |gS t| ƒ ¡ gS )Nc                 S  ó$   g | ]}t |ƒ ¡ rt |ƒ ¡ ‘qS r   ©ÚstrÚstrip©Ú.0Úxr   r   r   Ú
<listcomp>9   ó   $ z_as_list.<locals>.<listcomp>Únoneú[ú]c                 S  r-   r   r.   r1   r   r   r   r4   B   r5   Ú
c                 S  ó   g | ]
}|  ¡ r|  ¡ ‘qS r   ©r0   ©r2   Útr   r   r   r4   F   ó    ú|c                 S  r:   r   r;   r<   r   r   r   r4   H   r>   )Ú
isinstanceÚlistr/   r0   ÚlowerÚ
startswithÚendswithÚjsonÚloadsÚ	ExceptionÚ
splitlinesÚsplit)ÚvalÚsÚvr   r   r   Ú_as_list5   s.   



ÿÿrM   úOptional[int]Úmr   r/   c                 C  s@   | d u rdS |r|d›nd}|r|d›nd}| › d|› d|› S )Nú-Ú02dz??r   )r*   rO   r   ÚmmÚddr   r   r   Ú_fmt_date_displayL   s
   rT   rK   ú
str | Noneú2Tuple[Optional[int], Optional[int], Optional[int]]c                 C  sÜ   | sdS t | ƒ ¡ }tD ]B\}}| |¡}|rNt| d¡ƒ}|dkr3|t| d¡ƒt| d¡ƒf  S |dkrC|t| d¡ƒd f  S |dkrN|d d f  S qzt |d d… ¡ ¡ }|j	|j
|jfW S  tym   Y dS w )	N)NNNr   r(   r   é   r)   r*   é
   )r/   r0   r+   ÚmatchÚintÚgroupr   Úfromisoformatr   ÚyearÚmonthÚdayrG   )rK   r=   ÚpatÚkindrO   r*   r   r   r   r   Ú_parse_date_partsS   s(   
"€ÿrb   Úassume_lastÚboolúOptional[date]c                 C  sd   | d u rd S |d u r|rdnd}|d u r |rt  | |¡d nd}zt| ||ƒW S  ty1   Y d S w )Né   r   )ÚcalendarÚ
monthranger   rG   )r*   rO   r   rc   r   r   r   Ú_parts_to_dateg   s   ÿri   Úrawr
   útuple[str, Optional[date]]c                 C  s^   | d u rdS t | ƒ ¡ }|r| ¡ dkrdS t|ƒ\}}}t|||ƒ}t|||dd}||fS )N)rP   Nr6   T)rc   )r/   r0   rB   rb   rT   ri   )rj   rK   r*   rO   r   ÚdispÚcmp_dr   r   r   Ú_date_display_and_compares   s   rn   rZ   c                 C  s    zt | ƒW S  ty   Y dS w )Nl    J)£)rZ   rG   )rL   r   r   r   Ú_to_int_safe~   s
   
ÿro   c                 C  s   t | ƒ}|rd |¡S dS )Nr9   rP   )rM   Újoin)rJ   Úarrr   r   r   Ú_normalize_multiline„   s   rr   c                 C  ó   t  dd| pd¡ ¡ S ©Nz\s+Ú ©ÚreÚsubÚupper©rK   r   r   r   Ú_normalize_name‰   ó   r{   Údepc                 C  sæ   | sd S |   ¡ }tjdd|tjd}| ¡ }tD ]}| dd¡|v r&|  S qd|v r-dS d|v r3dS d	|v s?d
|v s?d|v rAdS d|v rGdS d|v rMdS d|v rSdS d|v rYdS d|v r_dS d|v redS d|v rkdS d|v rqdS d S )Nu    (?:\(ì£¼\)|ãˆœ|ì£¼ì‹íšŒì‚¬|\s+)ru   )Úflagsú ÚKPSr$   ÚKDNr%   ÚKEPCOu   í•œêµ­ì „ë ¥u   í•œì „r   u   ë‚¨ë™ë°œì „r   u   ì¤‘ë¶€ë°œì „r   u   ì„œë¶€ë°œì „r    u   ë‚¨ë¶€ë°œì „r!   u   ë™ì„œë°œì „r"   u   ìˆ˜ë ¥ì›ìžë ¥r#   u   ì „ë ¥ê¸°ìˆ r&   u   ì›ìžë ¥ì—°ë£Œr'   )r0   rw   rx   ÚIry   ÚCOMPANY_ORDERÚreplace)r}   rK   Ús0ÚsUÚlblr   r   r   Ú_norm_company_labelŒ   s@   ÿr‰   ç      @ÚurlÚtimeoutÚfloatÚdictc           	   
   C  s\  zRdddœ}t   ¡ }tj| ||dd}|jdv r&tj| ||ddd}| ¡  tt   ¡ | d ƒ}d	|j  ko:d
k n  }|rE|dk rEdn|rIdnd}|||jdœW S  tjjyc   dd ddœ Y S  tjj	ys   dd ddœ Y S  tjj
yƒ   dd ddœ Y S  tjjy“   dd ddœ Y S  ty­ } zdd t|ƒjdœW  Y d }~S d }~ww )NzaMozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)z
User-AgentÚAcceptT)ÚheadersrŒ   Úallow_redirects)i“  i•  )r   rŒ   Ústreamr‘   éè  éÈ   i  iÜ  ÚOKu   ì§€ì—°u   ë¶ˆëŸ‰)ÚlabelÚmsÚstatusÚTIMEOUT)r–   r—   ÚerrorÚSSLÚPROXYÚCONNECT)ÚtimeÚrequestsÚheadÚstatus_codeÚgetÚcloserZ   Ú
exceptionsÚConnectTimeoutÚSSLErrorÚ
ProxyErrorÚConnectionErrorrG   ÚtypeÚ__name__)	r‹   rŒ   r   Út0Úrr—   Úokr–   Úer   r   r   Ú_ping_status®   s2   ü
€ÿr¯   Útablec           	      C  sJ  t  ¡ tdd }zt | ¡ d¡ d| ¡ ¡ ¡ }t	|j
pg ƒW S  ty¤   zt | ¡ d¡jddd d	¡ ¡ }|j
p?g }W n tyL   Y Y d
S w d
}|D ]N}| d¡p\| d¡}|s`qQd }t|ƒ ¡ }zt  |d d… ¡}W n! ty”   zt  |d d… d¡}W n ty‘   d }Y nw Y nw |rŸ||krŸ|d7 }qQ| Y S w )Né   )Úhourszid,created_atÚ
created_atÚ*ÚidT©Údescr“   r   Ú	posted_até   rX   z%Y-%m-%dr   )r   Úutcnowr   Úsbr°   ÚselectÚgteÚ	isoformatÚexecuteÚlenÚdatarG   ÚorderÚlimitr¢   r/   r0   r\   Ústrptime)	r°   ÚcutoffÚresrÁ   Úcntr¬   ÚtsÚdtrK   r   r   r   Ú_count_last_24hÌ   sB    $ÿÿ€ý€êrÊ   ÚtitleÚtagé–   Úsource_labelÚ	title_keyÚurl_keyÚtag_keyúOptional[str]Ú
limit_scanúList[Dict[str, Any]]c              	   C  sô   t  ¡  ¡ }zt | ¡ d¡jddd |¡ ¡ }|j	pg }W n t
y*   g }Y nw g }	|D ]H}
t|
 d¡p=|
 d¡p=dƒd d… }||krHq/|
 |¡}|s`|d	krXt|
ƒ}n|d
kr`t|
ƒ}|	 ||
 |¡pid|rp|
 |¡nd ||dœ¡ q/|	S )Nr´   rµ   Tr¶   r¸   r³   ru   rX   ÚMOEFÚMOTIErP   )ÚsrcrË   rÌ   r‹   r   )r   Útodayr¾   r»   r°   r¼   rÂ   rÃ   r¿   rÁ   rG   r/   r¢   Ú_ensure_moef_urlÚ_ensure_motie_urlÚappend)r°   rÎ   rÏ   rÐ   rÑ   rÓ   Ú	today_strrÆ   ÚrowsÚoutr¬   r   Úurl_valr   r   r   Ú_today_items_fromé   s6   $ÿ$

ûÿ	rà   Úrowc                 C  s„   d}d}|   d¡}|   d¡}|r|s/t|   d¡pdƒ}d|v r/| dd¡}t|ƒd	kr/|\}}|r@|r@|› d
|› d|› d|› S d S )Nz,https://www.moef.go.kr/nw/notice/hrDetail.doÚ4050300ÚbbsIdÚpostIdrµ   ru   rP   r   r   z?searchBbsId1=z&searchNttId1=z&menuNo=)r¢   r/   rI   rÀ   )rá   Ú
DETAIL_URLÚmenuNorã   rä   ÚridÚpartsr   r   r   rÙ     s   rÙ   c                 C  s*   d}|   d¡}|d u rd S |› d|› dS )Nzhttps://www.motie.go.krrµ   z/kor/article/ATCL6e90bb9de/z/view?)r¢   )rá   ÚBASEÚaidr   r   r   rÚ   $  s
   
rÚ   c                  C  s(   t  d¡ d¡ ¡ jpg } dd„ | D ƒS )NÚgov_staff_currentr´   c                 S  s   i | ]}|d  |d f|“qS )Ú	person_idÚsourcer   )r2   r¬   r   r   r   Ú
<dictcomp>.  s    z1_current_map_by_person_source.<locals>.<dictcomp>)r»   r°   r¼   r¿   rÁ   )rÝ   r   r   r   Ú_current_map_by_person_source,  s   rï   c                 C  rs   rt   rv   rz   r   r   r   r{   0  r|   r   )	Ú_MOTIE_ORDER_POSÚ
DEPT_ORDERÚEXPECTED_POSÚPHONE_ROLE_LAST4ÚMOEF_ORDER_POSÚMOEF_KPS_DEPT_ORDERÚMOEF_KPS_DEPT_WHITELISTÚMOEF_KPS_EXPECTED_POSÚMOEF_KPS_PHONE_ROLE_LAST4)r   r»   ÚloggerÚTEMPLATE_DIRr„   Ú	POS_ORDERÚTODAYrà   r¯   rÊ   rn   ro   rr   r‰   rb   ri   rT   r{   rð   rñ   rò   ró   rô   rõ   rö   r÷   rø   rï   r{   )r   r   )r   r,   )r*   rN   rO   rN   r   rN   r   r/   )rK   rU   r   rV   )
r*   rN   rO   rN   r   rN   rc   rd   r   re   )rj   r
   r   rk   )r   rZ   )r   r/   )rK   r/   r   r/   )r}   rU   r   rU   )rŠ   )r‹   r/   rŒ   r   r   rŽ   )r°   r/   r   rZ   )rË   r‹   rÌ   rÍ   )r°   r/   rÎ   r/   rÏ   r/   rÐ   r/   rÑ   rÒ   rÓ   rZ   r   rÔ   )rá   rŽ   r   rU   )@Ú
__future__r   ÚloggingrE   rw   rg   rž   r   r   r   Úpathlibr   Útypingr   r   r	   r
   r   rŸ   Ústarlette.templatingr   Úapp.services.supabase_servicer   Ú	getLoggerrù   r   rú   r/   r   r»   r„   rû   rØ   rü   Úcompiler+   Ú__annotations__rM   rT   rb   ri   rn   ro   rr   r{   r‰   r¯   rÊ   rà   rÙ   rÚ   rï   Úorderingrð   rñ   rò   ró   rô   rõ   rö   r÷   rø   rG   Ú__all__r   r   r   r   Ú<module>   st   

ý








"
 ú
-

0ö