def initialize(*args, **kwargs): import vistrails.core.packagemanager manager = vistrails.core.packagemanager.get_package_manager() reg = vistrails.core.modules.module_registry.get_module_registry() abs_vistrails = my_vistrails last_count = len(my_vistrails) + 1 missing_depends = {} cannot_load = {} while len(abs_vistrails) > 0 and len(abs_vistrails) < last_count: new_vistrails = {} for (abs_name, abs_info) in abs_vistrails.iteritems(): (abs_vistrail, abs_fname, abs_depends) = abs_info packages = get_abstraction_dependencies(abs_vistrail) add_abstraction = True for package, inter_depends in packages.iteritems(): if package != identifier: if not manager.has_package(package): add_abstraction = False cannot_load[abs_name] = (abs_vistrail, "Missing package dependency: %s" % package) break else: for descriptor_info in inter_depends: if not reg.has_descriptor_with_name(*descriptor_info): add_abstraction = False new_vistrails[abs_name] = abs_info missing_depends[abs_name] = "Missing module '%s:%s'"\ % (descriptor_info[0], descriptor_info[1]) break if add_abstraction: abstraction = None try: abstraction = \ new_abstraction(abs_name, abs_vistrail, abs_fname) except InvalidPipeline, e: # handle_invalid_pipeline will raise it's own InvalidPipeline # exception if it fails try: import vistrails.core.vistrail.controller module_version = abs_vistrail.get_latest_version() # Use a "dummy" controller to handle the upgrade controller = vistrails.core.vistrail.controller.VistrailController(abs_vistrail) (new_version, new_pipeline) = \ controller.handle_invalid_pipeline(e, long(module_version), abs_vistrail, False, True) del controller save_abstraction(abs_vistrail, abs_fname) abstraction = new_abstraction(abs_name, abs_vistrail, abs_fname, new_version, new_pipeline) except Exception, _e: cannot_load[abs_name] = (abs_vistrail, _e) except Exception, e: cannot_load[abs_name] = (abs_vistrail, e) if abstraction is not None: options = {'namespace': abstraction.uuid, 'hide_namespace': True, 'version': str(abstraction.internal_version)} reg.auto_add_module((abstraction, options)) reg.auto_add_ports(abstraction) # print "Added subworkflow", abs_name, abstraction.uuid elif abs_name not in cannot_load: cannot_load[abs_name] = (abs_vistrail, '')
def initialize(*args, **kwargs): import vistrails.core.packagemanager manager = vistrails.core.packagemanager.get_package_manager() reg = vistrails.core.modules.module_registry.get_module_registry() abs_vistrails = my_vistrails last_count = len(my_vistrails) + 1 missing_depends = {} cannot_load = {} while len(abs_vistrails) > 0 and len(abs_vistrails) < last_count: new_vistrails = {} for (abs_name, abs_info) in abs_vistrails.iteritems(): (abs_vistrail, abs_fname, abs_depends) = abs_info packages = get_abstraction_dependencies(abs_vistrail) add_abstraction = True for package, inter_depends in packages.iteritems(): if package != identifier: if not manager.has_package(package): add_abstraction = False cannot_load[abs_name] = ( abs_vistrail, "Missing package dependency: %s" % package) break else: for descriptor_info in inter_depends: if not reg.has_descriptor_with_name(*descriptor_info): add_abstraction = False new_vistrails[abs_name] = abs_info missing_depends[abs_name] = "Missing module '%s:%s'"\ % (descriptor_info[0], descriptor_info[1]) break if add_abstraction: abstraction = None module_version = None try: abstraction = \ new_abstraction(abs_name, abs_vistrail, abs_fname) except InvalidPipeline, e: # handle_invalid_pipeline will raise it's own InvalidPipeline # exception if it fails try: import vistrails.core.vistrail.controller module_version = abs_vistrail.get_latest_version() # Use a "dummy" controller to handle the upgrade controller = vistrails.core.vistrail.controller.VistrailController( abs_vistrail) (new_version, new_pipeline) = \ controller.handle_invalid_pipeline(e, long(module_version), abs_vistrail, False, True) del controller save_abstraction(abs_vistrail, abs_fname) abstraction = new_abstraction(abs_name, abs_vistrail, abs_fname, new_version, new_pipeline) except Exception, _e: cannot_load[abs_name] = (abs_vistrail, _e) except Exception, e: cannot_load[abs_name] = (abs_vistrail, e) if abstraction is not None: # add descriptors for all available version namespaces all_namespaces = get_all_abs_namespaces(abs_vistrail) for ns in all_namespaces: # hide all but latest version hide_descriptor = (ns != abstraction.uuid) # print '()()() adding abstraction', namespace if reg.has_descriptor_with_name( identifier, abs_name, ns, version, str(abstraction.internal_version)): # don't add something twice continue new_desc = reg.auto_add_module((abstraction, { 'package': identifier, 'package_version': version, 'namespace': ns, 'version': str(module_version), 'hide_namespace': True, 'hide_descriptor': hide_descriptor, })) reg.auto_add_ports(abstraction) # print "Added subworkflow", abs_name, abstraction.uuid elif abs_name not in cannot_load: cannot_load[abs_name] = (abs_vistrail, '')