def test_docs(req): request = Request(request=req, copy=False) request.request_type = 'data' docs = request.docs assert request.is_used assert isinstance(docs, DocumentArray) assert len(docs) == 1
def test_as_pb_object(req): request = Request(request=req) request.proto assert request.is_decompressed request = Request(request=None) assert request.proto assert request.is_decompressed
def test_request_docs_mutable_iterator(): """To test the weak reference work in docs""" r = Request() r.request_type = 'data' for d in random_docs(10): r.docs.append(d) for idx, d in enumerate(r.docs): assert isinstance(d, Document) d.text = f'look I changed it! {idx}' # iterate it again should see the change doc_pointers = [] for idx, d in enumerate(r.docs): assert isinstance(d, Document) assert d.text == f'look I changed it! {idx}' doc_pointers.append(d) # pb-lize it should see the change rpb = r.proto for idx, d in enumerate(rpb.data.docs): assert isinstance(d, DocumentProto) assert d.text == f'look I changed it! {idx}' # change again by following the pointers for d in doc_pointers: d.text = 'now i change it back' # iterate it again should see the change for idx, d in enumerate(rpb.data.docs): assert isinstance(d, DocumentProto) assert d.text == 'now i change it back'
def test_groundtruth(req): request = Request(request=req, copy=False) request.request_type = 'data' groundtruths = request.groundtruths assert request.is_used assert isinstance(groundtruths, DocumentArray) assert len(groundtruths) == 0
def test_as_pb_object(req): request = Request(request=req) request.as_pb_object assert request.is_used request = Request(request=None) assert request.as_pb_object assert request.is_used
def test_groundtruth(req, req_type): request = Request(request=req, copy=False) request.request_type = req_type groundtruths = request.groundtruths assert request.is_used assert isinstance(groundtruths, DocumentSet) assert len(groundtruths) == 0
def test_command(req): request = Request(request=req, copy=False) request.request_type = 'control' cmd = request.command assert request.is_used assert cmd assert isinstance(cmd, str)
def test_not_read_zmqlet(): with MockBasePeaNotRead(args3), Zmqlet(args1, default_logger) as z: req = Request() req.request_id = random_identity() d = req.data.docs.add() d.tags['id'] = 2 msg = Message(None, req, 'tmp', '') z.send_message(msg)
def test_empty_request_type(typ, pb_typ): r = Request() assert r.request_type is None with pytest.raises(ValueError): print(r.body) r = r.as_typed_request(typ) assert r._request_type == typ assert isinstance(r.body, pb_typ)
def chunks(document_factory): req = Request() req.request_type = 'data' req.docs.extend([ document_factory.create(1, 'test 1'), document_factory.create(2, 'test 1'), document_factory.create(3, 'test 3'), ]) return req.proto.data.docs
def test_docs(req, req_type): request = Request(request=req, copy=False) request.request_type = req_type docs = request.docs assert request.is_used assert isinstance(docs, DocumentSet) if req_type == 'index': assert len(docs) == 1 else: assert len(docs) == 0
def test_lazy_append_access(algo): reqs = (Request(r.SerializeToString(), algo) for r in request_generator('/', random_docs(10))) for r in reqs: assert not r.is_decompressed r = Request().as_typed_request('data') # write access r.train r.docs.append(Document()) # now it is read assert r.is_decompressed
def test_pprint_routes(capfd): result = [] r = jina_pb2.RouteProto() r.status.code = jina_pb2.StatusProto.ERROR r.status.exception.stacks.extend(['r1\nline1', 'r2\nline2']) result.append(r) r = jina_pb2.RouteProto() r.status.code = jina_pb2.StatusProto.ERROR_CHAINED r.status.exception.stacks.extend(['line1', 'line2']) result.append(r) r = jina_pb2.RouteProto() r.status.code = jina_pb2.StatusProto.SUCCESS result.append(r) rr = Request() rr.routes.extend(result) pprint_routes(rr) out, err = capfd.readouterr() assert '⚪' in out assert '🟢' in out assert 'Pod' in out assert 'Time' in out assert 'Exception' in out assert 'r1' in out assert 'line1r2' in out assert 'line2' in out assert 'line1line2' in out
def test_add_doc_to_type(typ, pb_typ): r = Request().as_typed_request(typ) for _ in range(10): r.docs.append(Document()) r.groundtruths.append(Document()) assert len(r.docs) == 10 assert len(r.groundtruths) == 10
def matches(document_factory): req = Request().as_typed_request('data') req.docs.extend([ document_factory.create(1, 'test 1'), document_factory.create(2, 'test 1'), document_factory.create(3, 'test 3'), ]) return req.docs
def test_recv_message_zmqlet(mocker): zmqlet1 = Zmqlet(args1, default_logger) zmqlet2 = Zmqlet(args2, default_logger) req = Request() req.request_id = random_identity() doc = req.data.docs.add() doc.tags['id'] = 2 msg = Message(None, req, 'tmp', '') def callback(msg_): assert msg_.request.docs[0].tags['id'] == msg.request.data.docs[0].tags['id'] mock = mocker.Mock() zmqlet1.send_message(msg) time.sleep(1) zmqlet2.recv_message(mock) validate_callback(mock, callback)
def test_lazy_nested_clear_access(algo): reqs = (Request(r.SerializeToString(), algo) for r in request_generator('/', random_docs(10))) for r in reqs: assert not r.is_decompressed # write access r.train r.data.ClearField('docs') # now it is read assert r.is_decompressed
def test_lazy_change_message_type(algo): reqs = (Request(r.SerializeToString(), algo) for r in request_generator('/', random_docs(10))) for r in reqs: assert not r.is_decompressed # write access r.train r.control.command = jina_pb2.RequestProto.ControlRequestProto.IDLE # now it is read assert r.is_decompressed assert len(r.data.docs) == 0
def test_not_decompressed_zmqlet(mocker): with MockPea(args2) as pea, Zmqlet(args1, default_logger) as z: req = Request() req.request_id = random_identity() d = req.data.docs.add() d.tags['id'] = 2 msg = Message(None, req, 'tmp', '') mock = mocker.Mock() z.send_message(msg) time.sleep(1) z.recv_message(mock) def callback(msg_): pass validate_callback(mock, callback) print(f' joining pea') pea.join() print(f' joined pea')
def test_lazy_nest_access(algo): reqs = (Request(r.SerializeToString(), algo) for r in request_generator('/', random_docs(10))) for r in reqs: assert not r.is_decompressed # write access r.train r.docs[0].id = '1' * 16 # now it is read assert r.is_decompressed assert r.data.docs[0].id == '1' * 16
def test_lazy_access(field, algo): reqs = (Request(r.SerializeToString(), algo) for r in request_generator('/', random_docs(10))) for r in reqs: assert not r.is_decompressed # access r.train print(getattr(r, field)) # now it is read assert r.is_decompressed
def test_multiple_access(algo): reqs = [ Request(r.SerializeToString(), algo) for r in request_generator('/', random_docs(10)) ] for r in reqs: assert not r.is_decompressed assert r assert not r.is_decompressed for r in reqs: assert not r.is_decompressed assert r.data assert r.is_decompressed
def test_request_docs_chunks_mutable_iterator(): """Test if weak reference work in nested docs""" r = Request().as_typed_request('data') for d in random_docs(10): r.docs.append(d) for d in r.docs: assert isinstance(d, Document) for idx, c in enumerate(d.chunks): assert isinstance(d, Document) c.text = f'look I changed it! {idx}' # iterate it again should see the change doc_pointers = [] for d in r.docs: assert isinstance(d, Document) for idx, c in enumerate(d.chunks): assert c.text == f'look I changed it! {idx}' doc_pointers.append(c) # pb-lize it should see the change rpb = r.proto for d in rpb.data.docs: assert isinstance(d, DocumentProto) for idx, c in enumerate(d.chunks): assert isinstance(c, DocumentProto) assert c.text == f'look I changed it! {idx}' # change again by following the pointers for d in doc_pointers: d.text = 'now i change it back' # iterate it again should see the change for d in rpb.data.docs: assert isinstance(d, DocumentProto) for c in d.chunks: assert c.text == 'now i change it back'
def test_init_fail(): with pytest.raises(BadRequestType): Request(request=5)
def test_as_json_str(req): request = Request(request=req) assert isinstance(request.to_json(), str) request = Request(request=None) assert isinstance(request.to_json(), str)
def test_command(req): request = Request(request=req, copy=False) cmd = request.command assert request.is_used assert cmd assert isinstance(cmd, str)
def test_queryset(req): request = Request(request=req, copy=False) queryset = request.queryset assert request.is_used assert isinstance(queryset, QueryLangSet)
def test_request_type_set_get_fail(req): request = Request(request=req, copy=False) with pytest.raises(ValueError): request.request_type = 'random'
def test_request_type_set_get(req): request = Request(request=req, copy=False) request.request_type = 'search' assert request.request_type == 'SearchRequestProto'
def test_docs(req): request = Request(request=req, copy=False) docs = request.docs assert request.is_used assert isinstance(docs, DocumentSet) assert len(docs) == 1