• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2014 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import json
6import os
7import threading
8
9from pylib import constants
10_BLACKLIST_JSON = os.path.join(
11    constants.DIR_SOURCE_ROOT,
12    os.environ.get('CHROMIUM_OUT_DIR', 'out'),
13    'bad_devices.json')
14
15# Note that this only protects against concurrent accesses to the blacklist
16# within a process.
17_blacklist_lock = threading.RLock()
18
19def ReadBlacklist():
20  """Reads the blacklist from the _BLACKLIST_JSON file.
21
22  Returns:
23    A list containing bad devices.
24  """
25  with _blacklist_lock:
26    if not os.path.exists(_BLACKLIST_JSON):
27      return []
28
29    with open(_BLACKLIST_JSON, 'r') as f:
30      return json.load(f)
31
32
33def WriteBlacklist(blacklist):
34  """Writes the provided blacklist to the _BLACKLIST_JSON file.
35
36  Args:
37    blacklist: list of bad devices to write to the _BLACKLIST_JSON file.
38  """
39  with _blacklist_lock:
40    with open(_BLACKLIST_JSON, 'w') as f:
41      json.dump(list(set(blacklist)), f)
42
43
44def ExtendBlacklist(devices):
45  """Adds devices to _BLACKLIST_JSON file.
46
47  Args:
48    devices: list of bad devices to be added to the _BLACKLIST_JSON file.
49  """
50  with _blacklist_lock:
51    blacklist = ReadBlacklist()
52    blacklist.extend(devices)
53    WriteBlacklist(blacklist)
54
55
56def ResetBlacklist():
57  """Erases the _BLACKLIST_JSON file if it exists."""
58  with _blacklist_lock:
59    if os.path.exists(_BLACKLIST_JSON):
60      os.remove(_BLACKLIST_JSON)
61
62