跳转到主要内容

基于dataclasses生成marshmallow模式

项目描述

marshmallow-recipe

这个有偏见的库的主要目标是简化从marshmallow2到marshmallow3的迁移。它还帮助

  1. 不再完全编写marshmallow模式:它从dataclass生成它们。
  2. 支持不同的命名情况(支持驼峰和首字母大写驼峰命名)。
  3. 利用字段配置的最佳实践。

支持类型

  • str, int, float, bool, datetime.datetime, datetime.date, datetime.time, decimal.Decimal, uuid.UUID
  • Optional[T], T | None
  • 注解
  • list, dict(带有类型键和值),tuple(仅当所有元素类型相同时),setfrozenset
  • Mapping(带有类型键和值),SetSequence

示例:class Annotated: pass

import dataclasses
import datetime
import decimal
import marshmallow_recipe as mr
import uuid

from typing import Annotated

@dataclasses.dataclass(frozen=True)
class Transaction:
    id: uuid.UUID
    created_at: datetime.datetime
    processed_at: datetime.datetime | None
    amount: decimal.Decimal = dataclasses.field(metadata=mr.decimal_metadata(places=4))
    transaction_amount: Annotated[decimal.Decimal, mr.decimal_metadata(places=4)]

transaction = Transaction(
    id=uuid.uuid4(),
    created_at=datetime.datetime.utcnow(),
    processed_at=None,
    amount=decimal.Decimal(42),
    transaction_amount=decimal.Decimal(42),
 )

# dumps the transaction to a dict
raw = mr.dump(transaction) 

# loads a transaction from the dict
mr.load(Transaction, raw)

# provides a generated marshmallow schema for dataclass
mr.schema(Transaction)

更新API示例

import decimal
import dataclasses
import marshmallow_recipe as mr

@dataclasses.dataclass(frozen=True)
@mr.options(none_value_handling=mr.NoneValueHandling.INCLUDE)
class CompanyUpdateData:
    name: str = mr.MISSING
    annual_turnover: decimal.Decimal | None = mr.MISSING

company_update_data = CompanyUpdateData(name="updated name")
dumped = mr.dump(company_update_data)
assert dumped == {"name": "updated name"}  # Note: no "annual_turnover" here

loaded = mr.load(CompanyUpdateData, {"name": "updated name"})
assert loaded.name == "updated name"
assert loaded.annual_turnover is mr.MISSING

loaded = mr.load(CompanyUpdateData, {"annual_turnover": None})
assert loaded.name is mr.MISSING
assert loaded.annual_turnover is None

v0.0.39(2024-07-25)

v0.0.38(2024-01-05)

v0.0.38a2(2023-12-15)

v0.0.38a1(2023-12-11)

v0.0.37(2023-12-11)

v0.0.36(2023-12-08)

v0.0.34(2023-12-07)

  • 支持datetime.time: #137

v0.0.33(2023-09-30)

v0.0.32(2023-09-28)

v0.0.31(2023-09-26)

v0.0.30(2023-09-25)

v0.0.29(2023-09-23)

  • 允许将元数据用作Annotated的一部分:#126#127

v0.0.28(2023-09-22)

v0.0.27(2023-09-22)

v0.0.26(2023-09-18)

v0.0.25(2023-09-11)

  • 支持集合、集合[T]、frozenset、frozenset[T]、元组、元组[T, ...]、collections.abc.Set[T]、collections.abc.Sequence[T]、collections.abc.Mapping[K, V]

v0.0.24(2023-09-08)

v0.0.23(2023-09-05)

v0.0.22(2023-06-27)

v0.0.22a2(2023-06-27)

v0.0.22a1(2023-06-24)

v0.0.21(2023-06-24)

v0.0.21a1(2023-06-08)

v0.0.20(2023-04-25)

v0.0.19(2023-04-24)

v0.0.18(2023-01-05)

v0.0.17(2022-12-20)

v0.0.16(2022-12-02)

v0.0.15(2022-12-01)

v0.0.14(2022-11-14)

v0.0.13(2022-10-14)

v0.0.12(2022-08-23)

v0.0.11(2022-06-23)

v0.0.10(2022-06-15)

v0.0.9(2022-04-26)

v0.0.8(2022-03-26)

v0.0.7(2022-03-20)

v0.0.6(2022-03-20)

v0.0.5(2022-03-01)

v0.0.4(2022-02-21)

v0.0.3 (2022-02-14)

v0.0.2 (2022-02-13)

v0.0.1 (2022-02-13)

  • 第一个版本

项目详情


下载文件

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

源分布

marshmallow-recipe-0.0.39.tar.gz (17.6 kB 查看哈希值)

上传时间

构建分布

marshmallow_recipe-0.0.39-py3-none-any.whl (17.7 kB 查看哈希值)

上传时间 Python 3

由以下支持