mirror of
https://github.com/lancedb/lancedb.git
synced 2026-08-19 04:28:35 +00:00
22bf091de1
Bumps Lance to v9.0.0-beta.19, which includes lance-format/lance#7687 for side-effect-free DirectoryNamespace read paths. This fixes root-level read-only table opens that previously could trigger `__manifest` creation through directory namespace construction, including Hugging Face bucket reads with read-only tokens. A LanceDB regression test now covers root listing operations without creating `__manifest`. Fixes #3633.
86 lines
2.8 KiB
Python
86 lines
2.8 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright The LanceDB Authors
|
|
|
|
"""
|
|
Tests for S3 bucket names containing dots.
|
|
|
|
Related issue: https://github.com/lancedb/lancedb/issues/1898
|
|
|
|
These tests validate the early error checking for S3 bucket names with dots.
|
|
When validation succeeds, eager namespace initialization may still fail later
|
|
because these tests intentionally do not provide real S3 credentials.
|
|
"""
|
|
|
|
import pytest
|
|
import lancedb
|
|
|
|
# Test URIs
|
|
BUCKET_WITH_DOTS = "s3://my.bucket.name/path"
|
|
BUCKET_WITH_DOTS_AND_REGION = ("s3://my.bucket.name", {"region": "us-east-1"})
|
|
BUCKET_WITH_DOTS_AND_AWS_REGION = ("s3://my.bucket.name", {"aws_region": "us-east-1"})
|
|
BUCKET_WITHOUT_DOTS = "s3://my-bucket/path"
|
|
|
|
|
|
def assert_not_rejected_for_bucket_dots(connect):
|
|
try:
|
|
connect()
|
|
except ValueError as err:
|
|
assert "contains dots" not in str(err)
|
|
|
|
|
|
class TestS3BucketWithDotsSync:
|
|
"""Tests for connect()."""
|
|
|
|
def test_bucket_with_dots_requires_region(self):
|
|
with pytest.raises(ValueError, match="contains dots"):
|
|
lancedb.connect(BUCKET_WITH_DOTS)
|
|
|
|
def test_bucket_with_dots_and_region_is_not_rejected(self):
|
|
uri, opts = BUCKET_WITH_DOTS_AND_REGION
|
|
assert_not_rejected_for_bucket_dots(
|
|
lambda: lancedb.connect(uri, storage_options=opts)
|
|
)
|
|
|
|
def test_bucket_with_dots_and_aws_region_is_not_rejected(self):
|
|
uri, opts = BUCKET_WITH_DOTS_AND_AWS_REGION
|
|
assert_not_rejected_for_bucket_dots(
|
|
lambda: lancedb.connect(uri, storage_options=opts)
|
|
)
|
|
|
|
def test_bucket_without_dots_is_not_rejected(self):
|
|
assert_not_rejected_for_bucket_dots(
|
|
lambda: lancedb.connect(BUCKET_WITHOUT_DOTS)
|
|
)
|
|
|
|
|
|
class TestS3BucketWithDotsAsync:
|
|
"""Tests for connect_async()."""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_bucket_with_dots_requires_region(self):
|
|
with pytest.raises(ValueError, match="contains dots"):
|
|
await lancedb.connect_async(BUCKET_WITH_DOTS)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_bucket_with_dots_and_region_is_not_rejected(self):
|
|
uri, opts = BUCKET_WITH_DOTS_AND_REGION
|
|
try:
|
|
await lancedb.connect_async(uri, storage_options=opts)
|
|
except ValueError as err:
|
|
assert "contains dots" not in str(err)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_bucket_with_dots_and_aws_region_is_not_rejected(self):
|
|
uri, opts = BUCKET_WITH_DOTS_AND_AWS_REGION
|
|
try:
|
|
await lancedb.connect_async(uri, storage_options=opts)
|
|
except ValueError as err:
|
|
assert "contains dots" not in str(err)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_bucket_without_dots_is_not_rejected(self):
|
|
try:
|
|
await lancedb.connect_async(BUCKET_WITHOUT_DOTS)
|
|
except ValueError as err:
|
|
assert "contains dots" not in str(err)
|