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('<', '<').replace('>', '>') 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'])