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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | dec2377b6cd62a5f499bb09ccf2e9cc60e7c9cdcbecb69cfce0dcaf92bc8d91d |
|
MD5 | ffed7a4e79cb04435e137555ca7ccb4a |
|
BLAKE2b-256 | cce149cb422f37bf7f5d948469b778369bf200d506e4d41e91b81b83b43ea5aa |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 76898e1c4f775fe1aa8d5339dbb7150a2f9060cef4bb77320523b2f0bce3aa0b |
|
MD5 | 6e354936a2cee107790998d75916b794 |
|
BLAKE2b-256 | 08c323802a968d5ce90dce22e840cad6f2c38928fcc1c36337b945a849d923f7 |