def package_dependencies(): import vistrails.core.packagemanager manager = vistrails.core.packagemanager.get_package_manager() reg = vistrails.core.modules.module_registry.get_module_registry() conf = get_vistrails_configuration() abstraction_dir = get_vistrails_directory("subworkflowsDir") if abstraction_dir is None: debug.log("Subworkflows directory unset, cannot add any abstractions") return [] p = re.compile(r".*\.xml") all_packages = set() for abstraction in os.listdir(abstraction_dir): if p.match(abstraction): abs_fname = os.path.join(abstraction_dir, abstraction) vistrail = read_vistrail(abs_fname) try: dependencies = get_abstraction_dependencies(vistrail) except vistrails.core.modules.module_registry.MissingPackage, e: dependencies = {e._identifier: set()} add_abstraction = True inter_depends = [] for package, depends in dependencies.iteritems(): if package != identifier: if not manager.has_package(package): add_abstraction = False break else: inter_depends.append(depends) if add_abstraction: # print 'adding', abstraction[:-4] all_packages.update(p for p in dependencies.iterkeys() if p != identifier) my_vistrails[abstraction[:-4]] = \ (vistrail, abs_fname, inter_depends) else: debug.critical( ("Subworkflow '%s' is missing packages it " + "depends on") % abstraction)
def package_dependencies(): import vistrails.core.packagemanager manager = vistrails.core.packagemanager.get_package_manager() reg = vistrails.core.modules.module_registry.get_module_registry() conf = get_vistrails_configuration() abstraction_dir = get_vistrails_directory("subworkflowsDir") if abstraction_dir is None: debug.log("Subworkflows directory unset, cannot add any abstractions") return [] p = re.compile(r".*\.xml") all_packages = set() for abstraction in os.listdir(abstraction_dir): if p.match(abstraction): abs_fname = os.path.join(abstraction_dir, abstraction) vistrail = read_vistrail(abs_fname) try: dependencies = get_abstraction_dependencies(vistrail) except vistrails.core.modules.module_registry.MissingPackage, e: dependencies = {e._identifier: set()} add_abstraction = True inter_depends = [] for package, depends in dependencies.iteritems(): if package != identifier: if not manager.has_package(package): add_abstraction = False break else: inter_depends.append(depends) if add_abstraction: # print 'adding', abstraction[:-4] all_packages.update(p for p in dependencies.iterkeys() if p != identifier) my_vistrails[abstraction[:-4]] = \ (vistrail, abs_fname, inter_depends) else: debug.critical(("Subworkflow '%s' is missing packages it " + "depends on") % abstraction)
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, '')