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.soAst.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

  • 固定包装和建筑

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java使用Eclipse Helios for Web项目   java指定行。作为编译器设置的分隔符?   osm映射中带有osmdroid的java标记   java Android ClassNotFoundException在路径:DexPathList上未找到类   java从j2me调用GWT方法   更新到java 8后的aspectj问题   如何仅从根元素java,com提取文本内容。滴虫软件。是的。html   安卓公司。谷歌。火基。数据库DatabaseException:未能转换java类型的值。将字符串改为长字符串   从java中的方法返回arraylist变量   java如果将引用重新分配给同步块内的锁对象,会是什么?   java下载。使用spring mvc的资源文件中的xlsx文件   java Eclipse提供了什么工具来运行Eclipse中未包含的程序?   spring boot Java泛型如何读取传递给泛型方法的类型上的字段或调用方法   Javacard中的javaecdsa签名