
Validator
This mission was inspired by Raymond Hettinger's
talk at the 4th annual PyBay conference.
This is the second mission related to his talk.
The first mission can be seen by clicking here.
Data validation is a check process that confirms that type and value of the input (in our case) data matches the specification.
In the mission, you need to create LogLine class which uses input data passing as an argument for its instances initialization.
The class should have the next attributes: id, name, status and error. In order to retrieve the attribute values the get() method should be implemented.
When initializing a class instance, it is required to validate the data, which must meet the following requirements:
- input data type - string;
- input string contains "id", "name" and "status" (in the certain order), separated by whitespaces, not less, not more;
- id value should allow its conversion to an int, 0 <= id <= 1000;
- len(name) should be not less than 2, not more than 20, any characters, except whitespace;
- status should one of ["active", "idle", "shutdown"].
If the data type and value are successfully validated during a class instance initialization, its attributes id, name и status should have respective values. The value of the error attr should be "passed data is valid".
Example of the class instance initiated with the valid data:
log = LogLine("123 search active") log.get("error") == "passed data is valid" log.get("id") == 123 log.get("name") == "search" log.get("status") == "active"
If data type or value do not pass validation during a class instance initialization, its attributes id, name и status values should be None.
The value of the error attribute may be:
- the input data is not an instance of a string - "wrong input type";
- in the passed string more or less than 3 space-separated elements - "wrong input value";
- the first element of the passed string (id) cannot be converted to an integer - "wrong id type";
- 0 > id or id > 1000 - "wrong id value";
- length of the name is less than 2 or more than 20 - "wrong name value";
- status isn't one of ["active", "idle", "shutdown"] - "wrong status value";
Examples of the class instances initiated with the invalid data:
log1 = LogLine("123 k passive") log1.get("error") == "wrong name value" log1.get("id") == None log1.get("name") == None log1.get("status") == None log2 = LogLine(["1001 search active"]) log2.get("error") == "wrong input type" log3 = LogLine("1001 search passive") log3.get("error") == "wrong id value" log4 = LogLine("900 search passive") log4.get("error") == "wrong status value" log5 = LogLine("900 search active something") log5.get("error") == "wrong input value"
Although the task of validating data does not necessarily require the using of classes, in this mission their usage is encouraged for educational purposes. Also, we can compare our data validation approach with how Raymond does it in this part of the video, where he tells about the proper classes writing strategy (with inheritance) on the example of the Validator class.
Input: arbitrary of any type.
- valid type of the input - str;
- input str must contain 3 parameters separated by whitespaces;
- the first parameter is id, should allow its conversion to an int, 0 <= id <= 1000;
- the second parameter is name, any characters (except whitespaces), 2 <= len(name) <= 20;
- the third parameter is status, any of ["active", "idle", "shutdown"].
Output: a list of an instance attributes id, name, status and error in the exact order.
Examples:
validate(LogLine("123 k passive")) == [None, None, None, "wrong name value"] #example #1 validate(LogLine("123 search active")) == [123, "search", "active", "passed data is valid"] #example #2 validate(LogLine("1001 search active")) == [None, None, None, "wrong id value"] #example #3
CheckiO Extensions allow you to use local files to solve missions. More info in a blog post.
In order to install CheckiO client you'll need installed Python (version at least 3.8)
Install CheckiO Client first:
pip3 install checkio_client
Configure your tool
checkio --domain=py config --key=
Sync solutions into your local folder
checkio sync
(in beta testing) Launch local server so your browser can use it and sync solution between local file end extension on the fly. (doesn't work for safari)
checkio serv -d
Alternatevly, you can install Chrome extension or FF addon
checkio install-plugin
checkio install-plugin --ff
checkio install-plugin --chromium
Read more here about other functionality that the checkio client provides. Feel free to submit an issue in case of any difficulties.
Welcome to Pair Programming! Engage in real-time collaboration on coding projects by starting a session and sharing the provided unique URL with friends or colleagues. This feature is perfect for joint project development, debugging, or learning new skills together. Simply click 'Start Session' to begin your collaborative coding journey!
You are trying to join a pair programming session that has not started yet.
Please wait for the session creator to join.
It looks like the creator of the pair programming session closed the editor window.
It might happen accidentally, so that you can wait for reconnection.