2021-05-21 20:57:47 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import os
|
2021-05-25 18:47:23 +02:00
|
|
|
from stat import S_ISDIR, filemode
|
2021-05-21 20:57:47 +02:00
|
|
|
import json
|
|
|
|
import sys
|
2021-05-25 18:47:23 +02:00
|
|
|
from pwd import getpwuid
|
|
|
|
from grp import getgrgid
|
|
|
|
|
|
|
|
def get_stat(full_path, filename = '/'):
|
|
|
|
stats = os.lstat(full_path)
|
|
|
|
isdir = False
|
|
|
|
try:
|
|
|
|
isdir = S_ISDIR(os.stat(full_path).st_mode)
|
|
|
|
except OSError:
|
|
|
|
pass
|
2021-05-26 18:36:13 +02:00
|
|
|
owner = '?'
|
|
|
|
try:
|
|
|
|
owner = getpwuid(stats.st_uid).pw_name
|
|
|
|
except:
|
|
|
|
pass
|
|
|
|
group = '?'
|
|
|
|
try:
|
|
|
|
group = getgrgid(stats.st_gid).gr_name
|
|
|
|
except:
|
|
|
|
pass
|
2021-05-25 18:47:23 +02:00
|
|
|
response = {
|
|
|
|
"filename": filename,
|
|
|
|
"isdir": isdir,
|
|
|
|
"stat": {
|
|
|
|
"mode": stats.st_mode,
|
|
|
|
"mode-str": filemode(stats.st_mode),
|
|
|
|
"uid": stats.st_uid,
|
2021-05-26 18:36:13 +02:00
|
|
|
"owner": owner,
|
2021-05-25 18:47:23 +02:00
|
|
|
"gid": stats.st_gid,
|
2021-05-26 18:36:13 +02:00
|
|
|
"group": group,
|
2021-05-25 18:47:23 +02:00
|
|
|
"size": stats.st_size,
|
|
|
|
"atime": stats.st_atime,
|
|
|
|
"mtime": stats.st_mtime,
|
|
|
|
"ctime": stats.st_ctime
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return response
|
2021-05-21 20:57:47 +02:00
|
|
|
|
|
|
|
def main():
|
|
|
|
if(len(sys.argv) < 2):
|
|
|
|
sys.exit(1)
|
|
|
|
try:
|
|
|
|
nodes = os.listdir(sys.argv[1])
|
|
|
|
except:
|
|
|
|
print("No such file or directory")
|
|
|
|
sys.exit(1)
|
2021-05-25 18:47:23 +02:00
|
|
|
response = {
|
|
|
|
".": get_stat(sys.argv[1]),
|
|
|
|
"children": []
|
|
|
|
}
|
2021-05-21 20:57:47 +02:00
|
|
|
for node in nodes:
|
2021-05-25 18:47:23 +02:00
|
|
|
full_path = sys.argv[1] + "/" + node
|
|
|
|
response["children"].append(get_stat(full_path, node))
|
|
|
|
print(json.dumps(response))
|
2021-05-21 20:57:47 +02:00
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
main()
|