Validator
Эта миссия создана под впечатлением от выступления Рэймонда Хеттингера
на 4-ой ежегодной конференции PyBay.
Это уже вторая миссия, связанная с данным выступлением.
Посмотреть первую можно по этой ссылке.
Валидация данных - это проверка того, что тип и значение входных (в нашем случае) данных соответствуют спецификации.
В миссии нужно написать класс LogLine, используя для инициализации какие-то входные данные.
У класса должны быть следующие атрибуты: id, name, status и error. Для того, чтобы получить значения этих атрибутов, в классе должен быть написан метод get().
При инициализации экземпляра класса требуется валидировать передаваемые данные, которые должны удовлетворять следующим требованиям:
- тип передаваемых данных - строка;
- строка должна содержать "id", "name" и "status" (в указанном порядке), разделённые пробелами, не больше и не меньше;
- id должно быть целым числом в интервале от 0 до 1000 (включительно);
- длина name не должна превышать 20 или быть меньше 2, текст может быть любым, пробелы не допускаются;
- status должен соответствовать одному варианту из списка ["active", "idle", "shutdown"].
В случае, если тип и значения данных успешно проходят валидацию, атрибуты класса id, name и status должны иметь соответствующие значения. Значение атрибута error должно быть "passed data is valid".
Пример создания экземпляра класса с валидными данными:
log = LogLine("123 search active")
log.get("error") == "passed data is valid"
log.get("id") == 123
log.get("name") == "search"
log.get("status") == "active"
В случае, если тип и значение данных валидацию не проходят, атрибуты класса id, name и status должны иметь значения None.
Для атрибута error предусмотрены следующие значения:
- на вход подается не строка - "wrong input type";
- в переданной строке больше или меньше, чем 3 элемента, разделённых пробелами - "wrong input value";
- первый элемент переданной строки (id) не может быть приведён к целому числу - "wrong id type";
- id меньше 0 или больше 1000 - "wrong id value";
- длина name меньше 2 или больше 20 - "wrong name value";
- значение status не в списке ["active", "idle", "shutdown"] - "wrong status value";
Пример экземпляров класса, созданных с невалидными данными:
log1 = LogLine("123 k passive")
log1.get("error")...