
    |h.                       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j        d          ZdKdZ e            Z e ee                    Z e            Zg dZg dZ ej                     Z! ej"        d          df ej"        d          df ej"        d          dfgZ#de$d<   dLdZ%dMdZ&dNd!Z'dOd%Z(dPd)Z)dQd+Z*dRd,Z+dSd-Z,dTd/Z-dUdVd5Z.dWd7Z/	 	 	 	 dXdYdBZ0dZdDZ1dZdEZ2dF Z3dSdGZ,	 dHdIl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= n# e>$ r g Z5g Z6i Z7g Z8g Z9g Z:g Z;i Z<g Z=Y nw xY wg dJZ?dS )[    )annotationsN)datetimedate	timedelta)Path)OptionalListDictAnyTuple)Jinja2Templates)
get_clientz
govbot.webreturnr   c                     t          t                                                    } | j        d         dz  | j        d         dz  | j        d         dz  g}|D ]}|                                r|c S |d         S )N   	templates   r   )r   __file__resolveparentsexists)here
candidatesds      !/var/www/html/bot/app/web/deps.py_find_templates_dirr      s    >>!!##DQ+%Q+%Q+%J
   88:: 	HHH	a=    )	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                   | g S t          | t                    rd | D             S t          | t                    r|                                 }|r|                                dk    rg S |                    d          r\|                    d          rG	 t          j        |          }t          |t                    rd |D             S n# t          $ r Y nw xY wd|v rd |
                                D             S d|v rd	 |                    d          D             S |gS t          |                                           gS )
Nc                    g | ]D}t          |                                          #t          |                                          ES  strstrip.0xs     r   
<listcomp>z_as_list.<locals>.<listcomp>9   s9    >>>1s1vv||~~>A>>>r   none[]c                    g | ]D}t          |                                          #t          |                                          ES r1   r2   r5   s     r   r8   z_as_list.<locals>.<listcomp>B   s9    HHHqQHCFFLLNNHHHr   
c                ^    g | ]*}|                                 |                                 +S r1   r4   r6   ts     r   r8   z_as_list.<locals>.<listcomp>F   s-    CCC!CAGGIICCCr   |c                ^    g | ]*}|                                 |                                 +S r1   r?   r@   s     r   r8   z_as_list.<locals>.<listcomp>H   s-    AAA!qwwyyAAGGIIAAAr   )
isinstancelistr3   r4   lower
startswithendswithjsonloads	Exception
splitlinessplit)valsvs      r   _as_listrQ   5   s`   
{	#t ?>>>>>>#s IIKK 	AGGII''I<< 	C 	JqMMa&& IHHAHHHHI   199CCq||~~CCCC!88AAqwws||AAAAs
HHNNs   4C 
CCOptional[int]mr   r3   c                >    | dS |r|dnd}|r|dnd}|  d| d| S )N-02dz??r1   )r,   rS   r   mmdds        r   _fmt_date_displayrY   L   sL    ys	"AdB	"AdB"rr   rO   
str | None2Tuple[Optional[int], Optional[int], Optional[int]]c                   | sdS t          |                                           }t          D ]\  }}|                    |          }|rt	          |                    d                    }|dk    rG|t	          |                    d                    t	          |                    d                    fc S |dk    r'|t	          |                    d                    d fc S |dk    r|d d fc S 	 t          j        |d d                                                   }|j	        |j
        |j        fS # t          $ r Y dS w xY w)	N)NNNr   r*   r      r+   r,   
   )r3   r4   r-   matchintgroupr   fromisoformatr   yearmonthdayrK   )rO   rA   patkindrS   r,   r   s          r   _parse_date_partsrh   S   sF     AA# 	% 	%	TIIaLL 	%AGGAJJAu}}#aggajj//3qwwqzz??::::t||#aggajj//4////s{{$}$$$ "1SbS6**//11vqw%%       s   4AD6 6
EEassume_lastboolOptional[date]c                    | d S ||rdnd}||rt          j        | |          d         nd}	 t          | ||          S # t          $ r Y d S w xY w)N   r   )calendar
monthranger   rK   )r,   rS   r   ri   s       r   _parts_to_daterp   g   s|    yty$BB1y,7>H1%%a((QAq!}}   tts   A   
AArawr   tuple[str, Optional[date]]c                    | dS t          |                                           }|r|                                dk    rdS t          |          \  }}}t	          |||          }t          |||d          }||fS )N)rU   Nr9   T)ri   )r3   r4   rF   rh   rY   rp   )rq   rO   r,   rS   r   dispcmp_ds          r   _date_display_and_comparerv   s   s    
{yCA 		V##y""GAq!Q1%%D1a555E;r   r`   c                D    	 t          |           S # t          $ r Y dS w xY w)Nl    J))r`   rK   )rP   s    r   _to_int_saferx   ~   s4    1vv   vvs    
c                R    t          |           }|rd                    |          ndS )Nr=   rU   )rQ   join)rN   arrs     r   _normalize_multiliner|      s&    
3--C )499S>>>c)r   c                V    t          j        dd| pd                                          S Nz\s+ resubupperrO   s    r   _normalize_namer      &    6&"qwB((..000r   depc                   | sd S |                                  }t          j        dd|t          j                  }|                                }t
          D ]}|                    dd          |v r|c S d|v rdS d|v rdS d	|v sd
|v sd|v rdS d|v rdS d|v rdS d|v rdS d|v rdS d|v rdS d|v rdS d|v rdS d|v rdS d S )Nu    (?:\(주\)|㈜|주식회사|\s+)r   )flags KPSr&   KDNr'   KEPCOu   한국전력u   한전r   u   남동발전r    u   중부발전r!   u   서부발전r"   u   남부발전r#   u   동서발전r$   u   수력원자력r%   u   전력기술r(   u   원자력연료r)   )r4   r   r   Ir   COMPANY_ORDERreplace)r   rO   s0sUlbls        r   _norm_company_labelr      sD    t		A	3R"$	G	G	GB	B  ;;sB2%%JJJ &{{{{{{"}}",,B############B&&##B&&4r         @urltimeoutfloatdictc                   	 ddd}t          j                     }t          j        | ||d          }|j        dv r-t          j        | ||dd          }|                                 t          t          j                     |z
  dz            }d	|j        cxk    od
k     nc }|r|dk     rdn|rdnd}|||j        dS # t          j        j        $ r	 dd ddcY S t          j        j	        $ r	 dd ddcY S t          j        j
        $ r	 dd ddcY S t          j        j        $ r	 dd ddcY S t          $ r"}dd t          |          j        dcY d }~S d }~ww xY 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closer`   
exceptionsConnectTimeoutSSLError
ProxyErrorConnectionErrorrK   type__name__)	r   r   r   t0rr   okr   es	            r   _ping_statusr      s   JLW	
 
 Y[[M#wQUVVV=J&&S'74aefffAGGIII$)++"d*++AM''''C''''LrDyy2/Kxx8bAMBBB- C C C!	BBBBB' ? ? ?!>>>>>) A A A!@@@@@. C C C!	BBBBB J J J!Q8HIIIIIIIIJs6   B;B> >EE5EE+	E4EEEtablec                   t          j                    t          d          z
  }	 t                              |                               d                              d|                                                                          }t          |j
        pg           S # t          $ rL 	 t                              |                               d                              dd                              d	                                          }|j
        pg }n# t          $ r Y Y d
S w xY wd
}|D ]}|                    d          p|                    d          }|s/d }t          |                                          }	 t          j        |d d                   }nA# t          $ r4 	 t          j        |d d         d          }n# t          $ r d }Y nw xY wY nw xY w|r||k    r|dz  }|cY S w xY w)N   )hourszid,created_at
created_at*idTdescr   r   	posted_at   r^   z%Y-%m-%dr   )r   utcnowr   sbr   selectgte	isoformatexecutelendatarK   orderlimitr   r3   r4   rb   strptime)	r   cutoffresr   cntr   tsdtrO   s	            r   _count_last_24hr      s   _!4!4!44Fhhuoo$$_5599,HXHXHZHZ[[ccee38>r"""   	((5//((--33Dt3DDJJ4PPXXZZC8>rDD 	 	 	111	 	 	A|$$:k(:(:B BBA+AcrcF33   !*1SbS6:>>BB    BBB
  bFllq


-s   A:B! !G8-A0DG8
D-(G8,D--AG8F$#G8$
G"/GG"G	G"G	G"G8!G""G87G8titletag   source_label	title_keyurl_keytag_keyOptional[str]
limit_scanList[Dict[str, Any]]c           	        t          j                                                    }	 t                              |                               d                              dd                              |                                          }|j	        pg }n# t          $ r g }Y nw xY wg }	|D ]}
t          |
                    d          p|
                    d          pd          d d         }||k    rJ|
                    |          }|s+|d	k    rt          |
          }n|d
k    rt          |
          }|	                    ||
                    |          pd|r|
                    |          nd ||d           |	S )Nr   r   Tr   r   r   r   r^   MOEFMOTIErU   )srcr   r   r   r   )r   todayr   r   r   r   r   r   r   r   rK   r3   r   _ensure_moef_url_ensure_motie_urlappend)r   r   r   r   r   r   	today_strr   rowsoutr   r   url_vals                r   _today_items_fromr      s    
&&((Ihhuoo$$S))//4/@@FFzRRZZ\\x~2    !#C 
 
k""?aeeL&9&9?R@@"E	>> %%..  	/v%%*1--((+A..

#y))0S*1;gt 	
 	
 	
 	
 Js   A0B B'&B'rowc                8   d}d}|                      d          }|                      d          }|r|sVt          |                      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   r   rU   r   r   z?searchBbsId1=z&searchNttId1=z&menuNo=)r   r3   rM   r   )r   
DETAIL_URLmenuNor   r   ridpartss          r   r   r     s    ?JFGGGEswwx'8'8f &f &#''$--%2&&#::IIc1%%E5zzQ %v Z ZYYEYYYYQWYYY4r   c                H    d}|                      d          }|d S | d| dS )Nzhttps://www.motie.go.krr   z/kor/article/ATCL6e90bb9de/z/view?)r   )r   BASEaids      r   r   r   $  s7    $D
''$--C
{t::s::::r   c                     t                               d                              d                                          j        pg } d | D             S )Ngov_staff_currentr   c                0    i | ]}|d          |d         f|S )	person_idsourcer1   )r6   r   s     r   
<dictcomp>z1_current_map_by_person_source.<locals>.<dictcomp>.  s'    ;;;Q{^Qx[)1;;;r   )r   r   r   r   r   )r   s    r   _current_map_by_person_sourcer  ,  sJ    88'((//44<<>>CIrD;;d;;;;r   c                V    t          j        dd| pd                                          S r~   r   r   s    r   r   r   0  r   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   rv   rx   r|   r   rh   rp   rY   r   r  r  r  r  r  r  r	  r
  r  r  r   )r   r   )r   r.   )r,   rR   rS   rR   r   rR   r   r3   )rO   rZ   r   r[   )
r,   rR   rS   rR   r   rR   ri   rj   r   rk   )rq   r   r   rr   )r   r`   )r   r3   )rO   r3   r   r3   )r   rZ   r   rZ   )r   )r   r3   r   r   r   r   )r   r3   r   r`   )r   r   r   r   )r   r3   r   r3   r   r3   r   r3   r   r   r   r`   r   r   )r   r   r   rZ   )@
__future__r   loggingrI   r   rn   r   r   r   r   pathlibr   typingr   r	   r
   r   r   r   starlette.templatingr   app.services.supabase_servicer   	getLoggerr  r   r  r3   r   r   r   r  r   r  compiler-   __annotations__rQ   rY   rh   rp   rv   rx   r|   r   r   r   r   r   r   r   r  orderingr  r  r  r  r  r  r	  r
  r  rK   __all__r1   r   r   <module>r     s   " " " " " " "   				   . . . . . . . . . .       3 3 3 3 3 3 3 3 3 3 3 3 3 3  0 0 0 0 0 0 4 4 4 4 4 4		<	(	(
 
 
 
 #"$$Occ,&7&7888	 Z\\   SRR	
 RZTUUW\]RZCDDdKRZ"##S)0       .          (
 
 
 
	 	 	 	   * * * *
1 1 1 1   DJ J J J J<   @ ") ) ) ) )Z   ; ; ; ;< < <1 1 1 1
#                        
# 
# 
#JLN  "
#  s   D5 5EE