Skip to content

Commit fa501bc

Browse files
authored
SNO2-68-search-config-default-group (#1271)
1 parent 1a3d077 commit fa501bc

File tree

7 files changed

+74
-16
lines changed

7 files changed

+74
-16
lines changed

setup.cfg

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ install_requires =
5252
xlrd==1.2.0
5353
zope.interface==5.3.0
5454
zope.sqlalchemy==1.2
55-
snovault@git+https://github.com/IGVF-DACC/snovault.git@add-memory-queue
55+
snovault@git+https://github.com/IGVF-DACC/snovault.git@v16.0.0
5656

5757
[options.extras_require]
5858
test =

src/igvfd/report.py

+16-9
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ def report_download(context, request):
107107
request.GET['limit'] = 'all'
108108
type_str = types[0]
109109
schema = request.registry[TYPES][type_str].schema
110-
search_config = request.registry[SEARCH_CONFIG].as_dict()[type_str]
111-
columns = list_visible_columns_for_schemas(request, schema, search_config)
110+
search_configs = request.registry['SEARCH_CONFIG_REPORT_CLIENT'].get(type_str)
111+
columns = list_visible_columns_for_schemas(request, schema, search_configs)
112112
snake_type = _convert_camel_to_snake(type_str).replace("'", '')
113113
results = search_generator(request)
114114

@@ -143,13 +143,17 @@ def generate_rows():
143143
return request.response
144144

145145

146-
def list_visible_columns_for_schemas(request, schema, search_config):
146+
def list_visible_columns_for_schemas(request, schema, search_configs):
147147
"""
148148
Returns mapping of default columns for a set of schemas.
149149
"""
150150
columns = OrderedDict({'@id': {'title': 'ID'}})
151-
if 'columns' in search_config:
152-
columns.update(search_config['columns'])
151+
collected_columns = OrderedDict()
152+
for config in search_configs:
153+
if 'columns' in config:
154+
collected_columns.update(config['columns'])
155+
if collected_columns:
156+
columns.update(collected_columns)
153157
else:
154158
# default columns if not explicitly specified
155159
columns.update(OrderedDict(
@@ -265,10 +269,13 @@ def get_result_columns(request, facets, report_response_columns):
265269
else:
266270
for type_str in types_in_search_result:
267271
schema = request.registry[TYPES][type_str].schema
268-
search_config = request.registry[SEARCH_CONFIG].as_dict()[type_str]
269-
270-
if 'columns' in search_config:
271-
columns.update(search_config['columns'])
272+
search_configs = request.registry['SEARCH_CONFIG_REPORT_CLIENT'].get(type_str)
273+
collected_columns = OrderedDict()
274+
for config in search_configs:
275+
if 'columns' in config:
276+
collected_columns.update(config['columns'])
277+
if collected_columns:
278+
columns.update(collected_columns)
272279
else:
273280
# default columns if not explicitly specified
274281
columns.update(OrderedDict(

src/igvfd/search_views.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ def report(context, request):
115115
BasicReportWithFacetsResponseField(
116116
default_item_types=DEFAULT_ITEM_TYPES,
117117
reserved_keys=RESERVED_KEYS,
118+
search_config_registry_client=request.registry['SEARCH_CONFIG_REPORT_CLIENT'],
118119
),
119120
AllResponseField(),
120121
FacetGroupsResponseField(),
@@ -148,6 +149,7 @@ def multireport(context, request):
148149
MultipleTypesReportWithFacetsResponseField(
149150
default_item_types=DEFAULT_ITEM_TYPES,
150151
reserved_keys=RESERVED_KEYS,
152+
search_config_registry_client=request.registry['SEARCH_CONFIG_REPORT_CLIENT'],
151153
),
152154
AllResponseField(),
153155
FacetGroupsResponseField(),
@@ -286,7 +288,11 @@ def top_hits(context, request):
286288
@view_config(route_name='search-config-registry', request_method='GET', permission='search')
287289
def search_config_registry(context, request):
288290
registry = request.registry[SEARCH_CONFIG]
289-
return dict(sorted(registry.as_dict().items()))
291+
return {
292+
'configs': dict(sorted(registry.as_dict().items())),
293+
'defaults': registry.defaults_to_json(),
294+
'aliases': registry.aliases_to_json(),
295+
}
290296

291297

292298
@view_config(route_name='search-quick', request_method='GET', permission='search')

src/igvfd/searches/configs/__init__.py

+20
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66

77
from snosearch.interfaces import COLUMNS
88

9+
from snosearch.configs import SearchConfigRegistryClient
10+
from snosearch.configs import SearchConfigRegistryClientProps
11+
12+
from .defaults import REPORT_VIEW_DEFAULTS
13+
914

1015
def register_subtype_columns_in_abstract_search_configs(config):
1116
item_registry = config.registry[TYPES]
@@ -34,3 +39,18 @@ def includeme(config):
3439
args=(config,),
3540
order=PHASE3_CONFIG,
3641
)
42+
config.registry['SEARCH_CONFIG_DEFAULT_CLIENT'] = SearchConfigRegistryClient(
43+
props=SearchConfigRegistryClientProps(
44+
registry=config.registry[SEARCH_CONFIG]
45+
)
46+
)
47+
config.registry['SEARCH_CONFIG_REPORT_CLIENT'] = SearchConfigRegistryClient(
48+
props=SearchConfigRegistryClientProps(
49+
registry=config.registry[SEARCH_CONFIG],
50+
group='report',
51+
)
52+
)
53+
config.registry[SEARCH_CONFIG].add_defaults(
54+
REPORT_VIEW_DEFAULTS,
55+
group='report',
56+
)
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
REPORT_VIEW_DEFAULTS = {
2+
# 'MeasurementSet': ['MeasurementSetReportView'],
3+
}

src/igvfd/searches/configs/measurement_set.py

+18
Original file line numberDiff line numberDiff line change
@@ -208,3 +208,21 @@ def measurement_set():
208208
}
209209
}
210210
}
211+
212+
213+
@search_config(
214+
name='MeasurementSetReportView'
215+
)
216+
def measurement_set_report_view():
217+
# Copy normal measurement_set config.
218+
config = measurement_set()
219+
# Override columns.
220+
config['columns'] = {
221+
'accession': {
222+
'title': 'Accession'
223+
},
224+
'summary': {
225+
'title': 'Summary'
226+
},
227+
}
228+
return config

src/igvfd/tests/indexing/test_search_views.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -361,11 +361,15 @@ def test_search_views_search_config_registry(workbook, testapp):
361361
r = testapp.get(
362362
'/search-config-registry/'
363363
)
364-
assert len(r.json) > 40
365-
assert 'User' in r.json
366-
assert 'Award' in r.json
367-
assert 'facets' in r.json['Award']
368-
assert 'columns' in r.json['Award']
364+
assert 'configs' in r.json
365+
assert 'defaults' in r.json
366+
assert 'aliases' in r.json
367+
configs = r.json['configs']
368+
assert len(configs) > 40
369+
assert 'User' in configs
370+
assert 'Award' in configs
371+
assert 'facets' in configs['Award']
372+
assert 'columns' in configs['Award']
369373

370374

371375
def test_search_views_multireport_view_values(workbook, testapp):

0 commit comments

Comments
 (0)