MCPcopy Index your code
hub / github.com/RustPython/RustPython / from_args

Method from_args

crates/stdlib/src/csv.rs:566–668  ·  view source on GitHub ↗
(vm: &VirtualMachine, args: &mut FuncArgs)

Source from the content-addressed store, hash-verified

564
565 impl FromArgs for FormatOptions {
566 fn from_args(vm: &VirtualMachine, args: &mut FuncArgs) -> Result<Self, ArgumentError> {
567 let mut res = Self::default();
568 if let Some(dialect) = args.kwargs.swap_remove("dialect") {
569 res.dialect = prase_dialect_item_from_arg(vm, dialect)?;
570 } else if let Some(dialect) = args.args.first() {
571 res.dialect = prase_dialect_item_from_arg(vm, dialect.clone())?;
572 } else {
573 res.dialect = DialectItem::None;
574 };
575
576 if let Some(delimiter) = args.kwargs.swap_remove("delimiter") {
577 res.delimiter = Some(parse_delimiter_from_obj(vm, &delimiter)?);
578 }
579
580 if let Some(escapechar) = args.kwargs.swap_remove("escapechar") {
581 res.escapechar = match_class!(match escapechar {
582 s @ PyStr =>
583 Some(s.as_bytes().iter().copied().exactly_one().map_err(|_| {
584 let msg = r#""escapechar" must be a 1-character string"#;
585 vm.new_type_error(msg.to_owned())
586 })?),
587 _ => None,
588 })
589 };
590 if let Some(lineterminator) = args.kwargs.swap_remove("lineterminator") {
591 res.lineterminator = Some(csv_core::Terminator::Any(
592 lineterminator
593 .try_to_value::<&str>(vm)?
594 .bytes()
595 .exactly_one()
596 .map_err(|_| {
597 let msg = r#""lineterminator" must be a 1-character string"#;
598 vm.new_type_error(msg.to_owned())
599 })?,
600 ))
601 };
602 if let Some(doublequote) = args.kwargs.swap_remove("doublequote") {
603 res.doublequote = Some(doublequote.try_to_bool(vm).map_err(|_| {
604 let msg = r#""doublequote" must be a bool"#;
605 vm.new_type_error(msg.to_owned())
606 })?)
607 };
608 if let Some(skipinitialspace) = args.kwargs.swap_remove("skipinitialspace") {
609 res.skipinitialspace = Some(skipinitialspace.try_to_bool(vm).map_err(|_| {
610 let msg = r#""skipinitialspace" must be a bool"#;
611 vm.new_type_error(msg.to_owned())
612 })?)
613 };
614 if let Some(quoting) = args.kwargs.swap_remove("quoting") {
615 res.quoting = match_class!(match quoting {
616 i @ PyInt =>
617 Some(i.try_to_primitive::<isize>(vm)?.try_into().map_err(|_e| {
618 ArgumentError::InvalidKeywordArgument("quoting".to_string())
619 })?),
620 _ => {
621 // let msg = r#""quoting" must be a int enum"#;
622 return Err(ArgumentError::InvalidKeywordArgument("quoting".to_string()));
623 }

Callers

nothing calls this directly

Calls 12

parse_delimiter_from_objFunction · 0.85
AnyClass · 0.85
swap_removeMethod · 0.80
try_to_boolMethod · 0.80
SomeClass · 0.50
ErrClass · 0.50
firstMethod · 0.45
cloneMethod · 0.45
bytesMethod · 0.45
to_ownedMethod · 0.45
popMethod · 0.45

Tested by

no test coverage detected