

def build_component_list(compdict, custom=None, convert=update_classpath):
    'Compose a component list from a { class: order } dictionary.'

    def _check_components(complist):
        if (len({convert(c) for c in complist}) != len(complist)):
            raise ValueError('Some paths in {!r} convert to the same object, please update your settings'.format(complist))

    def _map_keys(compdict):
        if isinstance(compdict, BaseSettings):
            compbs = BaseSettings()
            for (k, v) in six.iteritems(compdict):
                prio = compdict.getpriority(k)
                if (compbs.getpriority(convert(k)) == prio):
                    raise ValueError('Some paths in {!r} convert to the same object, please update your settings'.format(list(compdict.keys())))
                else:
                    compbs.set(convert(k), v, priority=prio)
            return compbs
        else:
            _check_components(compdict)
            return {convert(k): v for (k, v) in six.iteritems(compdict)}
    if isinstance(custom, (list, tuple)):
        _check_components(custom)
        return type(custom)((convert(c) for c in custom))
    if (custom is not None):
        compdict.update(custom)
    compdict = without_none_values(_map_keys(compdict))
    return [k for (k, v) in sorted(six.iteritems(compdict), key=itemgetter(1))]

dataset/ETHPy150Open scrapy/scrapy/scrapy/utils/conf.py build_component_list/original