Files
IfcOpenShell/src/wrappergen/model.py
T
2026-03-31 20:51:46 +02:00

75 lines
1.5 KiB
Python

from __future__ import annotations
from dataclasses import dataclass, field
@dataclass(slots=True)
class ParameterModel:
name: str
cpp_name: str
cpp_type: str
adapter: str
has_default: bool = False
default_cpp_value: str | None = None
default_python_value: str | None = None
@dataclass(slots=True)
class CallableModel:
kind: str
owner_cpp_name: str
owner_py_name: str
cpp_name: str
py_name: str
c_name: str
return_cpp_type: str
return_adapter: str
parameters: list[ParameterModel] = field(default_factory=list)
@property
def minimum_arity(self) -> int:
defaults = 0
for parameter in reversed(self.parameters):
if not parameter.has_default:
break
defaults += 1
return len(self.parameters) - defaults
@dataclass(slots=True)
class EnumValueModel:
name: str
c_name: str
value: int
@dataclass(slots=True)
class EnumModel:
cpp_name: str
py_name: str
c_name: str
values: list[EnumValueModel]
@dataclass(slots=True)
class ClassModel:
cpp_name: str
py_name: str
handle_kind: str
owner_cpp_name: str | None = None
owner_py_name: str | None = None
callables: list[CallableModel] = field(default_factory=list)
@dataclass(slots=True)
class ModuleModel:
module_name: str
c_prefix: str
api_header_name: str
api_implementation_name: str
extension_source_name: str
python_source_name: str
source_headers: list[str]
classes: list[ClassModel]
enums: list[EnumModel]