'Takes any bounding_box defined on a concrete Model subclass (either
as a fixed tuple or a property or method) and wraps it in the generic
getter/setter interface for the bounding_box attribute.'

def _create_bounding_box_property(cls, members):

    bounding_box = members.get(u'bounding_box')
    if ((bounding_box is None) or (cls.__bases__[0] is object)):
        return
    if isinstance(bounding_box, property):
        bounding_box = bounding_box.fget
    if (not callable(bounding_box)):
        try:
            bounding_box = _BoundingBox.validate(cls, bounding_box)
        except ValueError as exc:
            raise ModelDefinitionError(exc.args[0])
    else:
        sig = signature(bounding_box)
        if (len(sig.parameters) > 1):
            bounding_box = cls._create_bounding_box_subclass(bounding_box, sig)
    if (six.PY2 and isinstance(bounding_box, types.MethodType)):
        bounding_box = bounding_box.__func__
    cls._bounding_box = bounding_box
    del cls.bounding_box
