示例#1
0
文件: schema.py 项目: lab-grid/flow
    def resolve_all_users(
        root,
        info: ResolveInfo,

        # Search parameters
        archived: Optional[bool] = None,
        
        # Paging parameters
        page: Optional[int] = None,
        per_page: Optional[int] = None,

        # Currently unused
        before: Optional[str] = None,
        after: Optional[str] = None,
        first: Optional[int] = None,
        last: Optional[int] = None,
    ):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        pagination_dict = crud_get_users(
            item_to_dict=lambda user: add_ids(versioned_row_to_dict(user, user.current), user_id=user.id),

            enforcer=enforcer,
            db=db,
            current_user=current_user,

            archived=archived,

            page=page,
            per_page=per_page,
        )

        return UserConnection(
            page=pagination_dict.get('page', None),
            pageCount=pagination_dict.get('pageCount', None),
            edges=[
                UserConnection.Edge(
                    node=UserModel.parse_obj(r),
                    cursor=f"{pagination_dict.get('page', 1)}.{i}",
                )
                for i, r
                in enumerate(pagination_dict['users'])
            ],
            page_info=relay.PageInfo(
                has_next_page=pagination_dict.get('page', 1) < pagination_dict.get('pageCount', 1),
                has_previous_page=pagination_dict.get('page', 1) > pagination_dict.get('pageCount', 1),
                start_cursor="1.0",
                end_cursor=f"1.{len(pagination_dict['users'])}" if pagination_dict.get('pageCount', None) is None else f"{pagination_dict['pageCount']}.{len(pagination_dict['users'])}",
            ),
        )
示例#2
0
文件: schema.py 项目: lab-grid/flow
    def resolve_owner(root, info):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        return UserModel.parse_obj(
            crud_get_user(
                item_to_dict=lambda user: add_ids(versioned_row_to_dict(user, user.current), user_id=user.id),
                enforcer=enforcer,
                db=db,
                current_user=current_user,
                user_id=root.created_by,
            ),
        )
示例#3
0
文件: schema.py 项目: lab-grid/flow
    def resolve_samples(
        root,
        info: ResolveInfo,

        # Paging parameters
        page: Optional[int] = None,
        per_page: Optional[int] = None,
    ):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        pagination_dict = crud_get_run_samples(
            item_to_dict=lambda sample: versioned_row_to_dict(sample, sample.current),

            enforcer=enforcer,
            db=db,
            current_user=current_user,

            run_id=root.run_id,

            page=page,
            per_page=per_page,
        )

        return SampleConnection(
            page=pagination_dict.get('page', None),
            pageCount=pagination_dict.get('pageCount', None),
            edges=[
                SampleConnection.Edge(
                    node=SampleResult.parse_obj(r),
                    cursor=f"{pagination_dict.get('page', 1)}.{i}",
                )
                for i, r
                in enumerate(pagination_dict['samples'])
            ],
            page_info=relay.PageInfo(
                has_next_page=pagination_dict.get('page', 1) < pagination_dict.get('pageCount', 1),
                has_previous_page=pagination_dict.get('page', 1) > pagination_dict.get('pageCount', 1),
                start_cursor="1.0",
                end_cursor=f"1.{len(pagination_dict['samples'])}" if pagination_dict.get('pageCount', None) is None else f"{pagination_dict['pageCount']}.{len(pagination_dict['samples'])}",
            ),
        )
示例#4
0
文件: schema.py 项目: lab-grid/flow
    def resolve_user(root, info: ResolveInfo, id: str, version_id: Optional[int]):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        model_dict = crud_get_user(
            item_to_dict=lambda user: add_ids(versioned_row_to_dict(user, user.current), user_id=user.id),

            enforcer=enforcer,
            db=db,
            current_user=current_user,

            user_id=id,
            version_id=version_id,
        )
        return UserModel.parse_obj(model_dict)
示例#5
0
文件: schema.py 项目: lab-grid/flow
    def resolve_protocol(root, info: ResolveInfo, id: int, version_id: Optional[int]):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        model_dict = crud_get_protocol(
            item_to_dict=lambda protocol: add_ids(versioned_row_to_dict(protocol, protocol.current), protocol_id=protocol.id),

            enforcer=enforcer,
            db=db,
            current_user=current_user,

            protocol_id=id,
            version_id=version_id,
        )
        return ProtocolModel.parse_obj(model_dict)
示例#6
0
文件: schema.py 项目: lab-grid/flow
    def resolve_sample(root, info: ResolveInfo, sample_id: str, plate_id: str, run_version_id: int, protocol_version_id: int, version_id: Optional[int]):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        model_dict = crud_get_sample(
            item_to_dict=lambda sample: versioned_row_to_dict(sample, sample.current),

            enforcer=enforcer,
            db=db,
            current_user=current_user,

            sample_id=sample_id,
            plate_id=plate_id,
            run_version_id=run_version_id,
            protocol_version_id=protocol_version_id,
            version_id=version_id,
        )
        return SampleResult.parse_obj(model_dict)
示例#7
0
文件: schema.py 项目: lab-grid/flow
    def resolve_run(
        root,
        info: ResolveInfo,
        
        id: int,
        version_id: int,
    ):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        db = get_session(info)
        model_dict = crud_get_run(
            item_to_dict=lambda run: add_ids(versioned_row_to_dict(run, run.current), run_id=run.id),

            enforcer=enforcer,
            db=db,
            current_user=current_user,

            run_id=id,
            version_id=version_id,
        )
        return RunModel.parse_obj(model_dict)
示例#8
0
文件: schema.py 项目: lab-grid/flow
    def resolve_all_samples(
        root,
        info: ResolveInfo,

        # Search params
        protocol: Optional[int] = None,
        run: Optional[int] = None,
        plate: Optional[str] = None,
        reagent: Optional[str] = None,
        sample: Optional[str] = None,
        creator: Optional[str] = None,
        archived: Optional[bool] = None,

        # Paging parameters
        page: Optional[int] = None,
        per_page: Optional[int] = None,

        # Currently unused
        before: Optional[str] = None,
        after: Optional[str] = None,
        first: Optional[int] = None,
        last: Optional[int] = None,
    ):
        enforcer = get_enforcer_from_request(info.context['request'])
        current_user = get_current_user_from_request(info.context['request'])
        if current_user is None:
            raise HTTPException(401, "Unauthorized")

        pagination_dict = graphql_crud_get_samples(
            enforcer,
            current_user,
            info,
            protocol,
            run,
            plate,
            reagent,
            sample,
            creator,
            archived,
            page,
            per_page,
        )

        return SampleConnection(
            page=pagination_dict.get('page', None),
            pageCount=pagination_dict.get('pageCount', None),
            edges=[
                SampleConnection.Edge(
                    node=SampleResult.parse_obj(r),
                    cursor=f"{pagination_dict.get('page', 1)}.{i}",
                )
                for i, r
                in enumerate(pagination_dict['samples'])
            ],
            page_info=relay.PageInfo(
                has_next_page=pagination_dict.get('page', 1) < pagination_dict.get('pageCount', 1),
                has_previous_page=pagination_dict.get('page', 1) > pagination_dict.get('pageCount', 1),
                start_cursor="1.0",
                end_cursor=f"1.{len(pagination_dict['samples'])}" if pagination_dict.get('pageCount', None) is None else f"{pagination_dict['pageCount']}.{len(pagination_dict['samples'])}",
            ),
        )