Extending Ibis¶
Users typically want to extend ibis in one of two ways:
Add a new expression
Add a new backend
Below we provide notebooks showing how to extend ibis in each of these ways.
Adding a New Expression¶
Here we show how to add a sha1
method to the PostgreSQL backend as well as
how to add a new bitwise_and
reduction operation:
Adding a New Backend¶
Ibis backends are accessed by users calling ibis.backend_name
, for example
in ibis.sqlite.connect(fname)
.
Both, when adding a new backend to the Ibis repo, or when creating a third-party
backend, you should define a entry point in the group ibis.backends
, with the
name of your backend and the module where it is implemented. This is defined in
the setup.py
file. The code to setup the sqlite backend could be:
setup(name='ibis-sqlite',
...
entry_points={'ibis.backends': 'sqlite = ibis-sqlite'}
)
In the code above, the name of the module will be sqlite
, as defined in the
left of the assignment sqlite = ibis-sqlite
. And the code should be available
in the module ibis-sqlite
(the file ibis-sqlite/__init__.py
will define
the connect
method, as well as any other method available to the users in
ibis.sqlite.<method>
.
For third party packages it is recommended that the name of the Python package
is ibis-<backend>
, since Ibis will recommend users to run pip install ibis-<backend>
when a backend is not found.
Run test suite for separate Backend¶
To run the tests for specific backends you can use:
PYTEST_BACKENDS="sqlite pandas" python -m pytest ibis/tests
Some backends may require a database server running. The CI file .github/workflows/main.yml contains the configuration to run servers for all backends using docker images.
The backends may need data to be loaded, run or check ci/setup.py to see how it is loaded in the CI, and loaded for your local containers.