3

升级 marshmallow,运行 pytest 的时候有大量 warning 怎么快速修改正确?

 2 years ago
source link: https://www.v2ex.com/t/820602
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  Python

升级 marshmallow,运行 pytest 的时候有大量 warning 怎么快速修改正确?

  featureoverload · 19 小时 59 分钟前 · 160 次点击

新版 marshmallow 将 Field 中,非保留的关键参数都建议放入到 metadata 参数中, 没有放入的会显示 warning 。

示例代码:

# schemas.py
from marshmallow import Schema
from marshmallow import fields


class FooSchema(Schema):
    name = fields.String(
        required=True,
        title='foo',
        description='foo name')
    relationship = fields.String(
        title='bar', description='foobar')

测试代码:

from schemas import FooSchema


def test_warn():
    INPUT = {
        'name': 'something',
        'relationship': 'others'
    }
    schema = FooSchema()
    data = schema.load(INPUT)
    assert data == INPUT

示例代码文件结构:

.
├── requirements.txt  # marshmallow==3.3.0
├── schemas.py
└── test_warning.py

升级 marshmallow:

$ pip install -U marshmallow
...
Successfully installed marshmallow-3.14.1

使用 pytest 测试(出现 marshmallow warning ):

pytest test_warning.py
================================================================ test session starts =================================================================
platform darwin -- Python 3.8.3, pytest-6.2.5, py-1.11.0, pluggy-1.0.0
rootdir: /private/tmp/_
collected 1 item                                                                                                                                     

test_warning.py .                                                                                                                              [100%]

================================================================== warnings summary ==================================================================
.venv/lib/python3.8/site-packages/marshmallow/fields.py:218
  /private/tmp/_/.venv/lib/python3.8/site-packages/marshmallow/fields.py:218: RemovedInMarshmallow4Warning: Passing field metadata as keyword arguments is deprecated. Use the explicit `metadata=...` argument instead. Additional metadata: {'title': 'foo', 'description': 'foo name'}
    warnings.warn(

.venv/lib/python3.8/site-packages/marshmallow/fields.py:218
  /private/tmp/_/.venv/lib/python3.8/site-packages/marshmallow/fields.py:218: RemovedInMarshmallow4Warning: Passing field metadata as keyword arguments is deprecated. Use the explicit `metadata=...` argument instead. Additional metadata: {'title': 'bar', 'description': 'foobar'}
    warnings.warn(

-- Docs: https://docs.pytest.org/en/stable/warnings.html
=========================================================== 1 passed, 2 warnings in 0.03s ============================================================

修改为没有 warning 的代码:

...

class FooSchema(Schema):
    name = fields.String(
        required=True,
        metadata={'title': 'foo', 'description': 'foo name'})
    relationship = fields.String(
        metadata={'title': 'bar', 'description': 'foobar'})


问题:

如果有很多个 fields.XXXFieldYYY(...) 代码, 一个一个手动修改起来太难了, 有没有什么快捷的方案一次性改好?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK