Python parser and validator for the LearnSpec suite (LearnMD, QuizMD, FlashMD, TrackMD, DiagramMD, MediaMD, GlossaryMD, BadgeMD, CertMD, NuggetMD)
Project description
pylearnspec
Python parser and validator for the LearnSpec suite of open standards:
| Format | API |
|---|---|
| LearnMD — instructional content | parse_learn, validate_learn |
| QuizMD — assessments | parse_quiz, validate_quiz |
| FlashMD — flashcards | parse_flash, validate_flash |
| NuggetMD — micro-learning nuggets | parse_nugget, validate_nugget |
| TrackMD — learning paths | parse_track, validate_track |
| DiagramMD — diagrams | parse_diagram, validate_diagram |
| MediaMD — media catalogues | parse_media, validate_media |
| GlossaryMD — glossaries | parse_glossary, validate_glossary |
| BadgeMD — micro-credentials | parse_badge, validate_badge |
| CertMD — macro-credentials | parse_cert, validate_cert |
Install
pip install pylearnspec
Quick start
Parse a QuizMD file
from pylearnspec import parse_quiz
with open("my-quiz.quiz.md") as f:
quiz = parse_quiz(f.read())
print(quiz.title)
print(f"{len(quiz.questions)} questions")
for q in quiz.questions:
print(f" Q{q.number} ({q.q_type}): {q.title}")
Parse a LearnMD file
from pylearnspec import parse_learn
with open("my-lesson.learn.md") as f:
lesson = parse_learn(f.read())
print(lesson.title)
for section in lesson.sections:
print(f" {'#' * section.depth} {section.title}")
Validate
from pylearnspec import validate_quiz, validate_learn
# Lenient mode (default)
diagnostics = validate_quiz(content)
# Strict mode (for CI)
diagnostics = validate_quiz(content, strict=True)
for d in diagnostics:
print(f"[{d.level}] {d.message}")
JSON output
Both Quiz and Lesson objects have a .to_dict() method for JSON serialization:
import json
from pylearnspec import parse_quiz
quiz = parse_quiz(content)
print(json.dumps(quiz.to_dict(), indent=2))
Supported features
QuizMD
- Frontmatter (Level 1) and per-question
quizblocks (Level 2) - Question types: MCQ, multi-select, true/false, open answer, match, order
- Per-choice and global feedback (
[!correct],[!incorrect]) !importdirectives- Validation (lenient and strict modes)
LearnMD
- Frontmatter metadata (lang, estimated_time, tags)
- Section hierarchy (## modules, ### lessons)
- Special fenced blocks:
summary,example,note,tip,warning,quiz, etc. - GFM callout detection (
> [!tip],> [!warning], etc.) !importdirectives (.learn.mdand.quiz.md)- Validation (lenient and strict modes)
LearnSpec suite (v0.2)
Every format follows the same shape:
- YAML frontmatter with the universal fields (
langrequired,license,spec_version,created,updated) - Cross-format directives
!import,!ref,!checkpoint(when applicable) — seepylearnspec.common.directives parse_<format>(content)returns a typed dataclass with a.to_dict()methodvalidate_<format>(content, strict=False)returns a list ofDiagnostic(level, message)
Development
pip install -e ".[dev]"
pytest
License
MIT
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 pylearnspec-0.6.0.tar.gz.
File metadata
- Download URL: pylearnspec-0.6.0.tar.gz
- Upload date:
- Size: 39.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
379bdf3fc6168bca3e34b2c30489344d7630929271e3f6d671b603dc610ff191
|
|
| MD5 |
206d59c43cb48a5c7d84077a23bdc575
|
|
| BLAKE2b-256 |
ae9a7c1664a53ba91bc10c3fdda7fcf17c02743971cb6b6737dad0237e0fea4d
|
File details
Details for the file pylearnspec-0.6.0-py3-none-any.whl.
File metadata
- Download URL: pylearnspec-0.6.0-py3-none-any.whl
- Upload date:
- Size: 46.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.25 {"installer":{"name":"uv","version":"0.9.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ffa4634c58513f538bb37bb8320abb8fc8b96c1aab2d94b23f8c449210674125
|
|
| MD5 |
c758b0f7282806a13a15fa151a710f36
|
|
| BLAKE2b-256 |
161f268f6cc710623fbf06824fc8ffa04211435aca65bc5f1c2f7f35d2118056
|