125 lines
4.8 KiB
Python
125 lines
4.8 KiB
Python
"""
|
|
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")
|
|
|