Skip to content

Commit

Permalink
fix: graphql
Browse files Browse the repository at this point in the history
  • Loading branch information
raozixuan committed Oct 18, 2021
1 parent 2e86019 commit b89bab4
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 5 deletions.
4 changes: 2 additions & 2 deletions onto/database/mock.py
Expand Up @@ -43,7 +43,7 @@ def set(cls, ref: Reference, snapshot: Snapshot, transaction=_NA):

@classmethod
def get(cls, ref: Reference, transaction=_NA):
return cls.d[str(ref)]
return Snapshot(cls.d[str(ref)])

update = set
create = set
Expand All @@ -63,7 +63,7 @@ def query(cls, q):
qualifier = q._to_qualifier()
for k, v in cls.d.items():
if qualifier(v):
yield k, v
yield MockReference.from_str(k), Snapshot(v)
yield from ()


Expand Down
20 changes: 18 additions & 2 deletions onto/sink/graphql.py
Expand Up @@ -166,6 +166,10 @@ def _as_graphql_schema(self):
def start(self):
subscription_schema = self._as_graphql_schema()
return subscription_schema

@staticmethod
def _get_user(info):
return info.context.request.user


class GraphQLSubscriptionSink(GraphQLSink):
Expand Down Expand Up @@ -206,15 +210,20 @@ class GraphQLQuerySink(GraphQLSink):

def _register_op(self):
from gql import query

extra_args = set()
if '__user' in extra_args:
kwargs = {__user: self._get_user(info), **kwargs}
async def f(parent, info, **kwargs):
res = self._invoke_mediator(func_name='query', **kwargs)
res = await self._invoke_mediator(func_name='query', **kwargs)
return res

name = self.sink_name
f.__name__ = name
query(f)
args = dict(self._args_of('query'))
if '__user' in args:
extra_args.add('__user')
args = {k: v for k, v in args.items() if not str(k).startswith('__')}
return name, args


Expand All @@ -225,14 +234,21 @@ class GraphQLMutationSink(GraphQLSink):
def _register_op(self):
from gql import mutate

extra_args = set()
async def f(parent, info, **kwargs):
if '__user' in extra_args:
kwargs = { __user: self._get_user(info), **kwargs }
res = await self._invoke_mediator(func_name='mutate', **kwargs)
return res

name = self.sink_name
f.__name__ = name
mutate(f, snake_argument=False)
args = dict(self._args_of('mutate'))
if '__user' in args:
extra_args.add('__user')
# TODO: NOTE: __ fields are filtered out
args = { k: v for k, v in args.items() if not str(k).startswith('__')}
return name, args


Expand Down
2 changes: 1 addition & 1 deletion onto/utils.py
Expand Up @@ -73,7 +73,7 @@ def snapshot_to_obj(
# if not snapshot.exists:
# return None

d = snapshot.to_dict() if not isinstance(snapshot, dict) else snapshot # TODO: improve
d = snapshot.to_dict()
obj_cls = super_cls

if "obj_type" in d:
Expand Down

0 comments on commit b89bab4

Please sign in to comment.