Skip to main content

Python bindings for Rudof

Project description

pyrudof - Python bindings for Rudof

pyrudof provides Python bindings for rudof, a Rust library for Semantic Web operations.

At a high level it supports:

  • Loading and serializing RDF and PG data.
  • Loading, checking, serializing and validating ShEx schemas.
  • Loading, serializing and validating SHACL shapes.
  • Loading, serializing and validating PGSchemas.
  • Loading, running and serializing SPARQL queries and query results.
  • Converting and comparing schemas between supported formats.
  • Loading and serializing DCTAP and Service Descriptions.
  • Generating synthetic data from schemas.

Installation

Install from PyPI (recommended)

pip install pyrudof

pyrudof is built with PyO3 using abi3 wheels (Python 3.7+ compatible).

Build from source

Building from source requires a working Rust toolchain and Python.

# Clone the repository
git clone https://github.com/rudof-project/rudof.git
cd rudof/python

# Optional but recommended: virtual environment
python -m venv .venv
# Linux/macOS:
source .venv/bin/activate
# Windows PowerShell:
# .\.venv\Scripts\Activate.ps1

# Build and install editable package
pip install maturin
pip install -e .

For a release wheel:

maturin build --release
pip install --force-reinstall target/wheels/pyrudof-*.whl

Architecture and package structure

Package layout

Path Purpose
src/ Rust implementation of the Python bindings (Rudof, RudofConfig, generator APIs, enums, and error mappings).
stubs/pyrudof/ Hand-maintained .pyi type stubs for static type checking and editor support.
examples/ Runnable example scripts organized by category, plus examples.toml manifest metadata.
tests/ Python unittest suite and manifest registry loader for example-based tests.
docs/ Sphinx docs, including the examples page generator (generate_examples_doc.py).
Cargo.toml / pyproject.toml Rust crate and Python build configuration (maturin + PyO3).

Test architecture

Tests are dynamically generated from examples/examples.toml.

Each generated test:

  1. Executes the registered Python example as a subprocess.
  2. Asserts a zero exit code.
  3. Checks configured expected_output substrings (if any).
Component Purpose
tests/test_examples.py Builds dynamic unittest.TestCase classes per category/example.
tests/examples_registry.py Loads and validates examples/examples.toml entries.
examples/examples.toml Single source of truth for metadata and category order.
examples/**/*.py Executable example scripts run by tests and referenced by docs.

Testing

All test commands are run from python/tests.

Run the full suite

cd python/tests
python -m unittest discover -vvv

Run a specific category or test

# All ShEx examples
python -m unittest test_examples.TestShexExamples -v

# All SHACL examples
python -m unittest test_examples.TestShaclExamples -v

# All data generation examples
python -m unittest test_examples.TestGenerateExamples -v

# A single example
python -m unittest test_examples.TestShexExamples.test_shex_validate_inline -v

Run skipped examples

Examples marked with skip_test = true in the manifest are skipped by default.

# Linux/macOS
RUN_SKIPPED_EXAMPLES=1 python -m unittest test_examples -v

# Windows PowerShell
$env:RUN_SKIPPED_EXAMPLES="1"; python -m unittest test_examples -v

Examples and documentation

The examples system is intentionally centralized:

  • examples/examples.toml stores metadata (key, source_file, title, description, category, files, expected_output, skip_test).
  • examples/**/*.py stores the executable code.
  • tests/test_examples.py and docs/generate_examples_doc.py both read from that same manifest.

Available categories

Category Description
rdf RDF loading, serialization, node inspection
sparql SELECT / CONSTRUCT query workflows
shex ShEx loading, validation, and serialization
shacl SHACL loading, validation, extraction, serialization
dctap DCTAP profile handling
endpoint Service description examples
generate Synthetic data generation APIs
utility Config, resets, version, module/error helpers

Add a new example

  1. Create a runnable script under python/examples/ (recommended: place it inside a category subfolder, for example python/examples/shex/my_example.py).
  2. Register it in python/examples/examples.toml.
  3. Run tests from python/tests.
  4. Regenerate and check docs in python/docs.

Manifest template:

[[example]]
key = "my_example"
source_file = "shex/my_example.py"
title = "My Example"
description = "What this example demonstrates"
category = "shex"  # rdf | sparql | shex | shacl | dctap | endpoint | generate | utility
files = { data = "person.ttl" }  # optional referenced files
expected_output = ["Alice"]       # optional substrings (can be empty list)
# skip_test = true                 # optional (network/special runtime)

Build docs locally

cd python/docs
python generate_examples_doc.py --update
python generate_examples_doc.py --check
python -m sphinx -b html . _build/html

Then open python/docs/_build/html/index.html.

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 Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyrudof-0.2.20rc1-cp37-abi3-win_amd64.whl (9.6 MB view details)

Uploaded CPython 3.7+Windows x86-64

pyrudof-0.2.20rc1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.0 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ x86-64

pyrudof-0.2.20rc1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (10.8 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.17+ ARM64

pyrudof-0.2.20rc1-cp37-abi3-macosx_11_0_arm64.whl (10.0 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

pyrudof-0.2.20rc1-cp37-abi3-macosx_10_12_x86_64.whl (10.4 MB view details)

Uploaded CPython 3.7+macOS 10.12+ x86-64

File details

Details for the file pyrudof-0.2.20rc1-cp37-abi3-win_amd64.whl.

File metadata

File hashes

Hashes for pyrudof-0.2.20rc1-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 36ab406cc9fd6c29c6d0e0de4f6a505d89071c342ca8c8c1a590b41942b942e7
MD5 59f98cece230e20887304b511144e1f2
BLAKE2b-256 85598bb83295bf435f5da24ab4c5f806169de20b27af36d0165825a45ec1c4d4

See more details on using hashes here.

File details

Details for the file pyrudof-0.2.20rc1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyrudof-0.2.20rc1-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c64433d8cf176c183c0989d5448be4582fbc86994fbd85fa16500c01b2482ed3
MD5 de723dc56df7ede67a1afa0bb45e7a00
BLAKE2b-256 f18631ccebf8cb42b17330d4ec24b0277cf62e48c3ccc550e5138a5fdf036ed6

See more details on using hashes here.

File details

Details for the file pyrudof-0.2.20rc1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyrudof-0.2.20rc1-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 00e12ea5049b441afa1206b3c4a88698f5f71cbbc8dfb575a7bf0e8204f8e5b1
MD5 315e526f0bf9abeb298722ff3c735681
BLAKE2b-256 147ba96f158eb1356e94fa55446b62bb0691968a02a46662b4c501c28a1d1fbf

See more details on using hashes here.

File details

Details for the file pyrudof-0.2.20rc1-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyrudof-0.2.20rc1-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4b60ddb2efdcbd8d682c0cd8a8cffeabc70c26444a4095c593e550315a85ecc3
MD5 7e1b349b077048e3f3bad960378189f7
BLAKE2b-256 80a2e3f586a74fb2980a2cc778460661d1fa8bbd1f6f9b5fffc8b69369154942

See more details on using hashes here.

File details

Details for the file pyrudof-0.2.20rc1-cp37-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyrudof-0.2.20rc1-cp37-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7bb86a0ceece62ef56e442ede3db955a5fa8b51195038a1d2fdf7e1c8c808768
MD5 cb25b5cb55e1269bc18c9eb2f762a04b
BLAKE2b-256 1bd7f200c1ef359d0b46ae8334db397e7645e7a0d9f8dc070c03585aa075c130

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page