# Copyright 2014 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import json import os import threading from pylib import constants _BLACKLIST_JSON = os.path.join( constants.DIR_SOURCE_ROOT, os.environ.get('CHROMIUM_OUT_DIR', 'out'), 'bad_devices.json') # Note that this only protects against concurrent accesses to the blacklist # within a process. _blacklist_lock = threading.RLock() def ReadBlacklist(): """Reads the blacklist from the _BLACKLIST_JSON file. Returns: A list containing bad devices. """ with _blacklist_lock: if not os.path.exists(_BLACKLIST_JSON): return [] with open(_BLACKLIST_JSON, 'r') as f: return json.load(f) def WriteBlacklist(blacklist): """Writes the provided blacklist to the _BLACKLIST_JSON file. Args: blacklist: list of bad devices to write to the _BLACKLIST_JSON file. """ with _blacklist_lock: with open(_BLACKLIST_JSON, 'w') as f: json.dump(list(set(blacklist)), f) def ExtendBlacklist(devices): """Adds devices to _BLACKLIST_JSON file. Args: devices: list of bad devices to be added to the _BLACKLIST_JSON file. """ with _blacklist_lock: blacklist = ReadBlacklist() blacklist.extend(devices) WriteBlacklist(blacklist) def ResetBlacklist(): """Erases the _BLACKLIST_JSON file if it exists.""" with _blacklist_lock: if os.path.exists(_BLACKLIST_JSON): os.remove(_BLACKLIST_JSON)