mirror of
https://github.com/clearml/clearml-server
synced 2025-05-25 13:35:36 +00:00
Do not return any mongodb instructions as a result of task update operations
This commit is contained in:
parent
0496582d96
commit
cb9812caee
@ -4,6 +4,7 @@ from typing import Sequence
|
|||||||
import attr
|
import attr
|
||||||
import six
|
import six
|
||||||
from mongoengine import Q
|
from mongoengine import Q
|
||||||
|
from mongoengine.base import UPDATE_OPERATORS
|
||||||
|
|
||||||
from apiserver.apierrors import errors
|
from apiserver.apierrors import errors
|
||||||
from apiserver.bll.util import update_project_time
|
from apiserver.bll.util import update_project_time
|
||||||
@ -78,8 +79,16 @@ class ChangeStatusRequest(object):
|
|||||||
|
|
||||||
update_project_time(project_id)
|
update_project_time(project_id)
|
||||||
|
|
||||||
# make sure that _raw_ queries are not returned back to the client
|
def is_mongo_operator(field: str) -> bool:
|
||||||
fields.pop("__raw__", None)
|
head, _, tail = field.partition("__")
|
||||||
|
return tail and (head in UPDATE_OPERATORS)
|
||||||
|
|
||||||
|
# make sure to not return _raw_ queries or any of the update operators
|
||||||
|
fields = {
|
||||||
|
key: value
|
||||||
|
for key, value in fields.items()
|
||||||
|
if not (key == "__raw__" or is_mongo_operator(key))
|
||||||
|
}
|
||||||
|
|
||||||
return dict(updated=updated, fields=fields)
|
return dict(updated=updated, fields=fields)
|
||||||
|
|
||||||
|
@ -1027,14 +1027,7 @@ def reset(call: APICall, company_id, request: ResetRequest):
|
|||||||
clear_all=request.clear_all,
|
clear_all=request.clear_all,
|
||||||
delete_external_artifacts=request.delete_external_artifacts,
|
delete_external_artifacts=request.delete_external_artifacts,
|
||||||
)
|
)
|
||||||
|
res = ResetResponse(**updates, **attr.asdict(cleanup_res), dequeued=dequeued)
|
||||||
res = ResetResponse(**updates, dequeued=dequeued)
|
|
||||||
# do not return artifacts since they are not serializable
|
|
||||||
res.fields.pop("execution.artifacts", None)
|
|
||||||
|
|
||||||
for key, value in attr.asdict(cleanup_res).items():
|
|
||||||
setattr(res, key, value)
|
|
||||||
|
|
||||||
call.result.data_model = res
|
call.result.data_model = res
|
||||||
|
|
||||||
|
|
||||||
@ -1058,23 +1051,19 @@ def reset_many(call: APICall, company_id, request: ResetManyRequest):
|
|||||||
ids=request.ids,
|
ids=request.ids,
|
||||||
)
|
)
|
||||||
|
|
||||||
def clean_res(res: dict) -> dict:
|
succeeded = []
|
||||||
# do not return artifacts since they are not serializable
|
for _id, (dequeued, cleanup, res) in results:
|
||||||
fields = res.get("fields")
|
succeeded.append(
|
||||||
if fields:
|
|
||||||
fields.pop("execution.artifacts", None)
|
|
||||||
return res
|
|
||||||
|
|
||||||
call.result.data_model = ResetManyResponse(
|
|
||||||
succeeded=[
|
|
||||||
ResetBatchItem(
|
ResetBatchItem(
|
||||||
id=_id,
|
id=_id,
|
||||||
dequeued=bool(dequeued.get("removed")) if dequeued else False,
|
dequeued=bool(dequeued.get("removed")) if dequeued else False,
|
||||||
**attr.asdict(cleanup),
|
**attr.asdict(cleanup),
|
||||||
**clean_res(res),
|
**res,
|
||||||
)
|
)
|
||||||
for _id, (dequeued, cleanup, res) in results
|
)
|
||||||
],
|
|
||||||
|
call.result.data_model = ResetManyResponse(
|
||||||
|
succeeded=succeeded,
|
||||||
failed=failures,
|
failed=failures,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user