bindings/jupyter/mlvis/widget_builder.py (28 lines of code) (raw):
# Dynamically build component wrappers utilizing the ipywidget
import os, sys, json, re, importlib
from pkg_resources import resource_string
from ast import literal_eval
from traitlets import Unicode
from .widget import CommonComponent
from .widget_ext import Manifold
extensions = {'Manifold': Manifold}
current_module = sys.modules[__name__]
def load_jrequirements():
return literal_eval(resource_string('mlvis', 'jrequirements.json').decode('utf8'))
# Extract the Python component wrapper names from the jrequirements
def extract_components(jrequirements):
return [component for component in jrequirements]
jrequirements = load_jrequirements()
components = extract_components(jrequirements)
def init(self, props={}):
for parent in self.__class__.__bases__:
parent.__init__(self, props=props)
# Dynamically create module classes
for component in components:
deps = (extensions[component], ) if component in extensions else (CommonComponent, )
setattr(current_module,
component,
type(component,
deps,
{
'_model_name': Unicode(component + 'WidgetModel').tag(sync=True),
'_view_name': Unicode(component + 'WidgetView').tag(sync=True),
'__init__': init
}))