Skip to content
Snippets Groups Projects
Commit 5369469e authored by Albert Feghaly's avatar Albert Feghaly
Browse files

Option to specify multiple key-value pairs with GraphQL

parent b6ad3e42
No related branches found
No related tags found
1 merge request!79Resolve "GraphQL select files using severals annotations (key and values)"
......@@ -39,7 +39,15 @@ class UserType(DjangoObjectType):
class Query(graphene.ObjectType):
datafile = graphene.Field(DataFileType, id=graphene.String(), dbid=graphene.Int())
dataset = graphene.Field(DataSetType, id=graphene.String(), dbid=graphene.Int())
datafiles = graphene.List(DataFileType, key=graphene.String(), value=graphene.String(), dataset=graphene.String())
datafiles = graphene.List(
DataFileType,
key=graphene.String(),
value=graphene.String(),
key_values=graphene.JSONString(),
keys=graphene.JSONString(),
values=graphene.JSONString(),
dataset=graphene.String()
)
datasets = graphene.List(DataSetType)
def resolve_datafile(self, info, **kwargs):
......@@ -65,10 +73,23 @@ class Query(graphene.ObjectType):
def resolve_datafiles(self, info, **kwargs):
# qs = DataFile.objects.accessible_to_profile(self.request.user.profile)
qs = DataFile.objects
key = kwargs.get('key', None)
value = kwargs.get('value', None)
key_values = kwargs.get('key_values', None)
keys = kwargs.get('keys', None)
values = kwargs.get('values', None)
dataset = kwargs.get('dataset', None)
if type(key_values) is not dict:
key_values = {}
if type(keys) is not list:
keys = []
if type(values) is not list:
values = []
if key and value:
qs = qs.filter(annotations__contains={key: value})
elif key:
......@@ -76,6 +97,15 @@ class Query(graphene.ObjectType):
elif value:
qs = qs.filter(annotations__values__icontains=value)
for k, v in key_values.items():
qs = qs.filter(annotations__contains={k: v})
for k in keys:
qs = qs.filter(annotations__has_key=k)
for v in values:
qs = qs.filter(annotations__values__icontains=v)
if dataset:
qs = qs.filter(datasets__iric_data_id=dataset)
......
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