a
    »ÏOcñ
  ã                   @   sV   d dl Z d dlZd dlmZ d dlZd dlmZ G dd„ deƒZG dd„ ded�Z	dS )	é    N)Úurlsplit)Úcodecc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚMetaz3Metadata class to check and register codec classes.c                    sx   |dkrt ƒ  |||¡ d S t| dƒs8td| j› d�ƒ‚| jsV| jsVtd| j› d�ƒ‚t ƒ  |||¡ t | j	| ¡ d S )NÚ	CodecBaseÚ
extensionszclass z. failed import, must have 'extensions' definedzK failed import, must have either 'supports_dict' or 'supports_list' defined)
ÚsuperÚ__init__ÚhasattrÚNotImplementedErrorÚ__name__Úsupports_dictÚsupports_listr   Ú	add_codecr   )ÚclsÚnameÚbasesÚattrs©Ú	__class__© úA/var/www/html/gsl.tools/lib/python3.9/site-packages/munge/base.pyr      s    
ÿÿzMeta.__init__)r   Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r   r   r   r   r   
   s   r   c                   @   sX   e Zd ZdZdZdZddd„Zedd„ ƒZdd„ Z	d	d
„ Z
ddd„Zdd„ Zdd„ ZdS )r   FNc                 C   s   |r|| _ ntƒ | _ d S ©N)ÚconfigÚdict)Úselfr   r   r   r   r   %   s    zCodecBase.__init__c                 C   s
   | j d S )Nr   )r   )r   r   r   r   Ú	extension+   s    zCodecBase.extensionc                 C   s   t dƒ‚d S )Nz!set_type has not been implemented)r
   )r   r   Útypr   r   r   Úset_type/   s    zCodecBase.set_typec                 C   s(   t |tjjƒr| jS t |tƒr$| jS d S r   )Ú
isinstanceÚcollectionsÚabcÚMappingr   Úlistr   )r   Údatar   r   r   Úsupports_data2   s    
zCodecBase.supports_dataÚrTc                 C   sˆ   t |ƒ}|jsR|jr|jdkrF|s2td|› d�ƒ‚d|v r@tjS tjS t|j|ƒS |jdv rttj	| 
¡ dd�}|jS td|› d�ƒ‚dS )	z’
        opens a URL, no scheme is assumed to be a file
        no path will use stdin or stdout depending on mode, unless stdio is False
        ú-zunable to open 'ú'Úw)ÚhttpsÚhttpÚftpT)ÚstreamN)r   ÚschemeÚpathÚOSErrorÚsysÚstdoutÚstdinÚopenÚrequestsÚgetÚgeturlÚraw)r   ÚurlÚmodeZstdioÚresÚreqr   r   r   r7   8   s    
zCodecBase.openc                 K   s    | j | j|fi |¤Žfi |¤ŽS )z`
        opens url and passes to load()
        kwargs are passed to both open and load
        )Úloadr7   )r   r<   Úkwargsr   r   r   ÚloaduS   s    zCodecBase.loaduc                 K   s$   | j || j|dfi |¤Žfi |¤ŽS )z`
        opens url and passes to load()
        kwargs are passed to both open and dump
        r,   )Údumpr7   )r   r'   r<   rA   r   r   r   ÚdumpuZ   s    zCodecBase.dumpu)N)r)   T)r   r   r   r   r   Zsupports_roundtripr   Úpropertyr   r!   r(   r7   rB   rD   r   r   r   r   r       s   


r   )Ú	metaclass)
r#   r4   Úurllib.parser   r8   Zmunger   Útyper   r   r   r   r   r   Ú<module>   s   