@@ -19,18 +19,18 @@ const PYVENV_CONFIG_FILE: &str = "pyvenv.cfg";
1919
2020#[ derive( Debug ) ]
2121pub struct PyVenvCfg {
22- pub version : String ,
23- pub version_major : u64 ,
24- pub version_minor : u64 ,
22+ pub version : Option < String > ,
23+ pub version_major : Option < u64 > ,
24+ pub version_minor : Option < u64 > ,
2525 pub prompt : Option < String > ,
2626 pub file_path : PathBuf ,
2727}
2828
2929impl PyVenvCfg {
3030 fn new (
31- version : String ,
32- version_major : u64 ,
33- version_minor : u64 ,
31+ version : Option < String > ,
32+ version_major : Option < u64 > ,
33+ version_minor : Option < u64 > ,
3434 prompt : Option < String > ,
3535 file_path : PathBuf ,
3636 ) -> Self {
@@ -130,13 +130,15 @@ fn parse(file: &Path) -> Option<PyVenvCfg> {
130130
131131 match ( version, version_major, version_minor) {
132132 ( Some ( ver) , Some ( major) , Some ( minor) ) => Some ( PyVenvCfg :: new (
133- ver,
134- major,
135- minor,
133+ Some ( ver) ,
134+ Some ( major) ,
135+ Some ( minor) ,
136136 prompt,
137137 file. to_path_buf ( ) ,
138138 ) ) ,
139- _ => None ,
139+ // Even without version info, return the struct - presence of pyvenv.cfg
140+ // is sufficient to identify this as a venv environment
141+ _ => Some ( PyVenvCfg :: new ( None , None , None , prompt, file. to_path_buf ( ) ) ) ,
140142 }
141143}
142144
@@ -275,9 +277,9 @@ mod tests {
275277 let result = PyVenvCfg :: find ( dir. path ( ) ) ;
276278 assert ! ( result. is_some( ) ) ;
277279 let cfg = result. unwrap ( ) ;
278- assert_eq ! ( cfg. version, "3.11.4" ) ;
279- assert_eq ! ( cfg. version_major, 3 ) ;
280- assert_eq ! ( cfg. version_minor, 11 ) ;
280+ assert_eq ! ( cfg. version, Some ( "3.11.4" . to_string ( ) ) ) ;
281+ assert_eq ! ( cfg. version_major, Some ( 3 ) ) ;
282+ assert_eq ! ( cfg. version_minor, Some ( 11 ) ) ;
281283 assert_eq ! ( cfg. prompt, Some ( "test-env" . to_string( ) ) ) ;
282284 }
283285
@@ -294,9 +296,9 @@ mod tests {
294296 let result = PyVenvCfg :: find ( & bin_dir) ;
295297 assert ! ( result. is_some( ) ) ;
296298 let cfg = result. unwrap ( ) ;
297- assert_eq ! ( cfg. version, "3.10.0" ) ;
298- assert_eq ! ( cfg. version_major, 3 ) ;
299- assert_eq ! ( cfg. version_minor, 10 ) ;
299+ assert_eq ! ( cfg. version, Some ( "3.10.0" . to_string ( ) ) ) ;
300+ assert_eq ! ( cfg. version_major, Some ( 3 ) ) ;
301+ assert_eq ! ( cfg. version_minor, Some ( 10 ) ) ;
300302 }
301303
302304 #[ test]
@@ -315,7 +317,13 @@ mod tests {
315317 writeln ! ( file, "prompt = my-env" ) . unwrap ( ) ;
316318
317319 let result = PyVenvCfg :: find ( dir. path ( ) ) ;
318- assert ! ( result. is_none( ) ) ; // Version is required
320+ // pyvenv.cfg exists, so we should get a result even without version
321+ assert ! ( result. is_some( ) ) ;
322+ let cfg = result. unwrap ( ) ;
323+ assert ! ( cfg. version. is_none( ) ) ;
324+ assert ! ( cfg. version_major. is_none( ) ) ;
325+ assert ! ( cfg. version_minor. is_none( ) ) ;
326+ assert_eq ! ( cfg. prompt, Some ( "my-env" . to_string( ) ) ) ;
319327 }
320328
321329 #[ test]
@@ -328,8 +336,8 @@ mod tests {
328336 let result = PyVenvCfg :: find ( dir. path ( ) ) ;
329337 assert ! ( result. is_some( ) ) ;
330338 let cfg = result. unwrap ( ) ;
331- assert_eq ! ( cfg. version, "3.12.1.final.0" ) ;
332- assert_eq ! ( cfg. version_major, 3 ) ;
333- assert_eq ! ( cfg. version_minor, 12 ) ;
339+ assert_eq ! ( cfg. version, Some ( "3.12.1.final.0" . to_string ( ) ) ) ;
340+ assert_eq ! ( cfg. version_major, Some ( 3 ) ) ;
341+ assert_eq ! ( cfg. version_minor, Some ( 12 ) ) ;
334342 }
335343}
0 commit comments