Loading rpc/methods.py +50 −5 Original line number Diff line number Diff line Loading @@ -863,7 +863,12 @@ def delete_resource(user: User, resource_id: int) -> bool: @_rpc_groups(["Search"]) def simple_search( user: User, query: str, project_id: int, limit_from: int = 0, limit_to: int = 2000 user: User, query: str, project_id: int, limit_from: int = 0, limit_to: int = 2000, order_by: str = "title", ) -> Dict[str, List]: """ Performs a simple search on resources and collections, based on their titles. Loading Loading @@ -902,6 +907,22 @@ def simple_search( } ``` """ available_order_by = [ "title", "-title", "updated_at", "-updated_at", "created_at", "-created_at", ] try: assert order_by in available_order_by except AssertionError: raise ServiceException( WRONG_ARGUMENT + ": order_by must be one of {}".format(", ".join(available_order_by)) ) limit_from, limit_to = _validate_limits(limit_from, limit_to) project = Project.objects.filter(pk=project_id).first() _check_project_permission(user, project, PERM_COLLECTION_READ) Loading @@ -913,14 +934,18 @@ def simple_search( ) if public_only: collections_set = collections_set.filter(public_access=True) for collection_instance in collections_set.distinct(): for collection_instance in collections_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["collections"].append(serializers.collection(collection_instance)) resources_set: Union[Iterator[Resource], QuerySet] = Resource.objects.filter( title__icontains=query, deleted_at__isnull=True, ptr_project=project ) if public_only: resources_set = resources_set.filter(collection__public_access=True) for resource_instance in resources_set.distinct()[limit_from:limit_to]: for resource_instance in resources_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["resources"].append( serializers.resource(resource_instance, include_metas=False) ) Loading Loading @@ -955,6 +980,7 @@ def advanced_search( collection_id: int = None, limit_from: int = 0, limit_to: int = 2000, order_by: str = "title", ) -> Dict[str, List]: """ Performs a complex search using terms such as 'contains', 'is', 'does_not_contain'. Loading Loading @@ -993,6 +1019,21 @@ def advanced_search( } ``` """ available_order_by = [ "title", "-title", "updated_at", "-updated_at", "created_at", "-created_at", ] try: assert order_by in available_order_by except AssertionError: raise ServiceException( WRONG_ARGUMENT + ": order_by must be one of {}".format(", ".join(available_order_by)) ) limit_from, limit_to = _validate_limits(limit_from, limit_to) if len(search_terms) > SEARCH_TERMS_LIMIT: raise ServiceException(TOO_MANY_SEARCH_TERMS) Loading Loading @@ -1061,7 +1102,9 @@ def advanced_search( resources_set = resources_set.exclude( tags__uid__in=search_term["exclude_tags"] ) for resource_instance in resources_set.distinct()[limit_from:limit_to]: for resource_instance in resources_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["resources"].append( serializers.resource(resource_instance, include_metas=include_metas) ) Loading Loading @@ -1120,7 +1163,9 @@ def advanced_search( collections_set = collections_set.exclude( tags__uid__in=search_term["exclude_tags"] ) for collection_instance in collections_set.distinct()[limit_from:limit_to]: for collection_instance in collections_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["collections"].append(serializers.collection(collection_instance)) return results Loading rpc/tests.py +1 −0 Original line number Diff line number Diff line Loading @@ -141,3 +141,4 @@ class ServiceTestCase(TestCase): limit_from=0, limit_to=2000, ) methods.simple_search(self.public_user, "pouet", self.test_project.pk) Loading
rpc/methods.py +50 −5 Original line number Diff line number Diff line Loading @@ -863,7 +863,12 @@ def delete_resource(user: User, resource_id: int) -> bool: @_rpc_groups(["Search"]) def simple_search( user: User, query: str, project_id: int, limit_from: int = 0, limit_to: int = 2000 user: User, query: str, project_id: int, limit_from: int = 0, limit_to: int = 2000, order_by: str = "title", ) -> Dict[str, List]: """ Performs a simple search on resources and collections, based on their titles. Loading Loading @@ -902,6 +907,22 @@ def simple_search( } ``` """ available_order_by = [ "title", "-title", "updated_at", "-updated_at", "created_at", "-created_at", ] try: assert order_by in available_order_by except AssertionError: raise ServiceException( WRONG_ARGUMENT + ": order_by must be one of {}".format(", ".join(available_order_by)) ) limit_from, limit_to = _validate_limits(limit_from, limit_to) project = Project.objects.filter(pk=project_id).first() _check_project_permission(user, project, PERM_COLLECTION_READ) Loading @@ -913,14 +934,18 @@ def simple_search( ) if public_only: collections_set = collections_set.filter(public_access=True) for collection_instance in collections_set.distinct(): for collection_instance in collections_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["collections"].append(serializers.collection(collection_instance)) resources_set: Union[Iterator[Resource], QuerySet] = Resource.objects.filter( title__icontains=query, deleted_at__isnull=True, ptr_project=project ) if public_only: resources_set = resources_set.filter(collection__public_access=True) for resource_instance in resources_set.distinct()[limit_from:limit_to]: for resource_instance in resources_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["resources"].append( serializers.resource(resource_instance, include_metas=False) ) Loading Loading @@ -955,6 +980,7 @@ def advanced_search( collection_id: int = None, limit_from: int = 0, limit_to: int = 2000, order_by: str = "title", ) -> Dict[str, List]: """ Performs a complex search using terms such as 'contains', 'is', 'does_not_contain'. Loading Loading @@ -993,6 +1019,21 @@ def advanced_search( } ``` """ available_order_by = [ "title", "-title", "updated_at", "-updated_at", "created_at", "-created_at", ] try: assert order_by in available_order_by except AssertionError: raise ServiceException( WRONG_ARGUMENT + ": order_by must be one of {}".format(", ".join(available_order_by)) ) limit_from, limit_to = _validate_limits(limit_from, limit_to) if len(search_terms) > SEARCH_TERMS_LIMIT: raise ServiceException(TOO_MANY_SEARCH_TERMS) Loading Loading @@ -1061,7 +1102,9 @@ def advanced_search( resources_set = resources_set.exclude( tags__uid__in=search_term["exclude_tags"] ) for resource_instance in resources_set.distinct()[limit_from:limit_to]: for resource_instance in resources_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["resources"].append( serializers.resource(resource_instance, include_metas=include_metas) ) Loading Loading @@ -1120,7 +1163,9 @@ def advanced_search( collections_set = collections_set.exclude( tags__uid__in=search_term["exclude_tags"] ) for collection_instance in collections_set.distinct()[limit_from:limit_to]: for collection_instance in collections_set.distinct().order_by(order_by)[ limit_from:limit_to ]: results["collections"].append(serializers.collection(collection_instance)) return results Loading
rpc/tests.py +1 −0 Original line number Diff line number Diff line Loading @@ -141,3 +141,4 @@ class ServiceTestCase(TestCase): limit_from=0, limit_to=2000, ) methods.simple_search(self.public_user, "pouet", self.test_project.pk)