Skip to main content

Data model validation for nested data routes

Project description

fieldrouter: Data model validation for nested data routes

fieldrouter is a Python library that provides helpers for modelling routes in highly nested structured data.

It should be considered for cases when exhaustively modelling the tree structures involved is surplus to requirements (in other cases you would simply use Pydantic in the regular way), or perhaps if you want to specify 'routes' on an existing data model.

For example to access the number 30 in

data = {"a": {"aa": {"aaa": [10, 20, 30]}}}

You would typically need to write Pydantic models for each level

class A(BaseModel):
    a: AA

class AA(BaseModel):
    aa: AAA

class AAA(BaseModel):
    aaa: list[int]

thirty = A.model_validate(data).a.aa.aaa[2]

With fieldrouter you would instead specify a 'route' for the subpath on a 'router' model (which is just a regular Pydantic model with default argument validation):

from fieldrouter import RouterModel, Route

class Where(RouterModel):
    thirty: Route = "a.aa.aaa.2"

Then you can model the value at that route with a corresponding field on a 'routed' model (which is a generic model which takes the router as a type argument):

from fieldrouter import Routed, R

class What(Routed[R]):
    thirty: int

Then you can use the router class as a generic type argument to the instance of the routee:

model = What[Where].model_validate(data)

Route syntax

Relative references

You can reference another field in a route by prefixing its field name by a dot, such as x here:

class Where(Router):
    x: Route = "foo.0.etc"
    b1: Route = ".x.0.bar"
    b2: Route = ".x.1.bar"

The prefix .x is substituted for foo.0.etc (the value of the Route for the field x).

This is equivalent to the following routes without references to the x field:

class Where(Router):
    x: Route = "foo.0.etc"
    b1: Route = "foo.0.etc.0.bar"
    b2: Route = "foo.0.etc.1.bar"

Use this to keep your subpaths readable.

The identity route

Sometimes when you're exploring nested data you want a reminder (or easy access to) the entire data at a given route. This is available at the . route (the route string made up of a single dot). This is known as the 'identity' route.

class Where(Router):
    full: Route = "."

class What(Routed[R]):
    full: dict

This will just give you the entire input, in this case as a dict under the field named full.

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

fieldrouter-0.1.4.tar.gz (4.0 kB view details)

Uploaded Source

Built Distribution

fieldrouter-0.1.4-py3-none-any.whl (4.5 kB view details)

Uploaded Python 3

File details

Details for the file fieldrouter-0.1.4.tar.gz.

File metadata

  • Download URL: fieldrouter-0.1.4.tar.gz
  • Upload date:
  • Size: 4.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.17.3 CPython/3.10.14 Linux/5.15.0-117-generic

File hashes

Hashes for fieldrouter-0.1.4.tar.gz
Algorithm Hash digest
SHA256 b6f5c07d5a5d4d68dee56b001318ff39769f5c0eb1a1588aec8bae5a49a06728
MD5 af926cee3d777a0da8a9a4f38c92af14
BLAKE2b-256 6631b1d7dec73e005885abf52f029278847a62a027f6d1970ae264eb84a8d85e

See more details on using hashes here.

File details

Details for the file fieldrouter-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: fieldrouter-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 4.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.17.3 CPython/3.10.14 Linux/5.15.0-117-generic

File hashes

Hashes for fieldrouter-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 8934c24a164cd005b1930fda6b5f645fa627bd551d4c6a405d8ac8d7c6c8e92a
MD5 91ab76191d5feb7a3f68e6bdad7c4241
BLAKE2b-256 fd6bfbcab771403de71b1354ddba1c81ceee61e0b057fd7ab2928c692dd6151c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page