
    5i\-                         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
Z
ddlmZ ddlmZ ddlmZmZ ddlmZ d dlZdZd	Zd
ZdZdZdZeeeeeedZ G d de      Zd Zd Zd Z d Z!d Z"d Z#d Z$y)    )print_functionunicode_literalsdivisionabsolute_importN   )err_exit)json_load_raise_on_duplicates)is_container_idresolve_path)try_callzapp-create_asset_precisezapp-create_asset_trustyzapp-create_asset_xenialzapp-create_asset_xenial_v1zapp-create_asset_focalzapp-create_asset_noble)12.0414.0416.04z16.04_v120.0424.04c                       e Zd ZdZy)AssetBuilderExceptionz_
    This exception is raised by the methods in this module
    when asset building fails.
    N)__name__
__module____qualname____doc__     t/home/marpiech/ifpan-abm-pgxpred/analysis/marpiech-gwas-test/venv/lib/python3.12/site-packages/dxpy/asset_builder.pyr   r   0   s     	r   r   c                    t         j                  j                  |       st        | dz          t         j                  j	                  t         j                  j                  | d            st        d| z   dz   dz         t        t         j                  j                  | d            5 }	 t        |      cd d d        S # t        $ r&}t        dt        |j                        z         d }~ww xY w# 1 sw Y   y xY w)Nz is not a valid directory.dxasset.json'z1' is not a valid DNAnexus asset source directory.z+ It does not contain a 'dxasset.json' file.z+Could not parse dxasset.json file as JSON: )ospathisdirr   existsjoinr   openr	   	Exceptionstrargs)src_dir
asset_desces      r   parse_asset_specr*   8   s    77==!77877>>"'',,w?@#C'M4g$g$Q%R S 	S	bggll7N3	4 e
	e0<e e  	e'(UX[\]\b\bXc(cdd	ee es*   (C0*
B>>	C-!C((C--C00C9c                 L   d| vrt        d      d| vs| d   dvrt        d      d| v r-| d   dvrt        d      | d   d	k(  r| d   d
k7  rt        d      d| d<   d| v r| d   dk7  rt        d      d| d<   d| vrt        d      d| vrt        d      d| vrt        d      y)a  
    Validates the contents of the conf file and makes sure that the required information
    is provided.
        {
            "name": "asset_library_name",
            "title": "A human readable name",
            "description": " A detailed description abput the asset",
            "version": "0.0.1",
            "runSpecVersion": "1",
            "release": "16.04",
            "distribution": "Ubuntu"
            "execDepends":
                        [
                            {"name": "samtools", "package_manager": "apt"},
                            {"name": "bamtools"},
                            {"name": "bio", "package_manager": "gem", "version": "1.4.3"},
                            {"name": "pysam","package_manager": "pip", "version": "0.7.4"},
                            {"name": "Bio::SeqIO", "package_manager": "cpan", "version": "1.006924"}
                        ]
        }
    namezCThe asset configuration does not contain the required field "name".release)r   r   r   r   r   zThe "release" field value should be either "24.04", "20.04", "16.04" (DEPRECATED), "14.04" (DEPRECATED), or "12.04" (DEPRECATED)runSpecVersion)01z7The "runSpecVersion" field should be either "0", or "1"r0   r   zBThe "runSpecVersion" field can only be "1" if "release" is "16.04"r/   distributionUbuntuz2The distribution may only take the value "Ubuntu".versionzGThe asset configuration does not contain the required field "version". titlezEThe asset configuration does not contain the required field "title". descriptionzJThe asset configuration does not contain the required field "description".N)r   )
asset_confs    r   validate_confr7   E   s   , Z#$ijj 
"j&;Cp&p#  %g  h  	h:%&'z9'(abb'(C/Jy4IW4T'(lmm'*
#$#n%1'(\]]%-
>"
"#$mnnj #$kllJ&#$pqq 'r   c                     	 |ri nt        d      }t        j                  | f||dd|}|S #  t        d| z   t        j
                          xY w)NT)show_progress)projectfolderwait_on_closezFailed to upload the file file)dictdxpyupload_local_fileprintsysstderr)	file_namedest_projecttarget_folderjson_outmaybe_progress_kwargsremote_files         r   	dx_uploadrK   w   sj    
&.Dt4L,,Y F5A4A;?F 0E	F
 *Y6SZZHs	   +. !Ac                    t         j                  j                  t         j                  j                  | d            r,t	        t         j                  j                  | d      |||      S t         j                  j                  t         j                  j                  | d            r,t	        t         j                  j                  | d      |||      S y )NMakefilemakefile)r   r   r!   r"   rK   )r'   dest_folderrG   rH   s       r   get_asset_makerP      s    	ww~~bggll7J78gz:KX`aa	Wj9	:gz:KX`aa 
;r   c                 B    t        |       r| ddfS t        t        |       S )z
    Parses dest_str, which is (roughly) of the form
    PROJECT:/FOLDER/NAME, and returns a tuple (project, folder, name)
    N)r
   r   r   )dest_strs    r   parse_destinationrS      s(     x $%% L(++r   c                    t         j                  j                  t         j                  j                  |d            rt	        j
                         }	 t         j                  j                  || dz         }dd|dt         j                  j                  |d      dg}t        j                  |       t        ||||      }|t        j                  |       S y# t        j                  |       w xY w)z
    If the src_dir contains a "resources" directory its contents are archived and
    the archived file is uploaded to the platform
    	resourcesz_resources.tar.gztarz-czfz-C.N)r   r   r    r"   tempfilemkdtemp
subprocess
check_callrK   shutilrmtree)	
asset_namer'   rF   rO   rH   temp_dirresource_filecmdfile_ids	            r   get_asset_tarballrc      s    
 
ww}}RWW\\';78##%	$GGLL:@S3STM&-rww||G[7Y[^_C!!#&|[(SGMM(# 9 MM(#s   A-C C.c                 8	   | j                   t        j                         | _         d }d }d }d }d }d }	 t        | j                         }t	        |       t        j
                  j                  | j                   d      }t        j                  j                          t        | j                        \  }}}|t        d      ||d   }t        j                  rd| _        | j                  st        dt         j"                         t%        |||| j                        }t'        | j                   ||| j                        }t)        |d   | j                   ||| j                        }dt        j*                  |      i}	|rt        j*                  |      |	d<   |rt        j*                  |      |	d	<   ||	d
}
| j,                  | j,                  |
d<   t        j                  s||
d<   d|v rdd|d   ii|
d<   |r||
d<   |d   }|d   dk(  r|dz  }t        j                  j/                  t0        |   |
      }|d   }| j                  sOt        dt3        |      z   dz   t         j"                         | j4                  r	 t7        j8                  dd|g       t        j@                  |      jC                  d       t        jD                  t        j                  jG                  |      d   d         \  }}| j                  r!t        t        jH                  d|i             n!t        d |z   d!z   t         j"                         |r	 |jQ                          |r	 |jQ                          |r	 |jQ                          y y # t6        j:                  $ r2}|j<                  dk(  rt!        j>                  d       n|Y d }~)d }~ww xY w# tJ        $ r]}t        |jL                  jN                  d"z   t3        |      z   t         j"                         t!        j>                  d       Y d }~d }~ww xY w#  Y xY w#  Y xY w#  Y y xY w# |r	 |jQ                          n#  Y nxY w|r	 |jQ                          n#  Y nxY w|r	 |jQ                          w #  Y w xY ww xY w)#Nr   zCan't build an asset without specifying a destination project;             please use the -d/--destination flag to explicitly specify a projectr,   Tz*Uploading input files for the AssetBuilderr=   	conf_jsoncustom_assetasset_makefile)r,   inputpriorityr:   instanceType*systemRequirementsr;   r-   r.   r0   _v1)input_paramsidz
Started job 'z' to build the asset bundle.
dxwatch   r   )intervaloutputasset_bundlez
Asset bundle 'z?' is built and can now be used in your app/applet's dxapp.json
z: ))r'   r   getcwdr*   r7   r   r"   r@   apisystem_whoamirS   destinationr   JOB_IDjsonrB   rC   rD   rK   rP   rc   dxlinkri   app_runASSET_BUILDERSr%   rq   rZ   r[   CalledProcessError
returncodeexitDXJobwait_on_doneget_dxlink_idsjob_describedumpsr$   	__class__r   remove)r&   dest_project_namedest_folder_namedest_asset_name	make_file
asset_file	conf_filer6   asset_conf_file
input_hashbuilder_run_optionsr-   app_run_resultjob_idr)   asset_id_des                     r   build_assetr      sW   ||yy{OIJI`%dll3
j!'',,t||^D ?PQUQaQa?b<+_$' )R S S"(0O ;;DIyy>SZZPo/@BRTXT]T]^	"4<<1BDTVZV_V_`	&z&'94<<IZ'7D
 "4;;y#9:
)-Z)@J~&+/;;y+AJ'( $
 ==$.2mm
+ {{->	*Z'9<~zZhOi>j8k 45,<)Y'&'3.uG)).*APc)d%yy#c&k14TT[^[e[efzz ))4&*AB 	

6'''3))$((*?*?*G*QR`*ab!99$**dH-./$x/TU[^[e[eg   "   " !!# C "44 	 ||q(  $	 &  bll##d*SW43::F   "  "!!#	 s   IO ?N  B.O P1 P8 .P?  O'O :O  OO 	P.AP)$Q )P..Q 1P58P<?QR
QRQR%Q65R6Q:8R RRRR)%
__future__r   r   r   r   r   rC   rZ   rX   r\   r{   
exceptionsr   utilsr	   utils.resolverr
   r   clir   r@   ASSET_BUILDER_PRECISEASSET_BUILDER_TRUSTYASSET_BUILDER_XENIALASSET_BUILDER_XENIAL_V1ASSET_BUILDER_FOCALASSET_BUILDER_NOBLEr~   r$   r   r*   r7   rK   rP   rS   rc   r   r   r   r   <module>r      s   " S R 	 
       0 9  2 0 0 6 . . "!!'  	I 	
e.rdb,0$"kr   