Skip to main content

Python bindings for YAMLStar - YAML 1.2 loader

Project description

YAMLStar Python Bindings

Python bindings for YAMLStar - a pure YAML 1.2 loader implemented in Clojure.

Features

  • YAML 1.2 Spec Compliance: 100% compliant with YAML 1.2 core schema
  • Pure Implementation: No dependencies on SnakeYAML or other external parsers
  • Fast Native Performance: Uses GraalVM native-image shared library
  • Simple API: Load YAML documents with a single function call
  • Multi-Document Support: Load multiple YAML documents from a single string

Installation

Prerequisites

First, build and install the shared library:

cd ../libyamlstar
make native
sudo make install PREFIX=/usr/local

Or install to user-local directory:

cd ../libyamlstar
make native
make install PREFIX=~/.local

Install Python Package

pip install .

For development:

pip install -e .

Quick Start

import yamlstar

# Create a YAMLStar instance
ys = yamlstar.YAMLStar()

# Load a simple YAML string
data = ys.load("key: value")
print(data)  # {'key': 'value'}

Usage Examples

Basic Types

import yamlstar

ys = yamlstar.YAMLStar()

# Strings
ys.load("hello")  # 'hello'

# Integers
ys.load("42")  # 42

# Floats
ys.load("3.14")  # 3.14

# Booleans
ys.load("true")   # True
ys.load("false")  # False

# Null
ys.load("null")  # None

Collections

# Mappings (dictionaries)
data = ys.load("""
name: Alice
age: 30
city: Seattle
""")
# {'name': 'Alice', 'age': 30, 'city': 'Seattle'}

# Sequences (lists)
data = ys.load("""
- apple
- banana
- orange
""")
# ['apple', 'banana', 'orange']

# Flow style
data = ys.load("[a, b, c]")
# ['a', 'b', 'c']

Nested Structures

data = ys.load("""
person:
  name: Alice
  age: 30
  hobbies:
    - reading
    - coding
    - hiking
""")
# {
#   'person': {
#     'name': 'Alice',
#     'age': 30,
#     'hobbies': ['reading', 'coding', 'hiking']
#   }
# }

Multi-Document YAML

# Load all documents from a multi-document YAML string
docs = ys.load_all("""---
name: Document 1
---
name: Document 2
---
name: Document 3
""")
# [
#   {'name': 'Document 1'},
#   {'name': 'Document 2'},
#   {'name': 'Document 3'}
# ]

Type Coercion

YAMLStar follows YAML 1.2 core schema type inference:

data = ys.load("""
string: hello
integer: 42
float: 3.14
bool_true: true
bool_false: false
null_value: null
""")
# {
#   'string': 'hello',
#   'integer': 42,
#   'float': 3.14,
#   'bool_true': True,
#   'bool_false': False,
#   'null_value': None
# }

Error Handling

try:
    data = ys.load("invalid: yaml: syntax")
except Exception as e:
    print(f"Error loading YAML: {e}")

Version Information

# Get YAMLStar version
version = ys.version()
print(f"YAMLStar version: {version}")

API Reference

YAMLStar Class

__init__()

Create a new YAMLStar instance. Each instance maintains its own GraalVM isolate.

ys = yamlstar.YAMLStar()

load(yaml_input)

Load a single YAML document.

Parameters:

  • yaml_input (str): String containing YAML content

Returns:

  • Python object representing the YAML document (dict, list, str, int, float, bool, or None)

Raises:

  • Exception if the YAML is malformed

Example:

data = ys.load("key: value")

load_all(yaml_input)

Load all YAML documents from a multi-document string.

Parameters:

  • yaml_input (str): String containing one or more YAML documents

Returns:

  • List of Python objects, one per YAML document

Raises:

  • Exception if the YAML is malformed

Example:

docs = ys.load_all("---\ndoc1\n---\ndoc2")

version()

Get the YAMLStar version string.

Returns:

  • str: Version string

Example:

version = ys.version()

Development

Running Tests

# Run all tests
make test

# Run only pytest tests
make test-pytest

# Run only FFI tests
make test-ffi

Building Distribution

# Build source distribution
make dist

# Build and install in development mode
make install

Requirements

  • Python: 3.6 or higher
  • libyamlstar: Shared library (installed separately)
  • System: Linux or macOS

Library Search Path

The package searches for libyamlstar.so (or .dylib on macOS) in:

  1. Development path (relative to package)
  2. Directories in LD_LIBRARY_PATH environment variable
  3. /usr/local/lib (default install location)
  4. ~/.local/lib (user-local install location)

Comparison to PyYAML

Feature YAMLStar PyYAML
YAML Version 1.2 1.1
Implementation Pure Clojure C + Python
Type Inference YAML 1.2 core schema YAML 1.1 + custom
Native Performance Yes (GraalVM) Yes (C extension)
Dependencies libyamlstar.so None

License

MIT License - See License file

Credits

Created by Ingy döt Net, inventor of YAML.

YAMLStar is built on the YAML Reference Parser (pure Clojure implementation).

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yamlstar-0.1.7.tar.gz (6.9 kB view details)

Uploaded Source

Built Distributions

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

yamlstar-0.1.7-py3-none-win_amd64.whl (10.4 MB view details)

Uploaded Python 3Windows x86-64

yamlstar-0.1.7-py3-none-manylinux_2_31_x86_64.whl (10.8 MB view details)

Uploaded Python 3manylinux: glibc 2.31+ x86-64

yamlstar-0.1.7-py3-none-macosx_14_0_arm64.whl (10.0 MB view details)

Uploaded Python 3macOS 14.0+ ARM64

File details

Details for the file yamlstar-0.1.7.tar.gz.

File metadata

  • Download URL: yamlstar-0.1.7.tar.gz
  • Upload date:
  • Size: 6.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for yamlstar-0.1.7.tar.gz
Algorithm Hash digest
SHA256 1a90f323720b49c2a5d3f58e5b0ff444123fb24dd4d0da16c4f58dfaadb33839
MD5 51bff96ffd563d4b8b948b44a7c98de1
BLAKE2b-256 67fddaffddfb94542c1a65dcfa337dc84ae882b7e16e8912b0e666ec747dd1ad

See more details on using hashes here.

File details

Details for the file yamlstar-0.1.7-py3-none-win_amd64.whl.

File metadata

  • Download URL: yamlstar-0.1.7-py3-none-win_amd64.whl
  • Upload date:
  • Size: 10.4 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for yamlstar-0.1.7-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 e193cff5c204cd528619d35deaea01cded935f20289976c9a17513c2c918bd1b
MD5 2d4bb10486e76f7a8b51da14c49964c9
BLAKE2b-256 13f73e94999e8b649f0f1d558b260d7583efd12b7174124cb773ffc3099639f5

See more details on using hashes here.

File details

Details for the file yamlstar-0.1.7-py3-none-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for yamlstar-0.1.7-py3-none-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 b1b3007316ca908d4f5566e9a569177209a244911f4a9a5197b1bfe5e3f30e4b
MD5 14fe7a4e72f135a99591b9649f738e01
BLAKE2b-256 f87c8395bfe21144c0af3fd7fbf433be00589f2b3ba1c2032f5b62ac39687827

See more details on using hashes here.

File details

Details for the file yamlstar-0.1.7-py3-none-macosx_14_0_arm64.whl.

File metadata

File hashes

Hashes for yamlstar-0.1.7-py3-none-macosx_14_0_arm64.whl
Algorithm Hash digest
SHA256 524b3c948f34f2c77922484058adb82fc44e97de9af83d4ad511e6531e78d9c3
MD5 703dbcdfa091a035c890fd6040bd857d
BLAKE2b-256 1dee7b7cccf6b43e53fd3e667d695d19d1585e8ba8e9b05a500da5d3bc030aea

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