Skip to main content

cjm-fasthtml-jsonschema

Install

pip install cjm_fasthtml_jsonschema

Demo Application

Run the demo to see the library in action:

python demo_app.py

Then visit:

  • http://localhost:5001/ - Demo page with example form from ./test_files/
$ python ./demo_app.py -h
usage: demo_app.py [-h] [--schema SCHEMA] [--port PORT] [--host HOST]

JSON Schema to UI Demo Application

options:
  -h, --help       show this help message and exit
  --schema SCHEMA  Path to the JSON schema file (default: test_files/voxtral_config_schema.json)
  --port PORT      Port to run the server on (default: 5001)
  --host HOST      Host to run the server on (default: 0.0.0.0)

Project Structure

nbs/
├── components/ (1)
│   └── fields.ipynb  # Field component generators for different JSON Schema types.
├── core/ (2)
│   ├── parser.ipynb  # JSON Schema parsing utilities.
│   └── types.ipynb   # Type definitions for JSON Schema elements.
└── generators/ (1)
    └── form.ipynb  # Main form generator that creates UI from JSON Schema.

Total: 4 notebooks across 3 directories

Module Dependencies

graph LR
    components_fields[components.fields<br/>fields]
    core_parser[core.parser<br/>parser]
    core_types[core.types<br/>types]
    generators_form[generators.form<br/>form]

    components_fields --> core_types
    core_parser --> core_types
    generators_form --> components_fields
    generators_form --> core_parser

4 cross-module dependencies detected

CLI Reference

No CLI commands found in this project.

Module Overview

Detailed documentation for each module in the project:

fields (fields.ipynb)

Field component generators for different JSON Schema types.

Import

from cjm_fasthtml_jsonschema.components.fields import (
    create_label,
    create_description,
    create_string_field,
    create_enum_field,
    create_number_field,
    create_range_field,
    create_boolean_field,
    create_field
)

Functions

def create_label(
    prop: SchemaProperty  # SchemaProperty object
) -> FT:  # Label component
    "Create a label for a field."
def create_description(
    prop: SchemaProperty  # SchemaProperty object
) -> Optional[FT]:  # P component with description or None
    "Create a description/help text for a field."
def create_string_field(
    prop: SchemaProperty,  # SchemaProperty object
    value: Any = None  # Current value
) -> FT:  # Div containing the field
    "Create a string input field."
def create_enum_field(
    prop: SchemaProperty,  # SchemaProperty object
    value: Any = None  # Current value
) -> FT:  # Div containing the field
    "Create an enum select dropdown field."
def create_number_field(
    prop: SchemaProperty,  # SchemaProperty object
    value: Any = None  # Current value
) -> FT:  # Div containing the field
    "Create a number input field."
def create_range_field(
    prop: SchemaProperty,  # SchemaProperty object
    value: Any = None  # Current value
) -> FT:  # Div containing the field
    "Create a range slider field."
def create_boolean_field(
    prop: SchemaProperty,  # SchemaProperty object
    value: Any = None  # Current value
) -> FT:  # Div containing the field
    "Create a boolean toggle field."
def create_field(
    prop: SchemaProperty,  # SchemaProperty object
    value: Any = None  # Current value
) -> FT:  # Div containing the field
    "Create an appropriate field based on the property type."

form (form.ipynb)

Main form generator that creates UI from JSON Schema.

Import

from cjm_fasthtml_jsonschema.generators.form import (
    generate_form_ui
)

Functions

def generate_form_ui(
    schema: Dict[str, Any],
    values: Optional[Dict[str, Any]] = None,
    show_title: bool = True,  # Whether to show the schema title
    show_description: bool = True,  # Whether to show schema description
    compact: bool = False,  # Use compact layout (less spacing)
    card_wrapper: bool = True  # Wrap the form in a card component
) -> FT
    "Generate a FastHTML form UI from a JSON Schema."

parser (parser.ipynb)

JSON Schema parsing utilities.

Import

from cjm_fasthtml_jsonschema.core.parser import (
    SchemaParser
)

Classes

class SchemaParser:
    def __init__(
        self,
        schema: Dict[str, Any]  # JSON Schema dictionary
    )
    "Parse JSON Schema and extract property information."
    
    def __init__(
            self,
            schema: Dict[str, Any]  # JSON Schema dictionary
        )
        "Initialize parser with a JSON Schema."
    
    def get_property(
            self,
            name: str  # Property name
        ) -> Optional[SchemaProperty]:  # SchemaProperty object or None if not found
        "Get a specific property by name."
    
    def get_required_properties(
            self
        ) -> List[SchemaProperty]:  # TODO: Add return description
        "Get all required properties."
    
    def get_optional_properties(
            self
        ) -> List[SchemaProperty]:  # TODO: Add return description
        "Get all optional properties."

types (types.ipynb)

Type definitions for JSON Schema elements.

Import

from cjm_fasthtml_jsonschema.core.types import (
    SchemaProperty
)

Classes

@dataclass
class SchemaProperty:
    "Represents a single property in a JSON Schema."
    
    name: str
    schema: Dict[str, Any]
    required: bool = False
    value: Any
    
    def type(
            self
        ) -> str:  # TODO: Add return description
        "Get the property type."
    
    def is_nullable(
            self
        ) -> bool:  # TODO: Add return description
        "Check if property allows null values."
    
    def default(
            self
        ) -> Any:  # TODO: Add return description
        "Get default value if specified."
    
    def description(
            self
        ) -> Optional[str]:  # TODO: Add return description
        "Get property description."
    
    def enum_values(
            self
        ) -> Optional[List[Any]]:  # TODO: Add return description
        "Get enum values if property is an enum."
    
    def examples(
            self
        ) -> Optional[List[Any]]:  # TODO: Add return description
        "Get example values if provided."
    
    def minimum(
            self
        ) -> Optional[Union[int, float]]:  # TODO: Add return description
        "Get minimum value for numeric types."
    
    def maximum(
            self
        ) -> Optional[Union[int, float]]:  # TODO: Add return description
        "Get maximum value for numeric types."
    
    def min_length(
            self
        ) -> Optional[int]:  # TODO: Add return description
        "Get minimum length for string types."
    
    def max_length(
            self
        ) -> Optional[int]:  # TODO: Add return description
        "Get maximum length for string types."
    
    def pattern(
            self
        ) -> Optional[str]:  # TODO: Add return description
        "Get regex pattern for string validation."
    
    def format(
            self
        ) -> Optional[str]:  # TODO: Add return description
        "Get format hint (e.g., 'email', 'uri', 'date')."

Download files

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

Source Distribution

cjm_fasthtml_jsonschema-0.0.5.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

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

cjm_fasthtml_jsonschema-0.0.5-py3-none-any.whl (15.8 kB view details)

Uploaded Python 3

File details

Details for the file cjm_fasthtml_jsonschema-0.0.5.tar.gz.

File metadata

  • Download URL: cjm_fasthtml_jsonschema-0.0.5.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for cjm_fasthtml_jsonschema-0.0.5.tar.gz
Algorithm Hash digest
SHA256 9639173f543268355c0ad6b201a9b61f81befb978b87e0af257db0be933db0d1
MD5 bee56f213d255b5fb6133c894221d4ff
BLAKE2b-256 f2856a074d4c324bf91e8f1de841d5f6eb26c584e9e00ae47525c47cf00a393e

See more details on using hashes here.

File details

Details for the file cjm_fasthtml_jsonschema-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for cjm_fasthtml_jsonschema-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 5732334bb43ab6a0f7772d991ae7f6e0c4d1dbba4f1c37f9574ecbd0802ff4ff
MD5 e4d8672ba0e6b69b28a79ec43f5ebc4c
BLAKE2b-256 8b00fff67c0c823804ff92e05348cf0799f00bbff2896cee4076b91b7e9e78e1

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

This release

0.0.5 This release

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page