Есть ли способ выполнить проверку объекта после того, как (или как) свойства заданы, но до того, как сеанс будет зафиксирован?
Например, у меня есть модель домена Device
, которая имеет свойство mac
. Я хотел бы убедиться, что свойство mac
содержит допустимое и очищенное значение mac перед его добавлением или обновлением в базе данных.
Похоже, что Pythonic-подход заключается в том, чтобы делать большинство вещей как свойства (включая SQLAlchemy). Если бы я кодировал это в PHP или Java, я бы, вероятно, решил создать методы получения / установки для защиты данных и дать мне гибкость для обработки этого в самой модели предметной области.
public function mac() { return $this->mac; }
public function setMac($mac) {
return $this->mac = $this->sanitizeAndValidateMac($mac);
}
public function sanitizeAndValidateMac($mac) {
if ( ! preg_match(self::$VALID_MAC_REGEX) ) {
throw new InvalidMacException($mac);
}
return strtolower($mac);
}
Что представляет собой Pythonic способ справиться с ситуацией такого типа с помощью SQLAlchemy?
(Хотя я знаю, что проверка и должна обрабатываться в другом месте (т. Е. В веб-среде), я хотел бы выяснить, как обращаться с некоторыми из этих правил проверки, относящихся к конкретному домену, так как они обязательно будут появляться часто.) *
UPDATE
Я знаю, что мог бы использовать свойство , чтобы сделать это при обычных обстоятельствах. Ключевой частью является то, что я использую SQLAlchemy с этими классами. Я не совсем понимаю, как SQLAlchemy выполняет свою магию, но я подозреваю, что создание и переопределение этих свойств самостоятельно может привести к нестабильным и / или непредсказуемым результатам.