Skip to main content

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 quiz blocks (Level 2)
  • Question types: MCQ, multi-select, true/false, open answer, match, order
  • Per-choice and global feedback ([!correct], [!incorrect])
  • !import directives
  • 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.)
  • !import directives (.learn.md and .quiz.md)
  • Validation (lenient and strict modes)

LearnSpec suite (v0.2)

Every format follows the same shape:

  • YAML frontmatter with the universal fields (lang required, license, spec_version, created, updated)
  • Cross-format directives !import, !ref, !checkpoint (when applicable) — see pylearnspec.common.directives
  • parse_<format>(content) returns a typed dataclass with a .to_dict() method
  • validate_<format>(content, strict=False) returns a list of Diagnostic(level, message)

Development

pip install -e ".[dev]"
pytest

License

MIT

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

pylearnspec-0.7.1.tar.gz (40.6 kB view details)

Uploaded Source

Built Distribution

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

pylearnspec-0.7.1-py3-none-any.whl (47.9 kB view details)

Uploaded Python 3

File details

Details for the file pylearnspec-0.7.1.tar.gz.

File metadata

  • Download URL: pylearnspec-0.7.1.tar.gz
  • Upload date:
  • Size: 40.6 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

Hashes for pylearnspec-0.7.1.tar.gz
Algorithm Hash digest
SHA256 796f41a78340076f720ca192a814af1418ea49b2cb9aca168350a8a8671c4b2f
MD5 67687081a06b6bf5e9dcf75063826d04
BLAKE2b-256 92615ef571ac08256a30349d3c8a37cf735431d9936c2e363f2f5aafcbf3c6da

See more details on using hashes here.

File details

Details for the file pylearnspec-0.7.1-py3-none-any.whl.

File metadata

  • Download URL: pylearnspec-0.7.1-py3-none-any.whl
  • Upload date:
  • Size: 47.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

Hashes for pylearnspec-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e6de0f0a8716874a268d331766597d2cac7c1990b5b34a94a3ca22cdef888ad9
MD5 f02a46071ba80f8f4975fbd56539990b
BLAKE2b-256 4d62b6e17c7593177e53709fede67ffb3d5b5a880c1b84aee1a0487d2afa80f4

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