Skip to content

dennwc/client-python

 
 

Repository files navigation

client-python Build Status PyPI

Babelfish Python client library provides functionality to both connect to the Babelfish bblfshd to parse code (obtaining an UAST as a result) and to analyse UASTs with the functionality provided by libuast.

Installation

The recommended way to install client-python is using our pip package:

pip install bblfsh

From sources

git clone https://github.com/bblfsh/client-python.git
cd client-python
python setup.py install

Dependencies

You need to install libxml2 and its header files. You also will need a curl cli tool to dowload libuast, and a g++ for building libtuast Python bindings. The command for Debian and derived distributions would be:

sudo apt install libxml2-dev
sudo apt install curl
sudo apt install build-essential

Usage

A small example of how to parse a Python file and extract the import declarations from the UAST.

If you don't have a bblfsh server running you can execute it using the following command:

docker run --privileged --rm -it -p 9432:9432 -v bblfsh_cache:/var/lib/bblfshd --name bblfshd bblfsh/bblfshd
docker exec -it bblfshd bblfshctl driver install python bblfsh/python-driver:latest

Please, read the getting started guide to learn more about how to use and deploy a bblfshd.

import bblfsh

client = bblfsh.BblfshClient("0.0.0.0:9432")
uast = client.parse("/path/to/file.py").uast
print(uast)
# "filter' allows you to use XPath queries to filter on result nodes:
print(bblfsh.filter(uast, "//Import[@roleImport and @roleDeclaration]//alias")

# filter\_[bool|string|number] must be used when using XPath functions returning
# these types:
print(bblfsh.filter_bool(uast, "boolean(//*[@strtOffset or @endOffset])"))
print(bblfsh.filter_string(uast, "name(//*[1])"))
print(bblfsh.filter_number(uast, "count(//*)"))

# You can also iterate on several tree iteration orders:
it = bblfsh.iterator(uast, bblfsh.TreeOrder.PRE_ORDER)
for node in it:
    print(node.internal_type)

Please read the Babelfish clients guide section to learn more about babelfish clients and their query language.

License

Apache License 2.0, see LICENSE

Packages

No packages published

Languages

  • Python 70.4%
  • C++ 29.6%