Skip to content

Commit

Permalink
Fix: Invalid data type of 'item' property in 'EnumProperty' (#140)
Browse files Browse the repository at this point in the history
  • Loading branch information
nutti committed Oct 28, 2023
1 parent 959fafa commit 6f1dc2c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 5 deletions.
16 changes: 11 additions & 5 deletions src/fake_bpy_module/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@

MODIFIER_DATA_TYPE: List[str] = [
"list", "dict", "set", "tuple",
"iteriter",
"listlist", "tupletuple",
"listtuple", "listcallable",
"Generic",
Expand Down Expand Up @@ -288,6 +289,8 @@ def to_string(self) -> str:
return f"typing.Tuple[{', '.join(inner_str)}]"
elif self._modifier.modifier_data_type() == "listlist":
return f"typing.List[typing.List[{self._data_type}]]"
elif self._modifier.modifier_data_type() == "iteriter":
return f"typing.Iterable[typing.Iterable[{self._data_type}]]"
elif self._modifier.modifier_data_type() == 'listtuple':
if self._modifier_add_info is not None:
return "typing.List[typing.Tuple[" \
Expand Down Expand Up @@ -382,6 +385,8 @@ def to_string(self) -> str:
f"{', '.join(elms_strs)}]"
elif self._modifier.modifier_data_type() == "listlist":
return f"typing.List[typing.List['{self._data_type}']]"
elif self._modifier.modifier_data_type() == "iteriter":
return f"typing.Iterable[typing.Iterable['{self._data_type}']]"
elif self._modifier.modifier_data_type() == "listcallable":
return "typing.List[typing.Callable[['" \
f"{','.join(self._modifier_add_info['arguments'])}'], None]]"
Expand Down Expand Up @@ -1592,14 +1597,15 @@ def _get_refined_data_type_fast(
if m:
return BuiltinDataType("str", ModifierDataType("set"))

# Ex: sequence of string tuples or a function
# [Pattern] sequence of string tuples or a function
# [Test]
# File: refiner_test.py
# Function: test_get_refined_data_type_for_various_patterns
# Pattern: sequence of string tuples or a function
m = re.match(r"^sequence of string tuples or a function$", dtype_str)
if m:
dtypes = [
BuiltinDataType("int", ModifierDataType("listtuple"),
modifier_add_info={
"tuple_elms": ["str", "str", "str"]
}),
BuiltinDataType("str", ModifierDataType("iteriter")),
ModifierDataType("typing.Callable")
]
return MixinDataType(dtypes)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -613,3 +613,22 @@ def test_get_refined_data_type_for_various_patterns(self):
self.assertFalse(refined_data_type.has_modifier())
self.assertEqual(
refined_data_type.to_string(), "'module.ClassB'")

# Pattern: sequence of string tuples or a function
# Ref: https://github.com/nutti/fake-bpy-module/issues/140
intermidiate_data_type = IntermidiateDataType(
"sequence of string tuples or a function")
refined_data_type = refiner.get_refined_data_type(
intermidiate_data_type, "module_1", 'FUNC_ARG')
self.assertEqual(refined_data_type.type(), 'MIXIN')
dt = refined_data_type.data_types()[0]
self.assertEqual(dt.type(), 'BUILTIN')
self.assertEqual(dt.data_type(), "str")
self.assertTrue(dt.has_modifier())
self.assertEqual(dt.modifier().modifier_data_type(), "iteriter")
self.assertEqual(dt.to_string(),
"typing.Iterable[typing.Iterable[str]]")
dt = refined_data_type.data_types()[1]
self.assertEqual(dt.type(), 'MODIFIER')
self.assertEqual(dt.modifier_data_type(), "typing.Callable")
self.assertEqual(dt.to_string(), "typing.Callable")

0 comments on commit 6f1dc2c

Please sign in to comment.