自动(反)序列化参数和返回值
项目描述
datafunctions
为Python函数自动(反)序列化参数和返回值。
pip install datafunctions
@datafunction
是一个装饰器,可以自动反序列化被装饰函数的输入参数并将返回值序列化。例如
from datetime import datetime
from datafunctions import datafunction
@datafunction
def next_year(dt: datetime) -> datetime:
return dt.replace(year=dt.year + 1)
assert next_year("2019-01-02T00:00:00") == "2020-01-02T00:00:00"
@datafunction
可以自动将字符串参数转换为datetime对象,然后将返回的datetime对象转换回字符串。
这在通过远程连接或从不同语言调用函数时非常有用——例如,请参阅instant_api和instant_client。
更普遍地,从函数外部看到的参数和返回值是基本JSON可序列化对象——字符串、字典等。它们通过marshmallow转换为和从正确的类型(如类型注解所示)转换。支持常见的Python类型以及数据类(可能嵌套)。例如
from dataclasses import dataclass
from datafunctions import datafunction
@dataclass
class Point:
x: int
y: int
@datafunction
def translate(p: Point, dx: int, dy: int) -> Point:
return Point(p.x + dx, p.y + dy)
assert translate({"x": 1, "y": 2}, 3, 4) == {"x": 4, "y": 6}
要装饰一个方法,传递is_method=True
,例如
class MyClass:
@datafunction(is_method=True)
def method(self, x: int) -> int:
...
所有参数和返回值都必须有类型注解,除非is_method=True
时第一个参数。不允许使用可变参数(例如*args
或**kwargs
)和位置参数(在/
之前)。
如果反序列化或绑定参数时出现异常,将引发一个带有附加基本异常的ArgumentError
。类似地,在尝试序列化返回值时可能会引发ReturnError
。
为了获得更多手动控制,请使用以下方法
load_arguments
dump_arguments
load_result
dump_result
在底层,类型注解被收集到一个dataclass中,然后使用marshmallow_dataclass将其转换为marshmallow模式。marshmallow处理序列化和反序列化。
此类的实例具有params_schemas
和return_schemas
属性,每个属性都有以下属性
dataclass
schema_class
:marshmallow模式类schema_instance
:schema_class的无参实例
项目详情
关闭
datafunctions-0.0.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5320c8ce59e179a453744531d5b78a3276a054732d45ce7dd48adb202530e27e |
|
MD5 | ab9104fe73de6c62a277f0bdeb3a0f82 |
|
BLAKE2b-256 | 502245d882723fe25d29257005a29ddd27031125180c04ad11da8f955c71a6bb |