@@ -36,7 +36,7 @@ use datafusion::prelude::*;
36
36
use pyo3:: exceptions:: { PyTypeError , PyValueError } ;
37
37
use pyo3:: prelude:: * ;
38
38
use pyo3:: pybacked:: PyBackedStr ;
39
- use pyo3:: types:: { PyCapsule , PyTuple } ;
39
+ use pyo3:: types:: { PyCapsule , PyTuple , PyTupleMethods } ;
40
40
use tokio:: task:: JoinHandle ;
41
41
42
42
use crate :: errors:: py_datafusion_err;
@@ -73,14 +73,14 @@ impl PyDataFrame {
73
73
if let Ok ( key) = key. extract :: < PyBackedStr > ( ) {
74
74
// df[col]
75
75
self . select_columns ( vec ! [ key] )
76
- // } else if let Ok(tuple) = key.extract::<& PyTuple>() {
77
- // @todo: make this branch work
78
- // // df[col1, col2, col3]
79
- // let keys = tuple
80
- // .iter()
81
- // .map(|item| item.extract::<PyBackedStr>())
82
- // .collect::<PyResult<Vec<PyBackedStr>>>()?;
83
- // self.select_columns(keys)
76
+ } else if let Ok ( tuple) = key. extract :: < Py < PyTuple > > ( ) {
77
+ // df[col1, col2, col3]
78
+ let tuple = tuple . bind ( key . py ( ) ) ;
79
+ let keys = tuple
80
+ . iter ( )
81
+ . map ( |item| item. extract :: < PyBackedStr > ( ) )
82
+ . collect :: < PyResult < Vec < PyBackedStr > > > ( ) ?;
83
+ self . select_columns ( keys)
84
84
} else if let Ok ( keys) = key. extract :: < Vec < PyBackedStr > > ( ) {
85
85
// df[[col1, col2, col3]]
86
86
self . select_columns ( keys)
0 commit comments