
    5iٟ                        d Z ddlmZmZmZ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mZ ddlZddlmZ ddlmZmZ dd	lmZmZmZmZmZmZmZ dd
lmZmZmZmZ ddl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. 	 ddl/Z0d Z3d Z4g dZ5e3d d d d d d d d d d dZ6d Z7d Z8d Z9d Z:d  Z;d&d!Z<d" Z=d# Z> G d$ d%e?      Z@y# e1$ rZ2ddl0Z0Y dZ2[2UdZ2[2ww xY w)'zN
Functions and classes used when launching platform executables from the CLI.
    )print_functionunicode_literalsdivisionabsolute_importN   )
DXWorkflow   )INTERACTIVE_CLI)
DXCLIErrorDXError)REDGREENWHITEBOLDENDC	UNDERLINEfill)get_find_executions_stringget_ls_l_descget_ls_l_desc_fieldsparse_typespec)
parse_input_keyval	is_hashid	is_job_idis_localjob_idpaginate_and_pickpickresolve_existing_pathresolve_multiple_existing_pathssplit_unescapedis_analysis_id)OrderedDefaultdict)
basestringc                     t        |       dkD  rJdj                  | j                               s| dk(  rydj                  | j                               s| dk(  ryt        d| z   d	z         )
Nr   true1Tfalse0FCould not resolve "z" to a boolean)len
startswithlowerr   strings    r/home/marpiech/ifpan-abm-pgxpred/analysis/marpiech-gwas-test/venv/lib/python3.12/site-packages/dxpy/cli/exec_io.py
parse_boolr0   .   s^    
6{QV\\^,#/6S=
+f48II
JJ    c                     | dk(  rt        d      t        |       \  }}}|t        d| z   dz         |d   d   |k(  st        d|d   d   z   dz   |z   d	z         t        |       rd
|d   iS d
|d   d   |d   diS )N z)Error: Nonempty string cannot be resolvedr)   " to a name or IDdescribeclassz$Error: The given object is of class z but an object of class z was expected.$dnanexus_linkidprojectr9   r8   )r   r   r   )r.   klassr9   pathentity_results        r/   	parse_objr>   6   s    |DEE#8#@ GT=/&8;OOPP$W-6?-PZB[\cBdd  hB  B  EJ  J  M]  ]  ^  	^ -"566 mJ.G	.R)6t)<#> ? 	?r1   )recordfileappletworkflowc                     | S N r-   s    r/   <lambda>rF   G   s     r1   c                     t        |       S rD   )floatr-   s    r/   rF   rF   H   s
    f r1   c                     t        |       S rD   )intr-   s    r/   rF   rF   I   s
    c&k r1   c                 ,    t        j                  |       S rD   )jsonloadsr-   s    r/   rF   rF   J   s    tzz&'9 r1   c                     t        | d      S )Nr?   r>   r-   s    r/   rF   rF   K       68)D r1   c                     t        | d      S )Nr@   rO   r-   s    r/   rF   rF   L   s    y'@ r1   c                     t        | d      S )NrA   rO   r-   s    r/   rF   rF   M   rP   r1   c                     t        | d      S )NrB   rO   r-   s    r/   rF   rF   N   s    9VZ+H r1   c                 
    d| iS Nr7   rE   r-   s    r/   rF   rF   O       '7&@ r1   c                 
    d| iS rU   rE   r-   s    r/   rF   rF   P   rV   r1   )booleanr.   rH   rJ   hashr?   r@   rA   rB   jobappc                     dd| ii}d|v r3|j                  dd      }|d   |d   d<   t        |d         |d   d<   |S ||d   d<   |S )z
    :param job_id: Job ID
    :type job_id: string
    :param field_name_and_maybe_index: Field name, plus possibly ".N" where N is an array index
    :type field_name_and_maybe_index: string
    :returns: dict of JBOR
    r7   rZ   .r	   r   fieldindex)rsplitrJ   )job_idfield_name_and_maybe_indexlinksplit_by_dots       r/   _construct_jborre   R   sy     ufo.D
((188a@*6q/w'*-l1o*>w' K +Ew'Kr1   c                     t        d|      }t        |      dk(  r.t        |d         st        |d         rt	        |d   |d         S | j                  d      r| dd  } t        |    |      S )N:r   r   r	   array:   )r    r*   r   r   re   r+   parse_input)in_classvalueval_substringss      r/   parse_input_or_jborrn   c   su    $S%0N
>aY~a/@%A^TbcdTeEf~a0.2CDDx(|H8$U++r1   c           
          t        t        t               | j                  d| d         z   dz   t	               z   dz   d| v r| d   ndz   dd             y )	Nlabelnamerg    helpz<no extra help available>  initial_indentsubsequent_indent)printr   r   getr   
param_descs    r/   print_param_helpr|   p   su    	$y{Z^^GZ5GHH3NQUQWWZ]]w}  BL  xLaklras  Rm  n  C  W[  \  ]r1   c                 >	   |d   j                  d      }t        |       t                d}| t        v rt        j
                  gd }	 t        j                  j                  t        j
                        d   }|2t        d|z   dz   t        j                  j                  dd      z          	 t        d
       	 t        g d      }|dk(  rt        j
                  }n|dk(  rcd }t        j
                  r2t	        j                  t        j
                        j                  d      }t	        j                  dd	ddd|      d   }n8|dk(  r3t	        j                  dd	d	      }	t        d       t        |	d       d   }|t!        d      v rzt	        j"                  | |j                  d      t%        t'                           }
t        d       t        |
d       }|d k(  rt        d!       A|d"k(  rH|d#   dz   |d   z   gS |dk(  rst	        j(                  t        j
                  d	d$%      }
t                t        d&       t        |
d' d( )      }|d k(  rt        d*       |d"k(  rd+|d,   v r"|d,   d+   d k7  r|d,   d+   j+                         }nyt	        j,                  |j                  d-|d.               }|j                         }d/|vr*t        d0       	 t/        d1      }|d2k(  rD|d   dz   |z   gS |d/   j+                         }t1        |      dkD  r%t        d3       t        |      }|d   dz   ||   z   gS t1        |      dk(  r t        d4|d   z          |d   dz   |d   z   gS t        d5       n?t        t3        d6| z   d7z   |r|nd2z                t5        j6                  t/        |            S | d8k(  r/|rt        t3        d9|z                nqt        t3        d:             n\| d;k(  r|rt        t3        d<|z                n=| d=k(  s| d>k(  r|rt        t3        d?|z                n| d@k(  rt        t3        dA             t/        |      }| d;k(  r|gS t5        j6                  |      S #  Y xY w# t        $ r d}Y w xY w# t        $ r Y w xY w)BNr6   rh   z), or <ENTER> to finish the list of inputsrq   z"Your current working directory is rg   	DX_CLI_WD/Tz"Pick an option to find input data:)z:List and choose from available data in the current projectzSList and choose from available data in the DNAnexus Reference Genomes Files projectz8Select another project to list and choose available datazASelect an output from a previously-run job (current project only)z:Return to original prompt (specify an ID or path directly)   r   r	   regionzReference Genome Files:*zorg-dnanexus_appsVIEWglob)rq   public	billed_tolevel	name_moder   r8   r   )r   r5   explicit_permsz
Projects to choose from:c                     | d   d   S )Nr5   rq   rE   results    r/   rF   z"interactive_help.<locals>.<lambda>   s    U[\fUghnUo r1      type)fields)	classnametypenamer5   r9   z
Available data:c                     t        | d         S )Nr5   )r   r   s    r/   rF   z"interactive_help.<locals>.<lambda>   s    -PVWaPbBc r1   z
none foundzNo compatible data foundznone pickedr9   none)r9   r5   
parent_jobz#Previously-run jobs to choose from:c                 $    t        | d   dd      S )Nr5   FT)has_childrensingle_result)r   r   s    r/   rF   z"interactive_help.<locals>.<lambda>   s    B\]cdn]ojokoCq r1   c                     | d   d   dvS )Nr5   state)unresponsiveterminating
terminatedfailedrE   r   s    r/   rF   z"interactive_help.<locals>.<lambda>   s     FS]L^_fLg  pg  Mg r1   )	filter_fnzNo jobs foundoutputr5   r[   rA   
outputSpecz'No output spec found for the executablez/Output field to use (^C or <ENTER> to cancel): r3   z
Output fields to choose from:zUsing the only output field: zNo available output fieldsz0Enter an ID or path (<TAB> twice for compatible zs in current directory)rX   zEnter "true", "false"zEnter "true" or "false"r.   zEnter a nonempty stringrH   rJ   zEnter a numberrY   zEnter a quoted JSON hash)r+   r|   rx   dx_data_classesdxpyWORKSPACE_IDapiproject_describeconfigry   r   KeyboardInterruptr5   find_one_projectfind_projectsr   rangefind_data_objectsdictr   	find_jobskeysget_handlerinputr*   r   shlexsplit)rk   r{   promptis_arrayarray_help_str	proj_nameopt_numquery_projectr   project_generatorresult_generatorresult_choicer   exec_handler	exec_descr^   field_choicer   s                     r/   interactive_helpr   s   s   '"--h7HZ 	G@N?"(I HH55d6G6GHP	 $:YFLt{{_jloOppq67  ^ _ !| $ 1 1A$$!]]4+<+<=AA(KF $ 5 5;U^b  oB  JP  \b  kq  !r  sw  !xA$($6$6Vdcg$h!23 12CFo qrv w%("#'#9#9HCM>>RXCYCGOcOeCfBO$Q  )* 12B3c!f L045"m3))4s:]4=PPQQA#'>>$:K:K;?=C$E  ;< 12B4q >g	!i
 !L0/*"m3=#<<zAZ[cAdhlAl,Z8BGGI'+'7'78I8I%Q^_gQh8i'j$0$9$9$;	'y8!"KL)(-._(`#(B;$,,9$,?#,E,M+N$N $-\#:#?#?#AD4y1}?@'+Dz -d 3c 9D<N NOOTa=QGH -d 3c 9DG CDD:;dMPXX[tt  KS  yG  Y[  \  ]  ^{{5=11g j y d2^CDEd456!hd4~EFG'!X%6H$'.89:$123vx8O;;v&&Q % x $5 ) ()s6   0Q5 9Q= R 0R 5Q:=RR	RRc                    | d   }|j                  d      r|dd  }| j                  dd       }g }t        dt        t	               | j                  d| d         z   t               z   dz   | d   z   d	z         z          t        d
| d   z          d| v rt        dt        | d         z          t                dt               z   t               z   dz   t               z   dz   }d}|t        v r	d|z   dz   }nd| v rd}nd| v rd}|j                  ||      }t        t        |             	 |t        v r/ddlm} t        j                   ||g|      j                         n|dk(  r/ddlm} t        j                   |ddg      j                         nd| v r>ddlm} t        j                   |t#        t$        | d               j                         nld| v r>ddlm} t        j                   |t#        t$        | d               j                         n*ddlm} t        j                   |       j                         	 	 | d   d z   t%        t)        |            z   d!z   }t+        |      }	|d"k(  r|	dk(  rg }	n|	g}	nt-        j.                  |	      }	|	dgk(  rt1        || |      }	|	dgk(  rt)        |	      d#kD  rt        t        d$             t)        |	      dk(  r|S 	 |j3                  t5        ||	d                #  Y xY w# t6        $ r0}
t        t        d%|z   d&z   t%        |
      z                Y d }
~
d }
~
wt8        $ r1}
t        t        d%|z   d&z   t%        |
      z                Y d }
~
2d }
~
ww xY w# t:        $ r |cY S w xY w)'Nr6   rh   ri   r   

Input:   rp   rq    ()	Class:   	Type(s): zFEnter {_class} values, one at a time (^D or <ENTER> to finish, {hint}'?' for more options)r3   <TAB> twice for compatible s in current directory, suggestions<TAB> twice for suggestions, choices<TAB> twice for choices, )_classhintr   DXPathCompleterclassestypespecrX   ListCompleterr%   r'   completionsNoneCompleter[z]: r.   r	   tError: more than one argument given.  Please quote your entire input or escape your whitespace with a backslash '\'.&Error occurred when parsing for class : )r+   ry   rx   r   r   r   r   r   r   r   formatdxpy.utils.completerr   readlineset_completercompleter   mapstrr   r*   r   r   r   r   appendrn   
ValueError	TypeErrorEOFError)r{   rk   r   input_arrayr   r   r   r   r   
user_inputdetailss              r/   get_input_arrayr      s   '"H8$AB<~~fd+HK	-$y{Z^^GZPVEW-XX[_[aadhhkuv|k}}  AD   D  E  E  F	+
7+
+,kN:f+=>>?	GUX]X__bfbhhknnquqww  {P  PFD?",x7:TT	*	$.	j	 *]](]6F	$v,&<""?H:<D$FFNhP":""=fg=N#O#X#XYj(:""=SjQ^F_=`#a#j#jk*$:""=SjQZF[=\#]#f#fg:""=?#;#;<'#-C4D0EEMFvJ8##!#J",J"[[4
%-h
FK
 %:"d  U  V  WZA%""""#6xA#OP% *  dChNQUUX[\cXddef dChNQUUX[\cXddef  sb   &DK?  A+M: ,2M:  L >M: ?L	M7&L:5M: :M7&M2,M: 2M77M: :NNc                 8   j                  d      rdd  fdt        v }|r!|| z   dj                  fd|D              z   S t        | dz   dj                  |D cg c]   }t	        j
                  t        |            " c}      z   |      S c c}w )	Nrh   ri   c                    t        j                  |       r't        j                  |       \  }}|r|dz   |z   S d|z   S t        j                  | j                  d            rEt        j                  | d         \  }}|r|dz   nd|z   | j                  d      r
d| d   z  z   S dz   S | j                  d      rF| j                  d      r5| d   dz   | d   z   dz   z   d	z   | j                  d      r
d| d   z  z   S dz   S t	        |       S )
Nrg   r3   rl   rq   z (%s)r9   r<   r   z-*)r   	is_dxlinkget_dxlink_idsry   r   )itemobj_idproj_id	obj_classs      r/   format_data_object_referencezCformat_choices_or_suggestions.<locals>.format_data_object_reference4  s'   >>$"11$7OFG%,GcM>>">>>>$((7+,"11$w-@OFG%,GcM">\`\d\dek\l'DQWLBXuurtuu88I488F#3	?S(4<7#=	IDPosowowx~oU\_cdj_kUk  I  I  FH  I  I4yr1   r3   c              3   :   K   | ]  }d z    |      z     yw)
NrE   ).0r   r   rw   s     r/   	<genexpr>z0format_choices_or_suggestions.<locals>.<genexpr>E  s*       1Bsw8I1ILhimLn1n  1Bs   rr   , ru   )r+   r   joinr   r   quoter   )headeritemsr   rv   rw   showing_data_objectsr   r   s     ` `  @r/   format_choices_or_suggestionsr   0  s    H%abM	 %7&  1B  |A  1B  *B  B  	B
 FSL499QV-Wekk#d).D-W#XX#1&79 	9-Ws   "%Bc                 H   | d   }| j                  dd       }t        dt        t               | j                  d| d         z   t	               z   dz   | d   z   dz         z          t        d| d   z          d| v rt        d	t        | d         z          d
| v rt        t        d| d
   | d   dd             d| v rt        t        d| d   | d   dd             t                dt               z   t               z   dz   t	               z   dz   }d}|t        v r	d|z   dz   }nd
| v rd}nd| v rd}|j                  ||t        v rdnd|      }t        t        |             	 |t        v r/ddlm} t        j                   ||g|      j                         n|dk(  r/ddlm} t        j                   |d d!g"      j                         nd
| v r>ddlm} t        j                   |t#        t$        | d
         "      j                         nld| v r>ddlm} t        j                   |t#        t$        | d         "      j                         n*dd#lm} t        j                   |       j                         	 	 | d   d$z   }t)        |      }|d%k(  r|dk(  rg }n|g}nt+        j,                  |      }|dgk(  rt/        || |      }|dgk(  rt1        |      d&kD  rt        t        d'             wt1        |      dk(  rdg}	 t3        ||d         }	d| v rx|	| d   vrqt        t        t9               t               z   d)z   t	               z   d*z   t%        |	      z   d+z   t               z   t               z   | d   z   t	               z   d,z                |	S #  Y xY w# t4        $ r1}
t        t        d(|z   d$z   t%        |
      z                Y d }
~
Sd }
~
wt6        $ r1}
t        t        d(|z   d$z   t%        |
      z                Y d }
~
d }
~
ww xY w# t:        $ r t=        d-      w xY w).Nr6   r   r   rp   rq   r   r   r   r   r   zSuggestions:r3   rt   ru   r   zChoices:zEnter {_class} {value} ({hint}'r   r   r   r   r   r   z
ID or pathrl   )r   rl   r   r   r   r   rX   r   r%   r'   r   r   r   r.   r	   r   r   zWarning:z value "z" for input z- is not in the list of choices for that inputzUnexpected end of input)ry   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r*   rn   r   r   r   r   r   )r{   rk   r   r   r   r   r   r   r   rl   r   s              r/   get_input_singler  N  sU   '"H~~fd+H	-$y{Z^^GZPVEW-XX[_[aadhhkuv|k}}  AD   D  E  E  F	+
7+
+,kN:f+=>>?
"+NJ}<UWabiWj{}  RV  W  	XJ+J
98MzZaObsu  JN  O  	P	G.846ACG$&PShhFD?",x7:TT	*	$.	j	 *]](19_1LRY $  &F 
$v,&<""?H:<D$FFNhP":""=fg=N#O#X#XYj(:""=SjQ^F_=`#a#j#jk*$:""=SjQZF[=\#]#f#fg:""=?#;#;<4'$.FvJ8##!#J",J"[[4
%-h
FK
 %:"d  U  V  WZA% T
+HjmD J&5
98M+Md3546>J6?*LsSXzY\jjmrmtt6"$.v$679=@Bqr s tL?*  dChNQUUX[\cXddef dChNQUUX[\cXddef  42334s]   DN 9AP 4P N A=P N	P	 &OP P	&P>P P		P P!c                 D    | j                  d| d         dz   | d   z   dz   S )Nrp   rq   r   r   ry   rz   s    r/   get_optional_input_strr    s-    >>':f#56=
6@RRUXXXr1   c                   b    e Zd ZddZd Zd ZddZd Zd Zd Z	d	 Z
dd
Zd Zd ZddZd Zy)ExecutableInputsNc                    || _         || _        | j                         | _        g g t	               c| _        | _        | _        || _        t        t              | _        g | _        d| j                  v s|rt        j                         nd| _        || j                  j!                  dg       }|h| j                  d   dv rW| j                  d   D cg c]  }|d   du s|d    }}t#        d	| j                  d   z   d
z   dj%                  |      z         | j'                         r| j                  j!                  dg       }|D ]  }|d   }|d   j)                  d      r| j                  j+                  |       || j                  |<   | j-                  |      r| j                  j/                  |       s| j
                  j/                  |        yc c}w )a  
        :param executable: Executable object handler
        :type executable: :class:`~dxpy.bindings.dxapplet.DXApplet`,
                          :class:`~dxpy.bindings.dxapp.DXApp`,
                          :class:`~dxpy.bindings.dxworkflow.DXWorkflow`,
                          :class:`~dxpy.bindings.dxglobalworkflow.DXGlobalWorkflow`
        :param input_name_prefix: A prefix set on an input field name
        :type input_name_prefix: string
        :param input_spec: Input specification
        :type input_spec: dict
        :param active_region: The region in which the executable is run, determined by the destination project context.
        :type active_region: string
        	inputSpecNr6   rB   globalworkflowstages
accessibleFr8   zThe workflow z* has the following inaccessible stage(s): r   inputsrq   rh   )
executabler   get_executable_description_descsetrequired_inputsoptional_inputsarray_inputsinput_name_prefixr"   listr  requires_resolutioncollectionsOrderedDict
input_specry   r   r   "_accept_only_workflow_level_inputsr+   add_is_input_optionalr   )	selfr  r  r  active_regionstageinaccessible_stages	spec_atom
input_names	            r/   __init__zExecutableInputs.__init__  s    %#446
HJBPSPUEd2D4E!2(. $&  8Cdjj7PT^+113dhR8J$**W"59W"W =AJJx<P"q5TYZfTgkpTp5;"q"q_tzz$/??Bnnquqzqz  |O  rP  P  Q  Q 224"5J# 	8I"6*J!,,X6!!%%j1*3DOOJ'&&y1$$++J7$$++J7	8 #rs   GGc                 <    | j                   j                  d      d uS )Nr  )r  ry   r  s    r/   r  z3ExecutableInputs._accept_only_workflow_level_inputs  s    zz~~h't33r1   c                    | j                   i S t        | j                   t        j                        r@| j                   j	                         }| j                   j                  || j                        S | j                   j	                         S rD   )r  
isinstancer   DXGlobalWorkflowr5   append_underlying_workflow_descr   )r  global_workflow_descs     r/   r  z+ExecutableInputs.get_executable_description  sj    ??"I)>)>?#'??#;#;#= ??BBCWY]YdYdee??++--r1   c                     |rX| j                   L|D ]F  }|j                  | j                         s||   | j                  |t        | j                         d <   H y| j                  j	                  |       y)zt
        Updates the inputs dictionary with the key/value pairs from new_inputs, overwriting existing keys.
        N)r  r+   r  r*   update)r  
new_inputsstrip_prefixis       r/   r.  zExecutableInputs.update  sn     D22> Q<< 6 67CMa=DKK#d&<&<"="> ?@Q KKz*r1   c                    | j                   D cg c]  }|d   	 }}t        |      }| j                   D ]  \  }}}}||   d   }||   d   }	||   d   }
||
`t        |
t              rt	        |
      st        |
      sJ |
}n5t        |      rd|
d   i}n"d|
v rd|
d   d   |
d   d	i}nd|
d   |
d   d	i}|d
k\  r0| j                  |   |   t        d      || j                  |   |<   | j                  |   t        d      || j                  |<   d|z   dz   |z   dz   }|dk(  rt        |dz         |
t        |dz   |z   dz         	 t        j                  j                  |
d   |       t        |      rd|
d   i}n"d|
v rd|
d   d   |
d   d	i}nd|
d   |
d   d	i}|dk7  r | j                  |   j                  |       || j                  |<    yc c}w # t        $ r}t        |t        |      z         d}~ww xY w)z
        Updates self.inputs with resolved input values (the input values that were provided
        as paths to items that require resolutions, eg. folder or job/analyses ids)
        r	   r9   folderrq   Nr7   r8   r5   r:   r   z>Expected 'self.inputs' to have saved a spot for 'input_value'. Value provided for input field "" could not be parsed as r   r3   zempty string cannot be resolvedzcould not resolve "r4   )r  r   r)  r#   r   r!   r   r  AssertionErrorr   r   bindingsverify_string_dxidr   r   r   )r  quadinput_pathsresultsr$  input_valueinput_classinput_indexr9   
folderpathr=   msgr   s                r/   "_update_requires_resolution_inputsz3ExecutableInputs._update_requires_resolution_inputs  s   
 ,0+C+CD4tAwDD1+>AEAYAY 7	:=J[+k*95G -h7J#K08M" ,!-<  )7 .} =@  ?&3";/'7t9L&M#}4'7]S]E^_hEi@Md@S:U 'V (8]S\E]@Md@S:U 'V!#{{:.{;G,-mnn;FDKK
+K8{{:.:,-mnn.9DKK
+8:EHcc!"$()"$$S+L%LMM ($S+A%AK%ORf%fgg9MM44]45H+V [)#3]45H"IK=0#3zAZ[dAe<I$<O6Q #RK $4yAY<I$<O6Q #RK"$KK
+22;?.9DKK
+o7	: ER  9$S3w<%7889s   G #G%%	H
.HH
c           
      ,   | j                   5|j                  | j                         r|t        | j                         d  }ny d|v r,||j                  d      dz   d  }|d |j                  d       }nd }| j                  ]|| j                  vr/| j
                  j                  d      dk7  rt        d|z   dz         || j                  v r| j                  |   d   }|/d}	 t        d|      \  }}t        |      st        |      rt        ||      }d}	 |rLt        | j                  |   t              r| j                  |   j                  |       y || j                  |<   y 	 t!        j"                  |t$        j&                  	      }t$        j&                  t        t(        t*        h}t-        |      |vr
t/               	 t        | j                  |   t              r| j                  |   j                  |       y || j                  |<   y t        d|      }		 t        |	      dk(  rnt        |	d         st        |	d         rRt        |	d   |	d         }|j                  d      r| j                  |   j                  |       y || j                  |<   y |dk(  rt3        |      | j                  |<   y |dk(  r(| j                  |   j                  t3        |             y |dk(  r|| j                  |<   y |dk(  r| j                  |   j                  |       y |dk(  rt+        |      | j                  |<   y |dk(  r(| j                  |   j                  t+        |             y |dk(  rt)        |      | j                  |<   y |dk(  r(| j                  |   j                  t)        |             y |dk(  r#t!        j"                  |      | j                  |<   y |dk(  r2| j                  |   j                  t!        j"                  |             y |dk(  s|dk(  rd|i| j                  |<   y |dk(  s|dk(  r!| j                  |   j                  d|i       y |j                  d      r#| j0                  j                  |||dd  df       y | j0                  j                  |||d
f       y #  Y xY w#  t        | j                  |   t              rT| j0                  j                  ||d t        | j                  |         f       | j                  |   j                  d        n0| j0                  j                  ||d d
f       d | j                  |<   Y y Y y xY w# t4        t6        f$ r(}
t        d|z   dz   |z   d z   t9        |
      z         d }
~
ww xY w)!Nrg   r	   r6   rB   zInput field called "z!" was not found in the input specFTobject_pairs_hookr6  r   r   rh   rX   zarray:booleanr.   zarray:stringrH   zarray:floatrJ   z	array:intrY   z
array:hashrZ   r[   r7   z	array:jobz	array:appri   r4  r5  r   )r  r+   r*   findr  r  ry   r   r    r   r   re   r)  r  r  r   rL   rM   r  r  rJ   rH   r   	Exceptionr  r0   r   r   r   )r  r$  r=  r>  resolved_input_as_jborra   r^   parsed_input_valueimmediate_typesrm   r   s              r/   r  zExecutableInputs.add7  sA   !!-$$T%;%;<'D,B,B(C(DE
*$Z__S%9A%=%>?K#$9Z__S%9:JK??&0TZZ^^G5LPZ5Z !7*!DGj!jkkt."ooj9'B%*"2 /[ A V$v(>"1&%"@K-1*%dkk*5t<KK
+22;?.9DKK
+E)-KS^SjSj)k&'2'>'>c5&QO./F'k) G "$++j"94@J/667IJ2DJ/ -S+>N-D~&!+>!;L1MQ_`nop`qQr"1.2C^TUEV"WK"--h7J/66{C2=J/
 #i/2<[2IJ/$7J/66z+7NO$02=J/$6J/66{C$/272DJ/$5J/66u[7IJ$-25k2BJ/$3J/66s;7GH$.26**[2IJ/$4J/66tzz+7NO$-1E3C[2QJ/$3{k7QJ/668H+7VW '11(; 44;;ZVabcbdVegh<ij !44;;ZVace<fg_"
7 "$++j"94@0077[RVX[\`\g\ghr\sXt8uvJ/66t< 0077[RVXZ8[\26J/	 =p 	* D !Cj!PSn!n!,"-/3"469'l"C D DDs   #R, &AR4 A+U U U 6,U #U 8#U U :,U 'U ,U 2'U 6U U -*U 3U U ,R14B!UV+#VVc                    	 t        j                  dt         j                  xs dv rdnd       t        j                  d       t        j                  t
        j                  j                  t        j                  j                         d             t        j                          t        j                          y #  Y y xY w)Nlibeditr3   zbind ^I rl_completeztab: completez.dx_history)r   parse_and_bind__doc__set_completer_delimswrite_history_fileosr<   r   r   r   get_user_conf_dirclear_historyr   r'  s    r/   init_completerzExecutableInputs.init_completer  s    		##Y8K[K[Ka_a=b$9hwx))"-''T[[5R5R5TVc(de""$""$	s   B9B< <C c                 d    	 t        j                          t        j                          y #  Y y xY wrD   )r   r   rS  r'  s    r/   uninit_completerz!ExecutableInputs.uninit_completer  s)    	""$""$	s   (+ /c                    | j                   y | j                          t        | j                        dk(  rdnd}| j                  D ]R  }|| j                  vst        | j                        dk(  rt        d       | j                  |      | j                  |<   T |r*t        | j                        dkD  r|r| j                          | j                          y )Nr   TFz.Entering interactive mode for input selection.)
r  rT  r*   r  r  rx   prompt_for_inputr  prompt_for_optional_inputsrV  )r  confirmno_prior_inputsr1  s       r/   prompt_for_missingz#ExecutableInputs.prompt_for_missing  s    ??" 	 #&dkk"2a"7$U%% 	:A#t{{#q(JK!%!6!6q!9A		:
 s4#7#781<++-r1   c                 ~    || j                   v rt        | j                  |         S t        | j                  |         S rD   )r  r   r  r  )r  r$  s     r/   rX  z!ExecutableInputs.prompt_for_input  s8    ***"4??:#>??#DOOJ$?@@r1   c                 0   	 t        dt        d      z   dz          t        t        | j                              D ]  }dt        |      z   dz   t        | j                  | j                  |            z   }| j                  |   | j                  v rS|dt               z   z  }|t        j                  | j                  | j                  |            z  }|t               dz   z  }nYd| j                  | j                  |      v r;|dt        j                  | j                  | j                  |      d         z   dz   z  }t        |        t        d	       	 	 t        d
      }|d	k(  ry 	 t        |      }|dk  s|t        | j                        k\  rt        d      	 	 | j#                  | j                  |         | j                  | j                  |   <   # t        $ r}t        t        |             Y d }~d }~ww xY w# t         $ r Y y w xY w#  Y ?xY w)Nr   zGSelect an optional parameter to set by its # (^D or <ENTER> to finish):z [z] z [=]defaultz
 [default=r3   zOptional param #: r   z Error: Selection is out of range)rx   r   r   r*   r  r   r  r  r  r   rL   dumpsr   r   rJ   r   r   rX  )r  r1  opt_strselectedr   r   s         r/   rY  z+ExecutableInputs.prompt_for_optional_inputs  s    $ghhkoop3t3345 	Q-$.*4??4;O;OPQ;R+STU''*dkk9uuw.Gtzz$++d6J6J16M*NOOGtv|+G$//$2F2Fq2I"JJ|djjI]I]^_I`9abk9l.mmpsssGg	 "I$%9:H2~!"%h-"Q;'S9M9M5N*N",-O"PP=A=R=RSWSgSghoSp=qD009:; . & !c'l+ !  sB   H )3G 8H 	G?!G:5H :G??H 	HHHc                    |j                   	 |j                   dk(  rt        j                  j                         }n/t	        |j                   d      5 }|j                         }d d d        | j                  t        j                  t        j                               |j                  ?	 | j                  t        j                  |j                  t        j                               |j                  |j                  D ]  }t        |      \  }}d|v r!| j!                         rt        d|z   dz         | j#                  | j$                  j'                  d	      d
v r2| j(                  j+                  ||j,                  | j$                        n||        | j/                          | j0                  l| j2                  D ]]  }	t5        | j2                  |	         t6        k(  s#t9        | j2                  |	         dk(  s?| j2                  |	   d   | j2                  |	<   _ |r|t:        r| j=                  t?        |dd             y tA        | jB                        tA        | j2                  jE                               z
  }
|
rt        ddjG                  |
      z        y y # 1 sw Y   AxY w# t        $ r}t        dt        |      z        d }~ww xY w# t        $ r}t        dt        |      z        d }~ww xY w)N-rrD  z'Error while parsing input JSON file: %sz"Error while parsing input JSON: %sr]   zThe input with a key zQ was passed to a stage but the workflow accepts inputs only on the workflow levelr6   r
  )r   describe_outputr	   r   rZ  TzCSome inputs (%s) are missing, and interactive mode is not availabler   )$filenamesysstdinreadopenr.  rL   rM   r  r  rG  r   r   
input_jsonr   r   r  r  r  ry   r  _get_input_namer   rB  r  r  r   r  r*   r
   r\  getattrr  r  r   r   )r  argsrequire_all_inputsdatafdekeyeqvalrq   rl   r1  missing_required_inputss              r/   update_from_argsz!ExecutableInputs.update_from_args  s   ==$U==C'99>>+DdmmS1 )R!wwy)DJJt{?V?VWX ??&PDJJt+JaJabc ::! JJ e0:e$;4#J#J#L$%<d%B  FY  &Y  Z  Z04RR 88dkkcgcmcm8nX\^ce	e 335??"[[ 7A'4/CA4G14L%)[[^A%6DKKN7 ''i(FG*-d.B.B*Cc$++JZJZJ\F]*]'*$%jnrnwnw  yP  oQ  &R  S  S + 9) )  U !JSQRV!STTU  P !EA!NOOPsH   AJ/ J"#<J/ ,>K "J,'J/ /	K8KK	K< K77K<c                 6    |j                  d      dk(  xs d|v S )NoptionalTr`  r  )r  r#  s     r/   r  z#ExecutableInputs._is_input_optional  s     }}Z(D0JI4JJr1   )NNNN)T)__name__
__module____qualname__r%  r  r  r.  rB  r  rT  rV  r\  rX  rY  rw  r  rE   r1   r/   r  r    sM    =8~4.	+>:@jDX
 (A D(STKr1   r  )z        z
          )ArN  
__future__r   r   r   r   rQ  ri  rL   r  r   bindings.dxworkflowr   r   r3   r
   
exceptionsr   r   utils.printingr   r   r   r   r   r   r   utils.describer   r   r   r   utils.resolverr   r   r   r   r   r   r   r   r    r!   utilsr"   compatr#   gnureadliner   ImportErrorrt  r0   r>   r   rj   re   rn   r|   r   r   r   r  r  objectr  rE   r1   r/   <module>r     s   " S R ) ( ( ,   , M M M n nw w w & "K? ;$/519D@DH@@
C",]s'jFP9<L4\Y~Kv ~Ko  Os   >C	 	CCC