跳转到主要内容

用于与pyre类型检查器一起使用的类型系统扩展

项目描述

Pyre扩展

此模块定义了扩展标准“typing”模块的扩展,这些扩展由Pyre类型检查器支持。

none_throws

一个使关于Optional的假设明确化的函数。如果传递None,则函数将引发断言错误,否则返回值。

ParameterSpecification

ParameterSpecification是一种特殊类型的变量,它捕获可调用参数规范(在运行时和inspect库中称为argspecs)而不是类型,允许对转换给定可调用返回类型的装饰器进行类型化。例如

from typing import TypeVar, Callable, List
from pyre_extensions import ParameterSpecification
TParams = ParameterSpecification("TParams")
TReturn = TypeVar("TReturn")
def unwrap(f: Callable[TParams, List[TReturn]]) -> Callable[TParams, TReturn]:
    def inner(*args: TParams.args, **kwargs: TParams.kwargs) -> TReturn:
        return f(*args, **kwargs)[0]

    return inner
@unwrap
def foo(x: int, y: str, z: bool = False) -> List[int]:
    return [1, 2, 3]

将foo装饰为返回int的可调用函数,但仍然具有相同的参数,包括它们的名称和是否必需。

这些ParameterSpecification变量还具有两个特殊属性,argskwargs,它们对应于对ParameterSpecification函数的特定调用中的位置参数和关键字参数。由于参数在这些两个参数集合中的分配可能每次都不同,因此这些特殊注解只能以一种方式使用:在函数定义中一起使用,作为*args**kwargs,且不列出其他参数。

安全JSON

safe_json模块提供了一种类型安全的解析JSON的方式。它旨在作为内置json模块的替代品,但与返回形状未定义的对象(即Any)不同,它允许您指定期望的JSON形状。解析器将验证输入是否与期望的类型匹配,如果不匹配则引发异常。

示例

对于简单的JSON结构,您可以使用内置类型

>>> from pyre_extensions import safe_json
>>> from typing import List, Dict
>>> safe_json.loads("[1, 2, 3]", List[int])
[1, 2, 3]
>>> safe_json.loads("[1, 2, 3]", List[str])
# Raises `pyre_extensions.safe_json.InvalidJson`
>>> safe_json.loads('{"key": "value"}', Dict[str, str])
{'key': 'value'}
>>> safe_json.loads('{"key": "value"}', Dict[str, int])
# Raises `pyre_extensions.safe_json.InvalidJson`

对于更复杂、嵌套的结构,使用类型化字典是最佳选择

>>> from typing import TypedDict
>>> class Movie(TypedDict):
...     name: str
...     year: int
...
>>> safe_json.loads('{"name": "Blade Runner", "year": 1982 }', Movie)
{'name': 'Blade Runner', 'year': 1982}
>>> safe_json.loads('{"name": "Blade Runner", "year": "1982" }', Movie)
# Raises `pyre_extensions.safe_json.InvalidJson`

验证数据是否为期望的类型

>>> from pyre_extensions import safe_json
>>> from typing import List, Dict
>>> data = {"foo": 23}
>>> safe_json.validate(data, Dict[str, str])
# Raises `pyre_extensions.safe_json.InvalidJson`
>>> safe_json.validate(data, Dict[str, int])
{"foo": 23}

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

pyre_extensions-0.0.31.tar.gz (10.9 kB 查看散列)

构建分发

pyre_extensions-0.0.31-py3-none-any.whl (12.8 kB 查看哈希值)

上传时间: Python 3

由以下支持