Skip to main content

A collection of helper functions/classes for Pydantic.

Project description

Phana's Pydantic Helpers

pypi pypi-python license

A collection of helper functions/classes for Pydantic.

Table of Contents

Install

Prerequisites

  • Poetry – dependency manager

Install Phana's Pydantic Helpers

To get started, install the package with Poetry.

poetry add phanas-pydantic-helpers

Usage

Factory

Factory(...) is simply an alias for pydantic.Field(default_factory=...).

from pydantic import BaseModel

from phanas_pydantic_helpers import Factory


class Config(BaseModel):
    token: str
    
    class _ExtraInfo(BaseModel):
        name: str = "Unnamed"
        description: str = "Empty description"

    extra_info: _ExtraInfo = Factory(_ExtraInfo)


model = Config(token="bleh")
assert model.extra_info.name == "Unnamed"
model.extra_info.description = "A more detailed description"

FieldConverter

Easily create custom fields with one or more type converters. Make sure the first superclass is the type you want to represent, as this is considered the main base class and will take precedence over FieldConverter, offering better code completion.

from phanas_pydantic_helpers import FieldConverter
from pydantic import BaseModel


class ToInt(int, FieldConverter):

    @classmethod
    def _pyd_convert_str(cls, value: str) -> int:
        return int(value)

    @classmethod
    def _pyd_convert_bytes(cls, value: bytes) -> int:
        return int.from_bytes(value, "big")


class Container(BaseModel):
    value: ToInt


container_from_str = Container(value="5")
assert container_from_str.value == 5

container_from_bytes = Container(value=b"\x00\xFF")
assert container_from_bytes.value == 0xFF

create_template_from_model

Create a dict from a model with required fields. This function fills in required fields with placeholders.

from typing import Dict, List

from pydantic import BaseModel
from phanas_pydantic_helpers import Factory, create_template_from_model


class Player(BaseModel):
    name: str
    admin = False
    highest_score: float = 1.0
    extra_data: Dict[str, str]


class PlayerDatabase(BaseModel):
    version: int
    players: List[Player]


class GameSystem(BaseModel):
    system_name = "PhanaBox"
    games: List[str]
    player_database: PlayerDatabase = Factory(PlayerDatabase)


assert create_template_from_model(GameSystem) == {
    "system_name": "PhanaBox",
    "games": ["GAMES"],
    "player_database": {
        "version": 0,
        "players": [
            {
                "name": "NAME",
                "admin": False,
                "highest_score": 1.0,
                "extra_data": {"KEY_NAME": "EXTRA_DATA"},
            }
        ],
    },
}

Changelog

See CHANGELOG.md.

Developers

Installation

Follow the installation steps in install and use Poetry to install the development dependencies:

poetry install

License

MIT © Phanabani.

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

phanas_pydantic_helpers-2.1.3.tar.gz (9.9 kB view hashes)

Uploaded Source

Built Distribution

phanas_pydantic_helpers-2.1.3-py3-none-any.whl (12.2 kB view hashes)

Uploaded Python 3

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