Skip to main content

Interactive Functional Analysis Generator

Project description

Speks logo

Speks

Interactive Functional Analysis Generator — turn pseudo-code and Markdown specifications into a live, testable documentation website.

PyPI CI Python 3.11+ License: Apache 2.0 Website

Why Speks?

Business rules live in code, but stakeholders read documentation. Speks bridges the gap:

  • Write business rules as Python pseudo-code with built-in mocking for external services
  • Document them in Markdown with special tags that embed live code, contracts, and diagrams
  • Generate an interactive website where anyone can read, understand, and test every rule

No more stale specs. No more "the doc says X but the code does Y". Your documentation is the executable specification.

Quick Start

pip install pyspeks
speks init my-project
cd my-project
speks serve

Open http://localhost:8000 to see your interactive documentation.

What You Get

Write business rules as Python pseudo-code:

from speks import ExternalService, MockResponse

class CheckClientBalance(ExternalService):
    def execute(self, client_id: str) -> float:
        pass  # real HTTP call in production

    def mock(self, client_id: str) -> MockResponse:
        return MockResponse(data=1500.0)

def evaluate_credit(client_id: str, amount: float) -> bool:
    balance = CheckClientBalance().call(client_id)
    return balance > amount

Then document them in Markdown with special tags:

## Credit Evaluation
@[contract](src/rules.py:evaluate_credit)
@[code](src/rules.py:evaluate_credit)
@[playground](src/rules.py:evaluate_credit)
@[sequence](src/rules.py:evaluate_credit)
@[dependencies](src/)
@[mermaid](diagrams/flow.mmd)
@[plantuml](diagrams/sequence.puml)

Speks generates a live website where stakeholders can read, understand, and test every business rule — with auto-generated dependency graphs and sequence diagrams.

Features

  • Interactive Playground — Each documented function gets an auto-generated form to test it live in the browser
  • Mocking Engine — External services are auto-mocked; users can override mock values and simulate errors
  • Custom Markdown Tags@[code], @[playground], @[contract], @[dependencies], @[sequence], @[mermaid], @[plantuml]
  • Auto-generated Diagrams — Dependency graphs and sequence diagrams derived from your code via static analysis
  • Test Case Management — Save, replay, and validate test scenarios directly from the documentation
  • Standalone Binaries — Distribute as a single executable (Windows, macOS, Linux) — no Python required

Markdown Tags Reference

Tag Description
@[code](src/file.py:func) Embed function source code with syntax highlighting
@[playground](src/file.py:func) Interactive form to test the function live
@[contract](src/file.py:func) Function signature as a readable table
@[dependencies](src/) Auto-generated dependency graph (Mermaid)
@[sequence](src/file.py:func) Auto-generated sequence diagram
@[mermaid](diagrams/flow.mmd) Embed a Mermaid diagram from file
@[plantuml](diagrams/file.puml) Embed a PlantUML diagram

Project Layout

speks/               # The generator library & CLI
  core/              # Markdown parser, code extractor, dependency & sequence analysis
  engine/            # Mocking system, external service base classes
  web/               # Site builder, dev server (FastAPI)
  mkdocs_plugins/    # MkDocs plugins for each tag type
  i18n/              # Internationalization (en, fr)
  cli.py             # CLI entry point (init, serve)

User Workspace

After speks init, a workspace is created:

my-project/
  src/               # Python pseudo-code (business rules)
  docs/              # Markdown documentation
  diagrams/          # PlantUML diagrams
  testcases/         # Saved test scenarios (JSON)
  speks.toml         # Project configuration
  mkdocs.yml         # MkDocs configuration

Examples

See the examples/ directory for complete projects across different industries:

Example Domain Demonstrates
Credit Evaluation Banking Core features, mocking, error handling, sequence diagrams
Order Processing E-commerce Multi-step workflows, pricing rules, inventory checks
Patient Eligibility Healthcare Compliance rules, multi-service orchestration
Shipping Calculator Logistics Decision trees, zone-based calculations

Contributing

See CONTRIBUTING.md for development setup and guidelines.

License

Apache License 2.0 — see LICENSE for details.

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

pyspeks-0.1.2.tar.gz (123.3 kB view details)

Uploaded Source

Built Distribution

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

pyspeks-0.1.2-py3-none-any.whl (111.3 kB view details)

Uploaded Python 3

File details

Details for the file pyspeks-0.1.2.tar.gz.

File metadata

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

File hashes

Hashes for pyspeks-0.1.2.tar.gz
Algorithm Hash digest
SHA256 82850b12d6bc9c3341edde3377c2c5cdc987073fdcc61fc6174e27545d579a93
MD5 40ff55bda8598bc6c572da28cef334ac
BLAKE2b-256 1ee920f07f46179e05cca5af3590e03a7fd010c66c61628b47ac57c3ca84dc1b

See more details on using hashes here.

File details

Details for the file pyspeks-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pyspeks-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 111.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.3

File hashes

Hashes for pyspeks-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 48dc46c3f543a355947761c54e2ed94731b96b460398a050a546d7d81de82297
MD5 f8c499eeef87d034ca8c9935e768e516
BLAKE2b-256 6ad25df6d150607745864de955469712779a66843e573e410dc51cec81e72086

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