From 5c1e4a5ec2aae03e5d53c5b2bca8ca16ea3ecd48 Mon Sep 17 00:00:00 2001 From: rhysrevans3 Date: Thu, 25 Jun 2026 10:01:16 +0100 Subject: [PATCH 1/2] Remove item update and delete methods. --- src/client.py | 124 +++----------------------------------------------- 1 file changed, 7 insertions(+), 117 deletions(-) diff --git a/src/client.py b/src/client.py index 5fe48a6..a144a11 100644 --- a/src/client.py +++ b/src/client.py @@ -32,6 +32,7 @@ from stac_fastapi.extensions.transaction.request import PartialItem, PatchOperation from stac_fastapi.types.stac import Collection from stac_pydantic.item import Item +from pydantic import TypeAdapter from settings import settings from utils import ( @@ -46,6 +47,7 @@ logger = logging.getLogger("uvicorn.error") logger.setLevel(logging.DEBUG) +patch_adapter = TypeAdapter(PartialItem | list[PatchOperation]) class TransactionClient(BaseTransactionsClient): @@ -257,75 +259,15 @@ async def update_item( item: Item, request: Request, ) -> Optional[Union[Item, Response]]: - - headers = request.headers.get("headers", {}) - - event_id = uuid.uuid4().hex - request_id = headers.get("X-Request-ID", uuid.uuid4().hex) - - auth = self.authorize( - collection_id=collection_id, - item=item, - role="UPDATE", - request=request, - request_id=request_id, - event_id=event_id, - ) - - item_extensions = item.stac_extensions if item.stac_extensions else [] - - item_extensions = validate_extensions(collection_id=collection_id, item_extensions=item_extensions) - - validate_post( - item_id=item.id, - item=item, - extensions=item_extensions, - ) - - user_agent = headers.get("User-Agent", "/").split("/") - - payload = UpdatePayload( - method="PUT", - collection_id=collection_id, - item_id=item_id, - item=item.model_dump(), - ) - - data = Data(type="STAC", payload=payload) - - publisher = Publisher(package=user_agent[0], version=user_agent[1] if len(user_agent) > 1 else "") - metadata = Metadata( - auth=auth, - event_id=event_id, - publisher=publisher, - request_id=request_id, - time=datetime.now().isoformat(), - schema_version="1.0.0", - ) - event = KafkaEvent(metadata=metadata, data=data) - - try: - self.producer.success( - key=item_id, - value=event.model_dump_json().encode("utf8"), - ) - - except Exception as exc: - logger.error("Error producing message: %s", exc) - raise UnknownException(instance=f"{request_id}:{event_id}") from exc - - return Response( - status_code=status.HTTP_202_ACCEPTED, - content="Item queued for update", - ) + raise NotImplementedError("update_item is not implemented") async def patch_item( self, collection_id: str, item_id: str, - patch: Union[PartialItem, list[PatchOperation]], + patch: PartialItem | list[PatchOperation], request: Request, - ) -> Optional[Union[Item, Response]]: + ) -> Item | Response | None: logger.info("PATCH REQUEST: %s", patch) item = operation_to_partial_item(collection_id=collection_id, operations=patch) if isinstance(patch, list) else patch @@ -375,7 +317,7 @@ async def patch_item( method="PATCH", collection_id=collection_id, item_id=item_id, - patch=patch.model_dump(), + patch=patch_adapter.dump_python(patch), ) data = Data(type="STAC", payload=payload) @@ -412,59 +354,7 @@ async def delete_item( item_id: str, request: Request, ) -> Optional[Union[Item, Response]]: - logger.info("DELETE REQUEST: %s %s", collection_id, item_id) - - headers = request.headers.get("headers", {}) - - event_id = uuid.uuid4().hex - request_id = headers.get("x-request-id", uuid.uuid4().hex) - - auth = self.authorize( - collection_id=collection_id, - item=item_id, - role="UPDATE", - request=request, - request_id=request_id, - event_id=event_id, - ) - - user_agent = headers.get("user-agent", "/").split("/") - - payload = PatchPayload( - method="PATCH", - collection_id=collection_id, - item_id=item_id, - patch=[{"op": "add", "path": "properties.retracted", "value": True}], - ) - - data = Data(type="STAC", payload=payload) - - publisher = Publisher(package=user_agent[0], version=user_agent[1] if len(user_agent) > 1 else "") - - metadata = Metadata( - auth=auth, - event_id=event_id, - publisher=publisher, - request_id=request_id, - time=datetime.now().isoformat(), - schema_version="1.0.0", - ) - event = KafkaEvent(metadata=metadata, data=data) - - try: - self.producer.success( - key=item_id, - value=event.model_dump_json().encode("utf8"), - ) - - except Exception as exc: - logger.error("Error producing message: %s", exc) - raise UnknownException(instance=f"{request_id}:{event_id}") from exc - - return Response( - status_code=status.HTTP_202_ACCEPTED, - content="Item queued for deletion", - ) + raise NotImplementedError("delete_item is not implemented") async def create_collection(self, collection: Collection, **kwargs) -> Collection: raise NotImplementedError("create_collection is not implemented") From 0bcae2cb42c7a6f225154e5ea012b36e295ae698 Mon Sep 17 00:00:00 2001 From: rhysrevans3 Date: Thu, 25 Jun 2026 10:46:18 +0100 Subject: [PATCH 2/2] Remove unsued import. --- src/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client.py b/src/client.py index a144a11..4df0170 100644 --- a/src/client.py +++ b/src/client.py @@ -24,7 +24,6 @@ PatchPayload, Publisher, RequesterData, - UpdatePayload, ) from esgf_core_utils.models.kafka.producer import KafkaProducer from fastapi import Request, Response, status @@ -49,6 +48,7 @@ patch_adapter = TypeAdapter(PartialItem | list[PatchOperation]) + class TransactionClient(BaseTransactionsClient): def __init__(self):