python的graphql实现
graphql-core的Python项目详细描述
graphql核心
python的graphql。
此库是python的graphql-js端口,当前是最新版本0.6.0。
请参阅http://graphql.org/和 http://graphql.org/docs/api-reference-graphql/。
要问问题,请问Stack Overflow。
开始
graphql语言的概述可以在 README对于 Specification for GraphQL。
概述描述了一个简单的GETQL示例集,该实例以^ {A12}的形式存在。 在这个仓库里。开始的一个好方法是遍历自述文件和相应的测试 同时。
使用graphql core
从PIP安装:
pip install graphql-core
js提供了两个重要的功能:构建类型模式,以及 提供针对该类型架构的查询。
首先,构建一个映射到代码基的graphql类型模式。
fromgraphqlimport(graphql,GraphQLSchema,GraphQLObjectType,GraphQLField,GraphQLString)schema=GraphQLSchema(query=GraphQLObjectType(name='RootQueryType',fields={'hello':GraphQLField(type=GraphQLString,resolver=lambda*_:'world')}))
这定义了一个简单的模式,其中有一个类型和一个字段,可以解析 固定值。函数可以返回一个值,一个承诺, 或者一系列的承诺。上面有一个更复杂的例子 级别tests目录。
然后,根据该类型模式提供查询结果。
query='{ hello }'result=graphql(schema,query)# Prints# {'hello': 'world'} (as OrderedDict)printresult.data
这将运行一个查询,获取定义的一个字段。graphql
函数将
首先确保查询在语法和语义上有效,然后再执行
否则会报告错误。
query='{ boyhowdy }'result=graphql(schema,query)# Prints# [GraphQLError('Cannot query field "boyhowdy" on type "RootQueryType".',)]printresult.errors
执行人
默认情况下,graphql查询是同步执行的(使用SyncExecutor
)。
但是,如果要并行解析字段,则可以使用以下执行器:
graphql.execution.executors.asyncio.AsyncioExecutor
:这个执行器执行python异步事件循环中的解析器。graphql.execution.executors.gevent.GeventExecutor
:这个执行器执行gevent事件循环中的解析器。graphql.execution.executors.process.ProcessExecutor
:这个执行器将每个解析器作为一个进程执行。graphql.execution.executors.thread.ThreadExecutor
:这个执行器执行线程中的每个解析器。graphql.execution.executors.sync.SyncExecutor
:这个执行器同步执行每个解析器(默认)。
用法
可以通过grapqhl.execution.execute
函数中的executor关键字参数指定要使用的executor。
fromgraphql.execution.executeimportexecuteexecute(schema,ast,executor=SyncExecutor())
贡献
克隆此repo后,创建一个virtualenv,并确保通过运行以下命令安装依赖项:
virtualenv venv source venv/bin/activate pip install -e ".[test]"
写得好的测试和保持良好的测试覆盖率对这个项目很重要。开发时,运行新的和现有的测试:
py.test PATH/TO/MY/DIR/test_test.py # Single file py.test PATH/TO/MY/DIR/ # All tests in directory
如果在代码中引入了用于调试的断点,请添加-s
标志。
添加-v
(“verbose”)标志以获得更详细的测试输出。对于更详细的输出,请使用-vv
。
查看pytest documentation以获取更多选项和测试运行控件。
graphql core支持多种版本的python。为了确保更改不会破坏与这些版本的兼容性,我们使用tox
为每个python版本创建virtualenv并使用该版本运行测试。要运行在tox.ini
配置文件中定义的所有python版本,只需运行:
tox
如果希望针对tox.ini
文件中定义的特定版本运行:
tox -e py36
tox只能使用系统中安装的python的任何版本。创建pull请求时,travis也将运行相同的测试并报告结果,因此不需要潜在的贡献者提前在自己的系统上安装python的每个版本。我们非常感谢打开的问题和拉请求,使GraphQL核心更加稳定和有用!