WeMush Open Labeling Standard (WOLS) Python library
Project description
WOLS - WeMush Open Labeling Standard
The official Python implementation of the WeMush Open Labeling Standard (WOLS) v1.1.0 for specimen tracking in mushroom cultivation.
Features
- Core Module: Create, parse, validate, and serialize specimen labels
- QR Codes: Generate and scan QR codes (PNG, SVG, base64)
- Encryption: AES-256-GCM encryption for sensitive data
- CLI: Command-line interface for all operations
- Type Safe: Full type annotations with PEP 561 support
Installation
Basic Installation (Core Only)
# Using UV (recommended)
uv add wols
# Using pip
pip install wols
With Optional Features
# QR code support
uv add "wols[qr]"
# CLI support
uv add "wols[cli]"
# Encryption support
uv add "wols[crypto]"
# Everything
uv add "wols[all]"
Requirements
- Python 3.12 or later
- No required dependencies for core module
Container Image
The WOLS CLI is also available as a container image:
# Pull the latest image
docker pull ghcr.io/wemush/specimen-labels-py:latest
# Run the CLI
docker run --rm ghcr.io/wemush/specimen-labels-py --version
# Create a specimen
docker run --rm ghcr.io/wemush/specimen-labels-py create \
--species "Pleurotus ostreatus" \
--type SUBSTRATE \
--json
# Validate a specimen (mount local file)
docker run --rm -v $(pwd):/data ghcr.io/wemush/specimen-labels-py \
validate /data/specimen.json
# Generate QR code
docker run --rm -v $(pwd):/data ghcr.io/wemush/specimen-labels-py \
qr /data/specimen.json --output /data/label.png
Quick Examples
Create a Specimen (Library)
from wols import create_specimen, SpecimenType, GrowthStage, to_json
# Create a specimen
specimen = create_specimen(
type=SpecimenType.SUBSTRATE,
species="Pleurotus ostreatus",
strain="Blue Oyster",
stage=GrowthStage.COLONIZATION,
batch="BATCH-2026-001",
)
# Print the ID
print(f"Created: {specimen.id}")
# Output: Created: wemush:clx1abc123def456
# Serialize to JSON-LD
json_str = to_json(specimen, indent=2)
print(json_str)
Create a Specimen (CLI)
wols create \
--species "Pleurotus ostreatus" \
--type SUBSTRATE \
--strain "Blue Oyster" \
--stage COLONIZATION \
--output specimen.json
Generate QR Code (Library)
from wols import create_specimen, SpecimenType
from wols.qr import generate_qr_png
specimen = create_specimen(
type=SpecimenType.SUBSTRATE,
species="Pleurotus ostreatus",
)
# Generate QR code
qr_bytes = generate_qr_png(specimen)
# Save to file
with open("label.png", "wb") as f:
f.write(qr_bytes)
Validate Specimen (Library)
from wols import validate_specimen, parse_specimen
json_str = '{"@context": "...", "@type": "Specimen", ...}'
specimen = parse_specimen(json_str)
result = validate_specimen(specimen)
if result.valid:
print("Valid specimen!")
else:
for error in result.errors:
print(f"{error.path}: {error.message}")
Validate Specimen (CLI)
wols validate specimen.json
Verification
After installation, verify the library works:
# Check version
python -c "import wols; print(wols.__version__)"
# Check CLI (if installed)
wols --version
# Run a quick test
python -c "
from wols import create_specimen, SpecimenType, to_json
s = create_specimen(type=SpecimenType.CULTURE, species='Test')
print('Success:', s.id)
"
Documentation
Development
# Clone the repository
git clone https://github.com/wemush/specimen-labels-py.git
cd specimen-labels-py
# Install with development dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linting
uv run ruff check src tests
uv run ruff format --check src tests
# Run type checking
uv run mypy src
Regenerating the Demo GIF
The demo GIF is generated using VHS:
# Install VHS (macOS)
brew install vhs
# Regenerate the demo
cd demo
vhs demo.tape
License
Apache 2.0 License - see LICENSE for details.
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 Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wols-1.2.0.tar.gz.
File metadata
- Download URL: wols-1.2.0.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
867c9a9e5a5a1e554f1306b3529461b94cf13eaa4a0bb48e3b6c00a7f301810d
|
|
| MD5 |
bfc1dafbfe536cb3f4ea9246a1bdafdd
|
|
| BLAKE2b-256 |
1b65795de26408b43da3b186301d518b6d2860fa51b5fa3f308d197d2bb62817
|
File details
Details for the file wols-1.2.0-py3-none-any.whl.
File metadata
- Download URL: wols-1.2.0-py3-none-any.whl
- Upload date:
- Size: 1.0 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.27 {"installer":{"name":"uv","version":"0.9.27","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3be34a38341aa43b8333c038a3a68d59e5f2219fe952165eb83b673839bce0c
|
|
| MD5 |
917b54fdb9fd9f7f1a5fcd684a6cf45d
|
|
| BLAKE2b-256 |
21a679813a7ee268b24d30c2bfedf85046057a2a0631424aec98f6cc03296ac0
|