用于与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
变量还具有两个特殊属性,args
和kwargs
,它们对应于对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 查看哈希值)
关闭
pyre_extensions-0.0.31.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 945806dd33027856cf6e41c9c4adacffab2b56993f8762ff4ea7826f95db0481 |
|
MD5 | f8891d85e4d4a349bd1b1f780b74ac13 |
|
BLAKE2b-256 | d57fdfbabb6b4b23aacc0efa6ef51dc9c6f63532a02323bddcf1475dd0993854 |
关闭
pyre_extensions-0.0.31-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f89e0c786afdd4dc15753b2318975b02789ea997daa69ab40ff5ba4f438a8a0 |
|
MD5 | 02417646aa4630eb74d84fca4520dc3a |
|
BLAKE2b-256 | 63c99adb55032643489fee220613017744dba704562ec907ddc8ec64528bbe13 |