mirror of
https://github.com/clearml/clearml-server
synced 2025-06-26 23:15:47 +00:00
Fix bad field values might cause ugly server exception to be returned
This commit is contained in:
parent
ae4c33fa0e
commit
54ce6c34c6
@ -20,7 +20,7 @@ from dateutil.parser import parse as parse_datetime
|
|||||||
from mongoengine import Q, Document, ListField, StringField, IntField
|
from mongoengine import Q, Document, ListField, StringField, IntField
|
||||||
from pymongo.command_cursor import CommandCursor
|
from pymongo.command_cursor import CommandCursor
|
||||||
|
|
||||||
from apiserver.apierrors import errors
|
from apiserver.apierrors import errors, APIError
|
||||||
from apiserver.apierrors.base import BaseError
|
from apiserver.apierrors.base import BaseError
|
||||||
from apiserver.bll.redis_cache_manager import RedisCacheManager
|
from apiserver.bll.redis_cache_manager import RedisCacheManager
|
||||||
from apiserver.config_repo import config
|
from apiserver.config_repo import config
|
||||||
@ -148,13 +148,15 @@ class GetMixin(PropsMixin):
|
|||||||
"or": (default_mongo_op, True),
|
"or": (default_mongo_op, True),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, legacy=False):
|
def __init__(self, field, legacy=False):
|
||||||
|
self._field = field
|
||||||
self._current_op = None
|
self._current_op = None
|
||||||
self._sticky = False
|
self._sticky = False
|
||||||
self._support_legacy = legacy
|
self._support_legacy = legacy
|
||||||
self.allow_empty = False
|
self.allow_empty = False
|
||||||
|
|
||||||
def _get_op(self, v: str, translate: bool = False) -> Optional[str]:
|
def _get_op(self, v: str, translate: bool = False) -> Optional[str]:
|
||||||
|
try:
|
||||||
op = (
|
op = (
|
||||||
v[len(self.op_prefix) :] if v and v.startswith(self.op_prefix) else None
|
v[len(self.op_prefix) :] if v and v.startswith(self.op_prefix) else None
|
||||||
)
|
)
|
||||||
@ -162,6 +164,10 @@ class GetMixin(PropsMixin):
|
|||||||
tup = self._ops.get(op, None)
|
tup = self._ops.get(op, None)
|
||||||
return tup[0] if tup else None
|
return tup[0] if tup else None
|
||||||
return op
|
return op
|
||||||
|
except AttributeError:
|
||||||
|
raise errors.bad_request.FieldsValueError(
|
||||||
|
"invalid value type, string expected", field=self._field, value=str(v)
|
||||||
|
)
|
||||||
|
|
||||||
def _key(self, v) -> Optional[Union[str, bool]]:
|
def _key(self, v) -> Optional[Union[str, bool]]:
|
||||||
if v is None:
|
if v is None:
|
||||||
@ -347,6 +353,9 @@ class GetMixin(PropsMixin):
|
|||||||
parameters_options = parameters_options or cls.get_all_query_options
|
parameters_options = parameters_options or cls.get_all_query_options
|
||||||
dict_query = {}
|
dict_query = {}
|
||||||
query = RegexQ()
|
query = RegexQ()
|
||||||
|
field = None
|
||||||
|
# noinspection PyBroadException
|
||||||
|
try:
|
||||||
if parameters:
|
if parameters:
|
||||||
parameters = {
|
parameters = {
|
||||||
k: cls._get_fixed_field_value(k, v) for k, v in parameters.items()
|
k: cls._get_fixed_field_value(k, v) for k, v in parameters.items()
|
||||||
@ -438,6 +447,12 @@ class GetMixin(PropsMixin):
|
|||||||
RegexQ(),
|
RegexQ(),
|
||||||
)
|
)
|
||||||
query = query & q
|
query = query & q
|
||||||
|
except APIError:
|
||||||
|
raise
|
||||||
|
except Exception as ex:
|
||||||
|
raise errors.bad_request.FieldsValueError(
|
||||||
|
"failed parsing query field", error=str(ex), **({"field": field} if field else {})
|
||||||
|
)
|
||||||
|
|
||||||
return query & RegexQ(**dict_query)
|
return query & RegexQ(**dict_query)
|
||||||
|
|
||||||
@ -486,7 +501,7 @@ class GetMixin(PropsMixin):
|
|||||||
if not isinstance(data, (list, tuple)):
|
if not isinstance(data, (list, tuple)):
|
||||||
data = [data]
|
data = [data]
|
||||||
|
|
||||||
helper = cls.ListFieldBucketHelper(legacy=True)
|
helper = cls.ListFieldBucketHelper(field, legacy=True)
|
||||||
global_op = helper.get_global_op(data)
|
global_op = helper.get_global_op(data)
|
||||||
actions = helper.get_actions(data)
|
actions = helper.get_actions(data)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user