Skip to content

Resource

FUNCTION DESCRIPTION
delete_resource

Delete single Resource.

get_resource

Query single Resource.

get_resource_list

Query Resource table.

get_resource_profiles

Query Profiles for single Resource.

post_profile

Create new Profile.

post_resource

Create new Resource.

put_resource

Overwrite a single Resource.

Attributes

Classes

Functions:

_check_type_match_or_422(new_resource)

Handle case where resource.type != FRACTAL_RUNNER_BACKEND

Source code in fractal_server/app/routes/admin/v2/resource.py
def _check_type_match_or_422(new_resource: ResourceCreate) -> None:
    """
    Handle case where `resource.type != FRACTAL_RUNNER_BACKEND`
    """
    settings = Inject(get_settings)
    if settings.FRACTAL_RUNNER_BACKEND != new_resource.type:
        raise HTTPException(
            status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
            detail=(
                f"{settings.FRACTAL_RUNNER_BACKEND=} != {new_resource.type=}"
            ),
        )

delete_resource(resource_id, superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Delete single Resource.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.delete("/{resource_id}/", status_code=204)
async def delete_resource(
    resource_id: int,
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Response:
    """
    Delete single `Resource`.
    """
    resource = await _get_resource_or_404(resource_id=resource_id, db=db)
    try:
        await db.delete(resource)
        await db.commit()
        return Response(status_code=status.HTTP_204_NO_CONTENT)
    except IntegrityError as e:
        await db.rollback()
        raise HTTPException(
            status_code=status.HTTP_422_UNPROCESSABLE_CONTENT,
            detail=(
                "IntegrityError for resource deletion. "
                f"Original error:\n{str(e)}"
            ),
        )

get_resource(resource_id, superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Query single Resource.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.get(
    "/{resource_id}/",
    response_model=ResourceRead,
    status_code=200,
)
async def get_resource(
    resource_id: int,
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Resource:
    """
    Query single `Resource`.
    """
    resource = await _get_resource_or_404(resource_id=resource_id, db=db)

    return resource

get_resource_list(superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Query Resource table.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.get(
    "/",
    response_model=list[ResourceRead],
    status_code=200,
)
async def get_resource_list(
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Sequence[Resource]:
    """
    Query `Resource` table.
    """

    stm = select(Resource).order_by(Resource.id)
    res = await db.execute(stm)
    resource_list = res.scalars().all()

    return resource_list

get_resource_profiles(resource_id, superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Query Profiles for single Resource.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.get(
    "/{resource_id}/profile/",
    response_model=list[ProfileRead],
    status_code=200,
)
async def get_resource_profiles(
    resource_id: int,
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Sequence[Profile]:
    """
    Query `Profile`s for single `Resource`.
    """
    await _get_resource_or_404(resource_id=resource_id, db=db)

    res = await db.execute(
        select(Profile)
        .where(Profile.resource_id == resource_id)
        .order_by(Profile.id)
    )
    profiles = res.scalars().all()

    return profiles

post_profile(resource_id, profile_create, superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Create new Profile.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.post(
    "/{resource_id}/profile/",
    response_model=ProfileRead,
    status_code=201,
)
async def post_profile(
    resource_id: int,
    profile_create: ProfileCreate,
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Profile:
    """
    Create new `Profile`.
    """
    resource = await _get_resource_or_404(resource_id=resource_id, db=db)

    _check_resource_type_match_or_422(
        resource=resource,
        new_profile=profile_create,
    )
    await _check_profile_name(name=profile_create.name, db=db)

    profile = Profile(
        resource_id=resource_id,
        **profile_create.model_dump(),
    )

    db.add(profile)
    await db.commit()
    await db.refresh(profile)
    return profile

post_resource(resource_create, superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Create new Resource.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.post(
    "/",
    response_model=ResourceRead,
    status_code=201,
)
async def post_resource(
    resource_create: ResourceCreate,
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Resource:
    """
    Create new `Resource`.
    """

    # Handle case where type!=FRACTAL_RUNNER_BACKEND
    _check_type_match_or_422(resource_create)

    await _check_resource_name(name=resource_create.name, db=db)

    resource = Resource(**resource_create.model_dump())
    db.add(resource)
    await db.commit()
    await db.refresh(resource)

    return resource

put_resource(resource_id, resource_update, superuser=Depends(current_superuser_act), db=Depends(get_async_db)) async

Overwrite a single Resource.

Source code in fractal_server/app/routes/admin/v2/resource.py
@router.put(
    "/{resource_id}/",
    response_model=ResourceRead,
    status_code=200,
)
async def put_resource(
    resource_id: int,
    resource_update: ResourceCreate,
    superuser: UserOAuth = Depends(current_superuser_act),
    db: AsyncSession = Depends(get_async_db),
) -> Resource:
    """
    Overwrite a single `Resource`.
    """

    # Handle case where type!=FRACTAL_RUNNER_BACKEND
    _check_type_match_or_422(resource_update)

    resource = await _get_resource_or_404(resource_id=resource_id, db=db)

    # Handle non-unique resource names
    if resource_update.name and resource_update.name != resource.name:
        await _check_resource_name(name=resource_update.name, db=db)

    # Prepare new db object
    for key, value in resource_update.model_dump().items():
        setattr(resource, key, value)

    await db.commit()
    await db.refresh(resource)
    return resource