add removal of remaining items by calling API

This commit is contained in:
2026-01-08 17:54:02 +01:00
parent 0dbd108051
commit 98eb72bd22
3 changed files with 48 additions and 3 deletions
+30 -2
View File
@@ -4,22 +4,25 @@ import data from json file to PostgreSQL
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
from datetime import datetime, date
from logging import Logger
from typing import Any, Dict, List
import os
import json
from pathlib import Path
import requests
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from db.models.base import Base
from db.models import registry
from psycopg2.errors import NotNullViolation
from config import get_logger
from config import get_api_config, get_logger
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('--dry-run', '-m', action='store_true')
parser.add_argument('--cleanup', '-c', action='store_true')
parser.add_argument('--cleanup', '-d', action='store_true')
parser.add_argument('--file', '-f', default='~/data.json')
args = parser.parse_args()
@@ -109,10 +112,26 @@ def item_import(db: Session, import_data: Dict[str, Any], dry_run: bool, log):
except Exception as error:
log.info(f"import failed: {error}")
def item_delete(table_name: str, item_id: str, api_data: Dict[str, Any], log: Logger):
log.info(f"delete item {item_id} from {table_name}")
host = api_data["host"]
port = api_data["port"]
token = api_data['token']
url = ""
match table_name:
case "media_file":
url = f"http://{host}:{port}/api/media/files/{item_id}"
case "media_actor_file":
url = f"http://{host}:{port}/api/media/actorfiles/{item_id}"
headers: Dict[str, str] = {"Authorization": f"Bearer {token}"}
response = requests.delete(url, headers=headers)
log.debug(f"Status: {response.status_code}")
if __name__ == '__main__':
logger = get_logger(args.verbose, "kontor")
logger.info('kontor.import started')
api_data = get_api_config(logger, args.config)
engine = create_engine(DATABASE_URL)
Base.metadata.create_all(bind=engine, checkfirst=True)
SessionLocal = sessionmaker(bind=engine)
@@ -142,4 +161,13 @@ if __name__ == '__main__':
logger.debug(f"remaining items for {tablename}: {len(existing_ids)}")
if len(existing_ids) > 0:
logger.info(f"remaining items for {tablename}: {existing_ids}")
for item_id in existing_ids:
match tablename:
case "media_file":
item_delete(table_name=tablename, item_id=item_id, api_data=api_data, log=logger)
case "media_actor_file":
item_delete(table_name=tablename, item_id=item_id, api_data=api_data, log=logger)
case _:
logger.info("Method to remove remaining item not implemented")
logger.info('kontor.import finished')