This commit is contained in:
@@ -4,6 +4,7 @@ from logging import Logger
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Dict, List, Optional
|
from typing import Dict, List, Optional
|
||||||
from uuid import UUID
|
from uuid import UUID
|
||||||
|
from diskcache import Index
|
||||||
|
|
||||||
from platformdirs import PlatformDirs
|
from platformdirs import PlatformDirs
|
||||||
import requests
|
import requests
|
||||||
@@ -142,12 +143,15 @@ class Server:
|
|||||||
self.token = str(token)
|
self.token = str(token)
|
||||||
self.token_type = str(token_type)
|
self.token_type = str(token_type)
|
||||||
|
|
||||||
def request(self, log: Logger, table: str, param: Optional[Option] = None):
|
def request(self, log: Logger, table: str, index: Index, param: Optional[Option] = None):
|
||||||
"""
|
"""
|
||||||
Requests data from Kontor-API instance by given table and optional parameters.
|
Requests data from Kontor-API instance by given table and optional parameters.
|
||||||
"""
|
"""
|
||||||
if not param:
|
if not param:
|
||||||
url: str = f"{self.url}/{MAPPING[table]}"
|
url: str = f"{self.url}/{MAPPING[table]}"
|
||||||
|
if table in index:
|
||||||
|
log.info("use chached %s", table)
|
||||||
|
return index[table]
|
||||||
else:
|
else:
|
||||||
url: str = f"{self.url}/{MAPPING[table]}{str(param)}"
|
url: str = f"{self.url}/{MAPPING[table]}{str(param)}"
|
||||||
headers: Dict[str, str] = {"Authorization": f"Bearer {self.token}"}
|
headers: Dict[str, str] = {"Authorization": f"Bearer {self.token}"}
|
||||||
@@ -160,6 +164,8 @@ class Server:
|
|||||||
if response.status_code == 404:
|
if response.status_code == 404:
|
||||||
raise EndPointNotAvailableException
|
raise EndPointNotAvailableException
|
||||||
data = response.json()
|
data = response.json()
|
||||||
|
log.info("cache values of %s", table)
|
||||||
|
index[table] = data
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def update(self, log: Logger, table: str, item_id: UUID, file_info: dict):
|
def update(self, log: Logger, table: str, item_id: UUID, file_info: dict):
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ from typing import Any, Dict, List, Optional
|
|||||||
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
from simple_term_menu import TerminalMenu
|
from simple_term_menu import TerminalMenu
|
||||||
|
from diskcache import Index
|
||||||
|
|
||||||
from api import Server, get_api_config
|
from api import Server, get_api_config
|
||||||
from log import get_logger
|
from log import get_logger
|
||||||
@@ -55,14 +56,14 @@ def remove_file(log: Logger, item_data: Dict[str, Any], media_dirs: List[str]):
|
|||||||
log.info("File not found %s", media_file.absolute())
|
log.info("File not found %s", media_file.absolute())
|
||||||
|
|
||||||
|
|
||||||
def check_duplicate_links(log: Logger, server: Optional[Server], media_dirs: List[str]):
|
def check_duplicate_links(log: Logger, server: Optional[Server], media_dirs: List[str], index: Index):
|
||||||
"""
|
"""
|
||||||
Check if there are MediaFile URLs which only differ in hostname.
|
Check if there are MediaFile URLs which only differ in hostname.
|
||||||
"""
|
"""
|
||||||
if server is None:
|
if server is None:
|
||||||
log.info("no server selected")
|
log.info("no server selected")
|
||||||
return
|
return
|
||||||
data = server.request(log=log, table="media_file")
|
data = server.request(log=log, table="media_file", index=index)
|
||||||
mapping = create_item_id_mapping(log=log, data_list=data)
|
mapping = create_item_id_mapping(log=log, data_list=data)
|
||||||
visited_link_path: Dict[str, str] = {}
|
visited_link_path: Dict[str, str] = {}
|
||||||
duplicate_link_paths: Dict[str, List[str]] = {}
|
duplicate_link_paths: Dict[str, List[str]] = {}
|
||||||
@@ -100,7 +101,7 @@ def check_duplicate_links(log: Logger, server: Optional[Server], media_dirs: Lis
|
|||||||
print("selection canceled")
|
print("selection canceled")
|
||||||
|
|
||||||
|
|
||||||
def check_media_dirs(log: Logger, server: Optional[Server], media_dirs: List[str]):
|
def check_media_dirs(log: Logger, server: Optional[Server], media_dirs: List[str], index: Index):
|
||||||
"""
|
"""
|
||||||
Check if contents of directories match MediaFiles.
|
Check if contents of directories match MediaFiles.
|
||||||
"""
|
"""
|
||||||
@@ -108,7 +109,7 @@ def check_media_dirs(log: Logger, server: Optional[Server], media_dirs: List[str
|
|||||||
log.info("no server selected")
|
log.info("no server selected")
|
||||||
return
|
return
|
||||||
local_files = collect_files(media_dirs)
|
local_files = collect_files(media_dirs)
|
||||||
data = server.request(log=log, table="media_file")
|
data = server.request(log=log, table="media_file", index=index)
|
||||||
for item in data:
|
for item in data:
|
||||||
file_name = Path(item["cloud_link"]).name
|
file_name = Path(item["cloud_link"]).name
|
||||||
if file_name in local_files:
|
if file_name in local_files:
|
||||||
@@ -143,10 +144,11 @@ if __name__ == "__main__":
|
|||||||
else:
|
else:
|
||||||
dirs.insert(0, args.dir)
|
dirs.insert(0, args.dir)
|
||||||
logger.info(dirs)
|
logger.info(dirs)
|
||||||
|
index = Index()
|
||||||
logger.info("kontor.check_kontor.check_duplicate_links")
|
logger.info("kontor.check_kontor.check_duplicate_links")
|
||||||
check_duplicate_links(logger, first_server, dirs)
|
check_duplicate_links(logger, first_server, dirs, index)
|
||||||
logger.info("kontor.check_kontor.check_media_dirs")
|
logger.info("kontor.check_kontor.check_media_dirs")
|
||||||
check_media_dirs(logger, first_server, dirs)
|
check_media_dirs(logger, first_server, dirs, index)
|
||||||
# logger.info("kontor.check_kontor.get_ids_from_column_cloud_link")
|
# logger.info("kontor.check_kontor.get_ids_from_column_cloud_link")
|
||||||
# get_ids_from_column_cloud_link(link_list, mariadb_cursor)
|
# get_ids_from_column_cloud_link(link_list, mariadb_cursor)
|
||||||
# logger.info('found {} ids in column cloud_link'.format(len(link_list)))
|
# logger.info('found {} ids in column cloud_link'.format(len(link_list)))
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ dependencies = [
|
|||||||
"sqlmodel>=0.0.24",
|
"sqlmodel>=0.0.24",
|
||||||
"stomp-py",
|
"stomp-py",
|
||||||
"kontor-model",
|
"kontor-model",
|
||||||
|
"diskcache>=5.6.3",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[tool.uv.index]]
|
[[tool.uv.index]]
|
||||||
|
|||||||
Generated
+11
@@ -140,6 +140,15 @@ wheels = [
|
|||||||
{ url = "https://nexus.thpeetz.de/repository/pypi-proxy/packages/coverage/7.8.0/coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", size = 203435, upload-time = "2025-03-30T20:36:43.61Z" },
|
{ url = "https://nexus.thpeetz.de/repository/pypi-proxy/packages/coverage/7.8.0/coverage-7.8.0-py3-none-any.whl", hash = "sha256:dbf364b4c5e7bae9250528167dfe40219b62e2d573c854d74be213e1e52069f7", size = 203435, upload-time = "2025-03-30T20:36:43.61Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "diskcache"
|
||||||
|
version = "5.6.3"
|
||||||
|
source = { registry = "https://nexus.thpeetz.de/repository/pypi-proxy/simple" }
|
||||||
|
sdist = { url = "https://nexus.thpeetz.de/repository/pypi-proxy/packages/diskcache/5.6.3/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://nexus.thpeetz.de/repository/pypi-proxy/packages/diskcache/5.6.3/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dnspython"
|
name = "dnspython"
|
||||||
version = "2.7.0"
|
version = "2.7.0"
|
||||||
@@ -338,6 +347,7 @@ dependencies = [
|
|||||||
{ name = "beautifulsoup4" },
|
{ name = "beautifulsoup4" },
|
||||||
{ name = "click" },
|
{ name = "click" },
|
||||||
{ name = "coverage" },
|
{ name = "coverage" },
|
||||||
|
{ name = "diskcache" },
|
||||||
{ name = "fastapi", extra = ["standard"] },
|
{ name = "fastapi", extra = ["standard"] },
|
||||||
{ name = "kontor-model" },
|
{ name = "kontor-model" },
|
||||||
{ name = "msgspec", extra = ["toml", "yaml"] },
|
{ name = "msgspec", extra = ["toml", "yaml"] },
|
||||||
@@ -360,6 +370,7 @@ requires-dist = [
|
|||||||
{ name = "beautifulsoup4", specifier = ">=4.13.4" },
|
{ name = "beautifulsoup4", specifier = ">=4.13.4" },
|
||||||
{ name = "click", specifier = ">=8.1.8" },
|
{ name = "click", specifier = ">=8.1.8" },
|
||||||
{ name = "coverage", specifier = ">=7.8.0" },
|
{ name = "coverage", specifier = ">=7.8.0" },
|
||||||
|
{ name = "diskcache", specifier = ">=5.6.3" },
|
||||||
{ name = "fastapi", extras = ["standard"], specifier = ">=0.115.12" },
|
{ name = "fastapi", extras = ["standard"], specifier = ">=0.115.12" },
|
||||||
{ name = "kontor-model" },
|
{ name = "kontor-model" },
|
||||||
{ name = "msgspec", extras = ["toml", "yaml"], specifier = ">=0.21.1" },
|
{ name = "msgspec", extras = ["toml", "yaml"], specifier = ">=0.21.1" },
|
||||||
|
|||||||
Reference in New Issue
Block a user