Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
1 change: 1 addition & 0 deletions src/storage/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ dependencies = [
"deprecation >=2.1.0",
"pydantic >=2.11.7",
"yarl>=1.20.1",
"pyiceberg>=0.10.0",
]

[project.urls]
Expand Down
22 changes: 22 additions & 0 deletions src/storage/src/storage3/_async/analytics.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import List, Optional

from httpx import QueryParams
from pyiceberg.catalog.rest import RestCatalog

from ..types import (
AnalyticsBucket,
Expand Down Expand Up @@ -49,3 +50,24 @@ async def delete(self, bucket_name: str) -> AnalyticsBucketDeleteResponse:
http_method="DELETE", path=["bucket", bucket_name]
)
return AnalyticsBucketDeleteResponse.model_validate_json(data.content)

def catalog(
self, catalog_name: str, access_key_id: str, secret_access_key: str
) -> RestCatalog:
catalog_uri = self._request._base_url
s3_endpoint = self._request._base_url.parent.joinpath("s3")
service_key = self._request.headers.get("apiKey")
assert service_key, "apiKey must be passed in the headers."
return RestCatalog(
catalog_name,
warehouse=catalog_name,
uri=str(catalog_uri),
token=service_key,
**{
"py-io-impl": "pyiceberg.io.pyarrow.PyArrowFileIO",
"s3.endpoint": str(s3_endpoint),
"s3.access-key-id": access_key_id,
"s3.secret-access-key": secret_access_key,
"s3.force-virtual-addressing": "False",
},
)
22 changes: 22 additions & 0 deletions src/storage/src/storage3/_sync/analytics.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from typing import List, Optional

from httpx import QueryParams
from pyiceberg.catalog.rest import RestCatalog

from ..types import (
AnalyticsBucket,
Expand Down Expand Up @@ -47,3 +48,24 @@ def list(
def delete(self, bucket_name: str) -> AnalyticsBucketDeleteResponse:
data = self._request.send(http_method="DELETE", path=["bucket", bucket_name])
return AnalyticsBucketDeleteResponse.model_validate_json(data.content)

def catalog(
self, catalog_name: str, access_key_id: str, secret_access_key: str
) -> RestCatalog:
catalog_uri = self._request._base_url
s3_endpoint = self._request._base_url.parent.joinpath("s3")
service_key = self._request.headers.get("apiKey")
assert service_key, "apiKey must be passed in the headers."
return RestCatalog(
catalog_name,
warehouse=catalog_name,
uri=str(catalog_uri),
token=service_key,
**{
"py-io-impl": "pyiceberg.io.pyarrow.PyArrowFileIO",
"s3.endpoint": str(s3_endpoint),
"s3.access-key-id": access_key_id,
"s3.secret-access-key": secret_access_key,
"s3.force-virtual-addressing": "False",
},
)
Loading