| 1 | """Generate the skeleton for cStringIO as an example of framer."""
|
|---|
| 2 |
|
|---|
| 3 | from framer.bases import Module, Type
|
|---|
| 4 | from framer.member import member
|
|---|
| 5 |
|
|---|
| 6 | class cStringIO(Module):
|
|---|
| 7 | """A simple fast partial StringIO replacement.
|
|---|
| 8 |
|
|---|
| 9 | This module provides a simple useful replacement for the StringIO
|
|---|
| 10 | module that is written in C. It does not provide the full
|
|---|
| 11 | generality of StringIO, but it provides enough for most
|
|---|
| 12 | applications and is especially useful in conjunction with the
|
|---|
| 13 | pickle module.
|
|---|
| 14 |
|
|---|
| 15 | Usage:
|
|---|
| 16 |
|
|---|
| 17 | from cStringIO import StringIO
|
|---|
| 18 |
|
|---|
| 19 | an_output_stream = StringIO()
|
|---|
| 20 | an_output_stream.write(some_stuff)
|
|---|
| 21 | ...
|
|---|
| 22 | value = an_output_stream.getvalue()
|
|---|
| 23 |
|
|---|
| 24 | an_input_stream = StringIO(a_string)
|
|---|
| 25 | spam = an_input_stream.readline()
|
|---|
| 26 | spam = an_input_stream.read(5)
|
|---|
| 27 | an_input_stream.seek(0) # OK, start over
|
|---|
| 28 | spam = an_input_stream.read() # and read it all
|
|---|
| 29 | """
|
|---|
| 30 |
|
|---|
| 31 | __file__ = "cStringIO.c"
|
|---|
| 32 |
|
|---|
| 33 | def StringIO(o):
|
|---|
| 34 | """Return a StringIO-like stream for reading or writing"""
|
|---|
| 35 | StringIO.pyarg = "|O"
|
|---|
| 36 |
|
|---|
| 37 | class InputType(Type):
|
|---|
| 38 | "Simple type for treating strings as input file streams"
|
|---|
| 39 |
|
|---|
| 40 | abbrev = "input"
|
|---|
| 41 |
|
|---|
| 42 | struct = """\
|
|---|
| 43 | typedef struct {
|
|---|
| 44 | PyObject_HEAD
|
|---|
| 45 | char *buf;
|
|---|
| 46 | int pos;
|
|---|
| 47 | int size;
|
|---|
| 48 | PyObject *pbuf;
|
|---|
| 49 | } InputObject;
|
|---|
| 50 | """
|
|---|
| 51 |
|
|---|
| 52 | def flush(self):
|
|---|
| 53 | """Does nothing"""
|
|---|
| 54 |
|
|---|
| 55 | def getvalue(self):
|
|---|
| 56 | """Get the string value.
|
|---|
| 57 |
|
|---|
| 58 | If use_pos is specified and is a true value, then the
|
|---|
| 59 | string returned will include only the text up to the
|
|---|
| 60 | current file position.
|
|---|
| 61 | """
|
|---|
| 62 |
|
|---|
| 63 | def isatty(self):
|
|---|
| 64 | """Always returns False"""
|
|---|
| 65 |
|
|---|
| 66 | def read(self, s):
|
|---|
| 67 | """Return s characters or the rest of the string."""
|
|---|
| 68 | read.pyarg = "|i"
|
|---|
| 69 |
|
|---|
| 70 | def readline(self):
|
|---|
| 71 | """Read one line."""
|
|---|
| 72 |
|
|---|
| 73 | def readlines(self, hint):
|
|---|
| 74 | """Read all lines."""
|
|---|
| 75 | readlines.pyarg = "|i"
|
|---|
| 76 |
|
|---|
| 77 | def reset(self):
|
|---|
| 78 | """Reset the file position to the beginning."""
|
|---|
| 79 |
|
|---|
| 80 | def tell(self):
|
|---|
| 81 | """Get the current position."""
|
|---|
| 82 |
|
|---|
| 83 | def truncate(self, pos):
|
|---|
| 84 | """Truncate the file at the current position."""
|
|---|
| 85 | truncate.pyarg = "|i"
|
|---|
| 86 |
|
|---|
| 87 | def seek(self, position, mode=0):
|
|---|
| 88 | """Set the current position.
|
|---|
| 89 |
|
|---|
| 90 | The optional mode argument can be 0 for absolute, 1 for relative,
|
|---|
| 91 | and 2 for relative to EOF. The default is absolute.
|
|---|
| 92 | """
|
|---|
| 93 | seek.pyarg = "i|i"
|
|---|
| 94 |
|
|---|
| 95 | def close(self):
|
|---|
| 96 | pass
|
|---|
| 97 |
|
|---|
| 98 | class OutputType(InputType):
|
|---|
| 99 | "Simple type for output strings."
|
|---|
| 100 |
|
|---|
| 101 | abbrev = "output"
|
|---|
| 102 |
|
|---|
| 103 | struct = """\
|
|---|
| 104 | typedef struct {
|
|---|
| 105 | PyObject_HEAD
|
|---|
| 106 | char *buf;
|
|---|
| 107 | int pos;
|
|---|
| 108 | int size;
|
|---|
| 109 | int softspace;
|
|---|
| 110 | } OutputObject;
|
|---|
| 111 | """
|
|---|
| 112 |
|
|---|
| 113 | softspace = member()
|
|---|
| 114 |
|
|---|
| 115 | def close(self):
|
|---|
| 116 | """Explicitly release resources."""
|
|---|
| 117 |
|
|---|
| 118 | def write(self, s):
|
|---|
| 119 | """Write a string to the file."""
|
|---|
| 120 | # XXX Hack: writing None resets the buffer
|
|---|
| 121 |
|
|---|
| 122 | def writelines(self, lines):
|
|---|
| 123 | """Write each string in lines."""
|
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 | cStringIO.gen()
|
|---|