def test_searches_responses_fielded_response_get_request(dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.parsers import ParamsParser fr = FieldedResponse() assert fr.get_request() is None dummy_request.body = b'abc' fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) request = fr.get_request() assert request assert request.body == b'abc'
def test_searches_responses_fielded_response_is_request_from_embed( dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.parsers import ParamsParser fr = FieldedResponse() assert not fr._is_request_from_embed() fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) assert not fr._is_request_from_embed() dummy_request.__parent__ = 'something' fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) assert fr._is_request_from_embed()
def test_searches_responses_fielded_response_get_or_create_response( dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.parsers import ParamsParser from pyramid.response import Response fr = FieldedResponse() response = fr.get_or_create_response() assert isinstance(response, Response) dummy_request.response.body = b'abc' fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) response = fr.get_or_create_response() assert response.body == b'abc'
def test_searches_responses_fielded_response_should_stream_response( dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.parsers import ParamsParser fr = FieldedResponse() assert not fr._should_stream_response() fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) assert not fr._should_stream_response() fr.response = {'a': (x for x in [1, 2, 3])} assert fr._should_stream_response() dummy_request.__parent__ = 'something' fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) assert not fr._should_stream_response() fr.response = {'a': (x for x in [1, 2, 3])} assert not fr._should_stream_response()
def cart_search(context, request): ''' Like search but takes cart params. ''' # Note the order of rendering matters for some fields, e.g. AllResponseField and # NotificationResponseField depend on results from CartSearchWithFacetsResponseField. fr = FieldedResponse(_meta={'params_parser': ParamsParser(request)}, response_fields=[ TitleResponseField(title='Cart search'), TypeResponseField(at_type=[SEARCH_TITLE]), IDResponseField(), ContextResponseField(), CartSearchWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES, cart=CartWithElements(request), ), AllResponseField(), NotificationResponseField(), CartFiltersResponseField(), ClearFiltersResponseFieldWithCarts(), ColumnsResponseField(), SortResponseField(), DebugQueryResponseField() ]) return fr.render()
def search(context, request): # Note the order of rendering matters for some fields, e.g. AllResponseField and # NotificationResponseField depend on results from BasicSearchWithFacetsResponseField. fr = FieldedResponse( _meta={ 'params_parser': ParamsParser(request) }, response_fields=[ TitleResponseField( title=SEARCH_TITLE ), TypeResponseField( at_type=[SEARCH_TITLE] ), IDResponseField(), ContextResponseField(), BasicSearchWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES ), AllResponseField(), NotificationResponseField(), FiltersResponseField(), ClearFiltersResponseField(), ColumnsResponseField(), SortResponseField(), DebugQueryResponseField() ] ) return fr.render()
def audit(context, request): fr = FieldedResponse( _meta={ 'params_parser': ParamsParser(request) }, response_fields=[ TitleResponseField( title=AUDIT_TITLE ), TypeResponseField( at_type=[AUDIT_TITLE] ), IDResponseField(), SearchBaseResponseField(), ContextResponseField(), AuditMatrixWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES ), NotificationResponseField(), FiltersResponseField(), TypeOnlyClearFiltersResponseField(), DebugQueryResponseField() ] ) return fr.render()
def summary(context, request): fr = FieldedResponse( _meta={ 'params_parser': ParamsParser(request) }, response_fields=[ TitleResponseField( title=SUMMARY_TITLE ), TypeResponseField( at_type=[SUMMARY_TITLE] ), IDResponseField(), SearchBaseResponseField(), ContextResponseField(), BasicMatrixWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES, matrix_definition_name=SUMMARY_MATRIX ), NotificationResponseField(), FiltersResponseField(), TypeOnlyClearFiltersResponseField(), DebugQueryResponseField() ] ) return fr.render()
def mouse_development(context, request): fr = FieldedResponse( _meta={ 'params_parser': ParamsParser(request) }, response_fields=[ TitleResponseField( title='Mouse Development Matrix' ), TypeResponseField( at_type=['MouseDevelopmentMatrix'] ), IDResponseField(), SearchBaseResponseField(), ContextResponseField(), BasicMatrixWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES, matrix_definition_name='mouse_development' ), NotificationResponseField(), FiltersResponseField(), TypeOnlyClearFiltersResponseField(), DebugQueryResponseField() ] ) return fr.render()
def entex_matrix(context, request): fr = FieldedResponse( _meta={ 'params_parser': ParamsParser(request) }, response_fields=[ TitleResponseField( title='Epigenomes from four individuals (ENTEx)' ), TypeResponseField( at_type=['EntexMatrix'] ), IDResponseField(), SearchBaseResponseField(), ContextResponseField(), MissingMatrixWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES, matrix_definition_name='entex' ), NotificationResponseField(), FiltersResponseField(), TypeOnlyClearFiltersResponseField(), DebugQueryResponseField() ] ) return fr.render()
def test_searches_responses_streamed_response__iter__(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import StreamedResponse fr = FieldedResponse() sr = StreamedResponse(fr) fr.response = {} assert list(sr) == [b'{', b'}'] fr.response = {'a': 1} assert list(sr) == [b'{', b'"a"', b':', b'1', b'}'] fr.response = {'a': 1, 'b': (x for x in [1, 2, 3])} assert list(sr) == [ b'{', b'"a"', b':', b'1', b',', b'"b"', b':', b'[', b'1', b',', b'2', b',', b'3', b']', b'}' ] fr.response = { 'a': 1, 'b': (x for x in [{ 'a': 0 }, { 'b': [1, 2, { 'a': 1 }] }, { 'c': 3 }]) } assert list(sr) == [ b'{', b'"a"', b':', b'1', b',', b'"b"', b':', b'[', b'{"a": 0}', b',', b'{"b": [1, 2, {"a": 1}]}', b',', b'{"c": 3}', b']', b'}' ]
def searchv2_quick(context, request): fr = FieldedResponse( _meta={'params_parser': ParamsParser(request)}, response_fields=[ BasicSearchResponseField(default_item_types=DEFAULT_ITEM_TYPES) ]) return fr.render()
def report(context, request): fr = FieldedResponse( _meta={ 'params_parser': ParamsParser(request) }, response_fields=[ TitleResponseField( title=REPORT_TITLE ), TypeResponseField( at_type=[REPORT_TITLE] ), IDResponseField(), ContextResponseField(), BasicReportWithFacetsResponseField(), AllResponseField(), NotificationResponseField(), FiltersResponseField(), TypeOnlyClearFiltersResponseField(), ColumnsResponseField(), NonSortableResponseField(), SortResponseField(), DebugQueryResponseField() ] ) return fr.render()
def matrixv2_raw(context, request): fr = FieldedResponse(_meta={'params_parser': ParamsParser(request)}, response_fields=[ RawMatrixWithAggsResponseField( default_item_types=DEFAULT_ITEM_TYPES) ]) return fr.render()
def test_searches_responses_generator_response_render(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import FieldedGeneratorResponse from snovault.elasticsearch.searches.responses import GeneratorResponse from types import GeneratorType fr = FieldedResponse() gr = GeneratorResponse(fr) fr.response = {'a': 1} response = gr.render() assert isinstance(response, dict) assert response == {} fr.response = {'a': 1, 'b': (x for x in [1, 2, 3])} response = gr.render() assert 'a' not in response assert 'b' in response assert isinstance(response['b'], GeneratorType) fgr = FieldedGeneratorResponse() gr = GeneratorResponse(fgr) fgr.response = {'a': 1} response = gr.render() assert isinstance(response, dict) assert response == {} fgr.response = {'a': 1, 'b': (x for x in [1, 2, 3])} response = gr.render() assert 'a' not in response assert 'b' in response assert isinstance(response['b'], GeneratorType)
def test_searches_responses_fielded_response_response_factory(dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import InMemoryResponse from snovault.elasticsearch.searches.responses import StreamedResponse from snovault.elasticsearch.searches.parsers import ParamsParser fr = FieldedResponse() fr.response = {'a': 1} assert isinstance(fr._response_factory(), InMemoryResponse) fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) assert isinstance(fr._response_factory(), InMemoryResponse) fr.response = {'a': (x for x in [1, 2, 3])} assert isinstance(fr._response_factory(), StreamedResponse) dummy_request.__parent__ = 'something' fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) assert isinstance(fr._response_factory(), InMemoryResponse) fr.response = {'a': (x for x in [1, 2, 3])} assert isinstance(fr._response_factory(), InMemoryResponse)
def test_searches_responses_fielded_response_ordered_response(): from collections import OrderedDict from snovault.elasticsearch.searches.responses import FieldedResponse fr = FieldedResponse() fr.response = {'b': 2, 'a': 1} ordered_dict = OrderedDict([('a', 1), ('b', 2)]) for item1, item2 in zip(fr.ordered_response.items(), ordered_dict.items()): assert item1 == item2
def test_searches_responses_streamed_response_to_json_string(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import StreamedResponse fr = FieldedResponse() sr = StreamedResponse(fr) assert sr._to_json({'a': 1}) == '{"a": 1}' assert sr._to_json({ 'a': 1, 'b': [1, 2, 3] }) == '{"a": 1, "b": [1, 2, 3]}' or '{"b": [1, 2, 3], "a": 1}'
def test_searches_responses_generator_memory_response_init(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import FieldedGeneratorResponse from snovault.elasticsearch.searches.responses import GeneratorResponse fr = FieldedResponse() gr = GeneratorResponse(fr) assert isinstance(gr, GeneratorResponse) fgr = FieldedGeneratorResponse() gr = GeneratorResponse(fgr) assert isinstance(gr, GeneratorResponse)
def test_searches_responses_fielded_response_validate_response_fields(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.fields import ResponseField rf = ResponseField() FieldedResponse(response_fields=[rf]) class NewResponseField(ResponseField): def __init__(self): super().__init__() nrf = NewResponseField() FieldedResponse(response_fields=[rf, nrf]) class OtherResponseField(): pass orf = OtherResponseField() with pytest.raises(ValueError): FieldedResponse(response_fields=[rf, nrf, orf])
def test_searches_responses_streamed_response_render(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import StreamedResponse fr = FieldedResponse() sr = StreamedResponse(fr) fr.response = {'a': 1} response = sr.render() assert response.content_type == 'application/json' assert isinstance(response.app_iter, StreamedResponse) assert response.body == b'{"a":1}'
def test_searches_responses_fielded_response_render(dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import StreamedResponse from snovault.elasticsearch.searches.parsers import ParamsParser from pyramid.response import Response fr = FieldedResponse() fr.response = {'a': 1} response = fr.render() assert isinstance(response, dict) fr.response = {'a': (x for x in [1, 2, 3])} response = fr.render() assert isinstance(response, Response) assert isinstance(response.app_iter, StreamedResponse) assert response.json == {'a': [1, 2, 3]} dummy_request.__parent__ = 'something' fr = FieldedResponse(_meta={'params_parser': ParamsParser(dummy_request)}) fr.response = {'a': (x for x in [1, 2, 3])} response = fr.render() assert isinstance(response, dict) assert response == {'a': [1, 2, 3]}
def test_searches_responses_streamed_response_characters(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import StreamedResponse fr = FieldedResponse() sr = StreamedResponse(fr) assert sr._start_dict() == '{' assert sr._end_dict() == '}' assert sr._start_list() == '[' assert sr._end_list() == ']' assert sr._comma() == ',' assert sr._colon() == ':'
def test_searches_responses_fielded_response_is_response_with_generator( dummy_request): from snovault.elasticsearch.searches.responses import FieldedResponse fr = FieldedResponse() assert not fr._is_response_with_generator() fr.response = {'a': [1, 2, 3]} assert not fr._is_response_with_generator() fr.response = {'a': (x for x in [1, 2, 3])} assert fr._is_response_with_generator() fr.response = {'a': (x for x in [1, 2, 3]), 'b': 1} assert fr._is_response_with_generator()
def test_searches_responses_streamed_response_to_json_string_from_generator(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import StreamedResponse fr = FieldedResponse() sr = StreamedResponse(fr) g = (x for x in [{'a': 1}]) assert list(sr._to_json_from_generator(g)) == ['[', '{"a": 1}', ']'] g = (x for x in [{'a': 1}, {'b': [1, 2, 3]}, {'x': {'y': {'a': 1}}}]) assert list(sr._to_json_from_generator(g)) == [ '[', '{"a": 1}', ',', '{"b": [1, 2, 3]}', ',', '{"x": {"y": {"a": 1}}}', ']' ]
def test_searches_responses_in_memory_response_render(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import InMemoryResponse fr = FieldedResponse() im = InMemoryResponse(fr) fr.response = {'a': 1} response = im.render() assert isinstance(response, dict) assert response == {'a': 1} fr.response = {'a': 1, 'b': (x for x in [1, 2, 3])} response = im.render() assert response == {'a': 1, 'b': [1, 2, 3]}
def collection_view_listing_es(context, request): if not hasattr(request, 'datastore') or request.datastore != ELASTIC_SEARCH: return collection_view_listing_db(context, request) fr = FieldedResponse(_meta={'params_parser': ParamsParser(request)}, response_fields=[ IDResponseField(), CollectionSearchWithFacetsResponseField(), AllResponseField(), NotificationResponseField(), FiltersResponseField(), CollectionClearFiltersResponseField(), ColumnsResponseField() ]) return fr.render()
def encore_rna_seq_matrix(context, request): fr = FieldedResponse( _meta={'params_parser': ParamsParser(request)}, response_fields=[ TitleResponseField(title='ENCORE RNA-seq Matrix'), TypeResponseField(at_type=['EncoreRnaSeqMatrix']), IDResponseField(), SearchBaseResponseField(), ContextResponseField(), MissingMatrixWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES, matrix_definition_name='encore_rna_seq_matrix'), NotificationResponseField(), FiltersResponseField(), TypeOnlyClearFiltersResponseField(), DebugQueryResponseField() ]) return fr.render()
def cart_matrix(context, request): fr = FieldedResponse( _meta={'params_parser': ParamsParser(request)}, response_fields=[ TitleResponseField(title='Cart matrix'), TypeResponseField(at_type=[MATRIX_TITLE]), IDResponseField(), SearchBaseResponseField(search_base='/cart-search/'), ContextResponseField(), CartMatrixWithFacetsResponseField( default_item_types=DEFAULT_ITEM_TYPES, cart=CartWithElements(request), ), NotificationResponseField(), CartFiltersResponseField(), TypeOnlyClearFiltersResponseFieldWithCarts(), DebugQueryResponseField() ]) return fr.render()
def test_searches_responses_in_memory_response_init(): from snovault.elasticsearch.searches.responses import FieldedResponse from snovault.elasticsearch.searches.responses import InMemoryResponse fr = FieldedResponse() im = InMemoryResponse(fr) assert isinstance(im, InMemoryResponse)