@@ -2,7 +2,7 @@ use std::path::PathBuf;
22use std:: str:: FromStr ;
33
44use kernels_data:: config:: { Backend , KernelName } ;
5- use kernels_data:: metadata:: { Metadata , parse_metadata} ;
5+ use kernels_data:: metadata:: { BackendInfo , Metadata , parse_metadata} ;
66use kernels_data:: version:: Version ;
77use pyo3:: Bound as PyBound ;
88use pyo3:: exceptions:: PyValueError ;
@@ -146,6 +146,44 @@ impl PyBackend {
146146 }
147147}
148148
149+ /// Backend information
150+ #[ pyclass( name = "BackendInfo" , frozen) ]
151+ #[ derive( Clone , Debug ) ]
152+ struct PyBackendInfo {
153+ backend_type : PyBackend ,
154+ archs : Option < Vec < String > > ,
155+ }
156+
157+ impl From < BackendInfo > for PyBackendInfo {
158+ fn from ( backend_info : BackendInfo ) -> Self {
159+ Self {
160+ backend_type : backend_info. backend_type . into ( ) ,
161+ archs : backend_info. archs ,
162+ }
163+ }
164+ }
165+
166+ #[ pymethods]
167+ impl PyBackendInfo {
168+ fn __repr__ ( & self ) -> String {
169+ format ! (
170+ "BackendInfo(backend_type={}, archs={:?})" ,
171+ self . backend_type. __repr__( ) ,
172+ self . archs
173+ )
174+ }
175+
176+ #[ getter]
177+ fn backend_type ( & self ) -> PyBackend {
178+ self . backend_type
179+ }
180+
181+ #[ getter]
182+ fn archs ( & self ) -> Option < & [ String ] > {
183+ self . archs . as_deref ( )
184+ }
185+ }
186+
149187/// Parsed `metadata.json` for a kernel build variant.
150188#[ pyclass( name = "Metadata" , frozen) ]
151189#[ derive( Clone , Debug ) ]
@@ -154,7 +192,7 @@ struct PyMetadata {
154192 license : Option < String > ,
155193 upstream : Option < String > ,
156194 python_depends : Vec < String > ,
157- backend : PyBackend ,
195+ backend : PyBackendInfo ,
158196}
159197
160198impl From < Metadata > for PyMetadata {
@@ -164,7 +202,7 @@ impl From<Metadata> for PyMetadata {
164202 license : m. license ,
165203 upstream : m. upstream . map ( |u| u. to_string ( ) ) ,
166204 python_depends : m. python_depends ,
167- backend : m. backend . backend_type . into ( ) ,
205+ backend : m. backend . into ( ) ,
168206 }
169207 }
170208}
@@ -202,8 +240,8 @@ impl PyMetadata {
202240 }
203241
204242 #[ getter]
205- fn backend ( & self ) -> PyBackend {
206- self . backend
243+ fn backend ( & self ) -> PyBackendInfo {
244+ self . backend . clone ( )
207245 }
208246
209247 fn __repr__ ( & self ) -> String {
@@ -221,6 +259,7 @@ impl PyMetadata {
221259#[ pyo3:: pymodule( name = "kernels_data" ) ]
222260fn kernels_data_py ( m : & PyBound < ' _ , PyModule > ) -> PyResult < ( ) > {
223261 m. add_class :: < PyBackend > ( ) ?;
262+ m. add_class :: < PyBackendInfo > ( ) ?;
224263 m. add_class :: < PyKernelName > ( ) ?;
225264 m. add_class :: < PyMetadata > ( ) ?;
226265 m. add_class :: < PyVersion > ( ) ?;
0 commit comments