我在event.listen(Model.attribute, 'set')
中设置模型的属性值时遇到问题。当我在单元测试中检查我的值时,有时(〜5/10情况)已设置并通过了测试,但有时未通过(断言失败)。
库版本:
marshmallow==2.16.3
marshmallow-sqlalchemy==0.15
Flask==1.0.2
Flask-SQLAlchemy==2.3.1
SQLAlchemy==1.2.7
from datetime import datetime
from unittest import TestCase
import pytz
from sqlalchemy import DateTime, Column, event
from base import Model
class UserSchema():
class Meta:
model = User
class DAL():
def create_or_update_user(self, user_data, partial=False):
session = self._get_session()
user_id = user_data.pop('id', None)
if user_id:
user_obj = self._get_obj(User, user_id)
session = self._get_session(user_obj)
user_obj = UserSchema(strict=True, session=session, partial=partial).load(user_data, instance=user_obj).data
else:
user_obj = UserSchema(strict=True, session=session).load(user_data).data
session.add(user_obj)
session.commit()
return user_obj
class User(Model):
status_updated = Column(DateTime)
@staticmethod
def set_status_updated(target, value, oldvalue, initiator):
target.status_updated = datetime.now(pytz.utc)
def __new__(cls, *args, **kwargs):
obj = super(User, cls).__new__(cls)
event.listen(cls.status, 'set', cls.set_status_updated, propagate=True)
return obj
class USerTestCase(TestCase):
def test_update_user(self):
user_data = {
'id': 1,
'name': 'John',
'status': 'New'
}
user = self.app.dal.create_or_update_user(user_data=user_data)
assert user.status_updated is not None
有人遇到过类似的问题吗?