From 8792499f71001abd2ad545cb254e4fe30d184588 Mon Sep 17 00:00:00 2001 From: pycook Date: Fri, 12 Jan 2024 13:03:36 +0800 Subject: [PATCH] feat(api): Attributes support regular check --- cmdb-api/api/lib/cmdb/value.py | 14 +++++++++++--- cmdb-api/api/models/cmdb.py | 2 ++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/cmdb-api/api/lib/cmdb/value.py b/cmdb-api/api/lib/cmdb/value.py index 34cebc4..681b4a6 100644 --- a/cmdb-api/api/lib/cmdb/value.py +++ b/cmdb-api/api/lib/cmdb/value.py @@ -5,10 +5,10 @@ from __future__ import unicode_literals import copy import imp -import os -import tempfile - import jinja2 +import os +import re +import tempfile from flask import abort from flask import current_app from jinja2schema import infer @@ -117,6 +117,11 @@ class AttributeValueManager(object): if type_attr and type_attr.is_required and not value and value != 0: return abort(400, ErrFormat.attribute_value_required.format(attr.alias)) + @staticmethod + def _check_re(expr, value): + if not re.compile(expr).match(str(value)): + return abort(400, ErrFormat.attribute_value_invalid.format(value)) + def _validate(self, attr, value, value_table, ci=None, type_id=None, ci_id=None, type_attr=None): ci = ci or {} v = self._deserialize_value(attr.value_type, value) @@ -130,6 +135,9 @@ class AttributeValueManager(object): if v == "" and attr.value_type not in (ValueTypeEnum.TEXT,): v = None + if attr.re_check and value: + self._check_re(attr.re_check, value) + return v @staticmethod diff --git a/cmdb-api/api/models/cmdb.py b/cmdb-api/api/models/cmdb.py index 1619ac1..ed33788 100644 --- a/cmdb-api/api/models/cmdb.py +++ b/cmdb-api/api/models/cmdb.py @@ -93,6 +93,8 @@ class Attribute(Model): _choice_web_hook = db.Column('choice_web_hook', db.JSON) choice_other = db.Column(db.JSON) + re_check = db.Column(db.Text) + uid = db.Column(db.Integer, index=True) option = db.Column(db.JSON)