예제 #1
0
def instantiate_target(tdesc,
                       params,
                       connect=None,
                       extra_platform_params=None):
    # pylint: disable=too-many-locals,too-many-branches
    target_params = get_config_point_map(tdesc.target_params)
    platform_params = get_config_point_map(tdesc.platform_params)
    conn_params = get_config_point_map(tdesc.conn_params)
    assistant_params = get_config_point_map(tdesc.assistant_params)

    tp, pp, cp = {}, {}, {}

    for supported_params, new_params in (target_params,
                                         tp), (platform_params,
                                               pp), (conn_params, cp):
        for name, value in supported_params.items():
            if value.default and name == value.name:
                new_params[name] = value.default

    for name, value in params.items():
        if name in target_params:
            if not target_params[name].deprecated:
                tp[name] = value
        elif name in platform_params:
            if not platform_params[name].deprecated:
                pp[name] = value
        elif name in conn_params:
            if not conn_params[name].deprecated:
                cp[name] = value
        elif name in assistant_params:
            pass
        else:
            msg = 'Unexpected parameter for {}: {}'
            raise ValueError(msg.format(tdesc.name, name))

    for pname, pval in (extra_platform_params or {}).items():
        if pname in pp:
            raise RuntimeError('Platform parameter clash: {}'.format(pname))
        pp[pname] = pval

    tp['platform'] = (tdesc.platform or Platform)(**pp)
    if cp:
        tp['connection_settings'] = cp
    if tdesc.connection:
        tp['conn_cls'] = tdesc.connection
    if connect is not None:
        tp['connect'] = connect

    return tdesc.target(**tp)
예제 #2
0
def instantiate_target(tdesc, params, connect=None, extra_platform_params=None):
    # pylint: disable=too-many-locals,too-many-branches
    target_params = get_config_point_map(tdesc.target_params)
    platform_params = get_config_point_map(tdesc.platform_params)
    conn_params = get_config_point_map(tdesc.conn_params)
    assistant_params = get_config_point_map(tdesc.assistant_params)

    tp, pp, cp = {}, {}, {}

    for supported_params, new_params in (target_params, tp), (platform_params, pp), (conn_params, cp):
        for name, value in supported_params.items():
            if value.default and name == value.name:
                new_params[name] = value.default

    for name, value in params.items():
        if name in target_params:
            tp[name] = value
        elif name in platform_params:
            pp[name] = value
        elif name in conn_params:
            cp[name] = value
        elif name in assistant_params:
            pass
        else:
            msg = 'Unexpected parameter for {}: {}'
            raise ValueError(msg.format(tdesc.name, name))

    for pname, pval in (extra_platform_params or {}).items():
        if pname in pp:
            raise RuntimeError('Platform parameter clash: {}'.format(pname))
        pp[pname] = pval

    tp['platform'] = (tdesc.platform or Platform)(**pp)
    if cp:
        tp['connection_settings'] = cp
    if tdesc.connection:
        tp['conn_cls'] = tdesc.connection
    if connect is not None:
        tp['connect'] = connect

    return tdesc.target(**tp)
예제 #3
0
 def _get_target_params(self, name):
     td = self.targets[name]
     return get_config_point_map(
         chain(td.target_params, td.platform_params, td.conn_params,
               td.assistant_params))
예제 #4
0
 def get_plugin_parameters(self, name):
     if name in self.targets:
         return self._get_target_params(name)
     params = self.loader.get_plugin_class(name).parameters
     return get_config_point_map(params)
예제 #5
0
 def _get_target_params(self, name):
     td = self.targets[name]
     return get_config_point_map(chain(td.target_params, td.platform_params, td.conn_params, td.assistant_params))
예제 #6
0
 def get_plugin_parameters(self, name):
     if name in self.targets:
         return self._get_target_params(name)
     params = self.loader.get_plugin_class(name).parameters
     return get_config_point_map(params)