Source code for director.fieldcontainer

import vtk
import numpy as np

def _max_length(strings):
    if not strings: return 0
    return max(len(s) for s in strings)


def _fields_repr(self, indent=4):
    indent_str = ' '*indent
    field_names = list(self._fields)
    field_names.sort()
    fill_length = _max_length(field_names) + 1

    s = type(self).__name__ + "(\n"
    for field in field_names:
        value = getattr(self, field)
        value_repr = _repr(value, indent + 4)
        s += "%s%s%s= %s,\n" % (indent_str, field, ' '*(fill_length-len(field)), value_repr)
    s += "%s)" % indent_str
    return s


def _dict_repr(self, indent=4):
    indent_str = ' '*indent
    field_names = self.keys()
    field_names.sort()
    fill_length = _max_length(field_names) + 3

    s = "{\n"
    for field in field_names:
        value = self[field]
        value_repr = _repr(value, indent + 4)
        s += "%s'%s'%s: %s,\n" % (indent_str, field, ' '*(fill_length-len(field)-2), value_repr)
    s += "%s}" % indent_str
    return s


def _list_repr(self, indent=4):
    indent_str = ' '*indent
    return "[\n" + indent_str + (",\n" + indent_str).join(
              [_repr(item, indent + 4) for item in self]) + "\n" + indent_str + "]"


def _transform_repr(mat, indent=4):
    mat = np.array([[mat.GetMatrix().GetElement(r, c) for c in xrange(4)] for r in xrange(4)])
    indent_str = ' '*indent
    return '\n' + indent_str + repr(mat)


def _repr(self, indent=4):
    if isinstance(self, FieldContainer):
        return _fields_repr(self, indent)
    if isinstance(self, vtk.vtkTransform):
        return _transform_repr(self, indent)
    if isinstance(self, dict):
        return _dict_repr(self, indent)
    if isinstance(self, list) and len(self) and not isinstance(self[0], (int, float)):
        return _list_repr(self, indent)
    else:
        return repr(self)


[docs]class FieldContainer(object): __repr__ = _repr def __init__(self, **kwargs): self._set_fields(**kwargs) def __iter__(self): for name in self._fields: yield name, getattr(self, name) def _add_fields(self, **fields): if not hasattr(self, '_fields'): object.__setattr__(self, '_fields', fields.keys()) else: object.__setattr__(self, '_fields', list(set(self._fields + fields.keys()))) for name, value in fields.iteritems(): object.__setattr__(self, name, value) def _set_fields(self, **fields): if not hasattr(self, '_fields'): self._add_fields(**fields) else: for name, value in fields.iteritems(): self.__setattr__(name, value) def __getitem__(self, name): return getattr(self, name) def __setitem__(self, name, value): setattr(self, name, value) def __len__(self): return len(self._fields) def __contains__(self, name): return name in self._fields def __setattr__(self, name, value): if hasattr(self, name): object.__setattr__(self, name, value) else: raise AttributeError("'%s' object has no attribute '%s'" % (type(self).__name__, name)) def __delattr__(self, name): if hasattr(self, name): del self._fields[self._fields.index(name)] object.__delattr__(self, name) else: raise AttributeError("'%s' object has no attribute '%s'" % (type(self).__name__, name))