Skip to content

django-components/djc-ext-pydantic

Repository files navigation

djc-ext-pydantic

PyPI - Version PyPI - Python Version PyPI - License PyPI - Downloads GitHub Actions Workflow Status

Validate components' inputs and outputs using Pydantic.

djc-ext-pydantic is a django-component extension that integrates Pydantic for input and data validation.

Example Usage

from django_components import Component, SlotInput from djc_pydantic import ArgsBaseModel from pydantic import BaseModel # 1. Define the Component with Pydantic models class MyComponent(Component): class Args(ArgsBaseModel): var1: str class Kwargs(BaseModel): name: str age: int class Slots(BaseModel): header: SlotInput footer: SlotInput class TemplateData(BaseModel): data1: str data2: int class JsData(BaseModel): js_data1: str js_data2: int class CssData(BaseModel): css_data1: str css_data2: int ... # 2. Render the component MyComponent.render( # ERROR: Expects a string args=(123,), kwargs={ "name": "John", # ERROR: Expects an integer "age": "invalid", }, slots={ "header": "...", # ERROR: Expects key "footer" "foo": "invalid", }, )

Installation

pip install djc-ext-pydantic

Then add the extension to your project:

# settings.py COMPONENTS = { "extensions": [ "djc_pydantic.PydanticExtension", ], }

or by reference:

# settings.py from djc_pydantic import PydanticExtension COMPONENTS = { "extensions": [ PydanticExtension, ], }

Validating args

By default, Pydantic's BaseModel requires all fields to be passed as keyword arguments. If you want to validate positional arguments, you can use a custom subclass ArgsBaseModel:

from pydantic import BaseModel from djc_pydantic import ArgsBaseModel class MyTable(Component): class Args(ArgsBaseModel): a: int b: str c: float MyTable.render( args=[1, "hello", 3.14], )

Release notes

Read the Release Notes to see the latest features and fixes.

Development

Tests

To run tests, use:

pytest

About

Input validation with Pydantic for Django Components

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  

Languages