Merge pull request #3532 from davidhewitt/dict-from-seq

change `PyDict::from_sequence` to take just `&PyAny`
This commit is contained in:
Adam Reichold 2023-10-20 15:06:08 +00:00 committed by GitHub
commit 9d75325d0c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 5 additions and 3 deletions

View File

@ -0,0 +1 @@
- `PyDict::from_sequence` now takes a single argument of type `&PyAny` (previously took two arguments `Python` and `PyObject`).

View File

@ -65,7 +65,8 @@ impl PyDict {
/// Returns an error on invalid input. In the case of key collisions,
/// this keeps the last entry seen.
#[cfg(not(PyPy))]
pub fn from_sequence(py: Python<'_>, seq: PyObject) -> PyResult<&PyDict> {
pub fn from_sequence(seq: &PyAny) -> PyResult<&PyDict> {
let py = seq.py();
let dict = Self::new(py);
err::error_on_minusone(py, unsafe {
ffi::PyDict_MergeFromSeq2(dict.into_ptr(), seq.into_ptr(), 1)
@ -505,7 +506,7 @@ mod tests {
fn test_from_sequence() {
Python::with_gil(|py| {
let items = PyList::new(py, &vec![("a", 1), ("b", 2)]);
let dict = PyDict::from_sequence(py, items.to_object(py)).unwrap();
let dict = PyDict::from_sequence(items).unwrap();
assert_eq!(
1,
dict.get_item("a")
@ -534,7 +535,7 @@ mod tests {
fn test_from_sequence_err() {
Python::with_gil(|py| {
let items = PyList::new(py, &vec!["a", "b"]);
assert!(PyDict::from_sequence(py, items.to_object(py)).is_err());
assert!(PyDict::from_sequence(items).is_err());
});
}