Python棉花糖:架构.加载()返回嵌套架构的错误

2024-06-25 23:29:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下物品。在

class Notification(object):
    def __init__(self, **kwargs):
        self.name = kwargs.get('name', '')
        self.locale = kwargs.get('locale', '')
        self.text = kwargs.get('text', '')

    def __repr__(self):
        return '<Notification(name={self.name!r})>'.format(self=self)


class NotificationThrottle(object):
    def __init__(self, **kwargs):
        self.notification = kwargs.get('notification', '')
        self.time_span = kwargs.get('time_span', '')
        self.maximum_count = kwargs.get('maximum_count', '')
        self.current_count = kwargs.get('current_count', '')
        self.throttle_set_date = kwargs.get('throttle_set_date', '')

    def __repr__(self):
        return '<NotificationThottle(name={self.type!r})>'.format(self=self)

…以及以下随附的棉花糖示意图

^{pr2}$

包括以下数据:

notification_data = {
    'name': "new_message",
    'locale': "sw_KE",
    'text': "mimi ni mzee"
}
notification_throttle_data = {
    "time_span": 3600,
    "maximum_count": 10,
    "current_count": 1,
    "throttle_set_date": datetime.utcnow().isoformat()}

当我试图加载上面的NotificationThrottleSchema时,出现以下错误。在

In [1]: from datetime import datetime

In [2]: from .schemas.throttle_schemas import NotificationSchema, NotificationThrottleSchema

In [3]:  notification_data = {
        'name': "new_message",
        'locale': "sw_KE",
        'text': "mimi ni mzee"
    }

In [4]: notification_throttle_data = {
        "time_span": 3600,
        "maximum_count": 10,
        "current_count": 1,
        "throttle_set_date": datetime.utcnow().isoformat()}

In [5]: schema = NotificationSchema()

In [6]: notif_schema = schema.load(notification_data)

In [7]: notif = notif_schema.data

In [8]: notif
Out[8]: <Notification(name=u'new_message')>

In [9]: notification_throttle_data.update({'notification':notif})

In [10]: notification_throttle_data
Out[10]:
{'current_count': 1,
 'maximum_count': 10,
 'notification': <Notification(name=u'new_message')>,
 'throttle_set_date': '2016-04-25T08:19:06.492310',
 'time_span': 3600}

In [11]: notif_throttle_schema = NotificationThrottleSchema()

In [12]: notif_throttle = notif_throttle_schema.load(notification_throttle_data)

In [13]: notif_throttle
Out[13]: UnmarshalResult(data={'current_count': 1, 'maximum_count': 10, 'throttle_set_date': datetime.datetime(2016, 4, 25, 8, 19, 6, 492310), 'time_span': 3600}, errors={'notification': {u'_schema': [u'Invalid input type.']}})

In [14]: notif_throttle.data
Out[14]:
{'current_count': 1,
 'maximum_count': 10,
 'throttle_set_date': datetime.datetime(2016, 4, 25, 8, 19, 6, 492310),
 'time_span': 3600}

In [15]:

如您所见,对NotificationThrottle类型的对象的反序列化失败,并出现上面的神秘错误。 我确信这是棉花糖本身的问题,除非我误解了post_load方法的工作方式(它可能返回已定义的对象)

我做错什么了吗?在


Tags: nameinselfdatagetdatetimetimecount
1条回答
网友
1楼 · 发布于 2024-06-25 23:29:13

您似乎在用通知对象而不是序列化对象更新notification_throttle_datahttps://marshmallow.readthedocs.org/en/latest/quickstart.html#serializing-objects-dumping

你想做的是:

    notif_data = schema.dump(notification_data)
    notification_throttle_data.update({'notification':notif_data.data})       
    notif_throttle = notif_throttle_schema.load(notification_throttle_data)

UnmarshalResult(data=<__main__.NotificationThrottle object at 0x10a3d5a90>, errors={})

相关问题 更多 >