MCPcopy Create free account
hub / github.com/pexpect/pexpect / Expecter

Class Expecter

pexpect/expect.py:5–184  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3from .exceptions import EOF, TIMEOUT
4
5class Expecter(object):
6 def __init__(self, spawn, searcher, searchwindowsize=-1):
7 self.spawn = spawn
8 self.searcher = searcher
9 # A value of -1 means to use the figure from spawn, which should
10 # be None or a positive number.
11 if searchwindowsize == -1:
12 searchwindowsize = spawn.searchwindowsize
13 self.searchwindowsize = searchwindowsize
14 self.lookback = None
15 if hasattr(searcher, 'longest_string'):
16 self.lookback = searcher.longest_string
17
18 def do_search(self, window, freshlen):
19 spawn = self.spawn
20 searcher = self.searcher
21 if freshlen > len(window):
22 freshlen = len(window)
23 index = searcher.search(window, freshlen, self.searchwindowsize)
24 if index >= 0:
25 spawn._buffer = spawn.buffer_type()
26 spawn._buffer.write(window[searcher.end:])
27 spawn.before = spawn._before.getvalue()[
28 0:-(len(window) - searcher.start)]
29 spawn._before = spawn.buffer_type()
30 spawn._before.write(window[searcher.end:])
31 spawn.after = window[searcher.start:searcher.end]
32 spawn.match = searcher.match
33 spawn.match_index = index
34 # Found a match
35 return index
36 elif self.searchwindowsize or self.lookback:
37 maintain = self.searchwindowsize or self.lookback
38 if spawn._buffer.tell() > maintain:
39 spawn._buffer = spawn.buffer_type()
40 spawn._buffer.write(window[-maintain:])
41
42 def existing_data(self):
43 # First call from a new call to expect_loop or expect_async.
44 # self.searchwindowsize may have changed.
45 # Treat all data as fresh.
46 spawn = self.spawn
47 before_len = spawn._before.tell()
48 buf_len = spawn._buffer.tell()
49 freshlen = before_len
50 if before_len > buf_len:
51 if not self.searchwindowsize:
52 spawn._buffer = spawn.buffer_type()
53 window = spawn._before.getvalue()
54 spawn._buffer.write(window)
55 elif buf_len < self.searchwindowsize:
56 spawn._buffer = spawn.buffer_type()
57 spawn._before.seek(
58 max(0, before_len - self.searchwindowsize))
59 window = spawn._before.read()
60 spawn._buffer.write(window)
61 else:
62 spawn._buffer.seek(max(0, buf_len - self.searchwindowsize))

Callers 3

expect_listMethod · 0.85
expect_exactMethod · 0.85
expect_loopMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…