mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 17:58:20 +00:00
75 lines
1.5 KiB
Python
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]
|