Skip to main content

Use the Elasticsearch DSL with Pydantic models.

Project description

PyPi CI Code coverage Python Issues Commit activity Downloads License

🔍 elasticsearch-pydantic

Use the Elasticsearch DSL with Pydantic models.

This minimal library is for those who...

To interconnect the Elasticsearch DSL and Pydantic, we override a limited set of methods from the Elasticsearch Document and InnerDoc base classes with Pydantic's BaseModel functionality. Elasticsearch field types are inferred from the model's type annotations and can be overridden by using Annotated type hints.

Installation

Install the package from PyPI:

pip install elasticsearch-pydantic

Usage

To migrate from Elasticsearch DSL to elasticsearch-pydantic, just change your ORM classes to inherit from elasticsearch_pydantic.BaseDocument instead of elasticsearch_dsl.Document. Then, gradually replace your field definitions with Pydantic type annotations.

For example, in Elasticsearch DSL, you would typically define a document like this:

from elasticsearch_dsl import Document, Text, Date

class BlogPost(Document):
    title = Text()
    content = Text()
    published_at = Date()

With elasticsearch-pydantic, you can define the same document using Pydantic models:

from elasticsearch_pydantic import BaseDocument

class BlogPost(BaseDocument):
    title: str
    content: str
    published_at: datetime

And that's about it! You now get all the type-safety and validation benefits of Pydantic, while still being able to use the powerful features of Elasticsearch DSL.

Most Pydantic types are naturally mapped to Elasticsearch field types. To learn more about the field type mappings, see the mapping code.

Annotated types

You can use Annotated type hints to customize the Elasticsearch field types:

from typing import Annotated
from elasticsearch_dsl import Text, Keyword
from elasticsearch_pydantic import BaseDocument

class BlogPost(BaseDocument):
    title: Annotated[str, Text(analyzer="standard")]
    tags: Annotated[list[str], Keyword]

Field type aliases

For convenience, elasticsearch-pydantic provides type aliases for all standard Elasticsearch field types:

from elasticsearch_pydantic import BaseDocument, TextField, KeywordField

class BlogPost(BaseDocument):
    title: TextField
    tags: list[KeywordField]

Compatibility

This library works fine with any of the following Pip packages installed:

The elasticsearch-pydantic library will automatically detect which Elasticsearch DSL is installed.

Development

To build this package and contribute to its development you need to install the build, setuptools and wheel packages:

pip install build setuptools wheel

(On most systems, these packages are already pre-installed.)

Development installation

Install package and test dependencies:

pip install -e .[tests,tests-es6]   # For elasticsearch-dsl~=6.0
pip install -e .[tests,tests-es6x]  # For elasticsearch6-dsl
pip install -e .[tests,tests-es7]   # For elasticsearch-dsl~=7.0
pip install -e .[tests,tests-es7x]  # For elasticsearch7-dsl
pip install -e .[tests,tests-es8]   # For elasticsearch-dsl~=8.0
pip install -e .[tests,tests-es8x]  # For elasticsearch8-dsl

Testing

Verify your changes against the test suite to verify.

ruff check .  # Code format and LINT
mypy .        # Static typing
pytest .      # Unit tests

Please also add tests for your newly developed code.

Build wheels

Wheels for this package can be built with:

python -m build

Support

If you have any problems using this package, please file an issue. We're happy to help!

License

This repository is released under the MIT license.

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

elasticsearch_pydantic-1.0.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

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

elasticsearch_pydantic-1.0-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file elasticsearch_pydantic-1.0.tar.gz.

File metadata

  • Download URL: elasticsearch_pydantic-1.0.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for elasticsearch_pydantic-1.0.tar.gz
Algorithm Hash digest
SHA256 e30772b6ad99bde895f45e28f58234b996a6cd5cd3c8b9f50bc40fbc2423a6d8
MD5 c020fe100cde45b457748ca1732a2f79
BLAKE2b-256 4a5af3f956be3bd362d83a3f0235b3ee7b82d44e77ec2fd9728ebcc06030c7eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for elasticsearch_pydantic-1.0.tar.gz:

Publisher: ci.yml on janheinrichmerker/elasticsearch-pydantic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file elasticsearch_pydantic-1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for elasticsearch_pydantic-1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b931d1b85b2e92dada454d77acbb3afc885d607c512803d73a34e2601494a5fa
MD5 5c427dab873b3c9dd9e93d59a141a2a6
BLAKE2b-256 2a36154d3688ffb8d3e169c7bc9c8cac445e4fc214e6441b412fbff65ebbd7ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for elasticsearch_pydantic-1.0-py3-none-any.whl:

Publisher: ci.yml on janheinrichmerker/elasticsearch-pydantic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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