ciyidogan commited on
Commit
9297d6e
·
verified ·
1 Parent(s): a6c767e

Update validation_engine.py

Browse files
Files changed (1) hide show
  1. validation_engine.py +100 -7
validation_engine.py CHANGED
@@ -1,15 +1,18 @@
1
  """
2
- Flare – Parameter Validation (with date support)
3
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
- Basit tip + regex kontrolü; Spark veya harici lib ile zenginleştirilebilir.
5
  """
6
 
7
  import re
8
- from typing import Any
9
  from datetime import datetime
10
  from config_provider import ParameterConfig
 
 
11
 
12
- def validate(value: str, param: ParameterConfig) -> bool:
 
13
  t = param.canonical_type()
14
 
15
  if t == "int":
@@ -23,8 +26,8 @@ def validate(value: str, param: ParameterConfig) -> bool:
23
  elif t in ("str", "string"):
24
  pass # All strings are valid
25
  elif t == "bool":
26
- if value.lower() not in ("true","false","1","0","evet","hayır"):
27
- return False
28
 
29
  # Special handling for date type
30
  if param.type == "date":
@@ -39,3 +42,93 @@ def validate(value: str, param: ParameterConfig) -> bool:
39
  return False
40
 
41
  return True
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  """
2
+ Flare – Parameter Validation (locale-aware)
3
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4
+ Locale-based validation with multi-language support
5
  """
6
 
7
  import re
8
+ from typing import Any, Optional, List
9
  from datetime import datetime
10
  from config_provider import ParameterConfig
11
+ from locale_manager import LocaleManager
12
+ from utils import log
13
 
14
+ def validate(value: str, param: ParameterConfig, locale: Optional[str] = None) -> bool:
15
+ """Validate parameter value based on type and locale"""
16
  t = param.canonical_type()
17
 
18
  if t == "int":
 
26
  elif t in ("str", "string"):
27
  pass # All strings are valid
28
  elif t == "bool":
29
+ # Locale-aware boolean validation
30
+ return validate_boolean(value, locale)
31
 
32
  # Special handling for date type
33
  if param.type == "date":
 
42
  return False
43
 
44
  return True
45
+
46
+ def validate_boolean(value: str, locale: Optional[str] = None) -> bool:
47
+ """Validate boolean value based on locale"""
48
+ # Default values (always accepted)
49
+ default_true = ["1", "true"]
50
+ default_false = ["0", "false"]
51
+
52
+ value_lower = value.lower().strip()
53
+
54
+ # Check default values first
55
+ if value_lower in default_true or value_lower in default_false:
56
+ return True
57
+
58
+ # If no locale specified, use minimal validation
59
+ if not locale:
60
+ return value_lower in ["yes", "no", "evet", "hayır"]
61
+
62
+ try:
63
+ # Get locale data
64
+ locale_data = LocaleManager.get_locale(locale)
65
+
66
+ # Get boolean values from locale
67
+ boolean_values = locale_data.get("boolean_values", {})
68
+ true_values = boolean_values.get("true_values", [])
69
+ false_values = boolean_values.get("false_values", [])
70
+
71
+ # Include synonyms if available
72
+ yes_synonyms = boolean_values.get("yes_synonyms", [])
73
+ no_synonyms = boolean_values.get("no_synonyms", [])
74
+
75
+ # Combine all accepted values
76
+ all_true_values = set(true_values + yes_synonyms + default_true)
77
+ all_false_values = set(false_values + no_synonyms + default_false)
78
+
79
+ # Convert to lowercase for comparison
80
+ all_true_values = {v.lower() for v in all_true_values}
81
+ all_false_values = {v.lower() for v in all_false_values}
82
+
83
+ return value_lower in all_true_values or value_lower in all_false_values
84
+
85
+ except Exception as e:
86
+ log(f"⚠️ Error in locale-based boolean validation: {e}")
87
+ # Fallback to basic validation
88
+ return value_lower in ["yes", "no", "evet", "hayır", "1", "0", "true", "false"]
89
+
90
+ def get_boolean_value(value: str, locale: Optional[str] = None) -> Optional[bool]:
91
+ """Convert locale-specific boolean string to Python bool"""
92
+ value_lower = value.lower().strip()
93
+
94
+ # Default true values
95
+ if value_lower in ["1", "true"]:
96
+ return True
97
+ if value_lower in ["0", "false"]:
98
+ return False
99
+
100
+ if not locale:
101
+ # Basic conversion without locale
102
+ if value_lower in ["yes", "evet"]:
103
+ return True
104
+ elif value_lower in ["no", "hayır"]:
105
+ return False
106
+ return None
107
+
108
+ try:
109
+ # Get locale data
110
+ locale_data = LocaleManager.get_locale(locale)
111
+ boolean_values = locale_data.get("boolean_values", {})
112
+
113
+ true_values = set(v.lower() for v in boolean_values.get("true_values", []))
114
+ false_values = set(v.lower() for v in boolean_values.get("false_values", []))
115
+ yes_synonyms = set(v.lower() for v in boolean_values.get("yes_synonyms", []))
116
+ no_synonyms = set(v.lower() for v in boolean_values.get("no_synonyms", []))
117
+
118
+ # Check if it's a true value
119
+ if value_lower in true_values or value_lower in yes_synonyms or value_lower == "1":
120
+ return True
121
+
122
+ # Check if it's a false value
123
+ if value_lower in false_values or value_lower in no_synonyms or value_lower == "0":
124
+ return False
125
+
126
+ return None
127
+
128
+ except Exception as e:
129
+ log(f"⚠️ Error converting boolean value: {e}")
130
+ return None
131
+
132
+ def get_supported_locales() -> List[str]:
133
+ """Get list of supported locales for validation"""
134
+ return LocaleManager.list_available_locales()