3
‡Œðiq
  ã               @   s¶   d dl mZ d dlmZ d dlmZ d dlZd dlZejj	dkrDeZG dd„ de
ƒZdd	„ Zejj	d
kr~G dd„ deeƒƒZnd dlmZ dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )é    )Úunicode_literals)Ústr)Ú
basestringNé   c               @   s   e Zd Zdd„ Zdd„ ZdS )ÚBaseBaseStringc             C   s   t |ttfƒS )N)Ú
isinstanceÚbytesr   )ÚclsÚinstance© r   ú6/tmp/pip-build-6m2fasei/ffmpeg-python/ffmpeg/_utils.pyÚ__instancecheck__   s    z BaseBaseString.__instancecheck__c             C   s   t ‚d S )N)ÚNotImplemented)r	   Úthingr   r   r   Ú__subclasshook__   s    zBaseBaseString.__subclasshook__N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   c                s"   G ‡ ‡fdd„dˆƒ}|dd i ƒS )Nc                   s&   e Zd ZejZejZ‡ ‡fdd„ZdS )z!with_metaclass.<locals>.metaclassc                s$   |d krt j| |f |ƒS ˆ|ˆ |ƒS )N)ÚtypeÚ__new__)r	   ÚnameÚ
this_basesÚd)ÚbasesÚmetar   r   r      s    z)with_metaclass.<locals>.metaclass.__new__N)r   r   r   r   Ú__call__Ú__init__r   r   )r   r   r   r   Ú	metaclass   s   r   Útemporary_classr   )r   r   r   r   )r   r   r   Úwith_metaclass   s    	r   é   c               @   s   e Zd ZdS )r   N)r   r   r   r   r   r   r   r   &   s   r   c                sz   t ˆ tƒrtˆ ƒ}nbt ˆ tƒr:djdjdd„ ˆ D ƒƒƒ}n<t ˆ tƒrn‡ fdd„tˆ ƒD ƒ}ddj|ƒ d }ntˆ ƒ}|S )zÖHack around python `repr` to deterministically represent dictionaries.

    This is able to represent more things than json.dumps, since it does not require things to be JSON serializable
    (e.g. datetimes).
    z[{}]z, c             S   s   g | ]}t |ƒ‘qS r   )Ú_recursive_repr)Ú.0Úxr   r   r   ú
<listcomp>8   s    z#_recursive_repr.<locals>.<listcomp>c                s$   g | ]}d j t|ƒtˆ | ƒƒ‘qS )z{}: {})Úformatr!   )r"   Úk)Úitemr   r   r$   ;   s   Ú{Ú})	r   r   r   Úlistr%   ÚjoinÚdictÚsortedÚrepr)r'   ÚresultZkv_pairsr   )r'   r   r!   /   s    




r!   c             C   s   t | ƒjdƒ}tj|ƒjƒ S )Nzutf-8)r!   ÚencodeÚhashlibÚmd5Ú	hexdigest)r'   Úrepr_r   r   r   Úget_hashD   s    r5   c             C   s   t t| ƒdd�S )Né   )Úbase)Úintr5   )r'   r   r   r   Úget_hash_intI   s    r9   c             C   sT   t | ƒ} tt|ƒƒ}d|kr2|jdƒ |jddƒ x|D ]}| j|d| ƒ} q8W | S )z3Helper function to escape uncomfortable characters.ú\r   )r   r*   ÚsetÚremoveÚinsertÚreplace)ÚtextÚcharsÚchr   r   r   Úescape_charsM   s    

rB   c             C   sN   g }xDt | jƒ ƒD ]4}| | }|jdj|ƒƒ |dk	r|jdj|ƒƒ qW |S )z<Helper function to build command line arguments out of dict.z-{}Nz{})r-   ÚkeysÚappendr%   )ÚkwargsÚargsr&   Úvr   r   r   Úconvert_kwargs_to_cmd_line_argsY   s    rH   )Ú
__future__r   Úbuiltinsr   Zpast.builtinsr   r1   ÚsysÚversion_infoÚmajorr   r   r   r!   r5   r9   rB   rH   r   r   r   r   Ú<module>   s    	