99
1010from questionpy_common .environment import RequestUser
1111from questionpy_server .api .models import QuestionCreateArguments , QuestionEditFormResponse , RequestBaseData
12- from questionpy_server .decorators import ensure_package_and_question_state_exist
12+ from questionpy_server .app import QPyServer
13+ from questionpy_server .decorators import ensure_package , ensure_required_parts
1314from questionpy_server .package import Package
1415from questionpy_server .web import json_response
1516from questionpy_server .worker .runtime .package_location import ZipPackageLocation
1617
1718if TYPE_CHECKING :
18- from questionpy_server .app import QPyServer
1919 from questionpy_server .worker .worker import Worker
2020
2121package_routes = web .RouteTableDef ()
2222
2323
2424@package_routes .get ("/packages" )
2525async def get_packages (request : web .Request ) -> web .Response :
26- qpyserver : QPyServer = request .app ["qpy_server_app" ]
26+ qpyserver = request .app [QPyServer . APP_KEY ]
2727
2828 packages = qpyserver .package_collection .get_packages ()
2929 data = [package .get_info () for package in packages ]
@@ -33,22 +33,22 @@ async def get_packages(request: web.Request) -> web.Response:
3333
3434@package_routes .get (r"/packages/{package_hash:\w+}" )
3535async def get_package (request : web .Request ) -> web .Response :
36- qpyserver : QPyServer = request .app ["qpy_server_app" ]
36+ qpyserver = request .app [QPyServer . APP_KEY ]
3737
38- try :
39- package = qpyserver . package_collection . get ( request . match_info [ "package_hash" ])
40- return json_response ( data = package . get_info ())
41- except FileNotFoundError as error :
42- raise HTTPNotFound from error
38+ package = qpyserver . package_collection . get ( request . match_info [ "package_hash" ])
39+ if not package :
40+ raise HTTPNotFound
41+
42+ return json_response ( data = package . get_info ())
4343
4444
4545@package_routes .post (r"/packages/{package_hash:\w+}/options" ) # type: ignore[arg-type]
46- @ensure_package_and_question_state_exist
46+ @ensure_required_parts
4747async def post_options (
48- request : web .Request , package : Package , question_state : bytes | None , data : RequestBaseData
48+ request : web .Request , package : Package , data : RequestBaseData , question_state : bytes | None = None
4949) -> web .Response :
5050 """Get the options form definition that allow a question creator to customize a question."""
51- qpyserver : QPyServer = request .app ["qpy_server_app" ]
51+ qpyserver = request .app [QPyServer . APP_KEY ]
5252
5353 package_path = await package .get_path ()
5454 worker : Worker
@@ -61,11 +61,11 @@ async def post_options(
6161
6262
6363@package_routes .post (r"/packages/{package_hash:\w+}/question" ) # type: ignore[arg-type]
64- @ensure_package_and_question_state_exist
64+ @ensure_required_parts
6565async def post_question (
6666 request : web .Request , data : QuestionCreateArguments , package : Package , question_state : bytes | None = None
6767) -> web .Response :
68- qpyserver : QPyServer = request .app ["qpy_server_app" ]
68+ qpyserver = request .app [QPyServer . APP_KEY ]
6969
7070 package_path = await package .get_path ()
7171 worker : Worker
@@ -84,7 +84,7 @@ async def post_question_migrate(_request: web.Request) -> web.Response:
8484
8585
8686@package_routes .post (r"/package-extract-info" ) # type: ignore[arg-type]
87- @ensure_package_and_question_state_exist
87+ @ensure_package
8888async def package_extract_info (_request : web .Request , package : Package ) -> web .Response :
8989 """Get package information."""
9090 return json_response (data = package .get_info (), status = 201 )
0 commit comments