
    TNj"                       S SK Jr  S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
Jr  S SKJrJr  S SKJr  S SKJrJrJr  S S	KJrJrJr  S S
KJrJrJr  S SKJrJ r   S SK!J"r#J$r$  S SK%J&r&J'r'J(r(J)r)J*r*  \	" SSSSSS9r+ " S S\5      r, " S S\5      r- " S S\5      r. " S S\5      r/\+Ra                  S5      S9S j5       r1S:S jr2S;S jr3\+Ri                  S5      S 5       r5\+Ri                  S5      \
" S S!S"94S<S# jj5       r6\+Ro                  S$5      \
" S S!S"94   S=S% jj5       r8\+Ro                  S&5      \
" S S!S"94 S<S' jj5       r9\+Ro                  S(5      \
" S S!S"94   S>S) jj5       r:\+Ro                  S*5      \
" S S!S"94   S?S+ jj5       r;\+Ro                  S,5      \
" S S!S"94 S<S- jj5       r<\+Ro                  S.5      \
" S S!S"94   S@S/ jj5       r=\+Ri                  S05      S\
" S S!S"94   SAS1 jj5       r>\+Ri                  S25      \
" S S!S"94   SBS3 jj5       r?\+Ri                  S45      S5\
" S S!S"94     SCS6 jj5       r@\+Ro                  S75      \
" S S!S"94   SBS8 jj5       rAg)D    )annotationsN)Path)Any)FastAPIHeaderHTTPException)FileResponseJSONResponse)	BaseModel)INTERNAL_TOKEN_FILESOURCE_ROOTconnect)ensure_internal_tokeninit_core_schemautc_now)DEFAULT_MODELanalyze_texttest_connection)
start_sync
sync_state)
configuredsave_secret)delete_snapshotget_snapshotinit_source_schemalist_snapshotssource_statuszORIGUS Core0.1.0)titleversiondocs_url	redoc_urlopenapi_urlc                  8    \ rS rSr% S\S'   S\S'   SrS\S'   Srg)	TechCredentials!   strusernamepasswordhttp://nps3.cntd.ru/docsbase_url N)__name__
__module____qualname____firstlineno____annotations__r+   __static_attributes__r,       */mnt/data/_core_build/package/core/main.pyr%   r%   !   s    MM.Hc.r3   r%   c                  $    \ rS rSr% SrS\S'   Srg)SyncPayload&   N
str | Nonedocument_slugr,   )r-   r.   r/   r0   r9   r1   r2   r,   r3   r4   r6   r6   &   s     $M:$r3   r6   c                  .    \ rS rSr% S\S'   \rS\S'   Srg)OpenAIKeyPayload)   r'   api_keymodelr,   N)r-   r.   r/   r0   r1   r   r>   r2   r,   r3   r4   r;   r;   )   s    LE3r3   r;   c                  F    \ rS rSr% S\S'   S\S'   SrS\S'   SrS\S'   S	rg)
AIAnalyzePayload-   r'   purposetextNr8   instructionsr>   r,   )r-   r.   r/   r0   r1   rD   r>   r2   r,   r3   r4   r@   r@   -   s     L
I#L*#E:r3   r@   startupc                 ,    [        5         [        5         g )N)r   r   r,   r3   r4   rE   rE   3   s    r3   c                D    [        5       nU (       a  X:w  a
  [        SSS9eg )N  u+   Некорректный ORIGUS Core token.status_codedetail)r   r   )x_core_tokenexpecteds     r4   _check_tokenrN   8   s%    "$H<34abb 4r3   c                    [        5        nUR                  SU 45      R                  5       nU(       a  [        U5      OS sS S S 5        $ ! , (       d  f       g = f)Nz.SELECT * FROM connectors WHERE connector_key=?)r   executefetchonedict)keyconrows      r4   _connector_rowrV   =   s:    	cKKH#PYY[tCyT 
s   5A


Az/healthc                     SSSS.$ )Nokzorigus-corer   )statusservicer    r,   r,   r3   r4   healthr[   B   s    MGDDr3   z/api/status zX-ORIGUS-Core-Token)defaultaliasc                \   [        U 5        [        5       n[        S5      =(       d    0 n[        5       n[	        SSU[        S5      UR                  SS5      UR                  S5      UR                  S5      [        R                  " UR                  S5      =(       d    S	5      S
.US.5      $ )NopenaiTr   rY   not_configuredlast_test_at
last_error	meta_jsonz{})r   rY   rb   rc   meta)rX   r    
techexpertr`   runtime)	rN   r   rV   r   r
   secret_configuredgetjsonloads)rL   txr`   rg   s       r4   rY   rY   F   s    B(#)rFLG*84ZZ)9:!::n5L1::fjj5=>
   r3   z&/api/connectors/techexpert/credentialsc                   [        U5        U R                  R                  5       nU(       a  U R                  (       d
  [	        SSS9e[        SUU R                  U R                  R                  5       =(       d    SS.5        [        5        nUR                  SU R                  R                  5       =(       d    S45        UR                  5         S S S 5        SS	0$ ! , (       d  f       SS	0$ = f)
N  u2   Логин и пароль обязательны.rI   rf   r*   )r(   r)   r+   z|UPDATE connectors SET status='configured',base_url=?,last_error=NULL
                       WHERE connector_key='techexpert'rX   T)
rN   r(   stripr)   r   r   r+   r   rP   commit)payloadrL   r(   rT   s       r4   save_techexpert_credentialsrr   Z   s    
 ##%H7++3ghh####))+I/I 
 
c ;%%++-K1KM	O 	

	 

 ; 

 ;s   AC
C/z/api/connectors/techexpert/testc                   [        U 5        [        S5      (       d
  [        SSS9eSS KnSS Kn[        [        5      R                  5       R                  nUR                  UR                  SSS/[        U5      S	S	S
S9nUR                  =(       d    SS-   UR                  =(       d    S-   R                  5       nUR                  S:w  a  [        SUSS  =(       d    SS9eS	USS  =(       d    SS.$ )Nrf   rn   7   Сначала настройте Техэксперт.rI   r   z-mzconnectors.techexpertz
test-loginT   )cwdrC   capture_outputtimeoutr\   
iHu)   Авторизация не прошла.u   Авторизация: OK)rX   message)rN   rh   r   
subprocesssysr   __file__resolveparentrun
executabler'   stdoutstderrro   
returncode)rL   r{   r|   baseresultoutputs         r4   test_techexpertr   o   s     \**3lmm	h			!	(	(D>>	4\BI4tC  F ]] b$&(;<CCEFA6%&>3pEpqquv N2NOOr3   z/api/connectors/techexpert/syncc                   [        U5        [        S5      (       d
  [        SSS9e [        U R                  =(       d    SR                  5       =(       d    S 5      nSUS.$ ! [         a  n[        S[        U5      S9UeS nAff = f)Nrf   rn   rt   rI   r\   T)rX   pid)rN   rh   r   r   r9   ro   RuntimeErrorr'   )rq   rL   r   excs       r4   sync_techexpertr      s    
 \**3lmmF--3::<DE C    F3s8<#EFs   5A! !
B+A??Bz/api/connectors/openai/keyc           	        [        U5        U R                  R                  5       nU R                  R                  5       =(       d    [        nU(       d
  [        SSS9e[        SX#S.5        [        5        nUR                  S[        R                  " SU0SS	945        UR                  5         S S S 5        S
US.$ ! , (       d  f       N= f)Nrn   u   API key обязателен.rI   r`   )r=   r>   zyUPDATE connectors SET status='configured',last_error=NULL,meta_json=?
                       WHERE connector_key='openai'r>   F)ensure_asciiT)rX   r>   )rN   r=   ro   r>   r   r   r   r   rP   rj   dumpsrp   )rq   rL   rS   r>   rT   s        r4   save_openai_keyr      s    
 C
--



0=E3RSSC67	c 7ZZUCE	G 	

	 

 e$$ 
s   69B<<
C
z/api/connectors/openai/testc                "   [        U 5         [        5       $ ! [         am  n[        5        nUR	                  S[        U5      S S 45        UR                  5         S S S 5        O! , (       d  f       O= f[        S[        U5      S9UeS nAff = f)NziUPDATE connectors SET status='error',last_error=?
                           WHERE connector_key='openai'i  rn   rI   )rN   test_openai_connection	Exceptionr   rP   r'   rp   r   )rL   r   rT   s      r4   test_openair      s~     F%'' FY#KK ;<?HUdO;MOJJL YY 3s8<#EFs+   	 
B
B	0A$	B	$
A2	.B		Bz/api/ai/analyzec                    [        U5         [        U R                  R                  5       =(       d    SU R                  U R
                  U R                  S9$ ! [         a  n[        S[        U5      S9UeS nAff = f)Ngeneral)rB   rC   rD   r>   rn   rI   )
rN   r   rB   ro   rC   rD   r>   r   r   r'   )rq   rL   r   s      r4   
ai_analyzer      sr    
 FOO))+8y ----	
 	
  F3s8<#EFs   A
A 
A;"A66A;z/api/snapshotsc                t    [        U5        S[        U =(       d    SR                  5       =(       d    S 5      S.$ )NTr\   )rX   items)rN   r   ro   )r9   rL   s     r4   	snapshotsr      s/    
 nm.Ar-H-H-J-RdSTTr3   z/api/snapshots/{snapshot_id}c                Z    [        U5        [        U 5      nU(       d
  [        SSS9eSUS.$ )N  !   Версия не найдена.rI   T)rX   item)rN   r   r   )snapshot_idrL   r   s      r4   snapshot_metar      s2    
 	k	"D3VWWT""r3   z%/api/snapshots/{snapshot_id}/downloadsourcec                   [        U5        [        U 5      nU(       d
  [        SSS9eSSSSS.R                  U5      nU(       d
  [        S	S
S9eUR                  U5      nU(       d
  [        SSS9e[	        U5      R                  5       n UR                  [        R
                  " 5       5        UR                  5       (       d
  [        SSS9e[        XfR                  SS0S9$ ! [         a  n[        SSS9UeS nAff = f)Nr   r   rI   	text_path	html_pathdownloaded_file_pathmanifest_path)rC   htmlr   manifestrn   u)   Неизвестный тип файла.u    Файл отсутствует.rH   u"   Некорректный путь.u   Файл не найден.zCache-Controlzprivate, no-store)filenameheaders)rN   r   r   ri   r   r~   relative_tor   
ValueErrorexistsr	   name)r   kindrL   r   fieldrawpathr   s           r4   snapshot_downloadr      s     	k	"D3VWW+7MYh	c$i 
 3^__C3UVV	c			Db,,./ ;;==3PQQiiI\8]^^	  b3WX^aabs   $C$ $
C>.C99C>z#/api/snapshots/{snapshot_id}/deletec                    [        U5         [        U 5      nSUS.$ ! [         a  n[        S[	        U5      S9UeS nAff = f)Nr   rI   T)rX   r   )rN   r   r   r   r'   )r   rL   r   r   s       r4   snapshot_deleter      sP    
 F{+ v&&  F3s8<#EFs    
A ;A )returnNone)rL   r'   r   r   )rS   r'   r   zdict[str, Any] | None)rL   r'   )rq   r%   rL   r'   )rq   r6   rL   r'   )rq   r;   rL   r'   )rq   r@   rL   r'   )r9   r8   rL   r'   )r   intrL   r'   )r   r   r   r'   rL   r'   )B
__future__r   rj   ospathlibr   typingr   fastapir   r   r   fastapi.responsesr	   r
   pydanticr   core_dbr   r   r   core_schemar   r   r   connectors.openai_apir   r   r   r   rg   r   r   secret_storer   rh   r   source_storer   r   r   r   r   appr%   r6   r;   r@   on_eventrE   rN   rV   ri   r[   rY   postrr   r   r   r   r   r   r   r   r   r   r,   r3   r4   <module>r      sW   "  	   2 2 8  = = H H h h * E  
/i /
%) %y y  i c
*
 E E %b8MN  & 
23 r1FG 4( 
+,r1FGPP -P" 
+, r1FG!!! -! 
&' r1FG%%% (%" 
'(r1FGFF )F 
 r1FGFFF F 	 $r1FGUUU U 	'( r1FG### )# 	01 r1FG__	_ _ 2_4 
/0 r1FG	'	'	' 1	'r3   