IOError: [Errno 0] Error on write() in tee.TeeInput._tee
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 1/5
- Tiempo estimado
- Menos de una hora
- Aptitud para principiantes
- 52/100
Línea de trabajo
El código afectado está en tee.py alrededor de la línea 154; comienza leyendo TeeInput._tee y el flujo de lectura/escritura de TemporaryFile. Ejecuta la reproducción de unittest proporcionada con un archivo HTML de más de 45 KB y, a continuación, confirma que las operaciones repetidas de readline y flush ya no generan IOError con Errno 0.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
In very rare circumstances, the write() on the TemporaryFile files with an IOError, but no error code. I tracked the bug down to the following: When using a file object with read and write mode, then you have to flush or seek, when switching between reading and writing (see http://bugs.python.org/issue3207).
To fix this here, simply reset the filestream pointer by seeking to the position returned by tell(). More specifically, in tee.py:154 add self.tmp.seek(self.tmp.tell()).
If you want to reproduce the error yourself, use the following script. The html file needs to be bigger than two chunk sizes (32KB), so a file with 45 KB should do the trick.
import unittest
from restkit.tee import TeeInput
import os
import tempfile
class TempfileErrorCase(unittest.TestCase):
def test_ioerror(self):
with open("/path/to/large/html/file", "rb") as f:
i = TeeInput(f)
for _ in range(200):
i.readline()
i.tmp.flush()
def tearDown(self):
os.remove(self.tmpfile.name)
# Guard importing as main module
if __name__ == "__main__":
unittest.main()
- Lenguaje dominante
- Python
- Estrellas
- 402
- Forks
- 69
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de benoitc/restkit
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
-
Documentation for forms.pyAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Bug
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Doesn't Validate TLSAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
Todos los issues de benoitc/restkit
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
-
area:other help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
WingedGuardian/GENesis-AGI#4734 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
peach-mitao/peach#693 ·
Los mantenedores suelen responder en 1 día
-
Failed result serialization destroys a previously saved JSON resultPosiblemente ocupada @chessing234 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
huggingface/evaluate#867 ·
-
FTP reads inside a transaction use a nonexistent staging pathPosiblemente ocupada @Harsh23Kashyap la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
fsspec/filesystem_spec#2463 ·
Los mantenedores suelen responder en 1 día