fix(api): search sort misses cache (#251)

This commit is contained in:
pycook 2023-11-03 12:01:44 +08:00 committed by GitHub
parent 0172206c7c
commit 8ef4edb7d2
2 changed files with 13 additions and 6 deletions

View File

@ -336,9 +336,6 @@ class AttributeManager(object):
def update(self, _id, **kwargs): def update(self, _id, **kwargs):
attr = Attribute.get_by_id(_id) or abort(404, ErrFormat.attribute_not_found.format("id={}".format(_id))) attr = Attribute.get_by_id(_id) or abort(404, ErrFormat.attribute_not_found.format("id={}".format(_id)))
if not self._can_edit_attribute(attr):
return abort(403, ErrFormat.cannot_edit_attribute)
if kwargs.get("name"): if kwargs.get("name"):
other = Attribute.get_by(name=kwargs['name'], first=True, to_dict=False) other = Attribute.get_by(name=kwargs['name'], first=True, to_dict=False)
if other and other.id != attr.id: if other and other.id != attr.id:
@ -379,6 +376,14 @@ class AttributeManager(object):
kwargs.get('is_computed') and self.can_create_computed_attribute() kwargs.get('is_computed') and self.can_create_computed_attribute()
is_changed = False
for k in kwargs:
if kwargs[k] != getattr(attr, k, None):
is_changed = True
if is_changed and not self._can_edit_attribute(attr):
return abort(403, ErrFormat.cannot_edit_attribute)
attr.update(flush=True, filter_none=False, **kwargs) attr.update(flush=True, filter_none=False, **kwargs)
if is_choice and choice_value: if is_choice and choice_value:

View File

@ -45,8 +45,8 @@ from api.lib.perm.acl.acl import is_app_admin
from api.lib.perm.acl.acl import validate_permission from api.lib.perm.acl.acl import validate_permission
from api.lib.secrets.inner import InnerCrypt from api.lib.secrets.inner import InnerCrypt
from api.lib.secrets.vault import VaultClient from api.lib.secrets.vault import VaultClient
from api.lib.utils import handle_arg_list
from api.lib.utils import Lock from api.lib.utils import Lock
from api.lib.utils import handle_arg_list
from api.lib.webhook import webhook_request from api.lib.webhook import webhook_request
from api.models.cmdb import AttributeHistory from api.models.cmdb import AttributeHistory
from api.models.cmdb import AutoDiscoveryCI from api.models.cmdb import AutoDiscoveryCI
@ -639,6 +639,9 @@ class CIManager(object):
_fields.append(str(attr.id)) _fields.append(str(attr.id))
filter_fields_sql = "WHERE A.attr_id in ({0})".format(",".join(_fields)) filter_fields_sql = "WHERE A.attr_id in ({0})".format(",".join(_fields))
ci2pos = {int(_id): _pos for _pos, _id in enumerate(ci_ids)}
res = [None] * len(ci_ids)
ci_ids = ",".join(map(str, ci_ids)) ci_ids = ",".join(map(str, ci_ids))
if value_tables is None: if value_tables is None:
value_tables = ValueTypeMap.table_name.values() value_tables = ValueTypeMap.table_name.values()
@ -649,7 +652,6 @@ class CIManager(object):
# current_app.logger.debug(query_sql) # current_app.logger.debug(query_sql)
cis = db.session.execute(query_sql).fetchall() cis = db.session.execute(query_sql).fetchall()
ci_set = set() ci_set = set()
res = list()
ci_dict = dict() ci_dict = dict()
unique_id2obj = dict() unique_id2obj = dict()
excludes = excludes and set(excludes) excludes = excludes and set(excludes)
@ -669,7 +671,7 @@ class CIManager(object):
ci_dict["unique"] = unique_id2obj[ci_type.unique_id] and unique_id2obj[ci_type.unique_id].name ci_dict["unique"] = unique_id2obj[ci_type.unique_id] and unique_id2obj[ci_type.unique_id].name
ci_dict["unique_alias"] = unique_id2obj[ci_type.unique_id] and unique_id2obj[ci_type.unique_id].alias ci_dict["unique_alias"] = unique_id2obj[ci_type.unique_id] and unique_id2obj[ci_type.unique_id].alias
ci_set.add(ci_id) ci_set.add(ci_id)
res.append(ci_dict) res[ci2pos[ci_id]] = ci_dict
if ret_key == RetKey.NAME: if ret_key == RetKey.NAME:
attr_key = attr_name attr_key = attr_name