Skip to main content

No project description provided

Project description

trycast

Status: In development. Current limitations in mypy prevent the examples below from actually typechecking successfully, despite functioning correctly at runtime.

This module provides a single function trycast which can be used to parse a JSON-like value.

Here is an example of parsing a Point2D object defined as a TypedDict:

from bottle import HTTPResponse, request, route
from trycast import trycast
from typing import TypedDict

class Point2D(TypedDict):
    x: float
    y: float
    name: str

@route('/draw_point')
def draw_point_endpoint() -> None:
    request_json = request.json  # type: object
    if (point := trycast(Point2D, request_json)) is not None:
        draw_point(point)  # type is narrowed to Point2D
    else:
        return HTTPResponse(status=400)  # Bad Request

def draw_point(point: Point2D) -> None:
    # ...

In this example the trycast function is asked to parse a request_json into a Point2D object, returning the original object (with its type narrowed appropriately) if parsing was successful.

More complex types can be parsed as well, such as the Shape in the following example, which is a tagged union that can be either a Circle or Rect value:

from bottle import HTTPResponse, request, route
from trycast import trycast
from typing import Literal, TypedDict, Union

class Point2D(TypedDict):
    x: float
    y: float

class Circle(TypedDict):
    type: Literal['circle']
    center: Point2D  # a nested TypedDict!
    radius: float

class Rect(TypedDict):
    type: Literal['rect']
    x: float
    y: float
    width: float
    height: float

Shape = Union[Circle, Rect]  # a Tagged Union!

@route('/draw_shape')
def draw_shape_endpoint() -> None:
    request_json = request.json  # type: object
    if (shape := trycast(Shape, request_json)) is not None:
        draw_shape(shape)  # type is narrowed to Shape
    else:
        return HTTPResponse(status=400)  # Bad Request

Release Notes

v0.1.0

  • Add support for Python 3.6, 3.7, and 3.9, in addition to 3.8.

v0.0.2

  • Fix README to appear on PyPI.
  • Add other package metadata, such as the supported Python versions.

v0.0.1

  • Initial release.
  • Supports typechecking all types found in JSON.

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

trycast-0.1.0.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

trycast-0.1.0-py3-none-any.whl (3.8 kB view details)

Uploaded Python 3

File details

Details for the file trycast-0.1.0.tar.gz.

File metadata

  • Download URL: trycast-0.1.0.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.9.0 Darwin/18.7.0

File hashes

Hashes for trycast-0.1.0.tar.gz
Algorithm Hash digest
SHA256 dec2377b6cd62a5f499bb09ccf2e9cc60e7c9cdcbecb69cfce0dcaf92bc8d91d
MD5 ffed7a4e79cb04435e137555ca7ccb4a
BLAKE2b-256 cce149cb422f37bf7f5d948469b778369bf200d506e4d41e91b81b83b43ea5aa

See more details on using hashes here.

File details

Details for the file trycast-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: trycast-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 3.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.9.0 Darwin/18.7.0

File hashes

Hashes for trycast-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 76898e1c4f775fe1aa8d5339dbb7150a2f9060cef4bb77320523b2f0bce3aa0b
MD5 6e354936a2cee107790998d75916b794
BLAKE2b-256 08c323802a968d5ce90dce22e840cad6f2c38928fcc1c36337b945a849d923f7

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