mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-25 17:57:02 +00:00
log exceptions on get_info method
these exceptions currently are actively being hidden, which is intransparent / could make debugging challenging improved formatting tot pep8
This commit is contained in:
committed by
Thomas Krijnen
parent
37905c6725
commit
5d6160b47a
@@ -17,47 +17,65 @@
|
|||||||
# #
|
# #
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
import numbers
|
|
||||||
import functools
|
import functools
|
||||||
|
import numbers
|
||||||
|
import logging
|
||||||
import itertools
|
import itertools
|
||||||
|
|
||||||
from . import ifcopenshell_wrapper
|
from . import ifcopenshell_wrapper
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
class entity_instance(object):
|
class entity_instance(object):
|
||||||
def __init__(self, e):
|
def __init__(self, e):
|
||||||
super(entity_instance, self).__setattr__('wrapped_data', e)
|
super(entity_instance, self).__setattr__('wrapped_data', e)
|
||||||
|
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
INVALID, FORWARD, INVERSE = range(3)
|
INVALID, FORWARD, INVERSE = range(3)
|
||||||
attr_cat = self.wrapped_data.get_attribute_category(name)
|
attr_cat = self.wrapped_data.get_attribute_category(name)
|
||||||
if attr_cat == FORWARD:
|
if attr_cat == FORWARD:
|
||||||
return entity_instance.wrap_value(self.wrapped_data.get_argument(self.wrapped_data.get_argument_index(name)))
|
return entity_instance.wrap_value(
|
||||||
|
self.wrapped_data.get_argument(self.wrapped_data.get_argument_index(name)))
|
||||||
elif attr_cat == INVERSE:
|
elif attr_cat == INVERSE:
|
||||||
return entity_instance.wrap_value(self.wrapped_data.get_inverse(name))
|
return entity_instance.wrap_value(self.wrapped_data.get_inverse(name))
|
||||||
else: raise AttributeError("entity instance of type '%s' has no attribute '%s'"%(self.wrapped_data.is_a(), name))
|
else:
|
||||||
|
raise AttributeError(
|
||||||
|
"entity instance of type '%s' has no attribute '%s'" % (self.wrapped_data.is_a(), name))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def walk(f, g, value):
|
def walk(f, g, value):
|
||||||
if isinstance(value, (tuple, list)): return tuple(map(functools.partial(entity_instance.walk, f, g), value))
|
if isinstance(value, (tuple, list)):
|
||||||
elif f(value): return g(value)
|
return tuple(map(functools.partial(entity_instance.walk, f, g), value))
|
||||||
else: return value
|
elif f(value):
|
||||||
|
return g(value)
|
||||||
|
else:
|
||||||
|
return value
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def wrap_value(v):
|
def wrap_value(v):
|
||||||
wrap = lambda e: entity_instance(e)
|
wrap = lambda e: entity_instance(e)
|
||||||
is_instance = lambda e: isinstance(e, ifcopenshell_wrapper.entity_instance)
|
is_instance = lambda e: isinstance(e, ifcopenshell_wrapper.entity_instance)
|
||||||
return entity_instance.walk(is_instance, wrap, v)
|
return entity_instance.walk(is_instance, wrap, v)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def unwrap_value(v):
|
def unwrap_value(v):
|
||||||
unwrap = lambda e: e.wrapped_data
|
unwrap = lambda e: e.wrapped_data
|
||||||
is_instance = lambda e: isinstance(e, entity_instance)
|
is_instance = lambda e: isinstance(e, entity_instance)
|
||||||
return entity_instance.walk(is_instance, unwrap, v)
|
return entity_instance.walk(is_instance, unwrap, v)
|
||||||
|
|
||||||
def attribute_type(self, attr):
|
def attribute_type(self, attr):
|
||||||
attr_idx = attr if isinstance(attr, numbers.Integral) else self.wrapped_data.get_argument_index(attr)
|
attr_idx = attr if isinstance(attr, numbers.Integral) else self.wrapped_data.get_argument_index(attr)
|
||||||
return self.wrapped_data.get_argument_type(attr_idx)
|
return self.wrapped_data.get_argument_type(attr_idx)
|
||||||
|
|
||||||
def attribute_name(self, attr_idx):
|
def attribute_name(self, attr_idx):
|
||||||
return self.wrapped_data.get_argument_name(attr_idx)
|
return self.wrapped_data.get_argument_name(attr_idx)
|
||||||
|
|
||||||
def __setattr__(self, key, value):
|
def __setattr__(self, key, value):
|
||||||
self[self.wrapped_data.get_argument_index(key)] = value
|
self[self.wrapped_data.get_argument_index(key)] = value
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
return entity_instance.wrap_value(self.wrapped_data.get_argument(key))
|
return entity_instance.wrap_value(self.wrapped_data.get_argument(key))
|
||||||
|
|
||||||
def __setitem__(self, idx, value):
|
def __setitem__(self, idx, value):
|
||||||
if value is None:
|
if value is None:
|
||||||
self.wrapped_data.setArgumentAsNull(idx)
|
self.wrapped_data.setArgumentAsNull(idx)
|
||||||
@@ -67,35 +85,49 @@ class entity_instance(object):
|
|||||||
attr_type = attr_type.replace('Enumeration', 'String')
|
attr_type = attr_type.replace('Enumeration', 'String')
|
||||||
try:
|
try:
|
||||||
if isinstance(value, unicode): value = value.encode("utf-8")
|
if isinstance(value, unicode): value = value.encode("utf-8")
|
||||||
except: pass
|
except:
|
||||||
|
pass
|
||||||
getattr(self.wrapped_data, "setArgumentAs%s" % attr_type)(idx, entity_instance.unwrap_value(value))
|
getattr(self.wrapped_data, "setArgumentAs%s" % attr_type)(idx, entity_instance.unwrap_value(value))
|
||||||
return value
|
return value
|
||||||
def __len__(self): return len(self.wrapped_data)
|
|
||||||
def __repr__(self): return repr(self.wrapped_data)
|
def __len__(self):
|
||||||
def is_a(self, *args): return self.wrapped_data.is_a(*args)
|
return len(self.wrapped_data)
|
||||||
def id(self): return self.wrapped_data.id()
|
|
||||||
|
def __repr__(self):
|
||||||
|
return repr(self.wrapped_data)
|
||||||
|
|
||||||
|
def is_a(self, *args):
|
||||||
|
return self.wrapped_data.is_a(*args)
|
||||||
|
|
||||||
|
def id(self):
|
||||||
|
return self.wrapped_data.id()
|
||||||
|
|
||||||
def __eq__(self, other):
|
def __eq__(self, other):
|
||||||
if type(self) != type(other): return False
|
if type(self) != type(other): return False
|
||||||
return self.wrapped_data == other.wrapped_data
|
return self.wrapped_data == other.wrapped_data
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash((self.id(), self.wrapped_data.file_pointer()))
|
return hash((self.id(), self.wrapped_data.file_pointer()))
|
||||||
|
|
||||||
def __dir__(self):
|
def __dir__(self):
|
||||||
return sorted(set(itertools.chain(
|
return sorted(set(itertools.chain(
|
||||||
dir(type(self)),
|
dir(type(self)),
|
||||||
self.wrapped_data.get_attribute_names(),
|
self.wrapped_data.get_attribute_names(),
|
||||||
self.wrapped_data.get_inverse_attribute_names()
|
self.wrapped_data.get_inverse_attribute_names()
|
||||||
)))
|
)))
|
||||||
|
|
||||||
def get_info(self):
|
def get_info(self):
|
||||||
_info = {}
|
_info = {}
|
||||||
try:
|
try:
|
||||||
_info["id"] = self.id()
|
_info["id"] = self.id()
|
||||||
_info["type"] = self.is_a()
|
_info["type"] = self.is_a()
|
||||||
except:
|
except:
|
||||||
pass
|
log.exception("unhandled exception while getting id / type info on {}".format(self))
|
||||||
for i in range(len(self)):
|
for i in range(len(self)):
|
||||||
try:
|
try:
|
||||||
_info[self.attribute_name(i)] = self[i]
|
_info[self.attribute_name(i)] = self[i]
|
||||||
except:
|
except:
|
||||||
pass
|
log.exception("unhandled exception occured setting attribute name for {}".format(self))
|
||||||
return _info
|
return _info
|
||||||
__dict__ = property(get_info)
|
|
||||||
|
__dict__ = property(get_info)
|
||||||
|
|||||||
Reference in New Issue
Block a user