У меня проблема с установкой значения атрибута модели в event.listen(Model.attribute, 'set')
.Когда я проверяю свое значение в модульном тесте, иногда (~ 5/10 случаев) оно устанавливается и тест проходит, но иногда нет (и утверждение не выполняется).
Версии Libs:
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
У кого-нибудь была похожая проблема?