Skip to content
Merged
Show file tree
Hide file tree
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
13 changes: 12 additions & 1 deletion sdk/python/src/flamepy/runner/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,16 @@
import os
import shutil
from abc import ABC, abstractmethod
from typing import TYPE_CHECKING
from urllib.parse import urlparse

import requests

from flamepy.core.types import FlameError, FlameErrorCode

if TYPE_CHECKING:
from flamepy.core.cache import ObjectRef

logger = logging.getLogger(__name__)


Expand Down Expand Up @@ -314,6 +318,13 @@ def __init__(self, storage_base: str | None = None, app_name: str | None = None)

self._endpoint = f"{self._scheme}://{self._host}:{self._port}"

@staticmethod
def _package_url_from_ref(ref: "ObjectRef") -> str:
endpoint = ref.endpoint
if endpoint.startswith("grpc+tls://"):
endpoint = endpoint.replace("grpc+tls://", "grpcs://", 1)
return f"{endpoint.rstrip('/')}/{ref.key.lstrip('/')}"

def upload(self, local_path: str, filename: str) -> str:
from flamepy.core.cache import upload_object

Expand All @@ -323,7 +334,7 @@ def upload(self, local_path: str, filename: str) -> str:
try:
key = f"{self._app_name}/pkg/{filename}"
ref = upload_object(key, local_path)
url = f"{self._scheme}://{self._host}:{self._port}/{ref.key}"
url = self._package_url_from_ref(ref)
logger.debug(f"Uploaded package to cache: {url}")
return url
except Exception as e:
Expand Down
32 changes: 32 additions & 0 deletions sdk/python/tests/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,38 @@ def mock_upload_object(key, file_path):

assert url == "grpc://host:9090/myapp/pkg/myapp-1.0.0.tar.gz"

def test_upload_uses_object_ref_endpoint(self, monkeypatch, tmp_path):
from flamepy.core.cache import ObjectRef

test_file = tmp_path / "myapp-1.0.0.tar.gz"
test_file.write_bytes(b"package content")

def mock_upload_object(key, file_path):
return ObjectRef(endpoint="grpc://10.244.3.2:9090", key=key, version=1)

monkeypatch.setattr("flamepy.core.cache.upload_object", mock_upload_object)

storage = CacheStorage("grpc://flame-object-cache:9090", app_name="myapp")
url = storage.upload(str(test_file), "myapp-1.0.0.tar.gz")

assert url == "grpc://10.244.3.2:9090/myapp/pkg/myapp-1.0.0.tar.gz"

def test_upload_normalizes_tls_object_ref_endpoint(self, monkeypatch, tmp_path):
from flamepy.core.cache import ObjectRef

test_file = tmp_path / "myapp-1.0.0.tar.gz"
test_file.write_bytes(b"package content")

def mock_upload_object(key, file_path):
return ObjectRef(endpoint="grpc+tls://10.244.3.2:9090", key=key, version=1)

monkeypatch.setattr("flamepy.core.cache.upload_object", mock_upload_object)

storage = CacheStorage("grpcs://flame-object-cache:9090", app_name="myapp")
url = storage.upload(str(test_file), "myapp-1.0.0.tar.gz")

assert url == "grpcs://10.244.3.2:9090/myapp/pkg/myapp-1.0.0.tar.gz"

def test_download(self, monkeypatch, tmp_path):
dest_file = tmp_path / "downloaded.tar.gz"

Expand Down
Loading