コード例 #1
0
def load(cfg, splitter, clear=False):
    """Read all the bridge files from cfg, and pass them into a splitter
       object.
    """
    countryblock = Bridges.CountryBlock()
    if clear:
        logging.info("Clearing old bridges")
        splitter.clear()
        logging.info("Clearing old blocked bridges")
        countryblock.clear()
    logging.info("Loading bridges")
    status = {}
    if hasattr(cfg, "STATUS_FILE"):
        f = open(cfg.STATUS_FILE, 'r')
        for ID, running, stable in Bridges.parseStatusFile(f):
            status[ID] = running, stable
        f.close()
    if hasattr(cfg, "COUNTRY_BLOCK_FILE"):
        f = open(cfg.COUNTRY_BLOCK_FILE, 'r')
        for fingerprint, countryCode in Bridges.parseCountryBlockFile(f):
            countryblock.insert(fingerprint, countryCode)
        f.close()
    for fname in cfg.BRIDGE_FILES:
        f = open(fname, 'r')
        for bridge in Bridges.parseDescFile(f, cfg.BRIDGE_PURPOSE):
            s = status.get(bridge.getID())
            if s is not None:
                running, stable = s
                bridge.setStatus(running=running, stable=stable)
            bridge.setBlockingCountries(
                countryblock.getBlockingCountries(bridge.fingerprint))
            splitter.insert(bridge)
        f.close()