跳转到主要内容

自动(反)序列化参数和返回值

项目描述

datafunctions

Build Status Coverage Status Supports Python versions 3.7+

为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_apiinstant_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_schemasreturn_schemas属性,每个属性都有以下属性

  • dataclass
  • schema_class:marshmallow模式类
  • schema_instance:schema_class的无参实例

项目详情


下载文件

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

源代码分发

此版本没有可用的源代码分发文件。请参阅生成分发存档的教程

构建的分发

datafunctions-0.0.1-py3-none-any.whl (6.9 kB 查看哈希值)

上传时间 Python 3

支持者