mirror of https://github.com/python/cpython
128 lines
3.2 KiB
Python
128 lines
3.2 KiB
Python
|
"""Generate the skeleton for cStringIO as an example of framer."""
|
||
|
|
||
|
from framer.bases import Module, Type
|
||
|
from framer.member import member
|
||
|
|
||
|
class cStringIO(Module):
|
||
|
"""A simple fast partial StringIO replacement.
|
||
|
|
||
|
This module provides a simple useful replacement for the StringIO
|
||
|
module that is written in C. It does not provide the full
|
||
|
generality of StringIO, but it provides enough for most
|
||
|
applications and is especially useful in conjunction with the
|
||
|
pickle module.
|
||
|
|
||
|
Usage:
|
||
|
|
||
|
from cStringIO import StringIO
|
||
|
|
||
|
an_output_stream = StringIO()
|
||
|
an_output_stream.write(some_stuff)
|
||
|
...
|
||
|
value = an_output_stream.getvalue()
|
||
|
|
||
|
an_input_stream = StringIO(a_string)
|
||
|
spam = an_input_stream.readline()
|
||
|
spam = an_input_stream.read(5)
|
||
|
an_input_stream.seek(0) # OK, start over
|
||
|
spam = an_input_stream.read() # and read it all
|
||
|
"""
|
||
|
|
||
|
__file__ = "cStringIO.c"
|
||
|
|
||
|
def StringIO(o):
|
||
|
"""Return a StringIO-like stream for reading or writing"""
|
||
|
StringIO.pyarg = "|O"
|
||
|
|
||
|
class InputType(Type):
|
||
|
"Simple type for treating strings as input file streams"
|
||
|
|
||
|
abbrev = "input"
|
||
|
|
||
|
struct = """\
|
||
|
typedef struct {
|
||
|
PyObject_HEAD
|
||
|
char *buf;
|
||
|
int pos;
|
||
|
int size;
|
||
|
PyObject *pbuf;
|
||
|
} InputObject;
|
||
|
"""
|
||
|
|
||
|
def flush(self):
|
||
|
"""Does nothing"""
|
||
|
|
||
|
def getvalue(self):
|
||
|
"""Get the string value.
|
||
|
|
||
|
If use_pos is specified and is a true value, then the
|
||
|
string returned will include only the text up to the
|
||
|
current file position.
|
||
|
"""
|
||
|
|
||
|
def isatty(self):
|
||
|
"""Always returns False"""
|
||
|
|
||
|
def read(self, s):
|
||
|
"""Return s characters or the rest of the string."""
|
||
|
read.pyarg = "|i"
|
||
|
|
||
|
def readline(self):
|
||
|
"""Read one line."""
|
||
|
|
||
|
def readlines(self, hint):
|
||
|
"""Read all lines."""
|
||
|
readlines.pyarg = "|i"
|
||
|
|
||
|
def reset(self):
|
||
|
"""Reset the file position to the beginning."""
|
||
|
|
||
|
def tell(self):
|
||
|
"""Get the current position."""
|
||
|
|
||
|
def truncate(self, pos):
|
||
|
"""Truncate the file at the current position."""
|
||
|
truncate.pyarg = "|i"
|
||
|
|
||
|
def seek(self, position, mode=0):
|
||
|
"""Set the current position.
|
||
|
|
||
|
The optional mode argument can be 0 for absolute, 1 for relative,
|
||
|
and 2 for relative to EOF. The default is absolute.
|
||
|
"""
|
||
|
seek.pyarg = "i|i"
|
||
|
|
||
|
def close(self):
|
||
|
pass
|
||
|
|
||
|
class OutputType(InputType):
|
||
|
"Simple type for output strings."
|
||
|
|
||
|
abbrev = "output"
|
||
|
|
||
|
struct = """\
|
||
|
typedef struct {
|
||
|
PyObject_HEAD
|
||
|
char *buf;
|
||
|
int pos;
|
||
|
int size;
|
||
|
int softspace;
|
||
|
} OutputObject;
|
||
|
"""
|
||
|
|
||
|
softspace = member()
|
||
|
|
||
|
def close(self):
|
||
|
"""Explicitly release resources."""
|
||
|
|
||
|
def write(self, s):
|
||
|
"""Write a string to the file."""
|
||
|
# XXX Hack: writing None resets the buffer
|
||
|
|
||
|
def writelines(self, lines):
|
||
|
"""Write each string in lines."""
|
||
|
|
||
|
|
||
|
cStringIO.gen()
|
||
|
|