@@ -8,6 +8,7 @@ use ::twinleaf::*;
88struct PyIter {
99 port : data:: Device ,
1010 n : Option < usize > ,
11+ columns : Vec < String > ,
1112}
1213
1314#[ pymethods]
@@ -28,19 +29,23 @@ impl PyIter {
2829 }
2930 }
3031
31- let sample = slf. port . next ( ) ;
32+ while dict. is_empty ( ) {
33+ let sample = slf. port . next ( ) ;
3234
33- let time = sample. timestamp_end ( ) . into_pyobject ( slf. py ( ) ) ?;
34- dict. set_item ( "time" , time) ?;
35-
36- for column in sample. columns {
37- let name = column. desc . name . clone ( ) . into_pyobject ( slf. py ( ) ) ?;
38- match column. value {
39- data:: ColumnData :: Int ( x) => { dict. set_item ( name, x. into_pyobject ( slf. py ( ) ) ?) ?}
40- data:: ColumnData :: UInt ( x) => { dict. set_item ( name, x. into_pyobject ( slf. py ( ) ) ?) ?}
41- data:: ColumnData :: Float ( x) => { dict. set_item ( name, x. into_pyobject ( slf. py ( ) ) ?) ?}
42- _ => { dict. set_item ( name, "UNKNOWN" . into_pyobject ( slf. py ( ) ) ?) ? }
43- } ;
35+ for column in & sample. columns {
36+ let name = column. desc . name . clone ( ) . into_pyobject ( slf. py ( ) ) ?;
37+ let name_str: String = name. extract ( ) ?;
38+ if slf. columns . is_empty ( ) || slf. columns . contains ( & name_str) {
39+ let time = sample. timestamp_end ( ) . into_pyobject ( slf. py ( ) ) ?;
40+ dict. set_item ( "time" , time) ?;
41+ match column. value {
42+ data:: ColumnData :: Int ( x) => { dict. set_item ( name, x. into_pyobject ( slf. py ( ) ) ?) ?}
43+ data:: ColumnData :: UInt ( x) => { dict. set_item ( name, x. into_pyobject ( slf. py ( ) ) ?) ?}
44+ data:: ColumnData :: Float ( x) => { dict. set_item ( name, x. into_pyobject ( slf. py ( ) ) ?) ?}
45+ _ => { dict. set_item ( name, "UNKNOWN" . into_pyobject ( slf. py ( ) ) ?) ? }
46+ } ;
47+ }
48+ }
4449 }
4550
4651 Ok ( Some ( dict. into ( ) ) )
@@ -81,10 +86,10 @@ impl PyDevice {
8186 }
8287 }
8388
84- fn samples < ' py > ( & self , _py : Python < ' py > , n : Option < usize > ) -> PyResult < PyIter > {
85- Ok ( PyIter { port : data:: Device :: new ( self . proxy . device_full ( self . route . clone ( ) ) . unwrap ( ) ) , n : n} )
89+ #[ pyo3( signature = ( n=1 , columns=None ) ) ]
90+ fn samples < ' py > ( & self , _py : Python < ' py > , n : Option < usize > , columns : Option < Vec < String > > ) -> PyResult < PyIter > {
91+ Ok ( PyIter { port : data:: Device :: new ( self . proxy . device_full ( self . route . clone ( ) ) . unwrap ( ) ) , n : n, columns : columns. unwrap_or_default ( ) } )
8692 }
87-
8893}
8994
9095/// A Python module implemented in Rust. The name of this function must match
0 commit comments