1# Copyright 2015 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
5from devil.android import device_blacklist
6from devil.android import device_errors
7from devil.android import device_utils
8
9
10def GetDevices(requested_devices, blacklist_file):
11  blacklist = (device_blacklist.Blacklist(blacklist_file)
12               if blacklist_file
13               else None)
14
15  devices = device_utils.DeviceUtils.HealthyDevices(blacklist)
16  if not devices:
17    raise device_errors.NoDevicesError()
18  elif requested_devices:
19    requested = set(requested_devices)
20    available = set(str(d) for d in devices)
21    missing = requested.difference(available)
22    if missing:
23      raise device_errors.DeviceUnreachableError(next(iter(missing)))
24    return sorted(device_utils.DeviceUtils(d)
25                  for d in available.intersection(requested))
26  else:
27    return devices
28
29