From 8539a38cb226912361a414fe4ddebf2c3134c22e Mon Sep 17 00:00:00 2001 From: Dean Li Date: Sat, 11 Sep 2021 00:12:06 +0800 Subject: [PATCH] os: scandir add argument support Add support for class that can to cast to a buffer like object ex. `bytearray` and `memoryview` --- vm/src/stdlib/os.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/vm/src/stdlib/os.rs b/vm/src/stdlib/os.rs index 932f88d46..9019f1851 100644 --- a/vm/src/stdlib/os.rs +++ b/vm/src/stdlib/os.rs @@ -14,6 +14,7 @@ use num_bigint::BigInt; use strum_macros::EnumString; use super::errno::errors; +use crate::buffer::PyBufferRef; use crate::builtins::bytes::{PyBytes, PyBytesRef}; use crate::builtins::dict::PyDictRef; use crate::builtins::int; @@ -210,6 +211,10 @@ pub(crate) fn fspath( impl TryFromObject for PyPathLike { fn try_from_object(vm: &VirtualMachine, obj: PyObjectRef) -> PyResult { + let obj = match PyBufferRef::try_from_borrowed_object(vm, &obj) { + Ok(buffer) => PyBytes::from(Vec::from(&*buffer.obj_bytes())).into_pyobject(vm), + Err(_) => obj, + }; let path = fspath(obj, true, vm)?; Ok(Self { path: path.as_os_str(vm)?.to_owned().into(),