Necesito exponer un objeto similar a un archivo desde una biblioteca C que estoy envolviendo con un módulo Cython. Quiero reutilizar el código genérico de python para cosas como almacenamiento en búfer, readline(), etc.Exponer un objeto similar a un archivo desde Cython
El nuevo módulo de IO parece ser justo lo que necesito, pero en realidad usarlo de Cython parece no ser trivial, ' he intentado varias aproaches:
Mi código en una clase que hereda de cdef IO.RawIOBase - Esta falla porque las clases CDEF se heredan sólo de otras clases Cython CDEF, mientras IO es "cruda" C.
Mi código en una clase cdef, otra clase (no cdef) que hereda mi clase cdef y RawIOBase - falla con "TypeError: múltiples bases tienen conflicto de diseño de instancias "
Mi código en una clase (no cdef) que hereda de RawIOBase - Esto funciona, pero pierdo la capacidad de almacenar mi c-level (que necesito para hablar con la biblioteca subyacente) cosas dentro de la clase, así que necesito hacer una envoltura de cdef y almacenar eso como miembro ... esto parece un desastre.
Mi código en clase cdef que no hereda (Raw) IOBase más bien vuelve a implementar su funcionalidad, el código Python obtiene mi objeto envuelto en BufferedReader/BufferedWriter - Este parece funcionar y menos desordenado que la opción anterior.
Mis preguntas (s):
1) ¿Me estoy perdiendo algo y reinventar la rueda aquí?
2) ¿Cuál es el material exacto de IOBase que debo implementar para mantener BufferedReader/Writer satisfecho con mi objeto en las versiones actuales y futuras de python? ¿Está esto documentado en algún lugar?
3) ¿Cómo funciona eso en Python 2.6 donde IO es python puro? Supongo que ese rendimiento sufrirá pero funcionará, ¿verdad?
Disculpa, no he visto esta respuesta antes. Esto no es realmente aplicable a mi caso, ya que lo que obtengo de la biblioteca de terceros no es un FD de nivel os. – bdew