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.4.tar.gz (28.8 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.4-py3-none-any.whl (36.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ywpi-0.1.4.tar.gz
Algorithm Hash digest
SHA256 9932cc27fb02d49cde0c2a6bd23615553e4a1b9e8bfc3ca254ec556caf315b93
MD5 1bbeeaea96d97a5e775c2ec422078753
BLAKE2b-256 d96c6925383f706f1934e22719ba6494066a85532be08376b96929c5b0a94830

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ywpi-0.1.4-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.4-py3-none-any.whl
Algorithm Hash digest
SHA256 fef1d34f162ac1987490498828e0b90c33243725bee99356094003a2e54cf0bf
MD5 455a199c56b56cf37e93f3ec14ec805a
BLAKE2b-256 d9a2ada51704a87d4428ac1f751d501dc689bc105ba3f3035001fe46ecfc6917

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