@@ -1883,8 +1883,9 @@ mod _io {
18831883 }
18841884
18851885 #[ pymethod]
1886- fn seekable ( _self : PyObjectRef ) -> bool {
1887- true
1886+ fn seekable ( & self , vm : & VirtualMachine ) -> PyResult {
1887+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1888+ vm. get_attribute ( buffer, "seekable" )
18881889 }
18891890
18901891 #[ pymethod]
@@ -1894,7 +1895,7 @@ mod _io {
18941895 how : OptionalArg < i32 > ,
18951896 vm : & VirtualMachine ,
18961897 ) -> PyResult {
1897- let data = self . lock ( vm) ?;
1898+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
18981899 let offset = get_offset ( offset, vm) ?;
18991900 let how = how. unwrap_or ( 0 ) ;
19001901 if how == 1 && offset != 0 {
@@ -1908,33 +1909,33 @@ mod _io {
19081909 "can't do nonzero end-relative seeks" . to_owned ( ) ,
19091910 ) ) ;
19101911 }
1911- call_method ( vm, & data . buffer , "seek" , ( offset, how) )
1912+ call_method ( vm, & buffer, "seek" , ( offset, how) )
19121913 }
19131914
19141915 #[ pymethod]
19151916 fn tell ( & self , vm : & VirtualMachine ) -> PyResult {
1916- let data = self . lock ( vm) ?;
1917- call_method ( vm, & data . buffer , "tell" , ( ) )
1917+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1918+ call_method ( vm, & buffer, "tell" , ( ) )
19181919 }
19191920
19201921 #[ pyproperty]
19211922 fn name ( & self , vm : & VirtualMachine ) -> PyResult {
1922- let data = self . lock ( vm) ?;
1923- vm. get_attribute ( data . buffer . clone ( ) , "name" )
1923+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1924+ vm. get_attribute ( buffer, "name" )
19241925 }
19251926
19261927 #[ pymethod]
19271928 fn fileno ( & self , vm : & VirtualMachine ) -> PyResult {
1928- let data = self . lock ( vm) ?;
1929- call_method ( vm, & data . buffer , "fileno" , ( ) )
1929+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1930+ call_method ( vm, & buffer, "fileno" , ( ) )
19301931 }
19311932
19321933 #[ pymethod]
19331934 fn read ( & self , size : OptionalOption < PyObjectRef > , vm : & VirtualMachine ) -> PyResult < String > {
1934- let data = self . lock ( vm) ?;
1935- check_readable ( & data . buffer , vm) ?;
1935+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1936+ check_readable ( & buffer, vm) ?;
19361937
1937- let bytes = call_method ( vm, & data . buffer , "read" , ( size. flatten ( ) , ) ) ?;
1938+ let bytes = call_method ( vm, & buffer, "read" , ( size. flatten ( ) , ) ) ?;
19381939 let bytes = PyBytesLike :: try_from_object ( vm, bytes) ?;
19391940 //format bytes into string
19401941 let rust_string = String :: from_utf8 ( bytes. to_cow ( ) . into_owned ( ) ) . map_err ( |e| {
@@ -1950,14 +1951,14 @@ mod _io {
19501951 fn write ( & self , obj : PyStrRef , vm : & VirtualMachine ) -> PyResult < usize > {
19511952 use std:: str:: from_utf8;
19521953
1953- let data = self . lock ( vm) ?;
1954- check_writable ( & data . buffer , vm) ?;
1954+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1955+ check_writable ( & buffer, vm) ?;
19551956
19561957 let bytes = obj. borrow_value ( ) . as_bytes ( ) ;
19571958
1958- let len = call_method ( vm, & data . buffer , "write" , ( bytes. to_owned ( ) , ) ) ;
1959+ let len = call_method ( vm, & buffer, "write" , ( bytes. to_owned ( ) , ) ) ;
19591960 if obj. borrow_value ( ) . contains ( '\n' ) {
1960- let _ = call_method ( vm, & data . buffer , "flush" , ( ) ) ;
1961+ let _ = call_method ( vm, & buffer, "flush" , ( ) ) ;
19611962 }
19621963 let len = usize:: try_from_object ( vm, len?) ?;
19631964
@@ -1971,16 +1972,16 @@ mod _io {
19711972
19721973 #[ pymethod]
19731974 fn flush ( & self , vm : & VirtualMachine ) -> PyResult {
1974- let data = self . lock ( vm) ?;
1975- check_closed ( & data . buffer , vm) ?;
1976- call_method ( vm, & data . buffer , "flush" , ( ) )
1975+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1976+ check_closed ( & buffer, vm) ?;
1977+ call_method ( vm, & buffer, "flush" , ( ) )
19771978 }
19781979
19791980 #[ pymethod]
19801981 fn isatty ( & self , vm : & VirtualMachine ) -> PyResult {
1981- let data = self . lock ( vm) ?;
1982- check_closed ( & data . buffer , vm) ?;
1983- call_method ( vm, & data . buffer , "isatty" , ( ) )
1982+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1983+ check_closed ( & buffer, vm) ?;
1984+ call_method ( vm, & buffer, "isatty" , ( ) )
19841985 }
19851986
19861987 #[ pymethod]
@@ -1989,10 +1990,10 @@ mod _io {
19891990 size : OptionalOption < PyObjectRef > ,
19901991 vm : & VirtualMachine ,
19911992 ) -> PyResult < String > {
1992- let data = self . lock ( vm) ?;
1993- check_readable ( & data . buffer , vm) ?;
1993+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
1994+ check_readable ( & buffer, vm) ?;
19941995
1995- let bytes = call_method ( vm, & data . buffer , "readline" , ( size. flatten ( ) , ) ) ?;
1996+ let bytes = call_method ( vm, & buffer, "readline" , ( size. flatten ( ) , ) ) ?;
19961997 let bytes = PyBytesLike :: try_from_object ( vm, bytes) ?;
19971998 //format bytes into string
19981999 let rust_string = String :: from_utf8 ( bytes. borrow_value ( ) . to_vec ( ) ) . map_err ( |e| {
@@ -2006,18 +2007,17 @@ mod _io {
20062007
20072008 #[ pymethod]
20082009 fn close ( & self , vm : & VirtualMachine ) -> PyResult {
2009- let data = self . lock ( vm) ?;
2010- call_method ( vm, & data . buffer , "close" , ( ) )
2010+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
2011+ call_method ( vm, & buffer, "close" , ( ) )
20112012 }
20122013 #[ pyproperty]
20132014 fn closed ( & self , vm : & VirtualMachine ) -> PyResult {
2014- let data = self . lock ( vm) ?;
2015- vm. get_attribute ( data . buffer . clone ( ) , "closed" )
2015+ let buffer = self . lock ( vm) ?. buffer . clone ( ) ;
2016+ vm. get_attribute ( buffer, "closed" )
20162017 }
20172018 #[ pyproperty]
20182019 fn buffer ( & self , vm : & VirtualMachine ) -> PyResult {
2019- let data = self . lock ( vm) ?;
2020- Ok ( data. buffer . clone ( ) )
2020+ Ok ( self . lock ( vm) ?. buffer . clone ( ) )
20212021 }
20222022
20232023 #[ pymethod( magic) ]
0 commit comments