diff --git a/cmdb-api/api/lib/cmdb/attribute.py b/cmdb-api/api/lib/cmdb/attribute.py index 2049b74d..2fc9be63 100644 --- a/cmdb-api/api/lib/cmdb/attribute.py +++ b/cmdb-api/api/lib/cmdb/attribute.py @@ -108,7 +108,8 @@ def get_choice_values(cls, attr_id, value_type, choice_web_hook, choice_other, return [] choice_values = choice_table.get_by(fl=["value", "option"], attr_id=attr_id) - return [[ValueTypeMap.serialize[value_type](choice_value['value']), choice_value['option']] + return [[ValueTypeMap.serialize[value_type](choice_value['value']), choice_value['option'] or + {"label": ValueTypeMap.serialize[value_type](choice_value['value'])}] for choice_value in choice_values] @staticmethod @@ -140,7 +141,7 @@ def get_enum_map(cls, _attr_id, _attr=None): attr = AttributeCache.get(_attr_id) if _attr_id else _attr if attr and attr.is_choice: choice_values = cls.get_choice_values(attr.id, attr.value_type, None, None) - return {i[0]: i[1]['label'] for i in choice_values if i[1].get('label')} + return {i[0]: i[1]['label'] for i in choice_values if i[1] and i[1].get('label')} return {} diff --git a/cmdb-api/api/lib/cmdb/ci_type.py b/cmdb-api/api/lib/cmdb/ci_type.py index 7cb29a78..d93dfb65 100644 --- a/cmdb-api/api/lib/cmdb/ci_type.py +++ b/cmdb-api/api/lib/cmdb/ci_type.py @@ -524,7 +524,14 @@ def get_all_attributes(type_id): for _type_id in parent_ids + [type_id]: result.extend(CITypeAttributesCache.get2(_type_id)) - return result + attr_ids = set() + result2 = [] + for i in result: + if i[1].id not in attr_ids: + result2.append(i) + attr_ids.add(i[1].id) + + return result2 @classmethod def get_attr_names_by_type_id(cls, type_id): diff --git a/cmdb-api/api/lib/cmdb/preference.py b/cmdb-api/api/lib/cmdb/preference.py index de01a5b0..7d9aad58 100644 --- a/cmdb-api/api/lib/cmdb/preference.py +++ b/cmdb-api/api/lib/cmdb/preference.py @@ -384,14 +384,22 @@ def get_search_option(**kwargs): def add_search_option(**kwargs): kwargs['uid'] = current_user.uid - existed = PreferenceSearchOption.get_by(uid=current_user.uid, - name=kwargs.get('name'), - prv_id=kwargs.get('prv_id'), - ptv_id=kwargs.get('ptv_id'), - type_id=kwargs.get('type_id'), - ) - if existed: - return abort(400, ErrFormat.preference_search_option_exists) + if kwargs['name'] in ('__recent__', '__favor__'): + if kwargs['name'] == '__recent__': + for i in PreferenceSearchOption.get_by( + only_query=True, name=kwargs['name'], uid=current_user.uid).order_by( + PreferenceSearchOption.id.desc()).offset(20): + i.delete() + + else: + existed = PreferenceSearchOption.get_by(uid=current_user.uid, + name=kwargs.get('name'), + prv_id=kwargs.get('prv_id'), + ptv_id=kwargs.get('ptv_id'), + type_id=kwargs.get('type_id'), + ) + if existed: + return abort(400, ErrFormat.preference_search_option_exists) return PreferenceSearchOption.create(**kwargs)