Skip to content

Commit fb82b1a

Browse files
committed
Tests in
1 parent f4ba32c commit fb82b1a

File tree

5 files changed

+30
-18
lines changed

5 files changed

+30
-18
lines changed

langdspy/data_helper.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
def normalize_enum_value(val: str) -> str:
2+
return val.replace(" ", "_").replace("-", "_").upper()

langdspy/transformers.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from enum import Enum
44
from langchain_core.documents import Document
55
import re
6+
from .data_helper import normalize_enum_value
67

78
def as_bool(value: str, kwargs: Dict[str, Any]) -> bool:
89
value = re.sub(r'[^\w\s]', '', value)
@@ -16,9 +17,6 @@ def as_json_list(val: str, kwargs: Dict[str, Any]) -> List[Dict[str, Any]]:
1617
def as_json(val: str, kwargs: Dict[str, Any]) -> Any:
1718
return json.loads(val)
1819

19-
def normalize_enum_value(val: str) -> str:
20-
return val.replace(" ", "_").replace("-", "_").upper()
21-
2220
def as_enum(val: str, kwargs: Dict[str, Any]) -> Enum:
2321
enum_class = kwargs['enum']
2422
normalized_val = normalize_enum_value(val)

langdspy/validators.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import logging
3-
3+
from .data_helper import normalize_enum_value
44

55
logger = logging.getLogger("langdspy")
66

@@ -34,8 +34,8 @@ def is_one_of(input, output_val, kwargs) -> bool:
3434

3535
try:
3636
if not kwargs.get('case_sensitive', False):
37-
choices = [c.lower().replace("_", " ") for c in kwargs['choices']]
38-
output_val = output_val.lower().replace("_", " ")
37+
choices = [normalize_enum_value(c) for c in kwargs['choices']]
38+
output_val = normalize_enum_value (output_val)
3939

4040
# logger.debug(f"Checking if {output_val} is one of {choices}")
4141
for choice in choices:
@@ -61,8 +61,8 @@ def is_subset_of(input, output_val, kwargs) -> bool:
6161
try:
6262
values = [v.strip() for v in output_val.split(",")]
6363
if not kwargs.get('case_sensitive', False):
64-
choices = [c.lower().replace("_", " ") for c in kwargs['choices']]
65-
values = [v.lower().replace("_", " ") for v in values]
64+
choices = [normalize_enum_value(c) for c in kwargs['choices']]
65+
values = [normalize_enum_value(v) for v in values]
6666
for value in values:
6767
if value not in choices:
6868
return False

tests/test_transformers.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,31 @@ def test_as_enum():
2222
class Fruit(Enum):
2323
APPLE = 1
2424
BANANA = 2
25+
CHERRY_PIE = 3
26+
DURIAN_FRUIT = 4
2527

2628
assert transformers.as_enum("APPLE", {"enum": Fruit}) == Fruit.APPLE
2729
assert transformers.as_enum("BANANA", {"enum": Fruit}) == Fruit.BANANA
30+
assert transformers.as_enum("cherry pie", {"enum": Fruit}) == Fruit.CHERRY_PIE
31+
assert transformers.as_enum("Durian-Fruit", {"enum": Fruit}) == Fruit.DURIAN_FRUIT
32+
assert transformers.as_enum("Durian_Fruit", {"enum": Fruit}) == Fruit.DURIAN_FRUIT
33+
assert transformers.as_enum("Durian Fruit", {"enum": Fruit}) == Fruit.DURIAN_FRUIT
2834

2935
with pytest.raises(ValueError):
30-
transformers.as_enum("CHERRY", {"enum": Fruit})
36+
transformers.as_enum("MANGO", {"enum": Fruit})
3137

3238
def test_as_enum_list():
3339
class Fruit(Enum):
3440
APPLE = 1
3541
BANANA = 2
36-
CHERRY = 3
42+
CHERRY_PIE = 3
43+
DURIAN_FRUIT = 4
3744

3845
assert transformers.as_enum_list("APPLE", {"enum": Fruit}) == [Fruit.APPLE]
39-
assert transformers.as_enum_list("BANANA, CHERRY", {"enum": Fruit}) == [Fruit.BANANA, Fruit.CHERRY]
40-
assert transformers.as_enum_list("APPLE,BANANA,CHERRY", {"enum": Fruit}) == [Fruit.APPLE, Fruit.BANANA, Fruit.CHERRY]
46+
assert transformers.as_enum_list("BANANA, CHERRY PIE", {"enum": Fruit}) == [Fruit.BANANA, Fruit.CHERRY_PIE]
47+
assert transformers.as_enum_list("APPLE,BANANA,CHERRY PIE", {"enum": Fruit}) == [Fruit.APPLE, Fruit.BANANA, Fruit.CHERRY_PIE]
48+
assert transformers.as_enum_list("Durian-Fruit, cherry pie", {"enum": Fruit}) == [Fruit.DURIAN_FRUIT, Fruit.CHERRY_PIE]
49+
assert transformers.as_enum_list("Durian Fruit, cherry_pie", {"enum": Fruit}) == [Fruit.DURIAN_FRUIT, Fruit.CHERRY_PIE]
4150

4251
with pytest.raises(ValueError):
43-
transformers.as_enum_list("DURIAN", {"enum": Fruit})
52+
transformers.as_enum_list("MANGO", {"enum": Fruit})

tests/test_validators.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,27 @@ def test_is_one_of():
1212
assert validators.is_one_of({}, 'cherry', {'choices': ['apple', 'banana']}) == False
1313
assert validators.is_one_of({}, 'APPLE', {'choices': ['apple', 'banana'], 'case_sensitive': False}) == True
1414
assert validators.is_one_of({}, 'none', {'choices': ['apple', 'banana'], 'none_ok': True}) == True
15+
assert validators.is_one_of({}, 'apple pie', {'choices': ['apple_pie', 'banana split'], 'case_sensitive': False}) == True
16+
assert validators.is_one_of({}, 'Apple-Pie', {'choices': ['apple_pie', 'banana-split'], 'case_sensitive': False}) == True
1517

1618
with pytest.raises(ValueError):
1719
validators.is_one_of({}, 'apple', {})
1820

1921
def test_is_subset_of():
20-
choices = ["apple", "banana", "cherry"]
22+
choices = ["apple", "banana", "cherry_pie", "durian-fruit"]
2123

2224
assert validators.is_subset_of({}, "apple", {"choices": choices}) == True
2325
assert validators.is_subset_of({}, "apple,banana", {"choices": choices}) == True
24-
assert validators.is_subset_of({}, "apple, banana, cherry", {"choices": choices}) == True
26+
assert validators.is_subset_of({}, "apple, banana, cherry_pie", {"choices": choices}) == True
2527
assert validators.is_subset_of({}, "APPLE", {"choices": choices, "case_sensitive": False}) == True
2628
assert validators.is_subset_of({}, "APPLE,BANANA", {"choices": choices, "case_sensitive": False}) == True
29+
assert validators.is_subset_of({}, "Durian-Fruit, Cherry Pie", {"choices": choices, "case_sensitive": False}) == True
2730

28-
assert validators.is_subset_of({}, "durian", {"choices": choices}) == False
29-
assert validators.is_subset_of({}, "apple,durian", {"choices": choices}) == False
31+
assert validators.is_subset_of({}, "mango", {"choices": choices}) == False
32+
assert validators.is_subset_of({}, "apple,mango", {"choices": choices}) == False
3033

3134
assert validators.is_subset_of({}, "none", {"choices": choices, "none_ok": True}) == True
3235
assert validators.is_subset_of({}, "apple,none", {"choices": choices, "none_ok": True}) == False
3336

3437
with pytest.raises(ValueError):
35-
validators.is_subset_of({}, "apple", {})
38+
validators.is_subset_of({}, "apple", {})

0 commit comments

Comments
 (0)