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.
The recommended way to install client-python is using our pip package:
pip install bblfsh
git clone https://github.com/bblfsh/client-python.git
cd client-python
python setup.py install
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
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.
Apache License 2.0, see LICENSE