Skip to content

resource

_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
44
45
46
47
48
49
50
51
52
53
54
55
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
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
@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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
@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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
@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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
@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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
@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
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
@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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
@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