1"""Generate the skeleton for cStringIO as an example of framer."""
2
3from framer.bases import Module, Type
4from framer.member import member
5
6class 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
126cStringIO.gen()
127