diff --git a/tests/test_lib.py b/tests/test_lib.py index 6caf463..9d2317c 100644 --- a/tests/test_lib.py +++ b/tests/test_lib.py @@ -1,5 +1,6 @@ from enum import Enum +import pytest import voluptuous as vol from voluptuous_serialize import UNSUPPORTED, convert @@ -214,3 +215,9 @@ class TestEnum(Enum): (2, 2), ], } == convert(vol.Schema(vol.Coerce(TestEnum))) + + +@pytest.mark.parametrize("invalid_schema", [None, []]) +def test_invalid_schema(invalid_schema): + with pytest.raises(ValueError): + convert(vol.Schema(invalid_schema)) diff --git a/voluptuous_serialize/__init__.py b/voluptuous_serialize/__init__.py index 135ffbf..40e5ed6 100644 --- a/voluptuous_serialize/__init__.py +++ b/voluptuous_serialize/__init__.py @@ -1,6 +1,6 @@ """Module to convert voluptuous schemas to dictionaries.""" -from collections.abc import Mapping +from collections.abc import Hashable, Mapping from enum import Enum import voluptuous as vol @@ -112,13 +112,13 @@ def convert(schema, *, custom_serializer=None): if isinstance(schema, vol.Coerce): schema = schema.type - if schema in TYPES_MAP: + if isinstance(schema, Hashable) and schema in TYPES_MAP: return {"type": TYPES_MAP[schema]} if isinstance(schema, (str, int, float, bool)): return {"type": "constant", "value": schema} - if issubclass(schema, Enum): + if isinstance(schema, type) and issubclass(schema, Enum): return { "type": "select", "options": [(item.value, item.value) for item in schema],