babar is a library for automatically generating Postgres extensions from absolutely any Python object.
Project description
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.
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
pip install pybabar
Let's create a Postgres extension called pystring
which adds a few Python functions.
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:
python pystring.py
That will create the appropriate extension files, which you can then install in the usual Postgres way:
make
make install
Then you can CREATE
the extension and use it
psql -d postgres <<SQL
CREATE EXTENSION pystring
SELECT pyconcat('hello ', 'world');
SELECT pyupper('hello');
SQL
Roadmap
v0.1.0 (wip)
- simple functions (not classes, methods etc)
- Functions should be 100% self-contained (outer scope is not inspected)
- primitive types only: support only str/text as arg and return
- Probably no cli interface / just python main.py
Future
@pg_function
decorator for individual functions. Much likeclick
;- maybe subclass
Extension
should make a whole Python class an extension? - CLI like
babar -m pack.mod.func1 pack2.mod2.func2
- Handle upgrades
- pgxn integration
It is lightly inspired by Python-Fire which turns any Python object into a cli interface
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pybabar-0.1.0a3-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c24d0add7ad7e38f5221fe6ded4fd6266eee2e1b07bd9d07e669b88cf0b3a1aa |
|
MD5 | ccb688728bcccf56062531ad36660f94 |
|
BLAKE2b-256 | 14f8215a652683fe460d17ff840de67c7a57303d05b446991c3e01025800a17c |