add Python library diskcache
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 4s

This commit is contained in:
Thomas Peetz
2026-09-17 16:37:02 +02:00
parent 8a5bc7873a
commit c1d913e36b
4 changed files with 27 additions and 7 deletions
+7 -1
View File
@@ -4,6 +4,7 @@ from logging import Logger
from pathlib import Path
from typing import Dict, List, Optional
from uuid import UUID
from diskcache import Index
from platformdirs import PlatformDirs
import requests
@@ -142,12 +143,15 @@ class Server:
self.token = str(token)
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.
"""
if not param:
url: str = f"{self.url}/{MAPPING[table]}"
if table in index:
log.info("use chached %s", table)
return index[table]
else:
url: str = f"{self.url}/{MAPPING[table]}{str(param)}"
headers: Dict[str, str] = {"Authorization": f"Bearer {self.token}"}
@@ -160,6 +164,8 @@ class Server:
if response.status_code == 404:
raise EndPointNotAvailableException
data = response.json()
log.info("cache values of %s", table)
index[table] = data
return data
def update(self, log: Logger, table: str, item_id: UUID, file_info: dict):
+8 -6
View File
@@ -9,6 +9,7 @@ from typing import Any, Dict, List, Optional
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
from urllib.parse import urlparse
from simple_term_menu import TerminalMenu
from diskcache import Index
from api import Server, get_api_config
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())
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.
"""
if server is None:
log.info("no server selected")
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)
visited_link_path: Dict[str, 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")
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.
"""
@@ -108,7 +109,7 @@ def check_media_dirs(log: Logger, server: Optional[Server], media_dirs: List[str
log.info("no server selected")
return
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:
file_name = Path(item["cloud_link"]).name
if file_name in local_files:
@@ -143,10 +144,11 @@ if __name__ == "__main__":
else:
dirs.insert(0, args.dir)
logger.info(dirs)
index = Index()
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")
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")
# get_ids_from_column_cloud_link(link_list, mariadb_cursor)
# logger.info('found {} ids in column cloud_link'.format(len(link_list)))
+1
View File
@@ -29,6 +29,7 @@ dependencies = [
"sqlmodel>=0.0.24",
"stomp-py",
"kontor-model",
"diskcache>=5.6.3",
]
[[tool.uv.index]]
+11
View File
@@ -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" },
]
[[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]]
name = "dnspython"
version = "2.7.0"
@@ -338,6 +347,7 @@ dependencies = [
{ name = "beautifulsoup4" },
{ name = "click" },
{ name = "coverage" },
{ name = "diskcache" },
{ name = "fastapi", extra = ["standard"] },
{ name = "kontor-model" },
{ name = "msgspec", extra = ["toml", "yaml"] },
@@ -360,6 +370,7 @@ requires-dist = [
{ name = "beautifulsoup4", specifier = ">=4.13.4" },
{ name = "click", specifier = ">=8.1.8" },
{ name = "coverage", specifier = ">=7.8.0" },
{ name = "diskcache", specifier = ">=5.6.3" },
{ name = "fastapi", extras = ["standard"], specifier = ">=0.115.12" },
{ name = "kontor-model" },
{ name = "msgspec", extras = ["toml", "yaml"], specifier = ">=0.21.1" },