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