
    DUf                         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	m
Z
 d dlZd dlZ G d d          Z G d d          ZdS )    N)	urlencodeurljoinc                   X    e Zd ZdZdZdZddZd Zd Ze	d             Z
ddZd Zd ZdS )EncodeClientzhttp://www.encodeproject.org/zShttps://www.encodeproject.org/metadata/type=Experiment&status=released/metadata.tsv)
GRCh38zGRCh38-minimalce10ce11dm3dm6hg19mm10zmm10-minimalmm9Nc                    || j         vrt          d| j                   t          j        ||          | _        t          j        | j                  st          j        | j        d           |t          j        |d          }t          j        |          st          d           t          j        | j        d          5 }|                                 t          |d          5 }|                    d	          D ]}|                    |           	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t#          j        |d
          | _        t)          | j        d                                                                                                                   }t1          |                              t1          | j                             st          d          | j        | j        d         |k                                             | _        | j                            d          | _        d S || _        d S )Nzassembly must be in:T)exist_okmetadata.tsvzGgetting metadata from ENCODE, please wait while (~240Mb) file downloads)streamwbi    )
chunk_sizeF)
low_memoryzFile assemblyzMTable assemblies do not match known assemblies, check ENCODE metadata versionzFile accession)KNOWN_ASSEMBLIES
ValueErroropjoincachedirisdirosmakedirsexistsprintrequestsgetMETADATA_URLraise_for_statusopeniter_contentwritepd
read_table_metasorteddropnauniquetolistsetissubsetcopy	set_index)	selfr   assemblymetadatametadata_pathrfchunktable_assembliess	            U/var/www/html/software/conda/lib/python3.11/site-packages/bioframe/sandbox/clients.py__init__zEncodeClient.__init__   s   40003T5JKKK(33x&& 	6K5555GHn==M9]++ 	+.   \$"3DAAA +Q&&(((mT22 +a%&^^t^%D%D + +EGGENNNN++ + + + + + + + + + + + + + ++ + + + + + + + + + + + + + + }GGGDJ%
?+2244;;==DDFF    '((11#d6K2L2LMM  4   DJ$?8$KLQQSSDJ--.>??DJJJ "DJJJs6   %D;(/D$D;$D(	(D;+D(	,D;;D?D?c                     t          |          }t          j        d|          }t          | j        |          }t          j        |          }|                                 |S )Nbatch_downloadr   ppr   r   BASE_URLr    r!   r#   r2   argsparamsurlr6   s        r:   _batch_downloadzEncodeClient._batch_downloadE   sV    4g&//dmS))L	    c                     t          |          }t          j        d|d          }t          | j        |          }t          j        |          }|                                 |S )Nr4   r   r>   rA   s        r:   	_metadatazEncodeClient._metadataM   sW    4gj&.99dmS))L	rF   c                 4    | j                                         S Nr)   r0   r2   s    r:   metazEncodeClient.metaU       z   rF   R    c           	          ddl m} t          | j        t	          j        d|                    } |d| d| d| d          S Nr   )HTMLexperimentsz<iframe width="zpx" height="zpx" src=z
></iframe>IPython.displayrS   r   r@   r?   r   r2   	accessionwidthheightrS   rD   s         r:   infozEncodeClient.infoY   c    ((((((dmRW]I%F%FGGtPePPPPPPP
 
 	
rF   c                    | j         j        |df         }t          j        |          d         }t          j        | j        |          }t          j        |          rn}t          d| d           t          j	        |          }|
                                 t          |d          5 }|                    |j                   d d d            n# 1 swxY w Y   |S )NzFile download URL   Downloading ""r   )rM   locr   splitr   r   r   r   r    r!   r#   r$   r&   content)r2   rX   rD   filenamepathr6   r7   s          r:   fetchzEncodeClient.fetcha   s   imI'::;8C==#wt}h//9T?? 	# -(---...S!!A   dD!! #Q	"""# # # # # # # # # # # # # # #s   )CCCc                 F    t          t          | j        |                    S rJ   listmaprf   r2   
accessionss     r:   	fetch_allzEncodeClient.fetch_allq       C
J//000rF   rJ   rO   rP   )__name__
__module____qualname__r@   r"   r   r;   rE   rH   propertyrM   r[   rf   rm    rF   r:   r   r      s        .H iL$" $" $" $"L     ! ! X!
 
 
 
   1 1 1 1 1rF   r   c                   D    e Zd ZdZd
dZed             ZddZd Zd	 Z	dS )	FDNClientzhttps://data.4dnucleome.org/Nc                    t          j        ||          | _        t          j        | j                  st	          d| d          |t          t          j        t          j        |d                              }|d         }t          j        |dd          | _	        |dk    r3| j	        | j	        d	         d
k             
                                | _	        | j	                            d          | _	        n|| _	        |6|dz   |z                       d          }t          j        |          | _        d S d | _        d S )NzDirectory doesn't exist: ''zmetadata*.tsvF#)r   commentr   OrganismhumanzFile Accession:zutf-8)r   r   r   r   OSErrorr*   globr'   r(   r)   r0   r1   encodebase64	b64encode_token)	r2   r   r3   r4   key_id
key_secretmetadata_pathsr5   
credentials	            r:   r;   zFDNClient.__init__x   s%   (33x&& 	DBxBBBCCC#DIbgh.P.P$Q$QRRN*2.M}PSTTTDJ8##!Z
:(>'(IJOOQQ
--.>??DJJ!DJ 3,3;;GDDJ *:66DKKKDKKKrF   c                 4    | j                                         S rJ   rK   rL   s    r:   rM   zFDNClient.meta   rN   rF   rO   rP   c           	          ddl m} t          | j        t	          j        d|                    } |d| d| d| d          S rR   rU   rW   s         r:   r[   zFDNClient.info   r\   rF   c                    | j         j        |df         }t          j        |          d         }t          j        | j        |          }t          j        |          rnt          d| d           | j        rdd| j        z   i}nd }t          j
        ||          }|                                 t          |d          5 }|                    |j                   d d d            n# 1 swxY w Y   |S )	NzFile Download URLr^   r_   r`   Authorizations   Basic )headersr   )rM   ra   r   rb   r   r   r   r   r   r    r!   r#   r$   r&   rc   )r2   rX   rD   rd   re   r   r6   r7   s           r:   rf   zFDNClient.fetch   s-   imI'::;8C==#wt}h//9T?? 	# -(---...{ *I,CDS'222A   dD!! #Q	"""# # # # # # # # # # # # # # #s   C((C,/C,c                 F    t          t          | j        |                    S rJ   rh   rk   s     r:   rm   zFDNClient.fetch_all   rn   rF   )NNNro   )
rp   rq   rr   r@   r;   rs   rM   r[   rf   rm   rt   rF   r:   rv   rv   u   sz        -H   & ! ! X!
 
 
 
  (1 1 1 1 1rF   rv   )r   r   r   os.pathre   r   	posixpathr?   urllib.parser   r   pandasr'   r    r   rv   rt   rF   r:   <module>r      s      				           + + + + + + + +     f1 f1 f1 f1 f1 f1 f1 f1R71 71 71 71 71 71 71 71 71 71rF   