forked from Rust-related/RustPython
Merge pull request #4508 from marvinmednick/pathconf_names
Pathconf names
This commit is contained in:
@@ -507,3 +507,10 @@ if "win" not in sys.platform:
|
||||
|
||||
for arg in [None, 1, 1.0, TabError]:
|
||||
assert_raises(TypeError, os.system, arg)
|
||||
|
||||
# Testing for os.pathconf_names
|
||||
if sys.platform.startswith('linux'):
|
||||
assert len(os.pathconf_names) > 0
|
||||
assert 'PC_NAME_MAX' in os.pathconf_names
|
||||
for option,index in os.pathconf_names.items():
|
||||
assert os.pathconf('/', index) == os.pathconf('/', option)
|
||||
|
||||
@@ -51,7 +51,7 @@ pub mod module {
|
||||
fs, io,
|
||||
os::unix::{ffi as ffi_ext, io::RawFd},
|
||||
};
|
||||
use strum_macros::EnumString;
|
||||
use strum_macros::{EnumString, EnumVariantNames};
|
||||
|
||||
#[pyattr]
|
||||
use libc::{PRIO_PGRP, PRIO_PROCESS, PRIO_USER};
|
||||
@@ -1681,7 +1681,7 @@ pub mod module {
|
||||
|
||||
// Copy from [nix::unistd::PathconfVar](https://docs.rs/nix/0.21.0/nix/unistd/enum.PathconfVar.html)
|
||||
// Change enum name to fit python doc
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, EnumString)]
|
||||
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq, EnumString, EnumVariantNames)]
|
||||
#[repr(i32)]
|
||||
#[allow(non_camel_case_types)]
|
||||
pub enum PathconfVar {
|
||||
@@ -1881,6 +1881,26 @@ pub mod module {
|
||||
pathconf(PathOrFd::Fd(fd), name, vm)
|
||||
}
|
||||
|
||||
// TODO: this is expected to be run on macOS as a unix, but somehow not.
|
||||
#[cfg(target_os = "linux")]
|
||||
#[pyattr]
|
||||
fn pathconf_names(vm: &VirtualMachine) -> PyDictRef {
|
||||
use std::str::FromStr;
|
||||
use strum::VariantNames;
|
||||
let pathname = vm.ctx.new_dict();
|
||||
for variant in PathconfVar::VARIANTS {
|
||||
// get the name of variant as a string to use as the dictionary key
|
||||
let key = vm.ctx.new_str(variant.to_string());
|
||||
// get the enum from the string and convert it to an integer for the dictionary value
|
||||
let value: PyObjectRef = vm
|
||||
.ctx
|
||||
.new_int(PathconfVar::from_str(variant).unwrap() as u8)
|
||||
.into();
|
||||
pathname.set_item(&*key, value, vm).unwrap();
|
||||
}
|
||||
pathname
|
||||
}
|
||||
|
||||
#[cfg(any(target_os = "linux", target_os = "macos"))]
|
||||
#[derive(FromArgs)]
|
||||
struct SendFileArgs {
|
||||
|
||||
Reference in New Issue
Block a user