コード例 #1
0
    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()
コード例 #2
0
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()
コード例 #3
0
    async def post(self) -> Response:
        """
        reload all packages from repository. No parameters supported here
        :return: 204 on success
        """
        self.service.load()

        return HTTPNoContent()
コード例 #4
0
    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()
コード例 #5
0
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)
コード例 #6
0
ファイル: ahriman.py プロジェクト: arcan1s/ahriman
    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()
コード例 #7
0
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()