This release is a pre-release and may not be stable for production use.
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_functiondecorator for individual functions. Much likeclick;- maybe subclass
Extensionshould 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
Release files for pybabar 0.1.0a3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pybabar-0.1.0a3.tar.gz | 12.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pybabar-0.1.0a3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.4 kB
Release files / pybabar-0.1.0a3.tar.gz
| Download URL | pybabar-0.1.0a3.tar.gz |
|---|---|
| Size | 12.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8b24c975645e3c3a821406be22d5d685b3083851ed20115b415018899acbded7
|
|
BLAKE2b-256 checksum How to use checksums |
495224d2d1794258a51596477865f78438bd1011928db7c7669c7fb1d98fbdc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.6
|
Release files / pybabar-0.1.0a3-py3-none-any.whl
| Download URL | pybabar-0.1.0a3-py3-none-any.whl |
|---|---|
| Size | 12.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c24d0add7ad7e38f5221fe6ded4fd6266eee2e1b07bd9d07e669b88cf0b3a1aa
|
|
BLAKE2b-256 checksum How to use checksums |
14f8215a652683fe460d17ff840de67c7a57303d05b446991c3e01025800a17c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.6
|