Skip to content
This repository was archived by the owner on Aug 20, 2025. It is now read-only.
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions metadata_service/adapter/datastore.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import json
from typing import Tuple

from metadata_service.config import environment
from metadata_service.domain.version import Version
from metadata_service.exceptions.exceptions import DataNotFoundException

DATASTORE_ROOT_DIR = environment.get("DATASTORE_ROOT_DIR")
NEWEST_CACHE: Tuple[str, dict] = ("", {})
LAST_REQUEST_CACHE: Tuple[str, dict] = ("", {})


def get_draft_version() -> dict:
Expand All @@ -21,18 +24,44 @@ def get_datastore_versions() -> dict:
return json.load(f)


def get_metadata_all(version: Version) -> str:
def get_from_cache(file_version: str) -> dict | None:
if file_version == NEWEST_CACHE[0]:
return NEWEST_CACHE[1]
if file_version == LAST_REQUEST_CACHE[0]:
return LAST_REQUEST_CACHE[1]
return None


def update_cache(file_version: str, metadata_all):
global NEWEST_CACHE
global LAST_REQUEST_CACHE
if NEWEST_CACHE[0] == "" or LAST_REQUEST_CACHE[0] == "":
NEWEST_CACHE = (file_version, metadata_all)
LAST_REQUEST_CACHE = (file_version, metadata_all)
elif file_version > NEWEST_CACHE[0]:
NEWEST_CACHE = (file_version, metadata_all)
else:
LAST_REQUEST_CACHE = (file_version, metadata_all)


def get_metadata_all(version: Version) -> dict:
if version.is_draft():
file_version = "DRAFT"
else:
file_version = version.to_3_underscored()
metadata_all = get_from_cache(file_version)
if metadata_all is not None:
return metadata_all

metadata_all_file_path = (
f"{DATASTORE_ROOT_DIR}/datastore/metadata_all__{file_version}.json"
)
try:
with open(metadata_all_file_path, "r", encoding="utf-8") as f:
return json.load(f)
metadata_all = json.load(f)
if not version.is_draft():
update_cache(file_version, metadata_all)
return metadata_all
except FileNotFoundError as e:
raise DataNotFoundException(
f"metadata_all for version {version} not found"
Expand Down