
    lOi                         S 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	  SSK
Jr  SSKJrJr  SSKJr  SS	KJr  \R&                  " S
S/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " S
S/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " SS/S9\S 5       5       r\R&                  " SS/S9\S 5       5       rg) uX   
待分类 Writeup API

提供待分类 Writeup 的管理、分类、审核等功能。
    N)request)category_api_bp)category_admin_requiredget_current_user)APIResponse)NotFoundErrorValidationError)PendingWriteup)WriteupClassificationServicez/<category_id>/pending-writeupsGET)methodsc                 ,   [         R                  R                  S5      n[         R                  R                  SS[        S9n[         R                  R                  SS[        S9n[	        5       nUR                  XX#5      n[        R                  " US9$ )u   获取待处理 Writeup 列表statuspage   )typeper_page   data)r   argsgetintr   get_pending_listr   success)category_idr   r   r   serviceresults         S   /Users/yu22x/Desktop/ddd_副本121/ctf/app/routes/admin/category/pending_writeup.pyget_pending_writeupsr       sy     \\h'F<<FAC0D||
BS9H*,G%%k4JFF++    z%/<category_id>/pending-writeups/statsc                 d    [        5       nUR                  U 5      n[        R                  " SU0S9$ )u$   获取待处理 Writeup 统计信息statsr   )r   get_statisticsr   r   )r   r   r#   s      r   get_pending_writeups_statsr%      s2     +,G"";/EWe$455r!   POSTc                    S[         R                  ;  a  [        S5      e[         R                  S   nUR                  S:X  a  [        S5      eUR                  R	                  S5      (       d  [        S5      e UR                  5       R                  S5      n[        UR                  S5      5      n[        5       n[        5       nUR                  U UR                  UUU(       a  UR                  OSS9n[        R                  " S	U0S
UR                   S3S9$ ! [         a    e [         a,  n[        R                   " S[#        U5       35      s SnA$ SnAff = f)u   上传 Writeup 到待处理区file   请选择文件 .mdu   只支持 .md 文件utf-8Nr   filenamecontent	file_sizeuser_idwriteupu   文件 u    上传成功r   messageu   上传失败: )r   filesr	   r.   endswithreaddecodelenencoder   r   upload_writeupidr   r   	Exceptionserver_errorstr)r   r(   r/   r0   userr   r   es           r   upload_pending_writeuprB   )   s:    W]]"/00== D}}/00==!!%((455C))+$$W-w/0	!.0''#]]#DGG ( 
 ""V$dmm_M:
 	
   C''.Q(ABBCs   :B!D E0!EEEz,/<category_id>/pending-writeups/batch-uploadc                 H   S[         R                  ;  a  [        S5      e[         R                  S   nUR                  S:X  a  [        S5      eUR                  R	                  S5      (       d  [        S5      e [        5       n[        5       nU(       a  UR                  OSnSnSn[        R                  " [        R                  " UR                  5       5      S5       nUR                  5        H  nUR	                  S	5      (       d  M  UR                  S
5      (       a  M3   UR                  U5      R                  S5      n	UR!                  S5      S   n
UR#                  U U
U	[%        U	R'                  S5      5      US9  US-  nM     SSS5        [*        R,                  " XVS.SU SU S3S9$ ! [(         a  nUS-  n SnAM  SnAff = f! , (       d  f       NI= f! [         a    e [(         a,  n[*        R.                  " S[1        U5       35      s SnA$ SnAff = f)u$   批量上传 Writeup（支持 ZIP）r(   r)   r*   z.zipu   只支持 .zip 文件Nr   rr+   __MACOSXr,   /r-   r   )uploadedskippedu   上传完成：成功 u    个，跳过 u    个r3   u   批量上传失败: )r   r5   r	   r.   r6   r   r   r<   zipfileZipFileioBytesIOr7   namelist
startswithr8   splitr;   r9   r:   r=   r   r   r>   r?   )r   r(   r@   r   r1   rH   rI   zfnamer/   r.   rA   s               r   batch_upload_pending_writeupsrS   O   s    W]]"/00== D}}/00==!!&))566!I!.0!$''t__RZZ		4c:b==''
0K0K%"$''$-"6"6w"?#'::c?2#6..(3%-$+&)'..*A&B$+ /  !A & ;$ ""&;,XJnWITR
 	
 % %1% ;:,   I''*>s1vh(GHHIsh   :A&G!  (GG%A$F3	G%G! 3
G=GGGG
GG! !H!5!HH!H!z0/<category_id>/pending-writeups/<int:writeup_id>c                     [         R                  R                  UU S9R                  5       nU(       d  [	        S5      eUR                  5       nUR                  US'   [        R                  " SU0S9$ )u   获取待处理 Writeup 详情)r<   r   u   Writeup 不存在r/   r2   r   )	r
   query	filter_byfirstr   to_dictr/   r   r   )r   
writeup_idpendingr   s       r   get_pending_writeup_detailr[      sr     "",, -  eg 
 /00__FF9Y$788r!   z9/<category_id>/pending-writeups/<int:writeup_id>/classifyc                 8   [        5       nUR                  U5      nUR                  S5      (       a5  [        R                  " UR                  S0 5      UR                  SS5      S9$ [        R
                  " UR                  SS5      UR                  SS	5      S
9$ )u   AI 分类单个 Writeupr   r   r4   r*   r3   erroru   分类失败code  r^   )r   classify_writeupr   r   r   r]   r   rY   r   r   s       r   classify_pending_writeuprc      s     +,G%%j1Fzz)""

62(>

S\^`Habb  G^!D6::V\^aKbccr!   z./<category_id>/pending-writeups/batch-classifyc                    [         R                  " 5       =(       d    0 nUR                  S5      n[        5       nUR	                  X5      nUR                  S5      (       a5  [
        R                  " UR                  S0 5      UR                  SS5      S9$ [
        R                  " UR                  SS5      UR                  S	S
5      S9$ )u   批量 AI 分类 Writeupwriteup_idsr   r   r4   r*   r3   r]   u   批量分类失败r^   r_   r`   )r   get_jsonr   r   batch_classifyr   r   r]   )r   r   re   r   r   s        r   batch_classify_pending_writeupsrh      s     #D((=)K*,G##K=Fzz)""

62(>

S\^`Habb  G5I!JQWQ[Q[\bdgQhiir!   z8/<category_id>/pending-writeups/<int:writeup_id>/approvec                 N   [         R                  " 5       =(       d    0 n[        5       n[        5       nUR	                  UUR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  SS5      U(       a  UR                  OSS9nUR                  S	5      (       a5  [        R                  " UR                  S
0 5      UR                  SS5      S9$ [        R                  " UR                  SS5      UR                  SS5      S9$ )u   审核通过并入库 Writeupknowledge_item_idnew_item_namenew_item_category_idtagsqualityBN)rY   rj   rk   rl   rm   rn   r1   r   r   r4   r*   r3   r]   u   审核失败r^   r_   r`   )
r   rf   r   r   approve_writeupr   r<   r   r   r]   )r   rY   r   r@   r   r   s         r   approve_pending_writeuprq      s     #DD*,G$$((#67hh/!XX&<=XXfC(T % F zz)""

62(>

S\^`Habb  G^!D6::V\^aKbccr!   z7/<category_id>/pending-writeups/<int:writeup_id>/rejectc                 p   [        5       n[        5       nUR                  UU(       a  UR                  OSS9nUR	                  S5      (       a5  [
        R                  " UR	                  S0 5      UR	                  SS5      S9$ [
        R                  " UR	                  SS	5      UR	                  S
S5      S9$ )u   拒绝 WriteupN)rY   r1   r   r   r4   r*   r3   r]   u   拒绝失败r^   r_   r`   )r   r   reject_writeupr<   r   r   r   r]   )r   rY   r@   r   r   s        r   reject_pending_writeuprt      s     D*,G##T $ F
 zz)""

62(>

S\^`Habb  G^!D6::V\^aKbccr!   DELETEc                    [        5       nUR                  U5      nUR                  S5      (       a$  [        R                  " UR                  SS5      S9$ [        R
                  " UR                  SS5      UR                  SS5      S	9$ )
u   删除待处理的 Writeupr   r4   u   删除成功)r4   r]   u   删除失败r^   r_   r`   )r   delete_writeupr   r   r   r]   rb   s       r   delete_pending_writeuprx      sr     +,G##J/Fzz)""6::i+PQQ  G^!D6::V\^aKbccr!   )__doc__rJ   rL   flaskr   app.routes.admin.categoryr   app.middleware.authr   r   app.utils.responser   app.utils.exceptionsr   r	   app.models.database.modelsr
   )app.services.knowledge.writeup_classifierr   router    r%   rB   rS   r[   rc   rh   rq   rt   rx    r!   r   <module>r      s  
  	  5 I * ? 5 R 85'J	,  K	, >P6  Q6 86(K!C  L!CH EPVxX-I  Y-I` ITYSZ[9  \9  R]c\ded  fd GRXQYZj  [j Q\b[cdd  ed, P[aZbcd  dd IT\S]^d  _dr!   