valid_serializers.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # coding=utf-8
  2. """
  3. @project: MaxKB
  4. @Author:虎
  5. @file: valid_serializers.py
  6. @date:2024/7/8 18:00
  7. @desc:
  8. """
  9. import re
  10. from django.core import validators
  11. from django.core.cache import cache
  12. from django.db.models import QuerySet
  13. from rest_framework import serializers
  14. from application.models import Application
  15. from common.constants.cache_version import Cache_Version
  16. from common.exception.app_exception import AppApiException
  17. from knowledge.models import Knowledge
  18. from users.models import User
  19. from django.utils.translation import gettext_lazy as _
  20. model_message_dict = {
  21. 'dataset': {'model': Knowledge, 'count': 50,
  22. 'message': _(
  23. 'The community version supports up to 50 knowledge bases. If you need more knowledge bases, please contact us (https://fit2cloud.com/).')},
  24. 'application': {'model': Application, 'count': 5,
  25. 'message': _(
  26. 'The community version supports up to 5 applications. If you need more applications, please contact us (https://fit2cloud.com/).')},
  27. 'user': {'model': User, 'count': 2,
  28. 'message': _(
  29. 'The community version supports up to 2 users. If you need more users, please contact us (https://fit2cloud.com/).')}
  30. }
  31. class ValidSerializer(serializers.Serializer):
  32. valid_type = serializers.CharField(required=True, label=_('type'), validators=[
  33. validators.RegexValidator(regex=re.compile("^application|knowledge|user$"),
  34. message="类型只支持:application|knowledge|user", code=500)
  35. ])
  36. valid_count = serializers.IntegerField(required=True, label=_('check quantity'))
  37. def valid(self, is_valid=True):
  38. if is_valid:
  39. self.is_valid(raise_exception=True)
  40. model_value = model_message_dict.get(self.data.get('valid_type'))
  41. license_is_valid = cache.get(Cache_Version.SYSTEM.get_key(key='license_is_valid'),
  42. version=Cache_Version.SYSTEM.get_version())
  43. is_license_valid = license_is_valid if license_is_valid is not None else False
  44. if not is_license_valid:
  45. if self.data.get('valid_count') != model_value.get('count'):
  46. raise AppApiException(400, model_value.get('message'))
  47. if QuerySet(
  48. model_value.get('model')).count() >= model_value.get('count'):
  49. raise AppApiException(400, model_value.get('message'))
  50. return True