Skip to main content

Add your description here

Project description

Supported annotation variants

import typing
import ywpi

def fn(
    a1: int,
    a2: str,
    a3: float,

    # String as text
    a4: typing.Annotated[str, ywpi.Text],

    # File content
    a5: typing.Annotated[bytes, ywpi.File],

    # File reference
    a6: typing.Annotated[ywpi.Ref, ywpi.File],
):
    pass

Referenced JSON

{
    "output_str": {
        "type": "str",
        "value": ""
    },
    "output_int": {
        "type": "int",
        "value": 0
    },
    "output_url": {
        "type": "url",
        "value": "https://python.org/"
    },
    "output_ref": {
        "type": "ref",
        "value": {
            "drive_id": "",
            "preview_href": ""
        }
    }
}

Multiple level of serialization

  1. Application - regular python dictionary with python objects
  2. Hub - serialize dictionary in StartTaskRequest model
    • Referencify bytes values with attachments
  3. gRPC - serialize StartTaskRequest to string via JSON string + attachments map

Serialization for model with bytes fields

Ywpi pass additional context to pydantic model_validate method. Context has next format:

{
    "attachments": {
        "attachment_key": b"binary content"
    }
}
class Model(pydantic.BaseModel):
    class File(pydantic.BaseModel):
        content: bytes 

        @pydantic.field_validator('content', mode='before')
        def validate(data, info: pydantic.ValidationInfo) -> bytes:
            print("Validate", data, "\n")
            if isinstance(data, dict):
                key = data["$attachment"]
                if key in info.context["attachments"]:
                    return info.context["attachments"][key]
                else:
                    raise ValueError(f'conten with key "{key}" does not present in the attachments')
            return data

    files: list['Model.File'] = []

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

ywpi-0.1.5.tar.gz (28.9 kB view details)

Uploaded Source

Built Distribution

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

ywpi-0.1.5-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

Details for the file ywpi-0.1.5.tar.gz.

File metadata

  • Download URL: ywpi-0.1.5.tar.gz
  • Upload date:
  • Size: 28.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for ywpi-0.1.5.tar.gz
Algorithm Hash digest
SHA256 7322890b20bfa15028c71025e6b08e7e3527c771851a36ee75b3ff468520bd31
MD5 1d7982d7ad4cdb669330be616311a189
BLAKE2b-256 7051c5c188a12824bdaea7d566de9267a8b7740aea33ab351443e2f959a22c6e

See more details on using hashes here.

File details

Details for the file ywpi-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: ywpi-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 36.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.14

File hashes

Hashes for ywpi-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 25ead8863ca7281bb59fd965adef74f057ede4de9a3dc23612623a4ccb89525b
MD5 3b43c8162a59480c103ecb41253e29e2
BLAKE2b-256 5ca53e02f85a1b808c2625e4fea68fde1eb16286c9099986af077c89de15e7ca

See more details on using hashes here.

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