U vù¾fB ã@s:ddlZddlZddlmZmZmZmZGdd„dƒZdS)éN)Ú x80000000Úo700Úo70Ú xffffffffc@s†eZdZdZdZdZdZdZeZ dd„Z e dd d „ƒZ d d „Z e dd d„ƒZdd„Zdd„Zdd„Zeddd„ƒZdd„Zdd„ZdS)ÚSFTPAttributesai Representation of the attributes of a file (or proxied file) for SFTP in client or server mode. It attempts to mirror the object returned by `os.stat` as closely as possible, so it may have the following fields, with the same meanings as those returned by an `os.stat` object: - ``st_size`` - ``st_uid`` - ``st_gid`` - ``st_mode`` - ``st_atime`` - ``st_mtime`` Because SFTP allows flags to have other arbitrary named attributes, these are stored in a dict named ``attr``. Occasionally, the filename is also stored, in ``filename``. éééécCs4d|_d|_d|_d|_d|_d|_d|_i|_dS)zX Create a new (empty) SFTPAttributes object. All fields will be empty. rN)Ú_flagsÚst_sizeÚst_uidÚst_gidÚst_modeÚst_atimeÚst_mtimeÚattr©Úself©rúC/opt/alt/python38/lib/python3.8/site-packages/paramiko/sftp_attr.pyÚ__init__1szSFTPAttributes.__init__NcCsH|ƒ}|j|_|j|_|j|_|j|_|j|_|j|_|dk rD||_|S)a` Create an `.SFTPAttributes` object from an existing ``stat`` object (an object returned by `os.stat`). :param object obj: an object returned by `os.stat` (or equivalent). :param str filename: the filename associated with this file. :return: new `.SFTPAttributes` object with the same attribute fields. N)r r rrrrÚfilename)ÚclsÚobjrrrrrÚ from_stat>s zSFTPAttributes.from_statcCsd | ¡¡S)Nz)ÚformatÚ _debug_strrrrrÚ__repr__SszSFTPAttributes.__repr__cCs0|ƒ}| |¡|dk r||_|dk r,||_|S©N)Ú_unpackrÚlongname)rÚmsgrr!rrrrÚ _from_msgWs zSFTPAttributes._from_msgcCs®| ¡|_|j|j@r | ¡|_|j|j@r@| ¡|_| ¡|_|j|j@rV| ¡|_ |j|j @rv| ¡|_ | ¡|_ |j|j @rª| ¡}t|ƒD]}| ¡|j| ¡<q’dSr)Zget_intr Ú FLAG_SIZEZ get_int64r Ú FLAG_UIDGIDr rÚFLAG_PERMISSIONSrÚ FLAG_AMTIMErrÚ FLAG_EXTENDEDÚrangeZ get_stringr)rr"ÚcountÚirrrr as             zSFTPAttributes._unpackcCs|d|_|jdk r |j|jO_|jdk rD|jdk rD|j|jO_|jdk r^|j|jO_|jdk r‚|j dk r‚|j|j O_t |j ƒdkr |j|j O_| |j¡|j|j@rÄ| |j¡|j|j@rè| |j¡| |j¡|j|j@r| |j¡|j|j @r0| t|jƒ¡| t|j ƒ¡|j|j @rx| t |j ƒ¡|j  ¡D]\}}| |¡| |¡qXdS)Nr)r r r$r rr%rr&rrr'Úlenrr(Zadd_intZ add_int64ÚintÚitemsZ add_string)rr"ÚkeyÚvalrrrÚ_packrs8          zSFTPAttributes._packcCsÂd}|jdk r|d |j¡7}|jdk rF|jdk rF|d |j|j¡7}|jdk rf|dt|jƒd7}|jdk rŽ|jdk rŽ|d |j|j¡7}|j  ¡D]\}}|d t |ƒ|¡7}q˜|d7}|S) Nz[ zsize={} zuid={} gid={} zmode=ú zatime={} mtime={} z "{}"={!r} ú]) r rr rrÚoctrrrr.Ústr)rÚoutÚkÚvrrrr‘s  zSFTPAttributes._debug_strFcCsV|rd}d|d?d|d?d@}|r>|d||d@7}n|d||d@7}|S)Nrz-rz-wrz-xTtz-xSsr)ÚnZsuidZstickyr6rrrÚ_rwx szSFTPAttributes._rwxc Cs¬|jdk rðt |j¡}|tjkr&d}nd|tjkr6d}nT|tjkrFd}nD|tjkrVd}n4|tjkrfd}n$|tjkrvd}n|tj kr†d}nd }||  |jt @d ?|jtj @¡7}||  |jt @d ?|jtj@¡7}||  |jd @|jtj@d ¡7}nd}|jdks |jtkrd}n>t |j¡}tt ¡|jƒdkrDt d|¡}n t d|¡}t|dd ƒ}|j}|j}|j}|dkr|d}|dkrŠd}|dkr˜d}d||||||fS)z=create a unix-style long description of the file (like ls -l)NÚpÚcÚdÚbú-ÚlÚsú?éééTz ?---------z(unknown date)iNíz%d %b %Yz %d %b %H:%Mrrz%s 1 %-8d %-8d %8d %-12s %s)rÚstatÚS_IFMTÚS_IFIFOÚS_IFCHRÚS_IFDIRÚS_IFBLKÚS_IFREGÚS_IFLNKÚS_IFSOCKr:rÚS_ISUIDrÚS_ISGIDÚS_ISVTXrrÚtimeÚ localtimeÚabsÚstrftimeÚgetattrr rr ) rÚkindÚksZdatestrZ time_tuplerÚuidÚgidÚsizerrrÚ__str__«sn          ÿ ÿ ÿ      úzSFTPAttributes.__str__cCs t|ƒ ¡Sr)r5ÚencoderrrrÚasbytesîszSFTPAttributes.asbytes)N)NN)F)Ú__name__Ú __module__Ú __qualname__Ú__doc__r$r%r&r'rr(rÚ classmethodrrr#r r1rÚ staticmethodr:r\r^rrrrrs&    Cr)rFrRZparamiko.commonrrrrrrrrrÚs