Source code for mcnpy.wrap

from py4j.protocol import register_output_converter, register_input_converter, REFERENCE_TYPE
from metapy.gateway import ePackage
from metapy.wrap import wrap_e_object, wrap_e_package, e_class_body, _subclass_overrides

overrides = {}
package_name = 'mcnpy'
numeric_ids = True
package = ePackage(package_name)

# Apply overrides to nested subclasses.
# Can provide a custom naming prefix and classes to ignore.
[docs]def subclass_overrides(klass, prefix=None, ignore=[], package_name=package_name, overrides=overrides): _subclass_overrides(klass, prefix, ignore, package_name, overrides)
[docs]class WrapperConverter(object):
[docs] def can_convert(self, object): return type(object).__bases__[0].__name__ in overrides
[docs] def convert(self, object, gateway_client): return object._e_object
# Defined per package to ensure proper wrapper ownership.
[docs]def wrap_e_class(e_class, e_factory, InternalEObject, overrides, package_name): """Return a Python class which wraps and implements an EClass.""" return type(e_class.getName(), (InternalEObject,), e_class_body(e_class, e_factory, overrides, numeric_ids, package_name))
register_input_converter(WrapperConverter(), prepend=True) # Start with the auto-wrapping turned on. register_output_converter(REFERENCE_TYPE, (lambda target_id, gateway_client: wrap_e_object(target_id, gateway_client, overrides, package_name))) wrappers = wrap_e_package(package, overrides, package_name, wrap_e_class) overrides.update(wrappers)