Skip to content

Commit fe0db0f

Browse files
committed
refactored charfinder examples
1 parent ca0566d commit fe0db0f

File tree

3 files changed

+22
-35
lines changed

3 files changed

+22
-35
lines changed

concurrency/charfinder.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -167,22 +167,23 @@ def find_descriptions(self, query):
167167
for code in self.find_codes(query):
168168
yield self.describe(code)
169169

170+
@staticmethod # not an instance method due to concurrency
171+
def status(query, counter):
172+
if counter == 0:
173+
msg = 'No match'
174+
elif counter == 1:
175+
msg = '1 match'
176+
else:
177+
msg = '{} matches'.format(counter)
178+
return '{} for {!r}'.format(msg, query)
179+
170180

171181
def main(*args):
172182
index = UnicodeNameIndex()
173183
query = ' '.join(args)
174-
counter = 0
175-
for line in index.find_descriptions(query):
184+
for n, line in enumerate(index.find_descriptions(query), 1):
176185
print(line)
177-
counter += 1
178-
if counter == 0:
179-
msg = 'No match'
180-
elif counter == 1:
181-
msg = '1 match'
182-
else:
183-
msg = '{} matches'.format(counter)
184-
print('({} for {!r})'.format(msg, query))
185-
186+
print('({})'.format(index.status(query, n)))
186187

187188
if __name__ == '__main__':
188189
if len(sys.argv) > 1:

concurrency/http_charserver.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ def handle(request):
4545
if query:
4646
lines = list(index.find_descriptions(query))
4747
res = '\n'.join(lines)
48-
plural = 'es' if len(lines) > 1 else ''
49-
msg = '{} match{} for {!r}'.format(len(lines), plural, query)
48+
msg = index.status(query, len(lines))
5049
else:
5150
lines = []
5251
res = ''

concurrency/tcp_charserver.py

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,6 @@
1010
index = None # a UnicodeNameIndex instance
1111

1212

13-
def writeln(writer, arg):
14-
if isinstance(arg, str):
15-
lines = [arg]
16-
else:
17-
lines = arg
18-
writer.writelines(line.encode() + CRLF for line in lines)
19-
20-
2113
@asyncio.coroutine
2214
def handle_queries(reader, writer):
2315
while True:
@@ -28,21 +20,16 @@ def handle_queries(reader, writer):
2820
query = data.decode().strip()
2921
except UnicodeDecodeError:
3022
query = '\x00'
31-
if ord(query[:1]) < 32:
32-
break
3323
client = writer.get_extra_info('peername')
34-
print('Received from {}: {}'.format(client, query))
35-
lines = list(index.find_descriptions(query))
36-
if lines:
37-
writeln(writer, lines)
38-
plural = 'es' if len(lines) > 1 else ''
39-
msg = '({} match{} for {!r})'.format(len(lines), plural, query)
40-
writeln(writer, msg)
41-
print('Sent: {} lines + total'.format(len(lines)))
42-
else:
43-
writeln(writer, '(No match for {!r})'.format(query))
44-
print('Sent: 1 line, no match')
45-
yield from writer.drain()
24+
print('Received from {}: {!r}'.format(client, query))
25+
if query:
26+
if ord(query[:1]) < 32:
27+
break
28+
lines = list(index.find_descriptions(query))
29+
if lines:
30+
writer.writelines(line.encode() + CRLF for line in lines)
31+
writer.write(index.status(query, len(lines)).encode() + CRLF)
32+
yield from writer.drain()
4633

4734
print('Close the client socket')
4835
writer.close()

0 commit comments

Comments
 (0)