libgraphqlparser的python绑定(基于cython)
graphqlparser的Python项目详细描述
python2.7+python3.4+libgraphqlparser的基于类的绑定;只是libgraphqlparserc api之上的一个薄层。
仍然实验性
安装
首先按照libgraphqlparser github page上的说明安装libgraphqlparser。
接下来您可以安装graphqlparser。最简单的方法是使用预编译的车轮,这些车轮通常是可用的 在graphqlparser github releases
为您的平台和python版本选择正确的控制盘,然后使用pip安装它:
pip install https://github.com/elastic-coders/py-graphqlparser/releases/download/v0.0.3/graphqlparser-0.0.3-cp27-none-linux_x86_64.whl
作为替代方案,您可以从源发行版安装graphqlparser:
安装cython
将env var$GRAPHQL_HOME设置为libgraphqlparser.so和Ast.h所在的文件夹
使用pip安装graphqlparser:
LDFLAGS="-L$GRAPHQL_HOME" CFLAGS="-I$GRAPHQL_HOME/c -I$GRAPHQL_HOME" pip install graphqlparser
用法
确保加载程序可以使用libgraphqlparser。您可以将其基目录添加到LD_LIBRARY_PATH。
然后,您可以通过创建自定义访问者类开始解析:
fromgraphql_parserimportGraphQLAstVisitorclassMyVisitor(GraphQLAstVisitor.GraphQLAstVisitor):defvisit_field(self,node):print('start field %s visit'%node)# Return 1 to keep visiting children, 0 to skip themreturn1defend_visit_field(self,node):print('end field %s visit'%node)
并使用它访问已解析的查询:
fromgraphql_parserimportGraphQLParserquery='{query{}}'node=GraphQLParser.graphql_parse_string(query)MyVisitor().visit_node(node)
另请参见examples文件夹。
从源代码生成签出
从libgraphql ast重建生成的cython文件(通常不需要)
使用git checkout --recursive
下载子模块在文件夹./libgraphqlparser中构建libgraphql库(构建需要python2.7) (通常pushd libgraphqlparser && cmake . && make && popdworks)
使用python ast/build_ast.py
生成源代码现在可以切换到python 3
安装cython
运行:
LDFLAGS="-L./libgraphqlparser" CFLAGS="-Ilibgraphqlparser/c -Ilibgraphqlparser" python setup.py build_ext
要创建车轮分布,请执行以下操作:
- 安装轮子:pip install wheel
- 创建驾驶室mkdir .wheelhouse
- 使用pip wheel --wheel-dir=.wheelhouse . 生成
已知问题
- 仅(轻度)在python3上进行测试
- Unicode字符串处理尚未完成(所有字节和字符串的混合)
- 忽略访问者类回调中的异常
- libgraphqlparser是动态链接的
待办事项
- 为Linux 32位和其他平台构建更多Wheel软件包
新闻
v0.0.3
- 固定包装和建筑