Skip to main content

saprfclib - Pure Python SAP RFC Protocol Implementation

CI PyPI Python License: MPL 2.0

saprfclib is a pure-Python reimplementation of the SAP RFC wire protocol - zero native/C dependencies. Call any SAP function module from Python with just a pip install. Supports direct TCP, SAProuter, message server (load-balanced), SNC (X.509/Kerberos), and WebSocket RFC (SAP BTP/cloud) connections. Requires Python 3.12 or later.

No SAP NetWeaver RFC SDK. No C compiler. No LD_LIBRARY_PATH. No container image built around a proprietary .so.

Installation

pip install saprfclib

Pulls two pure-Python dependencies (wsproto and h11)

Quick Start

import saprfclib

conn = saprfclib.connect(
    ashost="your-sap-host",   # Application server hostname or IP
    sysnr=0,                  # System number (port = 3300 + sysnr)
    client="100",             # SAP client (Mandant)
    user="RFC_USER",          # SAP logon user
    passwd="secret",          # Password (never logged by saprfclib)
)

result = conn.call("STFC_CONNECTION", REQUTEXT="Hello from saprfclib!")
print(result["ECHOTEXT"])    # "Hello from saprfclib!"
print(result["RESPTEXT"])    # SAP server response text

conn.close()

conn.call() fetches function module metadata from DDIC on the first call and caches it in-process - no configuration needed.

Connection Options

Mode Key Parameters
Direct TCP ashost, sysnr
SAProuter ashost, sysnr, saprouter="/H/router/S/3299/H/target"
Message server mshost, sysid, group
SNC (X.509 / Kerberos) snc_lib, snc_partnername, snc_qop
WebSocket RFC wshost, wsport, ws_path
SOCKS5 proxy (SAP BTP) proxy_type="socks5", proxy_host, proxy_port (+ proxy_jwt / OAuth triple)

Reach an on-premise system through the SAP BTP Connectivity Proxy / Cloud Connector (e.g. from a Kyma workload) with no NW RFC SDK or Transparent Proxy:

# trusted mode (no proxy authentication)
conn = saprfclib.connect(
    ashost="s4-2025-raw", sysnr="00", client="001", user="Developer", passwd="...",
    proxy_type="socks5",
    proxy_host="connectivity-proxy.kyma-system.svc.cluster.local",
    proxy_port=20004,
    gwhost="vhcala4hci",  # SAP system's internal host (ashost is the virtual tunnel host)
)

# untrusted mode — SAP JWT (method 0x80), token fetched via client_credentials
conn = saprfclib.connect(
    ashost="s4-2025", sysnr="00", client="001", user="Developer", passwd="...",
    proxy_type="socks5", proxy_host="...", proxy_port=20004,
    proxy_client_id="...", proxy_client_secret="...",
    proxy_token_url="https://<subaccount>.authentication.<region>.hana.ondemand.com/oauth/token",
    proxy_scc_location_id="MyLocation",  # optional Cloud Connector location
)

# or let saprfclib read the bound Connectivity service (VCAP_SERVICES / SERVICE_BINDING_ROOT)
cfg = saprfclib.connectivity_proxy_kwargs()           # add with_auth=False in trusted mode
conn = saprfclib.connect(ashost="s4-2025", sysnr="00", client="001",
                         user="Developer", passwd="...", **cfg)

See the Connection Options guide for the full parameter reference.

Documentation

Full documentation: https://randomstr1ng.github.io/saprfclib/

  • Getting Started - install, connect, and make your first call in 10 minutes
  • Cookbook - TABLE parameters, RFC server, tRFC/qRFC, connection pool, SNC, WebSocket RFC
  • API Reference - auto-generated from typed docstrings via MkDocs + mkdocstrings
  • Protocol Docs - NI/CPIC framing, ABAP type serialization, RFC handshake, SNC, tRFC/bgRFC wire specs

Example Scripts

The examples/ directory contains runnable scripts for common patterns:

Script Pattern
examples/01_connect_and_call.py Basic connect → call → close
examples/02_table_params.py RFC_READ_TABLE with TABLE parameters
examples/03_connection_pool.py Multi-threaded connection pool
examples/04_trfc_submit.py tRFC / qRFC lifecycle
examples/05_rfc_server.py RFC server with handler
examples/06_snc_connection.py SNC X.509 connection
examples/07_websocket_rfc.py WebSocket RFC to SAP BTP

All examples read connection parameters from SAPRFC_* environment variables.

Development

git clone https://github.com/randomstr1ng/saprfclib
cd saprfclib
pip install -e ".[dev]"
# Run offline test suite (no live SAP needed)
hatch run test -m "not integration"

# Lint and format
hatch run lint:check
hatch run lint:fmt

# Type-check
hatch run lint:type

# Build wheel + sdist
hatch build

Live integration tests require a running SAP system. Set environment variables:

export SAPRFC_ASHOST=your-sap-host
export SAPRFC_SYSNR=0
export SAPRFC_CLIENT=100
export SAPRFC_USER=RFC_USER
export SAPRFC_PASSWD=secret
pytest -m integration

See CONTRIBUTING.md for the full contributor guide, and CLAUDE.md for the protocol-fidelity rules every change must follow.

License

Licensed under the Mozilla Public License 2.0 - see LICENSE.

MPL-2.0 is deliberate: you may use saprfclib inside a closed-source, commercial product with no obligation to release your own code. If you modify saprfclib's own source files, those modified files must remain under MPL-2.0 and be made available. Improvements to the library flow back; your product stays yours.

Trademarks and Affiliation

This project is not affiliated with, endorsed by, or supported by SAP SE. SAP, ABAP, SAP NetWeaver, SAProuter, and SAP S/4HANA are trademarks or registered trademarks of SAP SE in Germany and other countries, used here for identification only. saprfclib contains no SAP code, binaries, or headers. Using it does not grant you any licence to SAP software - you remain responsible for your own SAP licensing.

See NOTICE for details.

Metadata

Release files for saprfclib 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for saprfclib 0.1.8
File Size Uploaded
saprfclib-0.1.8.tar.gz 894.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for saprfclib 0.1.8
File Interpreter ABI Platform
saprfclib-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 1.2 MB

Release files / saprfclib-0.1.8.tar.gz

Download URL saprfclib-0.1.8.tar.gz
Size 894.2 kB
Tags Source
SHA-256 checksum
How to use checksums
256d454403560ec6a52f5e23ce57748a32bf99961f982ff04a8555912d8f9822
BLAKE2b-256 checksum
How to use checksums
8482f8f09bfeda2af9648a19495d524b362ab31d6bc0700f9754bad787cd0aa8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release files / saprfclib-0.1.8-py3-none-any.whl

Download URL saprfclib-0.1.8-py3-none-any.whl
Size 263.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
47856d4b0aebdd7a85493cd864fe34ccd5132d7382c4f2477e21202a74617af8
BLAKE2b-256 checksum
How to use checksums
c0364cac3cf0757c561636cb9931e1a9456d13145a2554bc4dafa0aeb9cb23f7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page