Opaque type for io.TextIOWrapper seek and tell?
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 5.1k
- Forks
- 2.1k
- Merge medio
- 1 d 19 h
- PR fusionados (30 d)
- 82
Descripción
The following prints 18446744073709551620 (as I discovered in https://github.com/python/cpython/issues/93077):
import io
stream = io.TextIOWrapper(io.BytesIO(b'"")\r\nx\r\n'))
stream.read(1)
stream.read(1)
stream.read(1)
print('-----> tell:', stream.tell())
This is not a bug. The documentation says that .tell() returns "an opaque number" that "does not usually represent a number of bytes in the underlying binary storage".
In fact, calling .seek() with anything else than 0 or a return value of .tell() "produces undefined behaviour". I just relied on that today, without knowing it. I wrote this code:
def _upgrade_high_scores_file(file: IO[str], old_version: int) -> None:
...
file.seek(len(b"catris high scores file v"))
...
This shouldn't pass the type check IMO.
Guía de contribución
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.
Línea de trabajo
Empieza revisando las anotaciones de io.TextIOWrapper seek() y tell() en typeshed junto con la documentación de Python citada en el issue. Un cambio completo representaría los resultados de tell() como valores opacos e impediría que seek() aceptara offsets arbitrarios, sin dejar de permitir 0 y un valor devuelto por tell().
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- tooling
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 35/100