blob: a141d62b81b828f17a243dbb70adbe8772ddba30 [file] [log] [blame]
# 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)