
    i
                     :   d Z ddlZddlZddlZddlZddlmZ ddlmZ  eej                  j                  dd            Z
e
dz  dz  Zd	d
id	d
id
dddZddddZg dZdedefdZdefdZdedefdZdededdfdZddZddZddZd Zedk(  r e        yy) >   kickoff.py - 프로젝트 킥오프 상태 관리 유틸리티    N)datetime)PathKICKOFF_BASE_DIRz/home/jay/workspacememorykickoffstatuspendingjay)r	   by)phase0_reviewphase2_reviewphase3_approvalr   r   r   )r         )r      r   r   projectreturnc                     t         | z  dz  S )Nzkickoff-state.json)KICKOFF_DIR)r   s    /home/jay/workspace/kickoff.pyget_state_pathr      s     #777    c                  H    t        j                         j                  d      S )Nz%Y-%m-%dT%H:%M:%S)r   nowstrftime r   r   now_isor   !   s    <<>""#677r   c                     t        |       }|j                         s6t        d|  d| t        j                         t        j
                  d       |j                  dd      5 }t        j                  |      cd d d        S # 1 sw Y   y xY w)Nz2[ERROR] kickoff-state.json not found for project '': filer   rutf-8encoding)	r   existsprintsysstderrexitopenjsonload)r   
state_pathfs      r   
load_stater1   %   sv    (J@	ZLY	
 		w	/ 1yy|  s   %BBstatec                     t        |       }|j                  dd      5 }t        j                  ||dd       d d d        y # 1 sw Y   y xY w)Nwr$   r%   Fr   )ensure_asciiindent)r   r,   r-   dump)r   r2   r/   r0   s       r   
save_stater8   1   sE    (J	w	/ :1		%q9: : :s   AAc                    | j                   }| j                  }t        |      }|j                         r6t	        d| d| t
        j                         t        j                  d       |j                  j                  dd       t        D ci c]  }t        |      ddi }}d	d l}|j                  t              }||d	t               ||d
}t!        ||       t	        d| d| d       t	        d|        y c c}w )Nz7[ERROR] kickoff-state.json already exists for project 'r    r!   r   T)parentsexist_okr	   r
   r   )r   task_idcurrent_phase
created_atphasesapproval_pointsz1[OK] Initialized kickoff-state.json for project 'z	' (task: )z     Path: )r   taskr   r'   r(   r)   r*   r+   parentmkdirVALID_PHASESstrcopydeepcopyAPPROVAL_POINTS_TEMPLATEr   r8   )	argsr   r<   r/   ir?   rG   r@   r2   s	            r   cmd_initrL   7   s    llGiiG(JEgYcR\Q]^	
 	D485ABc!fx++BFBmm$<=O i*E w	=gYiPWyXY
Z[	K
|
$%! Cs   C=c                    | j                   }t        |      }t        d|d    d       t        d|j                  dd              t        d|j                  dd              t        d	|j                  d
d              t                t        d       |j                  di       }t	        |j                         d       D ]  }||   }|j                  dd      }|j                  dd       }|j                  dd       }|j                  dd       }	d| d| }
|	r|
d|	 z  }
|r|
d| z  }
|r|
d| z  }
t        |
        t                t        d       |j                  di       }|j                         D ]b  \  }}|j                  dd      }|j                  dd       }|j                  dd       }d| d| }
|r|
d| z  }
|r|
d| z  }
t        |
       d y ) Nz=== Kickoff Status: r   z ===z  Task ID      : r<   zN/Az  Current Phase: r=   z  Created At   : r>   z
[ Phases ]r?   c                     t        |       S )N)int)xs    r   <lambda>zcmd_status.<locals>.<lambda>e   s
    Q r   )keyr	   unknownoutputcompleted_at
started_atz  Phase z: z | started: z | completed: z | output: z[ Approval Points ]r@   r   atz  z | by: z | at: )r   r1   r(   getsortedkeysitems)rJ   r   r2   r?   	phase_keyphaser	   rT   rU   rV   liner@   ap_keyap_val	ap_statusr   rW   s                    r   
cmd_statusrb   Y   s   llGwE	 y!1 2$
78	eii	59:
;<	eii?@
AB	eiie<=
>?	G	,YYx$FFKKM/?@ 	y!8Y/8T*yy6YY|T2
)Bvh/l:,//Dn\N33Dk&**Dd  
G	
 ii 126O)//1 
JJx3	ZZd#ZZd#F82i[)gbTN"DgbTN"Dd
r   c           	         | j                   }| j                  }| j                  }|t        vr;t	        d| dt         dt
        j                         t        j                  d       t        |      }|j                  di       }t        |      }|j                  |i       }|j                  d      dk(  r4t	        d	| d
t
        j                         t        j                  d       |dkD  r~t        |dz
        }|j                  |i       }	|	j                  d      dk7  rJt	        d	|dz
   d|	j                  dd       dt
        j                         t        j                  d       t               }
||vri ||<   d||   d<   |
||   d<   |||   d<   t        j                  |      }|r||j                  di       v rd|d   |   d<   |dz   }|t        v r*t        |      }||vri ||<   d||   d<   |
||   d<   ||d<   n||d<   ||d<   t        ||       t	        d| d       t	        d|        |t        v rt	        d| d       nt	        d       |rt	        d| d       y y )Nz[ERROR] Invalid phase number: z. Must be one of .r!   r   r?   r	   	completedz[ERROR] Phase z is already completed.r   z  is not completed yet (status: 'rS   z').rU   rT   r@   pending_reviewin_progressrV   r=   z[OK] Phase z marked as completed.z     Output: z     Phase z is now in_progress.z     All phases completed.z     Approval point 'z' set to pending_review.)r   r]   rT   rE   r(   r)   r*   r+   r1   rX   rF   r   PHASE_TO_APPROVALr8   )rJ   r   	phase_numoutput_pathr2   r?   r\   r=   prev_phase_key
prev_phasetsr_   next_phase_numnext_phase_keys                 r   cmd_phase_donerp      s   llG

I++K$,YK7HVWX	
 	wEYYx$FII JJy"-M"k1YK'=>	
 	 1}Y]+ZZ3
>>(#{2 Q/OPZP^P^_girPsOttwxZZ HHQK 
By"-F9h(*F9n%"-F9h ""9-F&EII&7<<5E (2 ]N%^,'%'F>"+8~x(/1~|,!/o "+oE(Ow	K	{"7
89	M+
'(%N++?@A*+%fX-EFG r   c                     t        j                  d      } | j                  dd      }|j                  dd      }|j	                  d	dd
       |j	                  ddd       |j                  dd      }|j	                  d	dd
       |j                  dd      }|j	                  d	dd
       |j	                  ddt
        d       |j	                  ddd       | j                         }|j                  dk(  rt        |       y |j                  dk(  rt        |       y |j                  dk(  rt        |       y t        d|j                   t        j                         t        j                  d       y )Nr   )descriptioncommandT)destrequiredinitu   kickoff-state.json 초기화)helpz	--projectu   프로젝트 이름)ru   rw   z--tasku   루트 태스크 IDr	   u   현재 상태 조회z
phase-doneu   Phase 완료 마킹z--phaseu   완료할 Phase 번호 (0~3))ru   typerw   z--outputu   Phase 출력 파일 경로z[ERROR] Unknown command: r!   r   )argparseArgumentParseradd_subparsers
add_parseradd_argumentrO   
parse_argsrs   rL   rb   rp   r(   r)   r*   r+   )parser
subparsersinit_parserstatus_parserphase_done_parserrJ   s         r   mainr      si   $$TF &&I&EJ ''5S'TK[4>STX;PQ ))(9O)PM{T@UV #--lAV-W"";DY"Z""9t#Lj"k"":C_"`D||v		!4		%t)$,,8szzJr   __main__)r   N)__doc__ry   r-   osr)   r   pathlibr   environrX   BASE_DIRr   rI   rh   rE   rF   r   r   dictr1   r8   rL   rb   rp   r   __name__r   r   r   <module>r      s    D   	 
  

13HIJ!I- 	*	*"+59    8C 8D 88 8	 	 	: :D :T :&D)XIHXD zF r   