|
|
# coding=utf-8
|
|
|
"""
|
|
|
@project: MaxKB
|
|
|
@Author:虎
|
|
|
@file: valid_serializers.py
|
|
|
@date:2024/7/8 18:00
|
|
|
@desc:
|
|
|
"""
|
|
|
import re
|
|
|
|
|
|
from django.core import validators
|
|
|
from django.db.models import QuerySet
|
|
|
from rest_framework import serializers
|
|
|
|
|
|
from application.models import Application
|
|
|
from common.exception.app_exception import AppApiException
|
|
|
from common.models.db_model_manage import DBModelManage
|
|
|
from common.util.field_message import ErrMessage
|
|
|
from dataset.models import DataSet
|
|
|
from users.models import User
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
|
|
model_message_dict = {
|
|
|
'dataset': {'model': DataSet, 'count': 5000,
|
|
|
'message': _(
|
|
|
'The community version supports up to 5000 knowledge bases. If you need more knowledge bases, please contact us (https://fit2cloud.com/).')},
|
|
|
'application': {'model': Application, 'count': 5000,
|
|
|
'message': _(
|
|
|
'The community version supports up to 5000 applications. If you need more applications, please contact us (https://fit2cloud.com/).')},
|
|
|
'user': {'model': User, 'count': 100,
|
|
|
'message': _(
|
|
|
'The community version supports up to 100 users. If you need more users, please contact us (https://fit2cloud.com/).')}
|
|
|
}
|
|
|
|
|
|
|
|
|
class ValidSerializer(serializers.Serializer):
|
|
|
valid_type = serializers.CharField(required=True, error_messages=ErrMessage.char(_('type')), validators=[
|
|
|
validators.RegexValidator(regex=re.compile("^application|dataset|user$"),
|
|
|
message="类型只支持:application|dataset|user", code=500)
|
|
|
])
|
|
|
valid_count = serializers.IntegerField(required=True, error_messages=ErrMessage.integer(_('check quantity')))
|
|
|
|
|
|
def valid(self, is_valid=True):
|
|
|
if is_valid:
|
|
|
self.is_valid(raise_exception=True)
|
|
|
model_value = model_message_dict.get(self.data.get('valid_type'))
|
|
|
xpack_cache = DBModelManage.get_model('xpack_cache')
|
|
|
is_license_valid = xpack_cache.get('XPACK_LICENSE_IS_VALID', False) if xpack_cache is not None else False
|
|
|
if not is_license_valid:
|
|
|
if self.data.get('valid_count') != model_value.get('count'):
|
|
|
raise AppApiException(400, model_value.get('message'))
|
|
|
if QuerySet(
|
|
|
model_value.get('model')).count() >= model_value.get('count'):
|
|
|
raise AppApiException(400, model_value.get('message'))
|
|
|
return True
|