Florents-Tselai / babar

🐘❀️🐍 Turn any Python object into a Postgres extension
https://babar.tselai.com
Apache License 2.0
3 stars 0 forks source link
postgres postgres-extension postgresql python

Logo

Babar🐘❀️🐍

Turn any Python object into a Postgres extension

Status | Why | How | Installation | Usage | Roadmap

## Status WARNING: This is a work in progress and is far from doing what it promises. But not that far... πŸ˜‰ ## Why Postgres has supported Python as a procedural language for years via [PL/Python](https://www.postgresql.org/docs/current/plpython.html). Embedding non-trivial Python code in Postgres can get cumbersome and usually involves copy-pasting from existing code bases and/or creating thin wrappers around existing functions. **babar** automates this process by allowing you to seamlessly package existing Python components (functions, classes etc.) int a postgres extension. ## How **babar** dynamically inspects the definition of Python objects and generates semantically equivalent Postgres definitions along with the necessary extension files (`.control`, `Makefile`, `.sql`) ## Installation ## Usage ```bash pip install pybabar ``` Let's create a Postgres extension called [`pystring`](babar/examples/pystring.py) which adds a few Python functions. ```python from babar import Extension def pyconcat(x: str, y: str) -> str: return x + y def pyupper(x: str) -> str: return x.upper() if __name__ == "__main__": Extension( "pystring", pyconcat, pyupper, comment="this is the pystring extension", default_version="0.1.0", ) ``` Then, from the command line, you can run: ```bash python pystring.py ``` That will create the appropriate extension files, which you can then install in the usual Postgres way: ```bash make make install ``` Then you can `CREATE` the extension and use it ```bash psql -d postgres <