aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/python/Twisted/py3/twisted/conch/ls.py
diff options
context:
space:
mode:
authorshmel1k <shmel1k@ydb.tech>2023-11-26 18:16:14 +0300
committershmel1k <shmel1k@ydb.tech>2023-11-26 18:43:30 +0300
commitb8cf9e88f4c5c64d9406af533d8948deb050d695 (patch)
tree218eb61fb3c3b96ec08b4d8cdfef383104a87d63 /contrib/python/Twisted/py3/twisted/conch/ls.py
parent523f645a83a0ec97a0332dbc3863bb354c92a328 (diff)
downloadydb-b8cf9e88f4c5c64d9406af533d8948deb050d695.tar.gz
add kikimr_configure
Diffstat (limited to 'contrib/python/Twisted/py3/twisted/conch/ls.py')
-rw-r--r--contrib/python/Twisted/py3/twisted/conch/ls.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/contrib/python/Twisted/py3/twisted/conch/ls.py b/contrib/python/Twisted/py3/twisted/conch/ls.py
new file mode 100644
index 0000000000..63fd5a0eb7
--- /dev/null
+++ b/contrib/python/Twisted/py3/twisted/conch/ls.py
@@ -0,0 +1,104 @@
+# -*- test-case-name: twisted.conch.test.test_cftp -*-
+# Copyright (c) Twisted Matrix Laboratories.
+# See LICENSE for details.
+
+import array
+import stat
+from time import localtime, strftime, time
+
+# Locale-independent month names to use instead of strftime's
+_MONTH_NAMES = dict(
+ list(
+ zip(
+ list(range(1, 13)),
+ "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(),
+ )
+ )
+)
+
+
+def lsLine(name, s):
+ """
+ Build an 'ls' line for a file ('file' in its generic sense, it
+ can be of any type).
+ """
+ mode = s.st_mode
+ perms = array.array("B", b"-" * 10)
+ ft = stat.S_IFMT(mode)
+ if stat.S_ISDIR(ft):
+ perms[0] = ord("d")
+ elif stat.S_ISCHR(ft):
+ perms[0] = ord("c")
+ elif stat.S_ISBLK(ft):
+ perms[0] = ord("b")
+ elif stat.S_ISREG(ft):
+ perms[0] = ord("-")
+ elif stat.S_ISFIFO(ft):
+ perms[0] = ord("f")
+ elif stat.S_ISLNK(ft):
+ perms[0] = ord("l")
+ elif stat.S_ISSOCK(ft):
+ perms[0] = ord("s")
+ else:
+ perms[0] = ord("!")
+ # User
+ if mode & stat.S_IRUSR:
+ perms[1] = ord("r")
+ if mode & stat.S_IWUSR:
+ perms[2] = ord("w")
+ if mode & stat.S_IXUSR:
+ perms[3] = ord("x")
+ # Group
+ if mode & stat.S_IRGRP:
+ perms[4] = ord("r")
+ if mode & stat.S_IWGRP:
+ perms[5] = ord("w")
+ if mode & stat.S_IXGRP:
+ perms[6] = ord("x")
+ # Other
+ if mode & stat.S_IROTH:
+ perms[7] = ord("r")
+ if mode & stat.S_IWOTH:
+ perms[8] = ord("w")
+ if mode & stat.S_IXOTH:
+ perms[9] = ord("x")
+ # Suid/sgid
+ if mode & stat.S_ISUID:
+ if perms[3] == ord("x"):
+ perms[3] = ord("s")
+ else:
+ perms[3] = ord("S")
+ if mode & stat.S_ISGID:
+ if perms[6] == ord("x"):
+ perms[6] = ord("s")
+ else:
+ perms[6] = ord("S")
+
+ if isinstance(name, bytes):
+ name = name.decode("utf-8")
+ lsPerms = perms.tobytes()
+ lsPerms = lsPerms.decode("utf-8")
+
+ lsresult = [
+ lsPerms,
+ str(s.st_nlink).rjust(5),
+ " ",
+ str(s.st_uid).ljust(9),
+ str(s.st_gid).ljust(9),
+ str(s.st_size).rjust(8),
+ " ",
+ ]
+ # Need to specify the month manually, as strftime depends on locale
+ ttup = localtime(s.st_mtime)
+ sixmonths = 60 * 60 * 24 * 7 * 26
+ if s.st_mtime + sixmonths < time(): # Last edited more than 6mo ago
+ strtime = strftime("%%s %d %Y ", ttup)
+ else:
+ strtime = strftime("%%s %d %H:%M ", ttup)
+ lsresult.append(strtime % (_MONTH_NAMES[ttup[1]],))
+
+ lsresult.append(name)
+ return "".join(lsresult)
+
+
+__all__ = ["lsLine"]