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()
|
---|