~divmod-dev/divmod.org/trunk

« back to all changes in this revision

Viewing changes to Epsilon/epsilon/liner.py

  • Committer: Jean-Paul Calderone
  • Date: 2014-06-29 20:33:04 UTC
  • mfrom: (2749.1.1 remove-epsilon-1325289)
  • Revision ID: exarkun@twistedmatrix.com-20140629203304-gdkmbwl1suei4m97
mergeĀ lp:~exarkun/divmod.org/remove-epsilon-1325289

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright 2005 Divmod, Inc.  See LICENSE file for details
2
 
# -*- test-case-name: vertex.test.test_juice -*-
3
 
 
4
 
__metaclass__ = type
5
 
 
6
 
from twisted.internet.protocol import Protocol
7
 
 
8
 
class LineReceiver(Protocol):
9
 
 
10
 
    lineMode = True
11
 
    MAX_LINE_LENGTH = 1024 * 1024
12
 
    buffer = ''
13
 
    delimiter = '\r\n'
14
 
 
15
 
    def lineReceived(self, line):
16
 
        pass
17
 
 
18
 
    def rawDataReceived(self, data):
19
 
        pass
20
 
 
21
 
    def setLineMode(self, extra=''):
22
 
        self.lineMode = True
23
 
        if extra:
24
 
            self.dataReceived(extra)
25
 
 
26
 
    def isDisconnecting(self):
27
 
        if self.transport is None:
28
 
            # XXX This _ought_ to be horribly broken but in fact it is
29
 
            # not. TODO: Investigate further.  -glyph
30
 
            return False
31
 
        if self.transport.disconnecting:
32
 
            return True
33
 
        return False
34
 
 
35
 
    def setRawMode(self):
36
 
        self.lineMode = False
37
 
 
38
 
    def dataReceived(self, data):
39
 
        buffer = self.buffer
40
 
        buffer += data
41
 
        delimiter = self.delimiter
42
 
        begin = 0
43
 
        raw = False
44
 
        while self.lineMode:
45
 
            end = buffer.find(delimiter, begin)
46
 
            if end == -1:
47
 
                break
48
 
            line = buffer[begin:end]
49
 
            self.lineReceived(line)
50
 
            if self.isDisconnecting():
51
 
                self.buffer = ''
52
 
                return
53
 
            begin = end + len(delimiter)
54
 
        else:
55
 
            raw = True
56
 
        if begin:
57
 
            buffer = buffer[begin:]
58
 
        if raw:
59
 
            self.buffer = ''
60
 
            if self.isDisconnecting():
61
 
                return
62
 
            if buffer:
63
 
                self.rawDataReceived(buffer)
64
 
        else:
65
 
            self.buffer = buffer
66
 
 
67