""" Checks the database kontor """ from dataclasses import dataclass from enum import Enum, auto from pathlib import Path from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter import requests from config import get_logger, get_database_cursors parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--verbose', '-v', action='count', default=0) parser.add_argument('--config', '-c', default='kontor-docker') parser.add_argument('--dir', '-d', default='/media/tpeetz/Media') parser.add_argument('--dry-run', '-m', action='store_true') parser.add_argument('--reset-cloud-link', '-r', action='store_true') args = parser.parse_args() class StatusType(Enum): UNKNOWN = auto() FILE_NAME = auto() FILE_ID = auto() DUPLICATE = auto() CLOUD_LINK = auto() CLOUD_LINK_ID = auto() @dataclass class FileStatus: id: str status_type: StatusType def get_status_of_file(found_file: Path, log) -> FileStatus: status = FileStatus() response = requests.post("http://127.0.0.1:8800/media/search") log.info(f"Status: {response.status_code}") data = response.json() status.import(data) if len(data) == 1: status = StatusType.FILE_NAME status.id = data['id'] response = requests.get(f"http://127.0.0.1:8800/media/files/{found_file.stem}") log.info(f"Status: {response.status_code}") data = response.json() if len(data) == 1: status = StatusType.FILE_ID file_id = data['id'] response = requests.get(f"http://127.0.0.1:8800/media/files?cloud_link=true") log.info(f"Status: {response.status_code}") data = response.json() if len(data) == 1: status = StatusType.CLOUD_LINK_ID file_id = data['id'] return status def rename_files_to_id(media_dir, dry_run, log): media_path = Path(media_dir) for file in media_path.iterdir(): log.debug('found file: {}'.format(file.name)) status = get_status_of_file(file, log) new_file_path = file.with_name(f"{status.id}{file.suffix}") file_id = status.id match status.status_type: case StatusType.FILE_NAME: log.info(f'status of {file.name} is file_name') rename_file(file, new_file_path, dry_run) update_cloud_link(file_id, new_file_path, dry_run) case StatusType.FILE_ID: log.info(f'status of {file.name} is file_id') update_cloud_link(file_id, new_file_path, dry_run) case StatusType.CLOUD_LINK: log.info(f'status of {file.name} is cloud_link') rename_file(file, new_file_path, dry_run) update_cloud_link(file_id, new_file_path, dry_run) case StatusType.CLOUD_LINK_ID: log.debug(f'status of {file.name} is cloud_link_id') update_cloud_link(file_id, new_file_path, dry_run) case StatusType.DUPLICATE: log.info(f'status of {file.name} is duplicate') case StatusType.UNKNOWN: log.info(f'status of {file.name} is unknown') case _: log.info(f'status of {file.name} is not defined') def rename_file(current_file, new_file_path, dry_run): if dry_run: logger.info('rename file {} to {}'.format(current_file.name, new_file_path.name)) else: current_file.rename(Path(new_file_path)) def update_cloud_link(file_id, file_path, conn, dry_run): cursor = conn.cursor() logger.debug(f'update entry {file_id} with {file_path.absolute()}') if dry_run: logger.info(f'UPDATE media_file: cloud_link={file_path.absolute()}') else: cursor.execute('UPDATE media_file SET cloud_link="{}" WHERE id="{}"'.format(file_path.absolute(), file_id)) conn.commit() def reset_cloud_link(conn, dry_run): cursor = conn.cursor() if dry_run: logger.info('UPDATE media_file SET cloud_link=""') else: cursor.execute('UPDATE media_file SET cloud_link="" WHERE id is NOT NULL') conn.commit() if __name__ == '__main__': logger = get_logger(args.verbose, args.config) logger.info("kontor.check_kontor started") logger.info("kontor.check_kontor.rename_files_to_id") rename_files_to_id(args.dir, args.dry_run, logger) #logger.info("kontor.check_kontor.update_cloud_link_with_found_files") #update_cloud_link_with_found_files(data_dir, mariadb_conn, args.dry_run) #logger.info("kontor.check_kontor.get_ids_from_column_cloud_link") #get_ids_from_column_cloud_link(link_list, mariadb_cursor) #logger.info('found {} ids in column cloud_link'.format(len(link_list))) #logger.info("kontor.check_kontor.checking_ids_from_cloud_link") #checking_ids_from_cloud_link(link_list, mariadb_cursor) logger.info("kontor.check_kontor finished")