feat(api): Attributes support regular check (#379)

feat(api): Attributes support regular check
This commit is contained in:
pycook 2024-01-12 13:05:37 +08:00 committed by GitHub
parent 4a4b9e6ef0
commit 6bc5c1516d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 3 deletions

View File

@ -5,10 +5,10 @@ from __future__ import unicode_literals
import copy import copy
import imp import imp
import os
import tempfile
import jinja2 import jinja2
import os
import re
import tempfile
from flask import abort from flask import abort
from flask import current_app from flask import current_app
from jinja2schema import infer 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: if type_attr and type_attr.is_required and not value and value != 0:
return abort(400, ErrFormat.attribute_value_required.format(attr.alias)) 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): def _validate(self, attr, value, value_table, ci=None, type_id=None, ci_id=None, type_attr=None):
ci = ci or {} ci = ci or {}
v = self._deserialize_value(attr.value_type, value) 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,): if v == "" and attr.value_type not in (ValueTypeEnum.TEXT,):
v = None v = None
if attr.re_check and value:
self._check_re(attr.re_check, value)
return v return v
@staticmethod @staticmethod

View File

@ -93,6 +93,8 @@ class Attribute(Model):
_choice_web_hook = db.Column('choice_web_hook', db.JSON) _choice_web_hook = db.Column('choice_web_hook', db.JSON)
choice_other = db.Column(db.JSON) choice_other = db.Column(db.JSON)
re_check = db.Column(db.Text)
uid = db.Column(db.Integer, index=True) uid = db.Column(db.Integer, index=True)
option = db.Column(db.JSON) option = db.Column(db.JSON)