Spaces:
Runtime error
Runtime error
from typing import Any | |
import os | |
import json | |
from threading import Timer | |
from .constants import TEMP_DIR, APP_DOMAIN | |
def parse_filename(filename: str): | |
filename = filename.replace(' ', '_') | |
filename = filename.replace('(', '') | |
filename = filename.replace(')', '') | |
filename = filename.replace('[', '') | |
filename = filename.replace(']', '') | |
filename = filename.replace('{', '') | |
filename = filename.replace('}', '') | |
filename = filename.replace('<', '') | |
filename = filename.replace('>', '') | |
filename = filename.replace(';', '') | |
filename = filename.replace(':', '') | |
filename = filename.replace('"', '') | |
filename = filename.replace("'", '') | |
filename = filename.replace('\\', '') | |
filename = filename.replace('/', '') | |
filename = filename.replace('|', '') | |
filename = filename.replace('?', '') | |
filename = filename.replace('*', '') | |
# If file is exist, add number to filename | |
if os.path.isfile(os.path.join(TEMP_DIR, filename)): | |
filename = filename.split('.') | |
filename = f"{filename[0]}_1.{filename[1]}" | |
return filename | |
def save_to_local(file: bytes | Any, filename: str, is_parse_filename: bool = True, directory: str = TEMP_DIR): | |
# Parse filename | |
if is_parse_filename: | |
filename = parse_filename(filename) | |
# Get type of file | |
file_extension = filename.split('.')[-1] | |
# Get write mode | |
if file_extension == 'json': | |
mode = 'w' | |
else: | |
mode = 'wb' | |
# Save file | |
with open(os.path.join(directory, filename), mode) as f: | |
if file_extension == 'json': | |
json.dump(file, f) | |
else: | |
f.write(file) | |
# Return access link | |
return f"{APP_DOMAIN}/static/{filename}" | |
def read_from_local(filename: str, directory: str = TEMP_DIR): | |
# Get type of file | |
file_extension = filename.split('.')[-1] | |
# Get read mode | |
if file_extension == 'json': | |
mode = 'r' | |
else: | |
mode = 'rb' | |
# If file is exist, return file | |
if os.path.isfile(os.path.join(directory, filename)): | |
with open(os.path.join(directory, filename), mode) as f: | |
if file_extension == 'json': | |
return json.load(f) | |
return f.read() | |
def remove_from_local(filename: str, directory: str = TEMP_DIR): | |
# If file is exist, add number to filename | |
if os.path.isfile(os.path.join(directory, filename)): | |
os.remove(os.path.join(directory, filename)) | |
def remove_from_local_with_expire(filename: str, expire: int, directory: str = TEMP_DIR): | |
# Remove file after expire time | |
if expire is not None and expire > 0: | |
t = Timer(expire, remove_from_local, args=[filename, directory]) | |
t.start() | |