Есть ли способ выполнить проверку на объект после (или как) свойств, установленных перед сеансом?
Например, у меня есть модель домена Device
, которая имеет свойство mac
. Я хотел бы убедиться, что свойство mac
содержит действительное и дезинфицированное значение mac перед его добавлением или обновлением в базе данных.
Похоже, что подход Pythonic должен делать большинство вещей как свойства (включая SQLAlchemy). Если бы я закодировал это на PHP или Java, я бы, вероятно, решил создать методы getter/setter для защиты данных и дать мне возможность справиться с этим в самой модели домена.
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
Я знаю, что я мог бы использовать property, чтобы сделать это при обычных обстоятельствах. Ключевой частью является то, что я использую SQLAlchemy с этими классами. Я не понимаю, как именно SQLAlchemy выполняет свою магию, но я подозреваю, что создание и переопределение этих свойств может привести к нестабильным и/или непредсказуемым результатам.