U C^@szddlZddlZddlZddlZddlZddlZddlmZddlm Z GdddeZ ej fddZ Gdd d e ZdS) N)AbstractFileSystem)stringify_pathcseZdZdZdZd)fdd Zd*ddZd+d d Zd d Zd,d dZ fddZ ddZ ddZ fddZ fddZddZd-ddZd.dd Zd!d"Zed#d$Zed%d&Zd'd(ZZS)/LocalFileSystemaInterface to files on local storage Parameters ---------- auto_mkdirs: bool Whether, when opening a file, the directory containing it should be created (if it doesn't already exist). This is assumed by pyarrow code. /Tc stjf|||_dSN)super__init__ auto_mkdir)selfr kwargs __class__@/tmp/pip-install-6_kvzl1k/fsspec/fsspec/implementations/local.pyrszLocalFileSystem.__init__cKs0||}|r|j|ddntj|f|dS)NTexist_ok)_strip_protocolmakedirsosmkdir)r pathZcreate_parentsr rrrrs zLocalFileSystem.mkdirFcCs||}tj||ddS)Nr)rrr)r rrrrrr#s zLocalFileSystem.makedirscCst|dSr)rrmdir)r rrrrr'szLocalFileSystem.rmdircs@fddtD}|r8fdd|DS|SdS)Ncsg|]}t|qSr) posixpathjoin.0frrr ,sz&LocalFileSystem.ls..csg|]}|qSr)inforr rrr.s)rrlistdir)r rZdetailpathsr)rr rls*s  zLocalFileSystem.lsc s||}t|Sr)rrglob)r rZkargsr rrr$2s zLocalFileSystem.globc Ks||}tj|dd}d}tj|r8d}t|}n(tj|rJd}ntj|r\d}nd}||j||j d}dD]}t |d |||<qv|r||d <ztj|d d}|j|d <Wnt k rd |d <YnX|S)NF)follow_symlinkslink directoryfileother)namesizetypecreated)modeuidgidmtimeZst_Z destinationTr+r) rrstatrislinkreadlinkisdirisfilest_sizest_ctimegetattrIOError) r rr outdesttresultfieldZout2rrrr6s,     zLocalFileSystem.infocKst||dSr)shutilcopyfiler path1path2r rrrcopyOszLocalFileSystem.copyc s4|dr tt|j||f|S|j||f|SdSN recursive)getrrrErBr rrrHRs zLocalFileSystem.getc s4|dr tt|j||f|S|j||f|SdSrF)rHrrputrErBr rrrIXs zLocalFileSystem.putcKst||dSr)rrenamerBrrrmv^szLocalFileSystem.mvNcCs(|r||rt|n t|dSr)r5r@rmtreerremove)r rrGZmaxdepthrrrrmas zLocalFileSystem.rmrbcKs:||}|jr$|j||ddt||fd|i|S)NTrfs)rr r_parentLocalFileOpener)r rr. block_sizer rrr_opengs zLocalFileSystem._opencKs4||}||r"t|dnt|ddS)Na)rexistsrutimeopenclose)r rr rrrtouchms  zLocalFileSystem.touchcCs2||d}d|kr(|dddS|jSdS)Nrr)rrstriprsplit root_markerclsrrrrrQtszLocalFileSystem._parentcCs&t|}|dr|dd}t|S)Nzfile://)r startswithmake_path_posixr_rrrr|s  zLocalFileSystem._strip_protocolcCsdSNTrr rrr _isfilestoreszLocalFileSystem._isfilestore)T)T)F)F)FN)rON)__name__ __module__ __qualname____doc__r^rrrrr#r$rrErHrIrKrNrTrZ classmethodrQrre __classcell__rrr rr s*           rcCstd|r|dd}|dr.|ddS|dsDtd|r^|dddddS||krnd|ks|dkr|dr|dkrd |krtj|}tjdkrt ||S|S) z Make path generic z /[A-Za-z]:r[Nz\\\rz[\\]*[A-Za-z]:z//:) rematchrbreplacelstriprrabspathseprc)rrsrrrrcs,       rcc@sfeZdZdddZddZddZd d Zd d Zd dZddZ ddZ ddZ ddZ ddZ dS)rRTNcKs2||_||_||_d|_||_tj|_|dSr) rr.rPr autocommitioDEFAULT_BUFFER_SIZE blocksizerT)r rr.rtrPr rrrrszLocalFileOpener.__init__cCs|jdks|jjr|js"d|jkr6t|j|jd|_n"t\}}||_t||jd|_d|jkr|j |j|_ |j d|_ |j |j_ dS)Nw)r.r+) rclosedrtr.rXrtempfilemkstemptemprPrdetailsr+)r ir*rrrrTs   zLocalFileOpener._opencCs2d|jkrt||j||j||S)Nr)r. ValueErrorrTrseekread)r startendrrr _fetch_ranges   zLocalFileOpener._fetch_rangecCsDd|dkr.|jd}||j|nd|_|j|dS)Nrr.loc)statepoprTrr__dict__update)r rrrrr __setstate__s   zLocalFileOpener.__setstate__cCsB|j}|dd|jkr.|j|d<n|jjs>td|S)Nrrrz+Cannot serialise open write-mode local file)rrErr.rtellryr)r drrr __getstate__s   zLocalFileOpener.__getstate__cCs"|jrtdt|j|jdS)Nz0Can only commit if not already set to autocommit)rt RuntimeErrorrrJr|rr rrrcommitszLocalFileOpener.commitcCs|jrtdt|jdS)Nz#Cannot discard if set to autocommit)rtrrrMr|r rrrdiscardszLocalFileOpener.discardcCs|jSrrr rrr __fspath__szLocalFileOpener.__fspath__cCs t|j|Sr)r9r)r itemrrr __getattr__szLocalFileOpener.__getattr__cCsd|_|jSrd) _incontextr __enter__r rrrrszLocalFileOpener.__enter__cCsd|_|j|||dS)NF)rr__exit__)r exc_type exc_value tracebackrrrrszLocalFileOpener.__exit__)TN)rfrgrhrrTrrrrrrrrrrrrrrRs   rR)rurr@rrnrzZfsspecrZ fsspec.utilsrrrsrcobjectrRrrrrs