749cd5dcf7
Signed-off-by: Kosieh Barter <kaja.valek@gmail.com>
115 lines
3.0 KiB
Python
115 lines
3.0 KiB
Python
# Import Flask's required binaries, helpers and request
|
|
from flask import request as FLrequest
|
|
from flask import render_template as FLrenTmpl
|
|
from flask import jsonify as FLstringify
|
|
from flask import Flask
|
|
|
|
# Import OS MKDIR
|
|
from os import mkdir as osMkdir
|
|
from os import remove as osRM
|
|
from os import listdir as osListDir
|
|
|
|
|
|
from fileObject import FileObject
|
|
|
|
|
|
def createDir() -> None:
|
|
try:
|
|
osMkdir('extFiles')
|
|
except:
|
|
pass
|
|
|
|
# General use file listing
|
|
def listDir() -> list[str]:
|
|
# Create custom data structure
|
|
fileProps: list[FileObject] = list()
|
|
|
|
# Parse it and prepare
|
|
for file in osListDir(f"extFiles"):
|
|
tmpObj = FileObject(file)
|
|
fileProps.append(tmpObj.__dict__())
|
|
|
|
# Return
|
|
return fileProps
|
|
|
|
|
|
|
|
# Initialize Flask binary
|
|
sfs: Flask = Flask(__name__)
|
|
# Prepare directories to be present
|
|
createDir()
|
|
|
|
# Register route on index GET/POST
|
|
@sfs.route('/', methods = ['GET', 'POST'])
|
|
def index():
|
|
if(FLrequest.method == 'POST'):
|
|
filePath: str = FLrequest.form.get('fileDel')
|
|
|
|
if(filePath is not None):
|
|
try:
|
|
# Remove the file
|
|
osRM(f"extFiles/{filePath}")
|
|
except:
|
|
pass
|
|
else:
|
|
fileList = FLrequest.files.getlist('inFile')
|
|
for file in fileList:
|
|
# Store the data on disk
|
|
file.save(f"extFiles/{file.filename}")
|
|
|
|
fileList = listDir()
|
|
return FLrenTmpl('index.html', fileItems = fileList, fileItemsLen = len(fileList))
|
|
|
|
|
|
# Register route on /api, GET
|
|
@sfs.route('/api', methods = ['GET'])
|
|
def apiGet():
|
|
# Get list of files
|
|
fileList: list[FileObject] = listDir()
|
|
|
|
# No file present
|
|
if(len(fileList) == 0):
|
|
return FLstringify({'status': False, 'filesLocalCount': 0})
|
|
# Any non-zero number of files present
|
|
else:
|
|
return FLstringify({'status': True, 'filesLocalCount': len(fileList), 'filesLocal': fileList})
|
|
|
|
|
|
# Register route on /api, PUT
|
|
@sfs.route('/api', methods = ['PUT'])
|
|
def apiPost():
|
|
|
|
# Upload file via API
|
|
if('inFile' not in FLrequest.files):
|
|
return FLstringify({'status': False, 'filesCount': 0 })
|
|
|
|
# Make RESTful API compatible with multiple files to be uploaded
|
|
fileList = FLrequest.files.getlist('inFile')
|
|
|
|
for file in fileList:
|
|
print(f"Uploading: {file.filename}")
|
|
|
|
# Upload the file to disk
|
|
file.save(f"extFiles/{file.filename}")
|
|
|
|
# Return success
|
|
return FLstringify({'status': True, 'filesCount': len(listDir())})
|
|
|
|
|
|
# Register route on /api, DELETE
|
|
@sfs.route('/api/<name>', methods = ['DELETE'])
|
|
def apiDelete(name: str):
|
|
|
|
try:
|
|
# Delete the file
|
|
osRM(f"extFiles/{name}")
|
|
# Return JSON
|
|
return FLstringify({'status': True, 'fileDel': f"/extFiles/{name}"})
|
|
|
|
# When file is not present
|
|
except FileNotFoundError:
|
|
return FLstringify({'status': False, 'HTTP': 404})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sfs.run(host='0.0.0.0') |