Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import graphene
from django.contrib.auth import get_user_model
from graphene_django.types import DjangoObjectType
from graphene_django.views import GraphQLView
from portal.models import DataFile, DataSet, Profile
from portal.views import TokenLoginMixin
# Protect graphql API page
class PrivateGraphQLView(TokenLoginMixin, GraphQLView):
pass
# Create a GraphQL type for the various models
class DataFileType(DjangoObjectType):
class Meta:
model = DataFile
fields = "__all__"
class DataSetType(DjangoObjectType):
class Meta:
model = DataSet
fields = "__all__"
class ProfileSetType(DjangoObjectType):
class Meta:
model = Profile
class UserType(DjangoObjectType):
class Meta:
model = get_user_model()
# Create a Query type
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(),
key_values=graphene.JSONString(),
keys=graphene.JSONString(),
values=graphene.JSONString(),
dataset=graphene.String()
)
datasets = graphene.List(DataSetType)
def resolve_datafile(self, info, **kwargs):
id = kwargs.get('id')
dbid = kwargs.get('dbid')
if id is not None:
return DataFile.objects.get(iric_data_id=id)
elif dbid is not None:
return DataFile.objects.get(pk=dbid)
def resolve_dataset(self, info, **kwargs):
id = kwargs.get('id')
dbid = kwargs.get('dbid')
if id is not None:
return DataSet.objects.get(iric_data_id=id)
elif dbid is not None:
return DataSet.objects.get(pk=dbid)
return None
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:
qs = qs.filter(annotations__has_key=key)
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)
return qs.distinct()
def resolve_datasets(self, info, **kwargs):
return DataSet.objects.all()
class Mutation(graphene.ObjectType):
pass
schema = graphene.Schema(query=Query, auto_camelcase=False)