~ubuntu-branches/ubuntu/maverick/python3.1/maverick

« back to all changes in this revision

Viewing changes to Tools/framer/example.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-03-23 00:01:27 UTC
  • Revision ID: james.westby@ubuntu.com-20090323000127-5fstfxju4ufrhthq
Tags: upstream-3.1~a1+20090322
ImportĀ upstreamĀ versionĀ 3.1~a1+20090322

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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 io 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()