3
g	                 @   s   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ	 d dl
mZ d dlmZ ddlmZmZ dd
dZdd ZdddZdd Zdd Zdd Zdd Zdd ZdS )    N)Path)PIPErun)apps)get_random_string)DEFAULT_LOCALE_ENCODING   )CommandErrorCommandParserutf-8c             C   sp   yt | tttjdkd}W n4 tk
rN } ztd| d  |W Y dd}~X nX |jj||jjt	dd|j
fS )zf
    Friendly wrapper around Popen.

    Return stdout output, stderr output, and OS status code.
    nt)stdoutstderr	close_fdszError executing %sr   Nreplace)errors)r   r   osnameOSErrorr	   r   decoder   r   
returncode)argsZstdout_encodingperr r   Z/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/core/management/utils.pypopen_wrapper   s    $
r   c             C   sb   g }x$| D ]}|j |jddjd q
W x.t|D ]"\}}|jds4d||  ||< q4W t|S )a  
    Organize multiple extensions that are separated with commas or passed by
    using --extension/-e multiple times.

    For example: running 'django-admin makemessages -e js,txt -e xhtml -a'
    would result in an extension list: ['.js', '.txt', '.xhtml']

    >>> handle_extensions(['.html', 'html,js,py,py,py,.py', 'py,.py'])
    {'.html', '.js', '.py'}
    >>> handle_extensions(['.html, txt,.tpl'])
    {'.html', '.tpl', '.txt'}
      ,.z.%s)extendr   split	enumerate
startswithset)
extensionsZext_listextir   r   r   handle_extensions   s    

r)   c             C   s   |d krt jjddjt j}t|tr.|g}|d krLt jjddjt j}x|D ]}| j|rRdg}P qRW xP|D ]H}t jj	|| }t jj
|r|S x$|D ]}|| }t jj
|r|S qW qrW d S )NPATHr   PATHEXTz.COM;.EXE;.BAT;.CMD)r   environgetr"   pathsep
isinstancestrendswithpathjoinisfile)cmdr2   pathextr'   r   fZfextr   r   r   find_command4   s&    




r8   c              C   s   d} t d| S )zS
    Return a 50 character random string usable as a SECRET_KEY setting value.
    z2abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)2   )r   )charsr   r   r   get_random_secret_keyM   s    r;   c             C   s   t  }t  }x| D ]}d|krZytj|}W n  tk
rL   td| Y nX |j| qytj|}W n. tk
r } ztt|W Y dd}~X nX |j| qW ||fS )z
    Parse a list of "app_label.ModelName" or "app_label" strings into actual
    objects and return a two-element tuple:
        (set of model classes, set of app_configs).
    Raise a CommandError if some specified models or apps don't exist.
    r    zUnknown model: %sN)r%   installed_appsZ	get_modelLookupErrorr	   addZget_app_configr0   )labelsr   modelslabelmodelZ
app_configer   r   r   parse_apps_and_model_labelsU   s    
rD   c             C   sT   t ddd}|j|dd y|j| dd \}}W n tk
rH   dS X |jS dS )z
    Return the value of a command line option (which should include leading
    dashes, e.g. '--testrunner') from an argument list. Return None if the
    option wasn't passed or if the argument list couldn't be parsed.
    F)add_helpallow_abbrevvalue)dest   N)r
   add_argumentparse_known_argsr	   rG   )argvoptionparseroptions_r   r   r   get_command_line_optionp   s    rQ   c             C   st   dd | D } dd dt jhD }g }xH| D ]@}x:|D ](}|j|r6|j|dt|   P q6W |j| q,W |S )z9Normalize an iterable of glob style patterns based on OS.c             S   s   g | ]}t jj|qS r   )r   r2   normcase).0r   r   r   r   
<listcomp>   s    z+normalize_path_patterns.<locals>.<listcomp>c             S   s   h | ]}d | qS )z%s*r   )rS   path_sepr   r   r   	<setcomp>   s    z*normalize_path_patterns.<locals>.<setcomp>/N)r   sepr1   appendlen)patternsZdir_suffixesZnorm_patternspatternZ
dir_suffixr   r   r   normalize_path_patterns   s    


r]   c                s.   t fdd t fddt|D S )zy
    Check if the given path should be ignored or not based on matching
    one of the glob style `ignore_patterns`.
    c                s   t j j| pt jt | S )N)fnmatchfnmatchcaser   r0   )r\   )r2   r   r   ignore   s    zis_ignored_path.<locals>.ignorec             3   s   | ]} |V  qd S )Nr   )rS   r\   )r`   r   r   	<genexpr>   s    z"is_ignored_path.<locals>.<genexpr>)r   anyr]   )r2   ignore_patternsr   )r`   r2   r   is_ignored_path   s    rd   )r   )NN)r^   r   pathlibr   
subprocessr   r   Zdjango.appsr   r<   Zdjango.utils.cryptor   Zdjango.utils.encodingr   baser	   r
   r   r)   r8   r;   rD   rQ   r]   rd   r   r   r   r   <module>   s   

