U
    mf	                     @   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-unpacked-wheel-siwebuq3/django/utils/_os.py	safe_join	   s    	 r   c               
   C   s|   t  j} tj| d}tj| d}t| zt|| d}W n ttfk
r`   d}Y nX |W  5 Q R  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_path8   s
    

r#   )r   r   os.pathr   r   r   r   r   pathlibr   Zdjango.core.exceptionsr   r   r   r#   r   r   r   r   <module>   s   