|
26 | 26 | from questionpy_server.worker.runtime.connection import WorkerToServerConnection |
27 | 27 | from questionpy_server.worker.runtime.messages import ( |
28 | 28 | CreateQuestionFromOptions, |
| 29 | + DowngradeQuestion, |
29 | 30 | Exit, |
30 | 31 | GetOptionsForm, |
31 | 32 | GetQPyPackageManifest, |
@@ -117,6 +118,7 @@ def __init__(self, server_connection: WorkerToServerConnection): |
117 | 118 | GetOptionsForm.message_id: self.on_msg_get_options_form_definition, |
118 | 119 | CreateQuestionFromOptions.message_id: self.on_msg_create_question_from_options, |
119 | 120 | UpgradeQuestion.message_id: self.on_msg_upgrade_question, |
| 121 | + DowngradeQuestion.message_id: self.on_msg_downgrade_question, |
120 | 122 | SidegradeQuestion.message_id: self.on_msg_sidegrade_question, |
121 | 123 | StartAttempt.message_id: self.on_msg_start_attempt, |
122 | 124 | ViewAttempt.message_id: self.on_msg_view_attempt, |
@@ -269,6 +271,18 @@ def on_msg_upgrade_question(self, msg: UpgradeQuestion) -> UpgradeQuestion.Respo |
269 | 271 | migrated_question_state = self._question_type.upgrade(msg.question_state) |
270 | 272 | return UpgradeQuestion.Response(question_state=migrated_question_state) |
271 | 273 |
|
| 274 | + def on_msg_downgrade_question(self, msg: DowngradeQuestion) -> DowngradeQuestion.Response: |
| 275 | + if not self._env: |
| 276 | + self._raise_not_initialized(msg) |
| 277 | + if not self._question_type: |
| 278 | + self._raise_no_main_package_loaded(msg) |
| 279 | + |
| 280 | + with self._with_request_info(msg, msg.request_info): |
| 281 | + migrated_question_state = self._question_type.downgrade( |
| 282 | + msg.question_state, msg.target_question_state_version |
| 283 | + ) |
| 284 | + return DowngradeQuestion.Response(question_state=migrated_question_state) |
| 285 | + |
272 | 286 | def on_msg_sidegrade_question(self, msg: SidegradeQuestion) -> SidegradeQuestion.Response: |
273 | 287 | if not self._env: |
274 | 288 | self._raise_not_initialized(msg) |
|
0 commit comments