diff --git a/pyoracle_forms/__init__.py b/pyoracle_forms/__init__.py index 4214520..e401836 100644 --- a/pyoracle_forms/__init__.py +++ b/pyoracle_forms/__init__.py @@ -44,7 +44,7 @@ from .misc import registered_objects from .property_types import Properties -__version__ = "0.3.3" +__version__ = "0.3.4" def initialize_context(version: str = "12c", encoding: str = "utf-8") -> None: diff --git a/pyoracle_forms/context.py b/pyoracle_forms/context.py index 2acff14..df345da 100644 --- a/pyoracle_forms/context.py +++ b/pyoracle_forms/context.py @@ -124,15 +124,24 @@ def _handled_api_function(*args: Any) -> Any: # type: ignore return _handled_api_function -def has_property(generic_object: BaseObject, property_number: int) -> bool: - func = api_function("d2fobhp_HasProp", (c_void_p, c_int)) - result = func(generic_object, property_number) - +def handle_return_value(result: int) -> bool: if result in (2, 3): # YES, NO return bool(result == 2) raise_for_code(result) +def is_subclassed(generic_object: BaseObject) -> bool: + func = api_function("d2fobis_IsSubclassed", (c_void_p,)) + result = func(generic_object) + return handle_return_value(result) + + +def has_property(generic_object: BaseObject, property_number: int) -> bool: + func = api_function("d2fobhp_HasProp", (c_void_p, c_int)) + result = func(generic_object, property_number) + return handle_return_value(result) + + def setter(function_name: str, setter_type: CTypes) -> Setter[T]: return handled_api_function(function_name, (c_void_p, c_int, setter_type)) @@ -223,9 +232,9 @@ def property_type(property_number: int) -> int: def property_constant_number(property_const_name: str) -> int: - return handled_api_function("d2fprgcv_GetConstValue", (c_char_p, c_void_p), 1)( - property_const_name.encode("utf-8"), c_int() - ).value + return handled_api_function( + "d2fprgcv_GetConstValue", (c_char_p, c_void_p), return_value_index=1 + )(property_const_name.encode("utf-8"), c_int()).value def object_number(obj_name: str) -> int: diff --git a/pyoracle_forms/generic_object.py b/pyoracle_forms/generic_object.py index f93ac75..76997f3 100644 --- a/pyoracle_forms/generic_object.py +++ b/pyoracle_forms/generic_object.py @@ -11,6 +11,7 @@ from .context import set_subclass from .context import move from .context import query_type +from .context import is_subclassed from .property_types import Properties @@ -112,8 +113,8 @@ def is_property_inherited(self, property_type: Properties) -> NoReturn: def is_property_default(self, property_type: Properties) -> NoReturn: raise NotImplementedError() - def is_subclassed(self) -> NoReturn: - raise NotImplementedError() + def is_subclassed(self) -> bool: + return is_subclassed(self) def __repr__(self) -> str: return f"{self.__class__.__name__}({repr(self._as_parameter_)})" diff --git a/tests/test_item.py b/tests/test_item.py index 2e9c86b..938a300 100644 --- a/tests/test_item.py +++ b/tests/test_item.py @@ -93,8 +93,3 @@ def test_is_property_inherited(new_item): @pytest.mark.xfail def test_is_property_default(new_item): assert new_item.is_property_default(Properties.x_position) - - -@pytest.mark.xfail -def test_is_subclassed(new_item): - assert new_item.is_subclassed() diff --git a/tests/test_subclass.py b/tests/test_subclass.py index aeecfeb..fdd3a28 100644 --- a/tests/test_subclass.py +++ b/tests/test_subclass.py @@ -11,3 +11,11 @@ def test_un_subclass(subclassed_item): assert subclass.source_object != subclass assert not subclassed_item.source_object + + +def test_is_not_subclassed(new_item): + assert not new_item.is_subclassed() + + +def test_is_subclassed(subclassed_item): + assert subclassed_item.is_subclassed()