diff --git a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi index 84f0b5aa2d..ea99da0431 100644 --- a/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi +++ b/src/ifcopenshell-python/ifcopenshell/ifcopenshell_wrapper.pyi @@ -21,6 +21,8 @@ from typing import Any, Literal, Union from typing_extensions import Self import ifcopenshell +from ifcopenshell.entity_instance import entity_instance_mixin +from ifcopenshell.file import file_mixin # `std::vector` usually translated to `tuple[xxx, ...]`. @@ -873,7 +875,7 @@ class entity(declaration): def subtypes(self) -> tuple[entity, ...]: ... def supertype(self) -> Union[entity, None]: ... -class entity_instance: +class entity_instance(entity_instance_mixin): def __init__(self, *args, **kwargs): ... file: ifcopenshell.file """Reference to IFC file to prevent it's garbage collection, if entity is still used.""" @@ -966,7 +968,7 @@ class face: def matrix(self): ... def print_impl(self, o, indent): ... -class file: +class file(file_mixin): def FreshId(self): ... def __init__(self, *args): ... def add(self, entity: entity_instance, id: int = -1) -> entity_instance: ... diff --git a/src/ifcwrap/IfcParseWrapper.i b/src/ifcwrap/IfcParseWrapper.i index cb6d604398..64567a698c 100644 --- a/src/ifcwrap/IfcParseWrapper.i +++ b/src/ifcwrap/IfcParseWrapper.i @@ -991,44 +991,22 @@ static bool express_Base_equals(const express::Base* self, const express::Base* %include "../ifcparse/spf_header.h" %pythoncode %{ -### hack hack hack -### we trick swig into inheriting from our own extension class -### that way we do not constantly need to decorate/undecorate -# @todo is there no official way to do this? -_old_object = object -from .file import file_mixin as custom_base -object = custom_base +from .file import file_mixin as _file_mixin_base %} +%feature("python:abc", "_file_mixin_base") ifcopenshell::file; %include "../ifcparse/file.h" %template(instance_streamer) ifcopenshell::instance_streamer>; -%pythoncode %{ -### hack hack hack -### restore -object = _old_object -%} - %include "../ifcparse/file_open_status.h" %pythoncode %{ -### hack hack hack -### we trick swig into inheriting from our own extension class -### that way we do not constantly need to decorate/undecorate -# @todo is there no official way to do this? -_old_object = object -from .entity_instance import entity_instance_mixin as custom_base -object = custom_base +from .entity_instance import entity_instance_mixin as _entity_instance_mixin_base %} +%feature("python:abc", "_entity_instance_mixin_base") express::Base; %include "../ifcparse/express.h" -%pythoncode %{ -### hack hack hack -### restore -object = _old_object -%} - %include "../ifcparse/schema.h" %include "../serializers/RocksDbSerializer.h" %include "../ifcparse/logger.h"