Skip to content

Commit 0b048e1

Browse files
committed
OpenConceptLab/ocl_issues#1583 | indexing API | can pass filters
1 parent 500b3d5 commit 0b048e1

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

core/common/models.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ def batch_index(queryset, document):
181181
offset = 0
182182
limit = batch_size
183183
while offset < count:
184+
print(f"Indexing {offset}-{limit}/{count}")
184185
document().update(queryset.order_by('-id')[offset:limit], parallel=True)
185186
offset = limit
186187
limit += batch_size

core/common/swagger_parameters.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,9 @@
110110
uri_param = openapi.Parameter(
111111
'uri', openapi.IN_FORM, description="Relative URI", type=openapi.TYPE_STRING
112112
)
113+
filter_param = openapi.Parameter(
114+
'filter', openapi.IN_FORM, description="Generic Filter", type=openapi.TYPE_OBJECT
115+
)
113116
resources_body_param = openapi.Parameter(
114117
'resource', openapi.IN_PATH, type=openapi.TYPE_STRING,
115118
enum=['mappings', 'concepts', 'sources', 'orgs', 'users', 'collections']

core/common/tasks.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import json
12
from datetime import datetime
23
from json import JSONDecodeError
34

@@ -477,6 +478,8 @@ def delete_concept(concept_id): # pragma: no cover
477478
)
478479
def batch_index_resources(resource, filters, update_indexed=False):
479480
model = get_resource_class_from_resource_name(resource)
481+
if isinstance(filters, str):
482+
filters = json.loads(filters)
480483
if model:
481484
queryset = model.objects.filter(**filters)
482485
model.batch_index(queryset, model.get_search_document())

core/indexes/views.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from rest_framework.response import Response
88
from rest_framework.views import APIView
99

10-
from core.common.swagger_parameters import apps_param, ids_param, resources_body_param, uri_param
10+
from core.common.swagger_parameters import apps_param, ids_param, resources_body_param, uri_param, filter_param
1111
from core.common.tasks import rebuild_indexes, populate_indexes, batch_index_resources
1212
from core.common.utils import get_resource_class_from_resource_name
1313

@@ -47,7 +47,7 @@ class ResourceIndexView(APIView):
4747
permission_classes = (IsAdminUser,)
4848
parser_classes = (MultiPartParser,)
4949

50-
@swagger_auto_schema(manual_parameters=[ids_param, uri_param, resources_body_param])
50+
@swagger_auto_schema(manual_parameters=[ids_param, uri_param, filter_param, resources_body_param])
5151
def post(self, _, resource):
5252
model = get_resource_class_from_resource_name(resource)
5353

@@ -56,6 +56,7 @@ def post(self, _, resource):
5656

5757
ids = self.request.data.get('ids', None)
5858
uri = self.request.data.get('uri', None)
59+
_filter = self.request.data.get('filter', None)
5960
update_indexed = self.request.data.get('update_indexed', False)
6061

6162
filters = None
@@ -66,6 +67,8 @@ def post(self, _, resource):
6667
filters = {f"{model.mnemonic_attr}__in": ids}
6768
elif uri:
6869
filters = {'uri__icontains': uri}
70+
elif _filter:
71+
filters = _filter
6972
if not filters:
7073
return Response(status=status.HTTP_400_BAD_REQUEST)
7174

0 commit comments

Comments
 (0)