in source/backend/src/transfer_sftp_backend.py [0:0]
def list_child_nodes():
try:
logger.info(f'TaskID: {fargate_task_id}(PID:{pid}) - list_child_nodes(): Request received')
sftp_hostname = app.config.get('sftp_hostname')
usr, passwdorpkey = authenticate_request(request)
response_body = {}
request_data = request.get_json()
node_name = request_data['node_name'] # what is parent node
node_type = request_data['node_type'] # do we want folders or non-folders
response_body['data'] = []
sftp_connection = get_sftp_connection(usr, passwdorpkey, sftp_hostname)
nodes = sftp_connection.listdir_attr(node_name)
for node in nodes:
if node_type == "folder" and node.longname[:1] == "d": # if folder node
response_body['data'].append(
{
'label': node.filename,
'data': node_name + "/" + node.filename,
'leaf': False,
'key': node_name + "/" + node.filename, # for react js
}
)
elif node_type == "file" and node.longname[:1] == "-":
file_ext = "n/a"
# find last "." in file name
file_name_split = node.filename.rsplit(".", 1)
if len(file_name_split) == 2: # if we have 2 items come back the last is the extension.
file_ext = file_name_split[1]
response_body['data'].append(
{
'name': node.filename,
'data': node_name + "/" + node.filename,
'leaf': True,
'type': file_ext,
'size': round(node.st_size/1024, 2),
'last_accessed_on': datetime.datetime.fromtimestamp(node.st_atime).strftime('%Y-%m-%d %H:%M:%S'),
'last_modified_on': datetime.datetime.fromtimestamp(node.st_mtime).strftime('%Y-%m-%d %H:%M:%S')
}
)
response = jsonify(response_body)
response.status_code = 200
logger.info(f'TaskID: {fargate_task_id}(PID:{pid}) - list_child_nodes(): Responding back with 200 status code')
return response
except Exception as e:
logger.error(f'TaskID: {fargate_task_id}(PID:{pid}) - list_child_nodes(): call to /api/listchildnodes returned exception {e}')
return bad_request("Bad or Invalid Request", 500)