Skip to content

Commit 89d5d15

Browse files
committed
Failed pytest in ffi crate when warnings are generated
1 parent 231ed2b commit 89d5d15

File tree

4 files changed

+66
-0
lines changed

4 files changed

+66
-0
lines changed

examples/datafusion-ffi-example/Cargo.lock

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/datafusion-ffi-example/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ arrow = { version = "57" }
3737
arrow-array = { version = "57" }
3838
arrow-schema = { version = "57" }
3939
async-trait = "0.1.89"
40+
pyo3-log = "0.13.2"
4041

4142
[build-dependencies]
4243
pyo3-build-config = "0.26"
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Licensed to the Apache Software Foundation (ASF) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The ASF licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
from __future__ import annotations
19+
20+
import logging
21+
from typing import TYPE_CHECKING
22+
23+
import pytest
24+
25+
if TYPE_CHECKING:
26+
from collections.abc import Generator
27+
from typing import Any
28+
29+
30+
class _FailOnWarning(logging.Handler):
31+
def emit(self, record: logging.LogRecord) -> None:
32+
if record.levelno >= logging.WARNING:
33+
err = f"Unexpected log warning from '{record.name}': {self.format(record)}"
34+
raise AssertionError(err)
35+
36+
37+
@pytest.fixture(autouse=True)
38+
def fail_on_log_warnings() -> Generator[None, Any, None]:
39+
handler = _FailOnWarning()
40+
logging.root.addHandler(handler)
41+
yield
42+
logging.root.removeHandler(handler)

examples/datafusion-ffi-example/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ pub(crate) mod window_udf;
3434

3535
#[pymodule]
3636
fn datafusion_ffi_example(m: &Bound<'_, PyModule>) -> PyResult<()> {
37+
pyo3_log::init();
38+
3739
m.add_class::<MyTableProvider>()?;
3840
m.add_class::<MyTableFunction>()?;
3941
m.add_class::<MyCatalogProvider>()?;

0 commit comments

Comments
 (0)