def diff_package(pkg_id, reg_fname1, reg_fname2): reg1 = open_registry_from_xml(reg_fname1) ModuleRegistry.convert(reg1) reg2 = open_registry_from_xml(reg_fname2) ModuleRegistry.convert(reg2) pkg1 = reg1.get_package_by_name(pkg_id) pkg2 = reg2.get_package_by_name(pkg_id) d2_modules_dict = dict(((d2.identifier, d2.name, d2.namespace), d2) for d2 in pkg2.descriptor_list) for d1 in pkg1.descriptor_list: if reg2.has_descriptor_with_name(pkg_id, d1.name, d1.namespace): d2 = reg2.get_descriptor_by_name(pkg_id, d1.name, d1.namespace) d1_port_specs = {} for ps in d1.port_specs_list: d1_port_specs[(ps.name, ps.type)] = ps.sigstring d2_port_specs = {} for ps in d2.port_specs_list: d2_port_specs[(ps.name, ps.type)] = ps.sigstring d2_port_specs_set = set(d2_port_specs.keys()) for ps_id, sig1 in d1_port_specs.iteritems(): if ps_id not in d2_port_specs: print "added %s port: %s:%s" % \ (ps_id[1], get_module_name(d1), ps_id[0]) continue d2_port_specs_set.discard(ps_id) if sig1 != d2_port_specs[ps_id]: print "changed %s port: %s:%s" % \ (ps_id[1], get_module_name(d1), ps_id[0]) print " %s -> %s" % (sig1, d2_port_specs[ps_id]) else: # equal pass for ps_id in d2_port_specs_set: print "deleted %s port: %s:%s" % \ (ps_id[1], get_module_name(d1), ps_id[0]) del d2_modules_dict[(d1.identifier, d1.name, d1.namespace)] else: print "deleted module: %s" % get_module_name(d1) for d2 in d2_modules_dict.itervalues(): print "added module: %s" % get_module_name(d2)
def open_registry(filename): from vistrails.core.modules.module_registry import ModuleRegistry registry = vistrails.db.services.io.open_registry_from_xml(filename) ModuleRegistry.convert(registry) return registry