Skip to content

Commit c6b0f30

Browse files
authored
feat: add icu extension (#107)
1 parent 6d5df08 commit c6b0f30

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

python/rustac/rustac.pyi

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ class DuckdbClient:
1818
*,
1919
extension_directory: Path | None = None,
2020
extensions: list[str] | None = None,
21-
install_spatial: bool = True,
21+
install_extensions: bool = True,
2222
use_hive_partitioning: bool = False,
2323
) -> None:
2424
"""Creates a new duckdb client.
2525
2626
Args:
2727
extension_directory: A non-standard extension directory to use.
2828
extensions: A list of extensions to LOAD on client initialization.
29-
install_spatial: Whether to install the spatial extension on client initialization.
29+
install_extensions: Whether to install the spatial and icu extensions on client initialization.
3030
use_hive_partitioning: Whether to use hive partitioning for geoparquet queries.
3131
"""
3232

src/duckdb.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ pub struct DuckdbClient(Mutex<Client>);
1919
#[pymethods]
2020
impl DuckdbClient {
2121
#[new]
22-
#[pyo3(signature = (*, extension_directory=None, extensions=Vec::new(), install_spatial=true, use_hive_partitioning=false))]
22+
#[pyo3(signature = (*, extension_directory=None, extensions=Vec::new(), install_extensions=true, use_hive_partitioning=false))]
2323
fn new(
2424
extension_directory: Option<PathBuf>,
2525
extensions: Vec<String>,
26-
install_spatial: bool,
26+
install_extensions: bool,
2727
use_hive_partitioning: bool,
2828
) -> Result<DuckdbClient> {
2929
let connection = Connection::open_in_memory()?;
@@ -33,13 +33,15 @@ impl DuckdbClient {
3333
[extension_directory.to_string_lossy()],
3434
)?;
3535
}
36-
if install_spatial {
36+
if install_extensions {
3737
connection.execute("INSTALL spatial", [])?;
38+
connection.execute("INSTALL icu", [])?;
3839
}
3940
for extension in extensions {
4041
connection.execute(&format!("LOAD '{}'", extension), [])?;
4142
}
4243
connection.execute("LOAD spatial", [])?;
44+
connection.execute("LOAD icu", [])?;
4345
let mut client = Client::from(connection);
4446
client.use_hive_partitioning = use_hive_partitioning;
4547
Ok(DuckdbClient(Mutex::new(client)))

tests/test_duckdb.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,18 @@ def test_custom_extension_directory(extension_directory: Path) -> None:
5252

5353
def test_no_install(tmp_path: Path) -> None:
5454
with pytest.raises(RustacError):
55-
DuckdbClient(extension_directory=tmp_path, install_spatial=False)
55+
DuckdbClient(extension_directory=tmp_path, install_extensions=False)
5656

5757

5858
def test_extensions(extension_directory: Path, tmp_path: Path) -> None:
5959
# Ensure we've fetched the extension
6060
DuckdbClient(extension_directory=extension_directory)
6161

62-
extension = next(extension_directory.glob("**/spatial.duckdb_extension"))
62+
extensions = list(str(e) for e in extension_directory.glob("**/*.duckdb_extension"))
6363
client = DuckdbClient(
64-
extensions=[str(extension)], extension_directory=tmp_path, install_spatial=False
64+
extensions=extensions,
65+
extension_directory=tmp_path,
66+
install_extensions=False,
6567
)
6668
client.search("data/100-sentinel-2-items.parquet")
6769

0 commit comments

Comments
 (0)