
    ujW                        d 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ZdZeegdf   ZddZddZdd	Zddd
Zg dZy)u,  ig_sort.py — Instagram sort/server sync worker helper.

역할:
- yjm_win2rtc 안에서 서버/yellow.php/MySQL 연동만 담당한다.
- 마우스 클릭, hover 판단, md5 계산, UI 조작은 하지 않는다.
- test.py 레거시 진단 파일에서 API 호출 기능만 추출한 모듈이다.
    )annotationsN)AnyCallablezhttps://n.yjm.kr/i/yellow.php
ABC1234XYZc                     t         j                  j                  d      xs t        j                         xs dj                         xs dS )NCOMPUTERNAMElocal_pc)osenvirongetsocketgethostnamestrip     D:\_St\WS8771\ws8771_ig_sort.pydefault_userr      s7    JJNN>*Pf.@.@.BPjWWYg]ggr   c                d    t        | xs d      }t        |      dk  r|rdS dS |d d dz   |dd  z   S )N    z****   z...)strlen)valuess     r   mask_secretr      sC    EKRA
1v{v""Ra55=1RS6!!r   c                   t        | t              r| ni } t        | j                  d      t              r| j                  d      ni }t        |j                  dd            t	        |j                  d      xs t
              j                         t	        |j                  d      xs t              j                         t        |j                  d      xs d      dS )	N
yellow_apienabledTurltokentimeout_sec
   )r    r!   r"   r#   )	
isinstancedictr   boolr   DEFAULT_BASE_URLr   DEFAULT_TOKENfloat)cfgapis     r   _api_cfgr-   %   s    C&#BC#-cggl.CT#J#'',
PRC	4013775>5%56<<>SWWW%67==?SWW]39r:	 r   c                J   |xs d }t        |       }|j                  dd      s |d        ddddS t        |j                  d      xs d	      j                         }t        |j                  d
      xs d	      j                         }|s |d        dddS t        xs d	      |d}|j	                  |xs i j                         D 	ci c]  \  }}	|		||	 c}	}       t        |      }
d
|
v rt        |
j                  d
            |
d
<   t        j                  j                  |      j                  d      }t        j                  j                  ||ddid      }d:fd}	  |d d|j                  dd	       d|j                  dd	              t        j                  j                  |t        |j                  d      xs d            5 }|j!                         j#                  dd       } ||t%        |d!d            } |d" d#|j                  d$       d%|j                  d&d	       d'|j                  dd	       d(|j                  d)d	       d*|j                  d+d	              |cddd       S c c}	}w # 1 sw Y   yxY w# t        j&                  j(                  $ r6}	 |j!                         j#                  dd       }n# t*        $ r d	}Y nw xY w ||t-        t%        |d,d-      xs d-            }t        |j                  d+      xs |j.                  xs |      }d|d.t-        t%        |d,d-      xs d-      |d/}d0D ]  }||v s|j                  |      ||<     |d1 d'|j                  d       d(|j                  d)d	       d*| d2t        |j                  d3      xs d	      dd4  d5|j                  d6d	              |cY d}~S d}~wt*        $ r(} |d7 d*|        dt        |      d8d9cY d}~S d}~ww xY w);u}   Call yellow.php.

    반환은 항상 dict. 네트워크 실패는 예외를 던지지 않고 ok=False로 반환한다.
    c                     y )Nr   )msgs    r   <lambda>zcall_api.<locals>.<lambda>5   s    Dr   r    Tu#   ig_sort: 서버 전송 꺼짐 mode=Fyellow_api_disabled)okskippederrormoder!   r   r"   u    ig_sort: 서버 URL 없음 mode=yellow_api_url_empty)r3   r5   r6   )r6   r"   Nzutf-8zContent-Typez0application/x-www-form-urlencoded; charset=utf-8POST)dataheadersmethodhttp_statusc                    	 t        j                  |       }t        |t              s	dd| d d d}|j                  d       ||d<   |S # t        $ r dd| d d d}Y Fw xY w)NFbad_json_from_yellowi  )r3   r5   rawbad_responser6   r<   )jsonloads	Exceptionr%   r&   
setdefault)r?   r<   parsedr6   s      r   parse_responsez call_api.<locals>.parse_responseM   sy    	ZZ_F &$'!N3u:NF&$' +}  	/5DzF	s   A
 
AAu   ig_sort: 서버 요청 mode=z shortcode=	shortcodez asset=
asset_kindr#   r$   )timeoutreplace)errorsstatusu   ig_sort: 서버 응답 mode=z ok=r3   z exists=existsz status=z stage=error_stagez error=r5   coder   yellow_http_error)r3   r5   
error_coder<   r6   server_response)rN   sql_error_codeerror_classmessagetablemissing_columnsschemau!   ig_sort: 서버 HTTP 실패 mode=z	 message=rU   i  z	 missing=rW   u   ig_sort: 서버 실패 mode=yellow_api_error)r3   r5   rQ   r6   )r?   r   r<   z
int | Nonereturndict[str, Any])r-   r   r   r   updateitemsr&   r   urllibparse	urlencodeencoderequestRequesturlopenr*   readdecodegetattrr5   	HTTPErrorrC   intreason)r+   r6   fieldsloggerr,   r!   r"   payloadkvlog_payloadbodyreqrF   resr?   rE   eserver_errorresultkeys    `                   r   call_apirx   0   sI   
 )(F
3-C779d#4TF;<7LVZ[[
cggen"
#
)
)
+C &B'--/E1$89&<dKK4:27GNNfl%9%9%;M%;TQq}AqD%;MNw-K+*;??7+CDG<<!!'*11':D
..
 
 !ST	 ! C&^-dV;w{{;WY?Z>[[bcjcncno{|~c  cA  B  	C^^##Csww}7M7SQS1T#UY\((*##GI#>C#Ch)EFFvT&**T"2!38FJJxPR<S;T U **]267wvzz-XZ?[>\\cdjdndnovwydzc{}
  VU; N: VU <<!! 	&&(//')/<C 	C	SFA)>)C!%DE6::g.?!((?a@!-wq&!49:%
 uCf}$jjos u 	6&**]";!<GFJJ}]_D`Ca b!N)C

90E0K,LUd,S+T Uzz"3B78:	
  ^-dV71#>?c!f<NX\]]^s   
J
"J
5A.J #B J	J JJ J P">!K O. K.+O.-K..A:O.)A?O.(P".P":PP"P")rx   r   r   r(   r)   )rZ   r   )r   r   rZ   r   )r+   dict[str, Any] | NonerZ   r[   )NN)
r+   ry   r6   r   rk   ry   rl   zLogFn | NonerZ   r[   )__doc__
__future__r   rA   r
   r   urllib.errorr^   urllib.parseurllib.requesttypingr   r   r(   r)   r   LogFnr   r   r-   rx   __all__r   r   r   <module>r      s_    #  	      2 #h"R^j [r   