cjm-fasthtml-jsonschema
Library for generating FastHTML user interfaces from JSON Schema configurations.
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(
# SchemaProperty object
prop: SchemaProperty -> FT: # Label component
) "Create a label for a field."
def create_description(
# SchemaProperty object
prop: SchemaProperty -> Optional[FT]: # P component with description or None
) "Create a description/help text for a field."
def create_string_field(
# SchemaProperty object
prop: SchemaProperty, = None # Current value
value: Any -> FT: # Div containing the field
) "Create a string input field."
def create_enum_field(
# SchemaProperty object
prop: SchemaProperty, = None # Current value
value: Any -> FT: # Div containing the field
) "Create an enum select dropdown field."
def create_number_field(
# SchemaProperty object
prop: SchemaProperty, = None # Current value
value: Any -> FT: # Div containing the field
) "Create a number input field."
def create_range_field(
# SchemaProperty object
prop: SchemaProperty, = None # Current value
value: Any -> FT: # Div containing the field
) "Create a range slider field."
def create_boolean_field(
# SchemaProperty object
prop: SchemaProperty, = None # Current value
value: Any -> FT: # Div containing the field
) "Create a boolean toggle field."
def create_field(
# SchemaProperty object
prop: SchemaProperty, = None # Current value
value: Any -> 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(
str, Any],
schema: Dict[str, Any]] = None,
values: Optional[Dict[bool = True, # Whether to show the schema title
show_title: bool = True, # Whether to show schema description
show_description: bool = False, # Use compact layout (less spacing)
compact: bool = True # Wrap the form in a card component
card_wrapper: -> 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,
str, Any] # JSON Schema dictionary
schema: Dict[
)"Parse JSON Schema and extract property information."
def __init__(
self,
str, Any] # JSON Schema dictionary
schema: Dict[
)"Initialize parser with a JSON Schema."
def get_property(
self,
str # Property name
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."
str
name: str, Any]
schema: Dict[bool = False
required:
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')."