async def post(self) -> Response: """ update package build status JSON body must be supplied, the following model is used: { "status": "unknown", # package build status string, must be valid `BuildStatusEnum` "package": {} # package body (use `dataclasses.asdict` to generate one), optional. # Must be supplied in case if package base is unknown } :return: 204 on success """ base = self.request.match_info["package"] data = await self.request.json() try: package = Package.from_json( data["package"]) if "package" in data else None status = BuildStatusEnum(data["status"]) except Exception as e: raise HTTPBadRequest(text=str(e)) try: self.service.update(base, status, package) except UnknownPackage: raise HTTPBadRequest( text=f"Package {base} is unknown, but no package body set") return HTTPNoContent()
async def users_put(request: Request) -> Response: session_maker = request.app['db_session_manager'] if not request.headers['X-Login'] == request.match_info['login']: return HTTPForbidden() session: Session = session_maker() try: data = await request.json() if data: user = session.query(Users).filter_by( login=request.match_info['login']).first() if not user: return HTTPNotFound() user_put = UsersSchema().load(data, session=session, partial=True) user.first_name = user_put.first_name user.last_name = user_put.last_name user.email = user_put.email user.phone = user_put.phone session.commit() return HTTPNoContent(headers={'Location': f"/users/{user.login}"}) else: session.close() return HTTPBadRequest() except Exception: session.rollback() raise finally: session.close()
async def post(self) -> Response: """ reload all packages from repository. No parameters supported here :return: 204 on success """ self.service.load() return HTTPNoContent()
async def delete(self) -> Response: """ delete package base from status page :return: 204 on success """ base = self.request.match_info["package"] self.service.remove(base) return HTTPNoContent()
async def cors_handler(request: Request, handler: RequestHandler) -> StreamResponse: if request.method == METH_OPTIONS: return HTTPNoContent( headers={ # allow origin of request or all if none is defined. "Access-Control-Allow-Origin": request.headers.get("origin", "*"), # allow the requested method or all if none is defined. "Access-Control-Allow-Methods": request.headers.get("access-control-request-method", "*"), # allow the requested header names or all if none is defined. "Access-Control-Allow-Headers": request.headers.get("access-control-request-headers", "*"), # allow the client to cache this result "Access-Control-Max-Age": "86400", # allow caching for one day } ) else: return await handler(request)
async def post(self) -> Response: """ update service status JSON body must be supplied, the following model is used: { "status": "unknown", # service status string, must be valid `BuildStatusEnum` } :return: 204 on success """ data = await self.request.json() try: status = BuildStatusEnum(data["status"]) except Exception as e: raise HTTPBadRequest(text=str(e)) self.service.update_self(status) return HTTPNoContent()
async def users_delete(request: Request) -> Response: session_maker = request.app['db_session_manager'] if not request.headers['X-Login'] == request.match_info['login']: return HTTPForbidden() session: Session = session_maker() try: user = session.query(Users).filter_by( login=request.match_info['login']).first() if not user: session.close() return HTTPNotFound() session.delete(user) session.commit() return HTTPNoContent() except Exception: session.rollback() raise finally: session.close()