Skip to main content

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'] = []

Metadata

Release files for ywpi 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ywpi 0.1.5
File Size Uploaded
ywpi-0.1.5.tar.gz 28.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ywpi 0.1.5
File Interpreter ABI Platform
ywpi-0.1.5-py3-none-any.whl Python 3 none any Details

Total release size: 64.9 kB

Release files / ywpi-0.1.5.tar.gz

Download URL ywpi-0.1.5.tar.gz
Size 28.9 kB
Tags Source
SHA-256 checksum
How to use checksums
7322890b20bfa15028c71025e6b08e7e3527c771851a36ee75b3ff468520bd31
BLAKE2b-256 checksum
How to use checksums
7051c5c188a12824bdaea7d566de9267a8b7740aea33ab351443e2f959a22c6e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.14

Release files / ywpi-0.1.5-py3-none-any.whl

Download URL ywpi-0.1.5-py3-none-any.whl
Size 36.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
25ead8863ca7281bb59fd965adef74f057ede4de9a3dc23612623a4ccb89525b
BLAKE2b-256 checksum
How to use checksums
5ca53e02f85a1b808c2625e4fea68fde1eb16286c9099986af077c89de15e7ca
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.14

Release history Release notifications | RSS feed

This release

0.1.5 This release

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page