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 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):
+8 -6
View File
@@ -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)))
+1
View File
@@ -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]]
+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" }, { 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" },