Skip to content

Commit

Permalink
callable aggregations
Browse files Browse the repository at this point in the history
  • Loading branch information
Mirek Simek committed Oct 4, 2020
1 parent 1fdbf8b commit 417fea7
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 14 deletions.
2 changes: 1 addition & 1 deletion oarepo_ui/ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ def _translate_facets(self, facets, index_name, **kwargs):
elif callable(facet):
translation = get_oarepo_attr(facet).get('translation', None)

if translation:
if translation is not None:
if not (translation.permissions or self.permission_factory)(
facets=facets, facet_name=k,
facet=facet, index_name=index_name, **kwargs).can():
Expand Down
29 changes: 21 additions & 8 deletions oarepo_ui/facets.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from oarepo_ui.constants import no_translation
from oarepo_ui.utils import partial_format, get_oarepo_attr
from oarepo_ui.utils import get_oarepo_attr, partial_format


class TranslatedFacet(dict):
Expand All @@ -19,12 +19,23 @@ def make_translated_facet(facet_val, label, value, translator, permissions):
if callable(facet_val):
oarepo = get_oarepo_attr(facet_val)
oarepo['translation'] = TranslatedFacet({}, label, value, translator, permissions)
return facet_val
else:
return TranslatedFacet(facet_val, label, value, translator, permissions)


def is_translated_facet(facet_val):
if callable(facet_val):
oarepo = get_oarepo_attr(facet_val)
translation = oarepo.get('translation', None)
return translation is not None and isinstance(translation, TranslatedFacet)
else:
return isinstance(facet_val, TranslatedFacet)


def translate_facets(facets, label=None, value=None, translator=None, permissions=None):
for facet_key, facet_val in list(facets.items()):
if not isinstance(facet_val, TranslatedFacet):
if not is_translated_facet(facet_val):
facets[facet_key] = make_translated_facet(
facet_val,
label=partial_format(label, facet_key=facet_key) if label and label is not no_translation else label,
Expand All @@ -36,12 +47,14 @@ def translate_facets(facets, label=None, value=None, translator=None, permission


def translate_facet(facet, label=None, value=None, translator=None, permissions=None):
return make_translated_facet(
facet,
label=label,
value=value,
translator=translator,
permissions=permissions)
if not is_translated_facet(facet):
return make_translated_facet(
facet,
label=label,
value=value,
translator=translator,
permissions=permissions)
return facet


def keep_facets(facets, **kwargs):
Expand Down
2 changes: 1 addition & 1 deletion oarepo_ui/filters.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from oarepo_ui.constants import no_translation
from oarepo_ui.utils import partial_format, get_oarepo_attr
from oarepo_ui.utils import get_oarepo_attr, partial_format


class TranslatedFilter:
Expand Down
2 changes: 1 addition & 1 deletion pytest.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
[pytest]
pep8maxlinelength = 99
pep8ignore = docs/conf.py ALL
addopts = --doctest-glob="*.rst" --doctest-modules --cov=oarepo_ui --cov-report=term-missing --ignore=setup.py
# addopts = --doctest-glob="*.rst" --doctest-modules --cov=oarepo_ui --cov-report=term-missing --ignore=setup.py
testpaths = tests oarepo_ui
11 changes: 11 additions & 0 deletions tests/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

def permission_factory(index_name, **kwargs):
check_perms = request.args.get('perms', False)

class Inner:
def can(self):
return not check_perms or index_name.startswith('translate-')
Expand Down Expand Up @@ -108,5 +109,15 @@ def can(self):
'filters': {
'category': translate_filter(terms_filter('category'), label='my.own.filter.label')
}
},
'func': {
'aggs': {
'category': translate_facet(lambda: ({
'terms': {
'field': 'category',
},
}), label='my.own.facet.label',
permissions=permission_factory)
}
}
}
15 changes: 12 additions & 3 deletions tests/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@ def test_views(app, client):
'translate-facets-filters-translator': {'facets': {'category': {'label': 'my.own.facet.category'}},
'filters': {'category': {'label': 'my.own.filter.category'}}},
'translate-filter': {'facets': {},
'filters': {'category': {'label': 'my.own.filter.label'}}}}
'filters': {'category': {'label': 'my.own.filter.label'}}},
'func': {'facets': {'category': {'label': 'my.own.facet.label'}},
'filters': {}},
}

resp = client.get('/oarepo/indices/?ln=cs')
assert resp.status_code == 200
Expand All @@ -45,7 +48,10 @@ def test_views(app, client):
'translate-facets-filters-translator': {'facets': {'category': {'label': 'můj.vlastní.facet.kategorie'}},
'filters': {'category': {'label': 'můj.vlastní.filter.kategorie'}}},
'translate-filter': {'facets': {},
'filters': {'category': {'label': 'můj.vlastní.filter.label'}}}}
'filters': {'category': {'label': 'můj.vlastní.filter.label'}}},
'func': {'facets': {'category': {'label': 'můj.vlastní.facet.label'}},
'filters': {}},
}


def test_view(app, client):
Expand Down Expand Up @@ -88,4 +94,7 @@ def test_perms(app, client):
'translate-facets-filters-translator': {'facets': {'category': {'label': 'my.own.facet.category'}},
'filters': {'category': {'label': 'my.own.filter.category'}}},
'translate-filter': {'facets': {},
'filters': {'category': {'label': 'my.own.filter.label'}}}}
'filters': {'category': {'label': 'my.own.filter.label'}}},
'func': {'facets': {},
'filters': {}}
}

0 comments on commit 417fea7

Please sign in to comment.