Key features¶
Access token management¶
Acquiring an access token can be somewhat complicated. In our project, it is semi-automatized: it will open a webpage with a login form for you. Once you put in your credentials and log in, it will capture a callback GET with authorization code and make another HTTP request to get the real access token. Once received, the token will be stored locally in the library configuration folder [1]. If the token is expired, the library will automatically get a new one with the help of the refresh token, which is also sent by the server on login and stored in the same file.
If you want to login again with other credentials, you should either
delete the file
where the token is stored or use force_new_token
boolean parameter
in the constructor of Classification
class.
If you do not want to create another client instance, simply call the method
reinit_session()
with the same parameter specified to True
.
If you would like to know more about the login process, pelase refer here.
Memorizing some ubiquitous parameters¶
Looking at the API documentation, you may notice that some parameters repeat over and over again through different requests. Luckily, you do not need to provide them with every method call.
Together with the main client,
Classification
,
this library offers its proxy version,
ClassificationParamsProxy
.
It is capable of memorizing some parameters and automatically use them
if you do not provide them again explicitly. Click on this proxy object above
to jump straight to its documentation and see, what parameters you can save
and reuse. You can supply them either through the constructor or set manually
as class attributes later.
Note
In order to save some parameters and not supply them later
as arguments, each of them was set as None
by default
in the proxy client. Please, keep in mind that:
- Firstly, the order of arguments in methods of the plain client and its proxy version can be different. If you prefer to do without named arguments in Python, be sure to double check what you are passing to a method.
- Secondly, if a required parameter is neither saved in proxy
nor passed to a method explicitly,
a
MissingParameterError
will be raised.
Python objects to simplify request body generation¶
In some methods, you will need to supply a request body. You can pass either a Python dictionary or use our predefined objects (which will be converted to dictionaries automatically right before an HTTP request). These objects are:
ClassificationTextDto
ClassificationDto
ExpressionParseAllRequestDto
ExpressionParseRequestDto
UserSettingsDto
UserCourseSettingsDto
StudentClassificationPreviewDto
The main advantage of using them is that your IDE should provide hints of parameters that should be provided and their data types. Once used in a request, the object can be modified in any way and used again.
Simplified operations¶
Even with the help of objects from the section above, building some very common request bodies can be tedious. Take a look at the following methods:
save_student_classifications_simple_s2t()
save_student_classifications_simple_t2s()
find_student_group_classifications_simple_s2t()
find_student_group_classifications_simple_t2s()
They help get/save students’ classifications in a simplified manner.
s2t
stands for the student to tasks format:
{
'student 1 username': {'task 1': 'grade',
'task 2': 'grade'},
'student 2 username': {'task 1': 'grade',
'task 4': 'grade'},
}
while t2s
corresponds to the task to students format:
{
'task 1': {'student 1 username': 'grade',
'student 2 username': 'grade'},
'task 2': {'student 5 username': 'grade',
'student 6 username': 'grade'},
}
Instead of building complex objects according to the API JSON schema, you can use the above methods with dictionaries of these formats.
Footnotes
[1] | This directory varies on different platforms. We use appdirs
library to get and create the correct location. On Windows, for instance,
it could look like this: C:\Users\<User>\AppData\Local\fit_classification\fit_classification\saved_token . |