concurrency examples
This commit is contained in:
@@ -7,20 +7,21 @@
|
||||
//(function() {
|
||||
var BASE_URL = 'http://127.0.0.1:8888/chars';
|
||||
var RESULTS_PER_REQUEST = 10;
|
||||
var REQUEST_DELAY = 1000; // in milliseconds
|
||||
var REQUEST_DELAY = 100; // in milliseconds
|
||||
var httpRequest = new XMLHttpRequest();
|
||||
httpRequest.onreadystatechange = processResponse;
|
||||
|
||||
function requestMaker(start) {
|
||||
var makeRequest = function (event) {
|
||||
var query = document.getElementById('queryField').value;
|
||||
var limit = RESULTS_PER_REQUEST;
|
||||
httpRequest.open('GET', BASE_URL+'?query='+query+'&limit='+limit);
|
||||
var stop = start + RESULTS_PER_REQUEST;
|
||||
var params = '?query='+query+'&start='+start+'&stop='+stop;
|
||||
httpRequest.open('GET', BASE_URL+params);
|
||||
httpRequest.send();
|
||||
document.getElementById('message').textContent = 'Query: ' + query;
|
||||
var table = document.getElementById('results');
|
||||
var tr;
|
||||
while (tr = table.lastChild) table.removeChild(tr);
|
||||
if (start == 0) while (tr = table.lastChild) table.removeChild(tr);
|
||||
return false; // don't submit form
|
||||
}
|
||||
return makeRequest;
|
||||
@@ -104,7 +105,7 @@
|
||||
var table = document.getElementById('results');
|
||||
var tr;
|
||||
var characters = getSymbols(results.chars);
|
||||
for (var i=results.start; i < results.stop; i++) {
|
||||
for (var i=0; i < characters.length; i++) {
|
||||
ch = characters[i];
|
||||
if (ch == '\n') continue;
|
||||
if (ch == '\x00') break;
|
||||
@@ -116,9 +117,10 @@
|
||||
tr.cells[1].appendChild(document.createTextNode(ch));
|
||||
tr.id = hexCode;
|
||||
table.appendChild(tr);
|
||||
if (results.stop < results.total) {
|
||||
setTimeout(requestMaker(results.stop)(), REQUEST_DELAY);
|
||||
}
|
||||
}
|
||||
// setTimeout(getDescriptions, REQUEST_DELAY/2)
|
||||
if (results.stop < results.total) {
|
||||
setTimeout(requestMaker(results.stop), REQUEST_DELAY);
|
||||
}
|
||||
}
|
||||
window.onload = function() {
|
||||
|
||||
@@ -98,6 +98,8 @@ def query_type(text):
|
||||
|
||||
CharDescription = namedtuple('CharDescription', 'code_str char name')
|
||||
|
||||
QueryResult = namedtuple('QueryResult', 'len items')
|
||||
|
||||
class UnicodeNameIndex:
|
||||
|
||||
def __init__(self, chars=None):
|
||||
@@ -169,12 +171,14 @@ class UnicodeNameIndex:
|
||||
if result_sets:
|
||||
result = result_sets[0].intersection(*result_sets[1:])
|
||||
result = sorted(result) # must sort for consistency
|
||||
for char in itertools.islice(result, start, stop):
|
||||
yield char
|
||||
result_iter = itertools.islice(result, start, stop)
|
||||
return QueryResult(len(result),
|
||||
(char for char in result_iter))
|
||||
return QueryResult(0, ())
|
||||
|
||||
def find_codes(self, query, start=0, stop=None):
|
||||
return (ord(char) for char
|
||||
in self.find_chars(query, start, stop))
|
||||
in self.find_chars(query, start, stop).items)
|
||||
|
||||
def describe(self, char):
|
||||
code_str = 'U+{:04X}'.format(ord(char))
|
||||
@@ -185,6 +189,10 @@ class UnicodeNameIndex:
|
||||
for char in self.find_chars(query, start, stop):
|
||||
yield self.describe(char)
|
||||
|
||||
def get_descriptions(self, chars):
|
||||
for char in chars:
|
||||
yield self.describe(char)
|
||||
|
||||
def describe_str(self, char):
|
||||
return '{:7}\t{}\t{}'.format(*self.describe(char))
|
||||
|
||||
|
||||
Binary file not shown.
@@ -75,9 +75,8 @@ def form(request):
|
||||
@asyncio.coroutine
|
||||
def get_chars(request):
|
||||
peername = request.transport.get_extra_info('peername')
|
||||
query = request.GET.get('query', '')
|
||||
limit = request.GET.get('query', 0)
|
||||
print('Request from: {}, GET data: {!r}'.format(peername, dict(request.GET)))
|
||||
query = request.GET.get('query', '')
|
||||
if query:
|
||||
try:
|
||||
start = int(request.GET.get('start', 0))
|
||||
@@ -85,12 +84,9 @@ def get_chars(request):
|
||||
except ValueError:
|
||||
raise web.HTTPBadRequest()
|
||||
stop = min(stop, start+RESULTS_PER_REQUEST)
|
||||
chars = list(index.find_chars(query, start, stop))
|
||||
num_results, chars = index.find_chars(query, start, stop)
|
||||
else:
|
||||
chars = []
|
||||
start = 0
|
||||
stop = 0
|
||||
num_results = len(chars)
|
||||
raise web.HTTPBadRequest()
|
||||
text = ''.join(char if n % 64 else char+'\n'
|
||||
for n, char in enumerate(chars, 1))
|
||||
response_data = {'total': num_results, 'start': start, 'stop': stop}
|
||||
@@ -98,7 +94,7 @@ def get_chars(request):
|
||||
query=query, **response_data))
|
||||
response_data['chars'] = text
|
||||
json_obj = json.dumps(response_data)
|
||||
print('Sending {} results'.format(num_results))
|
||||
print('Sending {} characters'.format(len(text)))
|
||||
headers = {'Access-Control-Allow-Origin': '*'}
|
||||
return web.Response(content_type=TEXT_TYPE, headers=headers, text=json_obj)
|
||||
|
||||
|
||||
@@ -43,7 +43,8 @@ def test_find_word_1_match(sample_index):
|
||||
|
||||
|
||||
def test_find_word_1_match_character_result(sample_index):
|
||||
res = [name(char) for char in sample_index.find_chars('currency')]
|
||||
res = [name(char) for char in
|
||||
sample_index.find_chars('currency').items]
|
||||
assert res == ['EURO-CURRENCY SIGN']
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user