From 7ce7f323337b22f87344b505a90f59051f9f71f1 Mon Sep 17 00:00:00 2001 From: Dusan Omercevic Date: Thu, 26 Jun 2025 13:41:27 +0200 Subject: [PATCH 1/4] Adding /internal/airdrop.artifacts.upload-url endpoint to the mock DevRev server. --- mock_devrev_server.py | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/mock_devrev_server.py b/mock_devrev_server.py index 129def1..d021497 100644 --- a/mock_devrev_server.py +++ b/mock_devrev_server.py @@ -1,4 +1,4 @@ -from fastapi import FastAPI, HTTPException, Header, UploadFile, File, Request +from fastapi import FastAPI, HTTPException, Header, Request from pydantic import BaseModel from typing import Optional, List, Dict import uuid @@ -22,6 +22,11 @@ class ArtifactPrepareResponse(BaseModel): class ExternalWorkerResponse(BaseModel): state: str +class AirdropArtifactResponse(BaseModel): + artifact_id: str + upload_url: str + form_data: List[FormDataField] + @app.post("/upload/{artifact_id}") async def upload_artifact( artifact_id: str, @@ -102,6 +107,36 @@ async def get_snap_ins(request: Request): print("Received /internal/snap-ins.get GET request") return {"status": "success"} +@app.get("/internal/airdrop.artifacts.upload-url", response_model=AirdropArtifactResponse) +async def airdrop_artifacts_upload_url( + file_type: str, + file_name: str, + request_id: Optional[str] = None, + authorization: Optional[str] = Header(None) +): + # Generate a unique artifact ID + artifact_id = str(uuid.uuid4()) + + # Create a mock S3-like URL for the upload + upload_url = f"http://localhost:8003/upload/{artifact_id}" + + # Create form data fields that would typically be required for S3 upload + form_data = [ + FormDataField(key="key", value=f"airdrop-artifacts/{artifact_id}/{file_name}"), + FormDataField(key="Content-Type", value=file_type), + FormDataField(key="x-amz-meta-artifact-id", value=artifact_id), + ] + + # Add request_id to form data if provided + if request_id: + form_data.append(FormDataField(key="x-amz-meta-request-id", value=request_id)) + + return AirdropArtifactResponse( + artifact_id=artifact_id, + upload_url=upload_url, + form_data=form_data + ) + if __name__ == "__main__": import uvicorn uvicorn.run(app, host="localhost", port=8003) From c4ee9ad7449e9957dd230eea165b24816e98afd8 Mon Sep 17 00:00:00 2001 From: Dusan Omercevic Date: Mon, 30 Jun 2025 09:49:02 +0200 Subject: [PATCH 2/4] Removing internal attribute (request_id) from the sent form data. --- mock_devrev_server.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mock_devrev_server.py b/mock_devrev_server.py index d021497..fd1f859 100644 --- a/mock_devrev_server.py +++ b/mock_devrev_server.py @@ -127,10 +127,6 @@ async def airdrop_artifacts_upload_url( FormDataField(key="x-amz-meta-artifact-id", value=artifact_id), ] - # Add request_id to form data if provided - if request_id: - form_data.append(FormDataField(key="x-amz-meta-request-id", value=request_id)) - return AirdropArtifactResponse( artifact_id=artifact_id, upload_url=upload_url, From ae7223ba24bdff6a80e35a6e0a243ede4b3b17b2 Mon Sep 17 00:00:00 2001 From: Dusan Omercevic Date: Mon, 30 Jun 2025 12:40:56 +0200 Subject: [PATCH 3/4] Fixing artifact_id in DevRev mock server. --- mock_devrev_server.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mock_devrev_server.py b/mock_devrev_server.py index fd1f859..c8620a6 100644 --- a/mock_devrev_server.py +++ b/mock_devrev_server.py @@ -3,6 +3,7 @@ from typing import Optional, List, Dict import uuid import json +import random app = FastAPI() @@ -114,8 +115,11 @@ async def airdrop_artifacts_upload_url( request_id: Optional[str] = None, authorization: Optional[str] = Header(None) ): - # Generate a unique artifact ID - artifact_id = str(uuid.uuid4()) + # Generate a unique artifact ID in the required format + partition = "dvrv-us-1" + my_id = "1" + random_int = random.randint(1, 1000) + artifact_id = f"don:core:{partition}:devo/{my_id}:artifact/{random_int}" # Create a mock S3-like URL for the upload upload_url = f"http://localhost:8003/upload/{artifact_id}" From d54d6a7bdf616835a41fa1a4839ae6adb417716a Mon Sep 17 00:00:00 2001 From: Dusan Omercevic Date: Mon, 30 Jun 2025 14:16:01 +0200 Subject: [PATCH 4/4] Proper constant name (devOrgID). --- mock_devrev_server.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mock_devrev_server.py b/mock_devrev_server.py index c8620a6..45726ea 100644 --- a/mock_devrev_server.py +++ b/mock_devrev_server.py @@ -117,9 +117,9 @@ async def airdrop_artifacts_upload_url( ): # Generate a unique artifact ID in the required format partition = "dvrv-us-1" - my_id = "1" + devOrgID = "1" random_int = random.randint(1, 1000) - artifact_id = f"don:core:{partition}:devo/{my_id}:artifact/{random_int}" + artifact_id = f"don:core:{partition}:devo/{devOrgID}:artifact/{random_int}" # Create a mock S3-like URL for the upload upload_url = f"http://localhost:8003/upload/{artifact_id}"