Bake marshmallow schemas based on dataclasses
Project description
marshmallow-recipe
The main goal of this opinionated library is to simplify migration from marshmallow2 to marshmallow3. Also, it helps with:
- Stop writing marshmallow schemas completely: it generates them from dataclass.
- Using different naming cases(camel and capital camel cases are supported).
- Utilizing best practises on fields configuration.
import dataclasses
import datetime
import decimal
import marshmallow_recipe as mr
import uuid
@dataclasses.dataclass(frozen=True)
class Transaction:
id: uuid.UUID
created_at: datetime.datetime
processed_at: datetime.datetime | None
amount: decimal.Decimal
transaction = Transaction(
id=uuid.uuid4(),
created_at=datetime.datetime.utcnow(),
processed_at=None,
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)
Update API example:
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.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)
- Validate before dump for marshmallow3
- Move many to schema
- Fix default naming case
- Fix unhashable type: 'set' error
v0.0.4(2022-02-21)
- Support decimal field
- Support metadata
- Support int field
- Support float field
- Support uuid field
- Support list and dict
- Support marshmallow3
- Support datetime and date
- Unify datetime.tzinfo behaviour
v0.0.3 (2022-02-14)
v0.0.2 (2022-02-13)
v0.0.1 (2022-02-13)
- A first version
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
marshmallow-recipe-0.0.22.tar.gz
(13.0 kB
view details)
Built Distribution
File details
Details for the file marshmallow-recipe-0.0.22.tar.gz
.
File metadata
- Download URL: marshmallow-recipe-0.0.22.tar.gz
- Upload date:
- Size: 13.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 843d523282f62268f8693d32ede58df0d7716d1ecbf8ae722b8f08ddf4779df2 |
|
MD5 | ed22914bcb0eaaecb002d9c5d6989191 |
|
BLAKE2b-256 | b69ce5698b8851d3c570c9c8161a9a35b51c81f0bd3b1303bb065f196ca4bffd |
File details
Details for the file marshmallow_recipe-0.0.22-py3-none-any.whl
.
File metadata
- Download URL: marshmallow_recipe-0.0.22-py3-none-any.whl
- Upload date:
- Size: 13.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ee329e2da9375e08ed9295e3e00e71b539056c14da0e9ec2687aa87a9a38ea06 |
|
MD5 | 083772cdae0a4091dd1aa3e8c940c6b7 |
|
BLAKE2b-256 | 0a1f115368d3d64f3db49f6afa8cb78a9cf1cc1ee4a0b9f0bcfb91e8b76f7e47 |