B
    CVvg÷  ã               @   s`   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 d dl
mZ dd„ Zdd„ Zd	d
„ ZdS )é    N)ÚabspathÚdirnameÚjoinÚnormcaseÚsep)ÚPath)ÚSuspiciousFileOperationc             G   sh   t t| f|žŽ ƒ}t | ƒ}t|ƒ t|t ƒ¡sdt|ƒt|ƒkrdtt|ƒƒt|ƒkrdtd ||¡ƒ‚|S )zî
    Join one or more path components to the base path component intelligently.
    Return a normalized, absolute version of the final path.

    Raise ValueError if the final path isn't located inside of the base path
    component.
    zGThe joined path ({}) is located outside of the base path component ({}))r   r   r   Ú
startswithr   r   r   Úformat)ÚbaseÚpathsZ
final_pathÚ	base_path© r   ú4/tmp/pip-install-o3oxmrkh/Django/django/utils/_os.pyÚ	safe_join	   s    
r   c           
   C   sp   t  ¡ �^} tj | d¡}tj | d¡}t |¡ yt ||¡ d}W n ttfk
r`   d}Y nX |S Q R X dS )z¶
    Return whether or not creating symlinks are supported in the host platform
    and/or if they are allowed to be created (e.g. on Windows it requires admin
    permissions).
    ÚoriginalÚsymlinkTFN)	ÚtempfileÚTemporaryDirectoryÚosÚpathr   Úmakedirsr   ÚOSErrorÚNotImplementedError)Útemp_dirZoriginal_pathZsymlink_pathÚ	supportedr   r   r   Úsymlinks_supported#   s    


r   c             C   s2   t | tƒr| S t | tƒs*tdt| ƒj ƒ‚t| ƒS )z@Convert value to a pathlib.Path instance, if not already a Path.zInvalid path type: %s)Ú
isinstancer   ÚstrÚ	TypeErrorÚtypeÚ__name__)Úvaluer   r   r   Úto_path5   s
    

r#   )r   r   Úos.pathr   r   r   r   r   Zpathlibr   Zdjango.core.exceptionsr   r   r   r#   r   r   r   r   Ú<module>   s   