import shutil import pathlib def logs_dir_path(instance, filename: str) -> str: """ file will be uploaded to MEDIA_ROOT/view/ """ return f'{instance.ticket.number}/{filename}' def sizify(value: int) -> str: """Simple kb/mb/gb size snippet for admin panel custom field: Args: value (int): size of file from Filefield Returns: str: format human readable size like 4.2 Gb """ if value < 512000: value = value / 1024.0 ext = 'KB' elif value < 4194304000: value = value / 1048576.0 ext = 'MB' else: value = value / 1073741824.0 ext = 'GB' return f'{round(value, 1)} {ext}' def get_mount_fs_info(path: type[pathlib.PosixPath]) -> dict: """ Get directory information for storing uploaded files. Includes information total/used/free space on mount device Args: path (pathlib.PosixPath): path to storage dir Returns: dict: storage mount info """ mount_info: dict = {} try: mount_info = shutil.disk_usage(path)._asdict() mount_info['used_percent'] = round( mount_info['used'] / mount_info['total'] * 100, ) mount_info['status'] = 'mount' except Exception as error: # expected FileNotFoundError mount_info = { 'total': 0, 'used': 0, 'free': 0, 'used_percent': 0, 'status': 'error', 'traceback': f'{error}' } return mount_info