From 8b1dc17fc33ce4c5c6aa47adbf5d95184363630f Mon Sep 17 00:00:00 2001 From: Ross Savage Date: Tue, 30 Apr 2024 22:54:47 +0200 Subject: [PATCH] Add python bindings --- README.md | 2 + .../bindings-python/.gitignore | 5 +++ lib/ls-sdk-bindings/bindings-python/README.md | 37 +++++++++++++++++++ lib/ls-sdk-bindings/bindings-python/makefile | 13 +++++++ .../bindings-python/pyproject.toml | 3 ++ lib/ls-sdk-bindings/bindings-python/setup.py | 29 +++++++++++++++ .../src/breez_liquid_sdk/__init__.py | 1 + lib/ls-sdk-bindings/makefile | 10 ++++- 8 files changed, 98 insertions(+), 2 deletions(-) create mode 100644 lib/ls-sdk-bindings/bindings-python/.gitignore create mode 100644 lib/ls-sdk-bindings/bindings-python/README.md create mode 100644 lib/ls-sdk-bindings/bindings-python/makefile create mode 100644 lib/ls-sdk-bindings/bindings-python/pyproject.toml create mode 100644 lib/ls-sdk-bindings/bindings-python/setup.py create mode 100644 lib/ls-sdk-bindings/bindings-python/src/breez_liquid_sdk/__init__.py diff --git a/README.md b/README.md index cae2921ac..c8b75fd8d 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ - `lib`: [lib/README.md](lib/ls-sdk-core/README.md) - `cli`: [cli/README.md](cli/README.md) +- Bindings + - `python`: [lib/bindings-python/README.md]() ## Roadmap - [x] Send/Recieve Lightning payments diff --git a/lib/ls-sdk-bindings/bindings-python/.gitignore b/lib/ls-sdk-bindings/bindings-python/.gitignore new file mode 100644 index 000000000..661c10ee6 --- /dev/null +++ b/lib/ls-sdk-bindings/bindings-python/.gitignore @@ -0,0 +1,5 @@ +src/breez_liquid_sdk/* +!src/breez_liquid_sdk/__init__.py +*.egg-info +build +dist diff --git a/lib/ls-sdk-bindings/bindings-python/README.md b/lib/ls-sdk-bindings/bindings-python/README.md new file mode 100644 index 000000000..3af6e8098 --- /dev/null +++ b/lib/ls-sdk-bindings/bindings-python/README.md @@ -0,0 +1,37 @@ +# Breez Liquid SDK bindings for Python + +## Usage + +``` +pip install breez_liquid_sdk +``` + +``` python +import breez_liquid_sdk +``` + +## Python Package + +Run the GitHub workflow 'Publish Python Bindings' when creating a new release of Breez Liquid SDK. +It will create wheels for the following Python versions and Platforms and upload them to [PyPi.org](https://pypi.org/project/breez-liquid-sdk/). + +### Supported Wheels + +| | GNU/Linux amd64 | GNU/Linux arm64v8 | macOS x86_64 | macOS aarch64 | Windows x86_64 | Windows 32 | +|-----------------|-----------------|-------------------|--------------|---------------|----------------|------------| +| **Python 3.8** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| **Python 3.9** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| **Python 3.10** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| **Python 3.11** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| **Python 3.12** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | + +## Building Manually + +To build the package manually inside this directory use the supplied `makefile`: + +``` shell +make darwin # builds the package for macos +make linux # builds the package for linux +``` + +The artifacts will be placed in `src/breez_liquid_sdk/`. diff --git a/lib/ls-sdk-bindings/bindings-python/makefile b/lib/ls-sdk-bindings/bindings-python/makefile new file mode 100644 index 000000000..eb7eeab96 --- /dev/null +++ b/lib/ls-sdk-bindings/bindings-python/makefile @@ -0,0 +1,13 @@ +.PHONY: init +init: + make -C ../ init + +darwin: + make -C ../ python-darwin + cp ../ffi/python/breez_liquid_sdk.py src/breez_liquid_sdk + cp ../ffi/python/libbreez_liquid_sdk_bindings.dylib src/breez_liquid_sdk + +linux: + make -C ../ python-linux + cp ../ffi/python/breez_liquid_sdk.py src/breez_liquid_sdk + cp ../ffi/python/libbreez_liquid_sdk_bindings.so src/breez_liquid_sdk diff --git a/lib/ls-sdk-bindings/bindings-python/pyproject.toml b/lib/ls-sdk-bindings/bindings-python/pyproject.toml new file mode 100644 index 000000000..fed528d4a --- /dev/null +++ b/lib/ls-sdk-bindings/bindings-python/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools"] +build-backend = "setuptools.build_meta" diff --git a/lib/ls-sdk-bindings/bindings-python/setup.py b/lib/ls-sdk-bindings/bindings-python/setup.py new file mode 100644 index 000000000..f249749b2 --- /dev/null +++ b/lib/ls-sdk-bindings/bindings-python/setup.py @@ -0,0 +1,29 @@ +#!/usr/bin/env python + +from setuptools import setup + +LONG_DESCRIPTION = """# Breez Liquid SDK +Python language bindings for the [Breez Liquid SDK](https://github.com/breez/breez-liquid-sdk). + +## Installing + +```shell +pip install breez_liquid_sdk +``` +""" + +setup( + name="breez_liquid_sdk", + version="0.2.7.dev9", + description="Python language bindings for the Breez Liquid SDK", + long_description=LONG_DESCRIPTION, + long_description_content_type="text/markdown", + packages=["breez_liquid_sdk"], + package_dir={"breez_liquid_sdk": "./src/breez_liquid_sdk"}, + include_package_data=True, + package_data={"breez_liquid_sdk": ["*.dylib", "*.so", "*.dll"]}, + url="https://github.com/breez/breez-liquid-sdk", + author="Breez ", + license="MIT", + has_ext_modules=lambda: True, +) diff --git a/lib/ls-sdk-bindings/bindings-python/src/breez_liquid_sdk/__init__.py b/lib/ls-sdk-bindings/bindings-python/src/breez_liquid_sdk/__init__.py new file mode 100644 index 000000000..5ea8634da --- /dev/null +++ b/lib/ls-sdk-bindings/bindings-python/src/breez_liquid_sdk/__init__.py @@ -0,0 +1 @@ +from breez_liquid_sdk.breez_liquid_sdk import * diff --git a/lib/ls-sdk-bindings/makefile b/lib/ls-sdk-bindings/makefile index 4e1c89189..23f8ba11c 100644 --- a/lib/ls-sdk-bindings/makefile +++ b/lib/ls-sdk-bindings/makefile @@ -10,6 +10,7 @@ init: rustup target add aarch64-apple-darwin x86_64-apple-darwin rustup target add aarch64-apple-ios-sim rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android + rustup target add aarch64-unknown-linux-gnu x86_64-unknown-linux-gnu @if [ $$(uname) == "Darwin" ] ; then cargo install cargo-lipo ; fi cargo install cbindgen cargo install cargo-ndk @@ -30,7 +31,7 @@ clean: test: cargo test -all: bindings-swift bindings-android python react-native +all: bindings-swift bindings-android python-darwin react-native ## Android android: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android @@ -108,9 +109,14 @@ bindings-swift: ios-universal darwin-universal rm bindings-swift/Sources/BreezLiquidSDK/breez_liquid_sdkFFI.modulemap ## Python -python: $(SOURCES) +python-linux: $(SOURCES) cargo build --release --target $(TARGET) cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language python -o ffi/python + cp ../target/$(TARGET)/release/libbreez_liquid_sdk_bindings.so ffi/python + +python-darwin: darwin-universal + cargo run --features=uniffi/cli --bin uniffi-bindgen generate src/breez_liquid_sdk.udl --no-format --language python -o ffi/python + cp ../target/darwin-universal/release/libbreez_liquid_sdk_bindings.dylib ffi/python ## React Native react-native: