Skip to content
Snippets Groups Projects
Verified Commit db7e829b authored by Julian's avatar Julian Committed by Jonathan Weth
Browse files

Create schema for search results

parent ce2eec2b
No related branches found
No related tags found
1 merge request!1098Resolve "Make progress page and search bar use GraphQL"
......@@ -5,10 +5,13 @@ import graphene
from graphene import ObjectType
from graphene_django import DjangoObjectType
from graphene_django.forms.mutation import DjangoModelFormMutation
from haystack.inputs import AutoQuery
from haystack.query import SearchQuerySet
from haystack.utils.loading import UnifiedIndex
from .forms import PersonForm
from .models import Group, Notification, Person, TaskUserAssignment
from .util.core_helpers import get_app_module, get_app_packages, has_person
from .util.core_helpers import get_app_module, get_app_packages, has_person, get_allowed_object_ids
from .util.frontend_helpers import get_language_cookie
......@@ -117,6 +120,36 @@ class CeleryProgressType(graphene.ObjectType):
return root["progress"].get("messages", [])
class SearchModelType(graphene.ObjectType):
absolute_url = graphene.String()
name = graphene.String()
icon = graphene.String()
def resolve_absolute_url(root, info, **kwargs):
if hasattr(root, "get_absolute_url"):
return root.get_absolute_url()
else:
return "#!"
def resolve_name(root, info, **kwargs):
return str(root)
def resolve_icon(root, info, **kwargs):
return getattr(root, "icon_", "")
class SearchResultType(graphene.ObjectType):
app_label = graphene.String()
model_name = graphene.String()
score = graphene.Int()
obj = graphene.Field(SearchModelType)
verbose_name = graphene.String()
verbose_name_plural = graphene.String()
def resolve_obj(root, info, **kwargs): # noqa
return root.object
class PersonMutation(DjangoModelFormMutation):
person = graphene.Field(PersonType)
......@@ -153,6 +186,12 @@ class Query(graphene.ObjectType):
celery_progress_by_task_id = graphene.Field(CeleryProgressType, task_id=graphene.String())
search_snippets = graphene.List(
SearchResultType,
query=graphene.String(),
limit=graphene.Int(required=False)
)
def resolve_notifications(root, info, **kwargs):
# FIXME do permission stuff
return Notification.objects.all()
......@@ -185,6 +224,19 @@ class Query(graphene.ObjectType):
progress["meta"] = task
return progress
def resolve_search_snippets(root, info, query, limit=-1, **kwargs):
indexed_models = UnifiedIndex().get_indexed_models()
allowed_object_ids = get_allowed_object_ids(info.context.user, indexed_models)
results = (
SearchQuerySet().filter(id__in=allowed_object_ids).filter(text=AutoQuery(query))
)
if limit < 0:
return results
return results[:limit]
class Mutation(graphene.ObjectType):
update_person = PersonMutation.Field()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment