
     h&(                    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mZm	Z	 d dl
mZmZmZmZmZ d dlmZ d dlmZ d dlmZ  ej        dd	                                          Z ej        d
          Z ej                    Ze                     ej        d                     e                    e           e                     e            ej!        d          Z"d1dZ#d2dZ$d3dZ%d4dZ&d5dZ'd5dZ(d6dZ)d  Z*d7d"Z+d8d#Z,d9d(Z-d:d;d.Z.d/ Z/e0d0k    r e/             dS dS )<    )annotationsN)datetime	timedelta)AnyDictListTupleOptional)	PdfReader
get_client)parse_people	LOG_LEVELINFOkepco_history_applyz[%(levelname)s] %(message)su   ^\s*\(?공석\)?\s*$nameOptional[str]returnboolc                    | sdS t          |                                           }t                              |          rdS |dv S )NFT>      결원-)strstripVACANCY_PATmatch)r   ss     0/var/www/html/bot/scripts/kepco_history_apply.py_is_vacant_namer      sJ     uD		A t    r   r   c                V    t          j        dd| pd                                          S Nz\s+ resubr   )r   s    r   _normalize_namer'      s&    6&"qwB((..000r    deptstartTuple[str, str, Optional[str]]c                *    | t          |          |pd fS N)r'   )r(   r   r)   s      r   _keyr-      s    /$''$77r    	posted_atc                   |                                                      dd          }t          j        d|          r|S t          j        d|          }|rst	          |                    d                    t	          |                    d                    t	          |                    d                    }}}|dd	|d
d	|d
S t          d|            )N r#   z^\d{4}-\d{2}-\d{2}$z^(\d{4})\.(\d{1,2})\.(\d{1,2})$         04dr   02du   posted_at 형식 불일치: )r   replacer%   r   intgroup
ValueError)r.   r   mymods         r   _to_isor>   "   s    !!#r**A	x&** 
3Q77A +qwwqzz??C

OOS__q2***"***1****
?I??
@
@@r    iso_ymdc                |    t          j        | d          }|t          d          z
  }|                    d          S )N%Y-%m-%dr1   )days)r   strptimer   strftime)r?   dtprevs      r   _iso_prev_dayrG   ,   s;    		7J	/	/B	q!!!!D==$$$r    c                d    t          j        | d          }|j         d|j        dd|j        ddS )NrA   u   년 r5   u   월 u   일)r   rC   yearmonthday)r?   rE   s     r   _to_kor_daterL   1   s?    		7J	/	/Bg<<28<<<RV<<<<<r    urlc                   t          j        | d          }|                                 t          j        |j                  5 }t          |          }g }|j        D ]Q}	 |                    |	                                pd           -# t          $ r |                    d           Y Nw xY w	 d d d            n# 1 swxY w Y   d                    |                              dd          }t          j        dd|          }t          j        dd|          }t          j        d	d|          }|                                S )
N<   )timeoutr#   
z[ \t]+r0   z
[ ]*\n[ ]*z\n{2,})requestsgetraise_for_statusioBytesIOcontentr   pagesappendextract_text	Exceptionjoinr6   r%   r&   r   )rM   rbioreaderrY   ptexts          r   _download_pdfrc   5   sx   S"%%%A	AI		 !#3 	! 	!A!Q^^--34444 ! ! !R     !	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! 99U##D"--D6)S$''D6-t,,D6)T4((D::<<s6   B< )B
	B<
B,)B<+B,,B<<C C c                     t                      S r,   r    r    r   sbrf   G   s    <<r    List[Dict[str, Any]]c                    |                      d                              d                              dd                              d                                          }|j        pg S )Nkepco_id_testzdepartment, posted_at, pdf_urlr.   F)desci )tableselectorderlimitexecutedata)clientress     r   fetch_sources_in_orderrs   J   sW    
,,
'
'	0	1	1	{	'	'	v		 
 8>rr    c                    |                      d                              d                              d|                              dd                                          }|j        pg S )Nkepco_historyzPid, department, name, position, task, start, end, actual_end, posted_at, pdf_url
departmentcurrentT)rk   rl   eqro   rp   )rq   r(   rr   s      r   fetch_prev_current_by_deptry   R   sY    
,,
'
'	b	c	c	L$			It				 
 8>rr    posted_at_rawpdf_urlmerged_textNonec                v   ! t          |          }t          |          }t          |          }t          |           }fd|D              t	                                                     }	t          |          }
i }|
D ]B}t          |                    d          |                    d                    }||vr|||<   Ct	          |                                          }|	|z
  }|	|z  }||	z
  }g g !d"d	}|D ]} |         pi                     d
          }||         pi                     d
          }|pd|pdk    r	                    |           \ |         pi                     d          pd}||         pi                     d          pd} ||           ||          k    r!	                    |           |r fd|D             }t          dt          |          d          D ]q}|                     d                              d|i                              d|||dz                                          dd                                            r|                     d                              ddi                              d                              dd                                           !fd|D             }|r fd|D             }t          dt          |          d          D ]_}|                     d                              d||d                              d|||dz                                                       `!r fd!D             }t          dt          |          d          D ]]}|                     d                              ddi                              d|||dz                                                       ^|D ] }||         }|                    d          |                    d          |                    d          |                    d          |                    d          |                    d
          |                    d          pg ||dddd}t%          |                    d                    r;|                     d                              |                                           |                     d                              d                              d                              d|                    d                    }|                    d          |                    dd           n(|                    d|                    d                    }|                    d                                           j        pg }|s:|                     d                              |                                           "D ]}||         }|                    d          |                    d          |                    d          |                    d          |                    d          |                    d
          |                    d          pg ||dddd}|                     d                              |                                           ܉!D ]}||         }|                    d          |                    d          |                    d          |                    d          |                    d          |                    d
          |                    d          pg ||dddd}|                     d                              |                                           t.                              d!t          |          t          |          t          |          t                    t          !                     d S )#Nc           	         i | ]:}t          |                    d           |                    d                    |;S )r   r)   )r-   rT   ).0r^   r(   s     r   
<dictcomp>z*process_one_department.<locals>.<dictcomp>b   sN     F F F9:T155==!%%..111F F Fr    )department_hintr   r)   xr   r   r   c                V    t          j        dd| pd                                          S r"   r$   )r   s    r   
_norm_taskz*process_one_department.<locals>._norm_taskz   s&    vfb17,,22444r    endr#   taskc                V    g | ]%}                     |          |         d          &S idrT   r   kprev_by_keys     r   
<listcomp>z*process_one_department.<locals>.<listcomp>   s4    ZZZ{WXGYGYZAt,ZZZr    r   i  ru   
actual_endr   rw   Frv   Tc                $    g | ]}|v|v
|S re   re   )r   r   extend_keystask_change_keyss     r   r   z*process_one_department.<locals>.<listcomp>   s.    ^^^q!;*>*>1L\C\C\C\C\C\r    c                V    g | ]%}                     |          |         d          &S r   r   r   s     r   r   z*process_one_department.<locals>.<listcomp>   s4    UUU+//RSBTBTU{1~d+UUUr    )rw   r.   r{   c                V    g | ]%}                     |          |         d          &S r   r   r   s     r   r   z*process_one_department.<locals>.<listcomp>   s4    XXXA[__UVEWEWX;q>$'XXXr    
old_careerpositiongendercareer)rv   r   r   r   r   r)   r   r   r.   r{   rw   extendedr   r1   zJdept=%s processed: close=%d, keep=%d, insert=%d, extend=%d, task_change=%d)r   r   r   r   )r>   rG   rL   ry   setkeysr   r-   rT   rZ   rangelenrk   updatein_is_ro   rx   r   insertrl   rn   rp   loggerinfo)"rq   r(   rz   r{   r|   
posted_isoprev_isoprev_kor	prev_rows	prev_keyspeople
new_by_keyra   r   new_keysto_close_keys	keep_keysinsert_keysr   prev_endnew_end	prev_tasknew_taskids_to_closei	keep_sameids_to_keepids_oldpayloadqexistr   r   r   s"    `                             @@@r   process_one_departmentr   [   s'   ''Jz**Hh''H +6488IF F F F>GF F FK K$$&&''I +t<<<FDFJ  quuV}}aeeGnn55JJqM:??$$%%H (M(Iy(K 79K;=5 5 5 5  	' 	'N(b--e44qM'R,,U33N2..q!!! ^)r..v66<"	](b--f55;:i  JJx$8$888##A&&&  WZZZZmZZZq#l++T22 	W 	WALL))00,1IJJ3t\!AdF(344SSt5L5LWWYYYY LL!!(()U);<<2lD!!""Y"5"5ggiii _^^^^I^^^I :UUUUYUUUq#k**D11 	: 	:ALL))00*"2 2   s4QqvX.//				  :XXXX1AXXXq#g,,-- 	: 	:ALL))00,1EFF3tWQqvX.//				  D DqMEE&MMEE&MMj))eeHooUU7^^55<<eeHoo+&
 
  155==)) 	LL))0099AACCCLL))006699,MMPPQWYZY^Y^_eYfYfgg$%EE'NN$:AEE'4   WaeeT[nn@]@]

""$$)/R 	DLL))0099AACCC  @ @qMEE&MMEE&MMj))eeHooUU7^^55<<eeHoo+&
 
 	_%%,,W55==????  @ @qMEE&MMEE&MMj))eeHooUU7^^55<<eeHoo+&
 
 	_%%,,W55==????
KKTc-  #i..#k2B2BCDTDTVYZjVkVk    r    F        debug	sleep_secfloatc           
        t                      }t          |          }t                              dt	          |                     t          |d          D ]\  }}|                    d          pd                                }|                    d          pd                                }|                    d          pd                                }|r|r|s+t                              d|t	          |          |           	 t          |          }	t          |||||	           # t          $ r7}
t                              d|t	          |          |||
           Y d }
~
d }
~
ww xY wd S )	Nzsources: %dr1   rv   r#   r.   r{   u0   [%d/%d] skip (dept/posted_at/pdf_url 부족): %sz2[%d/%d] process failed (dept=%s, posted_at=%s): %s)rf   rs   r   r   r   	enumeraterT   r   rc   r   r\   	exception)r   r   rq   sourcesr   srcr(   r.   r{   mergedes              r   process_allr      s   TTF$V,,G
KKs7||,,,GQ'' B B3%%+2244WW[))/R6688	779%%+2244 	9 	G 	KKJAsSZ||]abbb	B"7++F"64GVLLLL 	B 	B 	BQGdIqB B B B B B B B	BB Bs   	"D,,
E-6,E((E-c                     t          j                    } |                     dd           |                                 }|j        rt
                              d           t          |j                   d S )Nz--debug
store_true)actionDEBUG)r   )argparseArgumentParseradd_argument
parse_argsr   r   setLevelr   )parserargss     r   mainr     so    $&&F
	,777Dz !   dj!!!!!!r    __main__)r   r   r   r   )r   r   r   r   )r(   r   r   r   r)   r   r   r*   )r.   r   r   r   )r?   r   r   r   )rM   r   r   r   )r   rg   )r(   r   r   rg   )
r(   r   rz   r   r{   r   r|   r   r   r}   )Fr   )r   r   r   r   )1
__future__r   osr%   rV   r   loggingrS   r   r   typingr   r   r   r	   r
   pypdfr   app.services.supabase_servicer   scripts.kepco_history_fillr   getenvupperr   	getLoggerr   StreamHandlerhandlersetFormatter	Formatter
addHandlerr   compiler   r   r'   r-   r>   rG   rL   rc   rf   rs   ry   r   r   r   __name__re   r    r   <module>r      s   " " " " " " . . . . . . . . . . . . . . . . . . . . . . . . ( ( ( ( ( ( ( ( 3 3 3 3 3 3 3 3 3 3 3 3 3 3       4 4 4 4 4 4 3 3 3 3 3 3BIk6**0022			0	1	1
'

!
!   &W&'DEE F F F   '    	    bj011       1 1 1 18 8 8 8A A A A% % % %
= = = =   $        S S S SjB B B B B&" " " zDFFFFF r    