
    9_i4                     n    S r SSKrSSKJr  SSKJrJr  SSKJr  SSKJ	r	   " S S	\R                  5      rg)
ug   
部署相关模型

包含部署记录模型（状态日志已合并到 status_history JSON 字段）
    N)datetime   )dbget_beijing_now)ChallengeRecord)Userc                   `   \ rS rSrSrSr\R                  " \R                  SS9r	\R                  " \R                  " S5      SSS9r\R                  " \R                  \R                  " S	S
S95      r\R                  " \R                  \R                  " S5      5      r\R                  " \R                  " S5      SS9r\R                  " \R                  " S5      5      r\R                  " \R                  " S5      5      r\R                  " \R                  " S5      5      r\R                  " \R                  " S5      5      r\R                  " \R                  5      r\R                  " \R*                  \S9r\R                  " \R*                  \\S9r\R                  " \R*                  5      r\R                  " \R4                  \S9r\R:                  " S\R<                  " SSS9S9r\R:                  " S\R<                  " SSS9S9r S r!S S\"S\"4S jjr#S r$\%S 5       r&Sr'g)!DeploymentRecord   u   部署记录模型deploymentsT)primary_key2   F)uniquenullablezchallenge_records.idCASCADE)ondeletezusers.id   creating)defaultd      )r   onupdater   dynamic)lazy)backrefr   c                    U R                   c  / $ [        U R                   [        5      (       a!   [        R                  " U R                   5      $ [        U R                   [
        5      (       a  U R                   $ / $ !   / s $ = f)u   获取状态历史列表)status_history
isinstancestrjsonloadslistselfs    =/Users/yu22x/Desktop/ge/ctf/app/models/database/deployment.pyget_status_history#DeploymentRecord.get_status_history&   sr    &Id))3//zz$"5"566 '11D1Dd&K&Kt""SQSS	s   A= =BNstatusmessagec                     U R                  5       nUU=(       d    S[        5       R                  5       S.nUR                  U5        X0l        Xl        [        5       U l        g)uA   添加状态日志

Args:
    status: 状态
    message: 消息
 )r(   r)   	timestampN)r&   r   	isoformatappendr   r(   
updated_at)r$   r(   r)   history	log_entrys        r%   add_status_logDeploymentRecord.add_status_log1   sU     ))+}"(*446
	
 	y!%)+    c                 D   U R                   U R                   U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  U R                  5       S.$ )u   转换为字典)iddeployment_uuidchallenge_iduser_idr(   container_idcontainer_nameworking_directory
access_urlexternal_port
created_atr/   
expires_atr   )r7   r8   r9   r(   r:   r;   r<   r=   r>   r?   r/   r@   r&   r#   s    r%   to_dictDeploymentRecord.to_dictD   s     &&#33 --||kk --"11!%!7!7//!////////"557
 	
r4   c                    U R                  S5      nU(       d  SU ;   a  U R                  S5      n[        UU R                  S5      U R                  S5      U R                  SS5      U R                  S5      U R                  S5      U R                  S	5      U R                  S
5      U R                  S5      U R                  S5      (       a  [        R                  " U S   5      S9
$ SS9
$ )u   从字典创建部署记录r7   r6   r8   r9   r(   r   r:   r;   r<   r=   r>   r@   N)
r7   r8   r9   r(   r:   r;   r<   r=   r>   r@   )getr
   r   fromisoformat)datar7   s     r%   	from_dictDeploymentRecord.from_dictW   s     ((#4544<"hhtnO+.1HHY'88Hj1.188$45"hh':;xx-((?3EIXXlE[E[x--d<.@A
 	
 bf
 	
r4   )r(   r   r/   )N)(__name__
__module____qualname____firstlineno____doc____tablename__r   ColumnIntegerr6   Stringr7   
ForeignKeyr8   r9   r(   r:   r;   r<   r=   r>   DateTimer   r?   r/   r@   JSONr"   r   relationshipr   	challengeuserr&   r   r2   rA   staticmethodrG   __static_attributes__ r4   r%   r
   r
      s   !M	2::4	0Bii		"dUKO99RZZ7MXa)bcLii

BMM*$=>GYYryy}j9F99RYYs^,LYYryy~.N		"))C.1299S>*JIIbjj)M2;;@J2;;/ZJ2;;'JYYrww5N  12::mZc;deI??62::m)+TUD	T,S ,3 ,&
& 
 
r4   r
   )rM   r    r   baser   r   rV   r   rW   r   Modelr
   rZ   r4   r%   <module>r]      s-      % & [
rxx [
r4   