NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

formValidators.py (5543B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\forms\formValidators.py
      2 from localization import GetByLabel
      3 from localization.util import IsTextInConciseLanguage, IsSessionLanguageConcise
      4 from math import ceil
      5 import re
      6 from structures import UPKEEP_STATE_LOW_POWER, UPKEEP_STATE_ABANDONED
      7 
      8 class BaseValidator(object):
      9     default_label = None
     10 
     11     def __init__(self, label = None):
     12         self.label = label
     13 
     14     def _get_invalid_message(self, value):
     15         return GetByLabel(self.label)
     16 
     17     def get_invalid_reason(self, value):
     18         raise NotImplementedError
     19 
     20 
     21 class InputRequired(BaseValidator):
     22 
     23     def __init__(self, label = 'UI/Control/Form/InputRequired'):
     24         super(InputRequired, self).__init__(label)
     25 
     26     def get_invalid_reason(self, value):
     27         if not value:
     28             return self._get_invalid_message(value)
     29 
     30 
     31 class Length(BaseValidator):
     32 
     33     def __init__(self, minLength = None, maxLength = None, label = None):
     34         super(Length, self).__init__(label)
     35         if minLength is None and maxLength is None:
     36             raise RuntimeError('Either min or max length must be provided')
     37         self._min_length_standard = minLength
     38         self._max_length_standard = maxLength
     39         self._min_length_concise = max(1, int(ceil(float(minLength) / 2))) if minLength else minLength
     40         self._max_length_concise = maxLength
     41         if IsSessionLanguageConcise():
     42             self.min_length = self._min_length_concise
     43             self.max_length = self._max_length_concise
     44         else:
     45             self.min_length = self._min_length_standard
     46             self.max_length = self._max_length_standard
     47 
     48     def _get_min_length_value(self, value):
     49         if IsTextInConciseLanguage(languageID=None, textString=value):
     50             return self._min_length_concise
     51         else:
     52             return self._min_length_standard
     53 
     54     def _get_max_length_value(self, value):
     55         if IsTextInConciseLanguage(languageID=None, textString=value):
     56             return self._max_length_concise
     57         else:
     58             return self._max_length_standard
     59 
     60     def _get_invalid_message(self, value):
     61         label = self._get_label()
     62         length = len(value) if value else 0
     63         kwargs = {'labelNameAndPath': label,
     64          'length': length}
     65         min_length_for_message = self._get_min_length_value(value)
     66         if min_length_for_message is not None:
     67             kwargs['minLength'] = min_length_for_message
     68         max_length_for_message = self._get_max_length_value(value)
     69         if max_length_for_message is not None:
     70             kwargs['maxLength'] = max_length_for_message
     71         return GetByLabel(**kwargs)
     72 
     73     def _get_label(self):
     74         if self.label:
     75             return self.label
     76         if self.min_length and self.max_length:
     77             return 'UI/Control/Form/LengthBetweenRequired'
     78         if self.min_length:
     79             return 'UI/Control/Form/LengthAboveRequired'
     80         if self.max_length:
     81             return 'UI/Control/Form/LengthBelowRequired'
     82 
     83     def get_invalid_reason(self, value):
     84         length = len(value) if value else 0
     85         min_length_for_message = self._get_min_length_value(value)
     86         if min_length_for_message is not None and length < min_length_for_message:
     87             return self._get_invalid_message(value)
     88         max_length_for_message = self._get_max_length_value(value)
     89         if max_length_for_message is not None and length > max_length_for_message:
     90             return self._get_invalid_message(value)
     91 
     92 
     93 class OnlySingleWhitespaces(BaseValidator):
     94 
     95     def __init__(self, label = 'UI/Control/Form/OnlySingleWhitespacesAllowed'):
     96         super(OnlySingleWhitespaces, self).__init__(label)
     97 
     98     def get_invalid_reason(self, value):
     99         if re.findall('[\t\n\r\x0c\x0b]+|[ ]{2,}', value):
    100             return self._get_invalid_message(value)
    101 
    102 
    103 class IllegalCharacters(BaseValidator):
    104 
    105     def __init__(self, characters = '><', label = None):
    106         super(IllegalCharacters, self).__init__(label)
    107         self.characters = characters
    108 
    109     def get_invalid_reason(self, value):
    110         chars = {c for c in value if c in self.characters}
    111         if chars:
    112             return self._get_invalid_message(chars)
    113 
    114     def _get_invalid_message(self, characters):
    115         charactersTxt = ', '.join([ self._get_char(c) for c in characters ])
    116         return GetByLabel('UI/Control/Form/IllegalCharacters', characters=charactersTxt)
    117 
    118     def _get_char(self, c):
    119         c = c.replace('<', '&lt;').replace('>', '&gt;')
    120         return "'{}'".format(c)
    121 
    122 
    123 class StructuresAreActive(BaseValidator):
    124 
    125     def __init__(self, label = 'UI/Control/Form/StructureIsActive'):
    126         super(StructuresAreActive, self).__init__(label)
    127 
    128     def get_invalid_reason(self, value):
    129         structure_directory = sm.GetService('structureDirectory')
    130         if not isinstance(value, list):
    131             value = [value]
    132         for entry in value:
    133             location_id = entry.returnValue
    134             structure = structure_directory.GetStructureInfo(location_id)
    135             if not structure:
    136                 continue
    137             if structure['upkeepState'] == UPKEEP_STATE_LOW_POWER:
    138                 return GetByLabel('UI/Corporations/DeliverItem/Errors/ErrorCreateDeliveryLocationLowPower', structure=structure['itemName'])
    139             if structure['upkeepState'] == UPKEEP_STATE_ABANDONED:
    140                 return GetByLabel('UI/Corporations/DeliverItem/Errors/ErrorCreateDeliveryLocationAbandoned', structure=structure['itemName'])