Exemple #1
0
def handle_module_upgrade_request(controller, module_id, pipeline):
    global _remap, _controller, _pipeline

    if _remap is None:
        _remap = UpgradePackageRemap()
        remap = UpgradeModuleRemap(None, '1.0.0', '1.0.0',
                                   module_name='vtkInteractionHandler')
        remap.add_remap('src_port_remap', 'self', 'Instance')
        _remap.add_module_remap(remap)
        remap = UpgradeModuleRemap(None, '1.0.0', '1.0.0',
                                   module_name='VTKCell')
        _remap.add_module_remap(remap)
        remap = UpgradeModuleRemap(None, '1.0.0', '1.0.0',
                                   module_name='VTKViewCell',
                                   new_module='VTKCell')
        _remap.add_module_remap(remap)

    _controller = controller
    _pipeline = pipeline
    module_name = pipeline.modules[module_id].name
    module_name = module_name_remap.get(module_name, module_name)
    if not _remap.has_module_remaps(module_name):
        build_remap(module_name)

    try:
        from vistrails.packages.spreadsheet.init import upgrade_cell_to_output
    except ImportError:
        # Manually upgrade to 1.0.1
        if _remap.get_module_remaps(module_name):
            module_remap = copy.copy(_remap)
            module_remap.add_module_remap(
                    UpgradeModuleRemap('1.0.0', '1.0.1', '1.0.1',
                                       module_name=module_name))
        else:
            module_remap = _remap
    else:
        module_remap = upgrade_cell_to_output(
                _remap, module_id, pipeline,
                'VTKCell', 'vtkRendererOutput',
                '1.0.1', 'AddRenderer',
                start_version='1.0.0')
        if _remap.get_module_remaps(module_name):
            remap = module_remap.get_module_upgrade(module_name, '1.0.0')
            if remap is None:
                # Manually upgrade to 1.0.1
                module_remap.add_module_remap(
                        UpgradeModuleRemap('1.0.0', '1.0.1', '1.0.1',
                                           module_name=module_name))

    return UpgradeWorkflowHandler.remap_module(controller, module_id, pipeline,
                                               module_remap)
Exemple #2
0
def upgrade_cell_to_output(module_remap,
                           module_id,
                           pipeline,
                           old_name,
                           new_module,
                           end_version,
                           input_port_name,
                           start_version=None,
                           output_version=None):
    """This function upgrades a *Cell module to a *Output module.

    The upgrade only happens if the original module doesn't have any connection
    on the cell input ports that can't be translated.

    This is to ease the transition to *Output modules, but we don't want (or
    need) to break anything; the *Cell modules still exist, so they can stay.
    """
    if not isinstance(module_remap, UpgradePackageRemap):
        module_remap = UpgradePackageRemap.from_dict(module_remap)

    old_module = pipeline.modules[module_id]
    old_module_name = create_descriptor_string(old_module.package,
                                               old_module.name,
                                               old_module.namespace, False)
    if old_module_name != old_name:
        return module_remap

    used_input_ports = set(old_module.connected_input_ports.keys())
    for func in old_module.functions:
        used_input_ports.add(func.name)

    if used_input_ports != set([input_port_name]):
        return module_remap

    _old_remap = module_remap
    module_remap = copy.copy(module_remap)
    assert _old_remap.remaps is not module_remap.remaps
    remap = UpgradeModuleRemap(start_version,
                               end_version,
                               output_version,
                               module_name=old_name,
                               new_module=new_module)
    remap.add_remap('dst_port_remap', input_port_name, 'value')
    remap.add_remap('function_remap', input_port_name, 'value')
    module_remap.add_module_remap(remap)
    return module_remap
Exemple #3
0
def upgrade_cell_to_output(module_remap, module_id, pipeline,
                           old_name, new_module,
                           end_version, input_port_name,
                           start_version=None, output_version=None):
    """This function upgrades a *Cell module to a *Output module.

    The upgrade only happens if the original module doesn't have any connection
    on the cell input ports that can't be translated.

    This is to ease the transition to *Output modules, but we don't want (or
    need) to break anything; the *Cell modules still exist, so they can stay.
    """
    if not isinstance(module_remap, UpgradePackageRemap):
        module_remap = UpgradePackageRemap.from_dict(module_remap)

    old_module = pipeline.modules[module_id]
    old_module_name = create_descriptor_string(old_module.package,
                                               old_module.name,
                                               old_module.namespace,
                                               False)
    if old_module_name != old_name:
        return module_remap

    used_input_ports = set(old_module.connected_input_ports.keys())
    for func in old_module.functions:
        used_input_ports.add(func.name)

    if used_input_ports != set([input_port_name]):
        return module_remap

    _old_remap = module_remap
    module_remap = copy.copy(module_remap)
    assert _old_remap.remaps is not module_remap.remaps
    remap = UpgradeModuleRemap(start_version, end_version, output_version,
                               module_name=old_name,
                               new_module=new_module)
    remap.add_remap('dst_port_remap', input_port_name, 'value')
    remap.add_remap('function_remap', input_port_name, 'value')
    module_remap.add_module_remap(remap)
    return module_remap
Exemple #4
0
def handle_module_upgrade_request(controller, module_id, pipeline):
    from vistrails.core.modules.module_descriptor import ModuleDescriptor
    from vistrails.core.upgradeworkflow import UpgradeWorkflowHandler, \
        UpgradePackageRemap, UpgradeModuleRemap
    from vistrails.core.modules.basic_modules import identifier as basic_pkg

    def remap_functions(old_module, new_module, function_remap):
        # FIXME need use_registry flag passed through!
        use_registry = True
        function_ops = []
        for function in old_module.functions:
            if function.name in function_remap:
                remap = function_remap[function.name]
                if remap is None:
                    # don't add the function back in
                    continue
                elif not isinstance(remap, basestring):
                    function_ops.extend(remap(function, new_module))
                    continue
                else:
                    function_name = remap

                if len(function.parameters) > 0:
                    new_param_vals, aliases = zip(
                        *[(p.strValue, p.alias) for p in function.parameters])
                else:
                    new_param_vals = []
                    aliases = []
                if use_registry:
                    function_port_spec = function_name
                else:

                    def mk_psi(pos):
                        psi = PortSpecItem(module="Module",
                                           package=basic_pkg,
                                           namespace="",
                                           pos=pos)
                        return psi

                    n_items = len(new_param_vals)
                    function_port_spec = PortSpec(
                        name=function_name,
                        items=[mk_psi(i) for i in xrange(n_items)])
                new_function = controller.create_function(
                    new_module, function_port_spec, new_param_vals, aliases)
                new_module.add_function(new_function)

        if None in function_remap:
            # used to add new functions
            remap = function_remap[None]
            function_ops.extend(remap(None, new_module))
        return function_ops

    def remap_dst_connections(old_module, new_module, port_remap):
        # FIXME need use_registry flag passed through!
        use_registry = True
        create_new_connection = UpgradeWorkflowHandler.create_new_connection

        ops = []
        for _, conn_id in pipeline.graph.edges_to(old_module.id):
            old_conn = pipeline.connections[conn_id]
            if old_conn.destination.name in port_remap:
                remap = port_remap[old_conn.destination.name]
                if remap is None:
                    # don't add this connection back in
                    continue
                elif not isinstance(remap, basestring):
                    ops.extend(remap(old_conn, new_module))
                    continue
                else:
                    destination_name = remap

                old_src_module = pipeline.modules[old_conn.source.moduleId]
                if use_registry:
                    destination_port = destination_name
                else:
                    destination_port = Port(name=destination_name,
                                            type='destination',
                                            signature=create_port_spec_string([
                                                (basic_pkg, 'Variant', '')
                                            ]))

                new_conn = create_new_connection(controller, old_src_module,
                                                 old_conn.source, new_module,
                                                 destination_port)
                ops.append(('add', new_conn))
        return ops

    def insert_vis(vis_name, vis_port_remap):
        def remap_vis(old_conn, new_cell_module):
            ops = []
            old_src_module = pipeline.modules[old_conn.source.moduleId]
            old_cell_module = pipeline.modules[old_conn.destination.moduleId]

            new_x = (old_src_module.location.x +
                     new_cell_module.location.x) / 2.0
            new_y = (old_src_module.location.y +
                     new_cell_module.location.y) / 2.0

            new_vis_desc = ModuleDescriptor(package=identifier,
                                            name=vis_name,
                                            version='0.3.0')
            new_vis_module = \
                controller.create_module_from_descriptor(new_vis_desc,
                                                         new_x, new_y)

            function_ops = remap_functions(old_cell_module, new_vis_module,
                                           vis_port_remap)
            ops.append(('add', new_vis_module))
            ops.extend(function_ops)
            ops.extend(
                remap_dst_connections(old_cell_module, new_vis_module,
                                      vis_port_remap))

            create_new_connection = UpgradeWorkflowHandler.create_new_connection
            new_conn_1 = create_new_connection(controller, old_src_module,
                                               old_conn.source, new_vis_module,
                                               "table")
            ops.append(('add', new_conn_1))
            new_conn_2 = create_new_connection(controller, new_vis_module,
                                               "self", new_cell_module,
                                               "layers")
            ops.append(('add', new_conn_2))
            return ops

        # returns the actual remap function
        return remap_vis

    # zoom gets moved for free from old cell to new cell
    remap = UpgradePackageRemap()

    def add_legacy(fname, module):
        new_function = controller.create_function(module, "allowLegacy",
                                                  ["True"])
        return [('add', new_function, 'module', module.id)]

    remap.add_module_remap(
        UpgradeModuleRemap('0.1.0',
                           '0.3.0',
                           '0.3.0',
                           new_module="GMapCell",
                           module_name="GMapCell",
                           dst_port_remap={
                               'table':
                               insert_vis("GMapSymbols", {None: add_legacy}),
                               'colormapName':
                               None
                           }))
    remap.add_module_remap(
        UpgradeModuleRemap('0.1.0',
                           '0.3.0',
                           '0.3.0',
                           new_module="GMapCell",
                           module_name="GMapHeatmapCell",
                           dst_port_remap={
                               'table':
                               insert_vis(
                                   "GMapHeatmap", {
                                       'dissipating': 'dissipating',
                                       'maxIntensity': 'maxIntensity',
                                       'opacity': 'opacity',
                                       'radius': 'radius'
                                   }),
                               'dissipating':
                               None,
                               'maxIntensity':
                               None,
                               'opacity':
                               None,
                               'radius':
                               None,
                           }))
    remap.add_module_remap(
        UpgradeModuleRemap('0.1.0',
                           '0.3.0',
                           '0.3.0',
                           new_module="GMapCell",
                           module_name="GMapCircleCell",
                           dst_port_remap={
                               'table':
                               insert_vis(
                                   "GMapCircles", {
                                       'strokeColor': 'strokeColor',
                                       'strokeWeight': 'strokeWeight',
                                       'strokeOpacity': 'strokeOpacity',
                                       'fillColor': 'fillColor',
                                       'fillOpacity': 'fillOpacity'
                                   }),
                               'strokeColor':
                               None,
                               'strokeWeight':
                               None,
                               'strokeOpacity':
                               None,
                               'fillColor':
                               None,
                               'fillOpacity':
                               None,
                           }))
    remap.add_module_remap(
        UpgradeModuleRemap('0.1.0',
                           '0.3.0',
                           '0.3.0',
                           new_module="GMapCell",
                           module_name="GMapSymbolCell",
                           dst_port_remap={
                               'table':
                               insert_vis(
                                   "GMapSymbols", {
                                       'strokeColor': 'strokeColor',
                                       'strokeWeight': 'strokeWeight',
                                       'strokeOpacity': 'strokeOpacity',
                                       'fillStartColor': 'fillStartColor',
                                       'fillEndColor': 'fillEndColor',
                                       'fillOpacity': 'fillOpacity',
                                       'scale': 'scale'
                                   }),
                               'strokeColor':
                               None,
                               'strokeWeight':
                               None,
                               'strokeOpacity':
                               None,
                               'fillStartColor':
                               None,
                               'fillEndColor':
                               None,
                               'fillOpacity':
                               None,
                               'scale':
                               None,
                           }))

    return UpgradeWorkflowHandler.remap_module(controller, module_id, pipeline,
                                               remap)
Exemple #5
0
from vistrails.core.modules.module_descriptor import ModuleDescriptor
from vistrails.core.modules.vistrails_module import Module
from vistrails.core.upgradeworkflow import UpgradeModuleRemap


class X(Module):
    _output_ports = [('result', 'basic:String')]

    def compute(self):
        self.set_output('result', 'X')


_modules = [X]

_upgrades = {
    'X': [
        UpgradeModuleRemap(
            # Upgrade for looping_fix.x 0.1 -> 0.2
            # replaces module X with module Y from looping_fix.y 0.1
            '0.1',
            '0.2',
            '0.2',
            new_module=ModuleDescriptor(
                package='org.vistrails.vistrails.tests.looping_fix.y',
                name='Y',
                namespace='',
                package_version='0.1'))
    ]
}
Exemple #6
0
from vistrails.core.modules.module_descriptor import ModuleDescriptor
from vistrails.core.modules.vistrails_module import Module
from vistrails.core.upgradeworkflow import UpgradeModuleRemap


class B(Module):
    _output_ports = [('result', 'basic:String')]

    def compute(self):
        self.set_output('result', 'B')


_modules = [B]

_upgrades = {
    'B': [
        UpgradeModuleRemap(
            # Upgrade for looping_fix.b 0.1 -> 0.2
            # replaces module B with module C from looping_fix.c 1.0
            '0.1',
            '0.2',
            '0.2',
            new_module=ModuleDescriptor(
                package='org.vistrails.vistrails.tests.looping_fix.c',
                name='C',
                namespace='',
                package_version='1.0'))
    ]
}
Exemple #7
0
    def process_module(desc):
        # 0.9.3 upgrades
        if not desc.name in klasses:
            return
        remap = UpgradeModuleRemap(None, '0.9.3', '0.9.3',
                                   module_name=desc.name)
        process_ports(desc, remap, 'input')
        process_ports(desc, remap, 'output')
        _remap.add_module_remap(remap)
        for old, new in module_name_remap.iteritems():
            if desc.name == new:
                # Remap using old name
                remap.new_module = old
                _remap.add_module_remap(remap, old)
        # 0.9.5 upgrades
        remap = UpgradeModuleRemap('0.9.3', '0.9.5', '0.9.5',
                                   module_name=desc.name)
        remap.add_remap('src_port_remap', 'self', 'Instance')
        _remap.add_module_remap(remap)
        for old, new in module_name_remap.iteritems():
            if desc.name == new:
                # Remap using old name
                remap.new_module = old
                _remap.add_module_remap(remap, old)
        # 1.0.0 upgrades
        input_mappings = {}
        function_mappings = {}
        input_specs = [desc.module._get_input_spec(s)
                     for s in get_port_specs(desc, 'input')]
        input_names = [s.name for s in input_specs]
        for spec in input_specs:
            if spec is None:
                continue
            elif spec.name == 'TextScaleMode':
                function_mappings['ScaledTextOn'] = \
                                           change_func('TextScaleMode', 'Prop')
            elif spec.method_type == 'OnOff':
                # Convert On/Off to single port
                input_mappings[spec.name + 'On'] = spec.name
                input_mappings[spec.name + 'Off'] = spec.name
                function_mappings[spec.name + 'On'] = \
                                              change_func(spec.name, True)
                function_mappings[spec.name + 'Off'] = \
                                             change_func(spec.name, False)
            elif spec.method_type == 'nullary':
                # Add True to execute empty functions
                function_mappings[spec.name] = change_func(spec.name, True)
            elif spec.method_type == 'SetXToY':
                # Add one mapping for each default
                for enum in spec.values[0]:
                    input_mappings[spec.method_name + enum] = spec.name
                    # Add enum value to function
                    function_mappings[spec.method_name + enum] = \
                                                  change_func(spec.name, enum)
                # Convert SetX(int) methods
                old_name = spec.method_name[:-2]
                function_mappings[spec.method_name[:-2]] = change_SetXint(spec)
            elif spec.port_type == 'basic:Color':
                # Remove 'Widget' suffix on Color
                input_mappings[spec.method_name + 'Widget'] = spec.name
                # Remove 'Set prefix'
                input_mappings[spec.method_name] = spec.name
                # Change old type (float, float, float) -> (,)*3
                function_mappings[spec.method_name] = color_func(spec.name)
            elif spec.port_type == 'basic:File':
                input_mappings[spec.method_name] = to_file_func(spec.name)  # Set*FileName -> (->File->*File)
                input_mappings['Set' + spec.name] = spec.name # Set*File -> *File
                function_mappings[spec.method_name] = file_func(spec.name)
            elif base_name(spec.name) == 'AddDataSetInput':
                # SetInput* does not exist in VTK 6
                if spec.name[15:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['AddInput'] = spec.name
                input_mappings['AddInput' + spec.name[15:]] = spec.name
            elif base_name(spec.name) == 'InputData':
                # SetInput* does not exist in VTK 6
                if spec.name[9:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['SetInput'] = spec.name
                input_mappings['SetInput' + spec.name[9:]] = spec.name
            elif base_name(spec.name) == 'AddInputData':
                # AddInput* does not exist in VTK 6
                if spec.name[12:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['AddInput'] = spec.name
                input_mappings['AddInput' + spec.name[12:]] = spec.name
            elif base_name(spec.name) ==  'SourceData':
                # SetSource* does not exist in VTK 6
                if spec.name[10:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['SetSource'] = spec.name
                input_mappings['SetSource' + spec.name[10:]] = spec.name
            elif spec.method_name == 'Set' + base_name(spec.name):
                if spec.name[-2:] == '_1':
                    # Upgrade from versions without overload
                    input_mappings[spec.name[:-2]] = spec.name
                    input_mappings['Set' + spec.name[:-2]] = spec.name
                # Remove 'Set' prefixes
                input_mappings['Set' + spec.name] = spec.name
            elif spec.name == 'AddInput_1':
                # FIXME what causes this?
                # New version does not have AddInput
                input_mappings['AddInput'] = 'AddInput_1'
            elif spec.name == 'vtkRenderer':
                # Classes having SetRendererWindow also used to have VTKCell
                input_mappings['SetVTKCell'] = fix_vtkcell_func()
        output_mappings = {}
        for spec_name in get_port_specs(desc, 'output'):
            spec = desc.module._get_output_spec(spec_name)
            if spec is None:
                continue
            if spec.method_name == 'Get' + spec.name:
                # Remove 'Get' prefixes
                output_mappings[spec.method_name] = spec.name
        if desc.name == 'vtkMultiBlockPLOT3DReader':
            # Move GetOutput to custom FirstBlock
            output_mappings['GetOutput'] = wrap_block_func()  # what!?
            # Move GetOutputPort0 to custom FirstBlock
            # and change destination port to AddInputData_1 or similar
            output_mappings['GetOutputPort0'] = wrap_block_func()

        remap = UpgradeModuleRemap('0.9.5', '1.0.0', '1.0.0',
                                   module_name=desc.name)
        for k, v in input_mappings.iteritems():
            remap.add_remap('dst_port_remap', k, v)
        for k, v in output_mappings.iteritems():
            remap.add_remap('src_port_remap', k, v)
        for k, v in function_mappings.iteritems():
            remap.add_remap('function_remap', k, v)
        _remap.add_module_remap(remap)
        for old, new in module_name_remap.iteritems():
            if desc.name == new:
                # Remap to new name
                remap.new_module = new
                _remap.add_module_remap(remap, old)
Exemple #8
0
def handle_module_upgrade_request(controller, module_id, pipeline):
    global _remap, _controller, _pipeline

    if _remap is None:
        _remap = UpgradePackageRemap()
        remap = UpgradeModuleRemap(None,
                                   '1.0.0',
                                   '1.0.0',
                                   module_name='vtkInteractionHandler')
        remap.add_remap('src_port_remap', 'self', 'Instance')
        _remap.add_module_remap(remap)
        remap = UpgradeModuleRemap(None,
                                   '1.0.0',
                                   '1.0.0',
                                   module_name='VTKCell')
        _remap.add_module_remap(remap)
        remap = UpgradeModuleRemap(None,
                                   '1.0.0',
                                   '1.0.0',
                                   module_name='VTKViewCell',
                                   new_module='VTKCell')
        _remap.add_module_remap(remap)

    _controller = controller
    _pipeline = pipeline
    module_name = pipeline.modules[module_id].name
    module_name = module_name_remap.get(module_name, module_name)
    if not _remap.has_module_remaps(module_name):
        build_remap(module_name)

    try:
        from vistrails.packages.spreadsheet.init import upgrade_cell_to_output
    except ImportError:
        # Manually upgrade to 1.0.1
        if _remap.get_module_remaps(module_name):
            module_remap = copy.copy(_remap)
            module_remap.add_module_remap(
                UpgradeModuleRemap('1.0.0',
                                   '1.0.1',
                                   '1.0.1',
                                   module_name=module_name))
        else:
            module_remap = _remap
    else:
        module_remap = upgrade_cell_to_output(_remap,
                                              module_id,
                                              pipeline,
                                              'VTKCell',
                                              'vtkRendererOutput',
                                              '1.0.1',
                                              'AddRenderer',
                                              start_version='1.0.0')
        if _remap.get_module_remaps(module_name):
            remap = module_remap.get_module_upgrade(module_name, '1.0.0')
            if remap is None:
                # Manually upgrade to 1.0.1
                module_remap.add_module_remap(
                    UpgradeModuleRemap('1.0.0',
                                       '1.0.1',
                                       '1.0.1',
                                       module_name=module_name))

    return UpgradeWorkflowHandler.remap_module(controller, module_id, pipeline,
                                               module_remap)
Exemple #9
0
    def process_module(desc):
        # 0.9.3 upgrades
        if not desc.name in klasses:
            return
        remap = UpgradeModuleRemap(None,
                                   '0.9.3',
                                   '0.9.3',
                                   module_name=desc.name)
        process_ports(desc, remap, 'input')
        process_ports(desc, remap, 'output')
        _remap.add_module_remap(remap)
        for old, new in module_name_remap.iteritems():
            if desc.name == new:
                # Remap using old name
                remap.new_module = old
                _remap.add_module_remap(remap, old)
        # 0.9.5 upgrades
        remap = UpgradeModuleRemap('0.9.3',
                                   '0.9.5',
                                   '0.9.5',
                                   module_name=desc.name)
        remap.add_remap('src_port_remap', 'self', 'Instance')
        _remap.add_module_remap(remap)
        for old, new in module_name_remap.iteritems():
            if desc.name == new:
                # Remap using old name
                remap.new_module = old
                _remap.add_module_remap(remap, old)
        # 1.0.0 upgrades
        input_mappings = {}
        function_mappings = {}
        input_specs = [
            desc.module._get_input_spec(s)
            for s in get_port_specs(desc, 'input')
        ]
        input_names = [s.name for s in input_specs]
        for spec in input_specs:
            if spec is None:
                continue
            elif spec.name == 'TextScaleMode':
                function_mappings['ScaledTextOn'] = \
                                           change_func('TextScaleMode', 'Prop')
            elif spec.method_type == 'OnOff':
                # Convert On/Off to single port
                input_mappings[spec.name + 'On'] = spec.name
                input_mappings[spec.name + 'Off'] = spec.name
                function_mappings[spec.name + 'On'] = \
                                              change_func(spec.name, True)
                function_mappings[spec.name + 'Off'] = \
                                             change_func(spec.name, False)
            elif spec.method_type == 'nullary':
                # Add True to execute empty functions
                function_mappings[spec.name] = change_func(spec.name, True)
            elif spec.method_type == 'SetXToY':
                # Add one mapping for each default
                for enum in spec.values[0]:
                    input_mappings[spec.method_name + enum] = spec.name
                    # Add enum value to function
                    function_mappings[spec.method_name + enum] = \
                                                  change_func(spec.name, enum)
                # Convert SetX(int) methods
                old_name = spec.method_name[:-2]
                function_mappings[spec.method_name[:-2]] = change_SetXint(spec)
            elif spec.port_type == 'basic:Color':
                # Remove 'Widget' suffix on Color
                input_mappings[spec.method_name + 'Widget'] = spec.name
                # Remove 'Set prefix'
                input_mappings[spec.method_name] = spec.name
                # Change old type (float, float, float) -> (,)*3
                function_mappings[spec.method_name] = color_func(spec.name)
            elif spec.port_type == 'basic:File':
                input_mappings[spec.method_name] = to_file_func(
                    spec.name)  # Set*FileName -> (->File->*File)
                input_mappings['Set' +
                               spec.name] = spec.name  # Set*File -> *File
                function_mappings[spec.method_name] = file_func(spec.name)
            elif base_name(spec.name) == 'AddDataSetInput':
                # SetInput* does not exist in VTK 6
                if spec.name[15:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['AddInput'] = spec.name
                input_mappings['AddInput' + spec.name[15:]] = spec.name
            elif base_name(spec.name) == 'InputData':
                # SetInput* does not exist in VTK 6
                if spec.name[9:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['SetInput'] = spec.name
                input_mappings['SetInput' + spec.name[9:]] = spec.name
            elif base_name(spec.name) == 'AddInputData':
                # AddInput* does not exist in VTK 6
                if spec.name[12:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['AddInput'] = spec.name
                input_mappings['AddInput' + spec.name[12:]] = spec.name
            elif base_name(spec.name) == 'SourceData':
                # SetSource* does not exist in VTK 6
                if spec.name[10:] == '_1':
                    # Upgrade from version without overload
                    input_mappings['SetSource'] = spec.name
                input_mappings['SetSource' + spec.name[10:]] = spec.name
            elif spec.method_name == 'Set' + base_name(spec.name):
                if spec.name[-2:] == '_1':
                    # Upgrade from versions without overload
                    input_mappings[spec.name[:-2]] = spec.name
                    input_mappings['Set' + spec.name[:-2]] = spec.name
                # Remove 'Set' prefixes
                input_mappings['Set' + spec.name] = spec.name
            elif spec.name == 'AddInput_1':
                # FIXME what causes this?
                # New version does not have AddInput
                input_mappings['AddInput'] = 'AddInput_1'
            elif spec.name == 'vtkRenderer':
                # Classes having SetRendererWindow also used to have VTKCell
                input_mappings['SetVTKCell'] = fix_vtkcell_func()
        output_mappings = {}
        for spec_name in get_port_specs(desc, 'output'):
            spec = desc.module._get_output_spec(spec_name)
            if spec is None:
                continue
            if spec.method_name == 'Get' + spec.name:
                # Remove 'Get' prefixes
                output_mappings[spec.method_name] = spec.name
        if desc.name == 'vtkMultiBlockPLOT3DReader':
            # Move GetOutput to custom FirstBlock
            output_mappings['GetOutput'] = wrap_block_func()  # what!?
            # Move GetOutputPort0 to custom FirstBlock
            # and change destination port to AddInputData_1 or similar
            output_mappings['GetOutputPort0'] = wrap_block_func()

        remap = UpgradeModuleRemap('0.9.5',
                                   '1.0.0',
                                   '1.0.0',
                                   module_name=desc.name)
        for k, v in input_mappings.iteritems():
            remap.add_remap('dst_port_remap', k, v)
        for k, v in output_mappings.iteritems():
            remap.add_remap('src_port_remap', k, v)
        for k, v in function_mappings.iteritems():
            remap.add_remap('function_remap', k, v)
        _remap.add_module_remap(remap)
        for old, new in module_name_remap.iteritems():
            if desc.name == new:
                # Remap to new name
                remap.new_module = new
                _remap.add_module_remap(remap, old)
Exemple #10
0
from vistrails.core.modules.vistrails_module import Module
from vistrails.core.modules.config import IPort, OPort
from vistrails.core.upgradeworkflow import  UpgradeModuleRemap

class TestUpgradeA(Module):
    _input_ports = [IPort("aaa", "basic:String")]
    _output_ports = [OPort("zzz", "basic:Integer")]

class TestUpgradeB(Module):
    _input_ports = [IPort("b", "basic:Integer")]

_modules = [TestUpgradeA, TestUpgradeB]
_upgrades = {"TestUpgradeA": 
             [UpgradeModuleRemap('0.8', '0.9', '0.9', None,
                                 function_remap={'a': 'aa'},
                                 src_port_remap={'z': 'zz'}),
              UpgradeModuleRemap('0.9', '1.0', '1.0', None,
                                 function_remap={'aa': 'aaa'},
                                 src_port_remap={'zz': 'zzz'})]}