Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: build/android/pylib/device/device_utils.py

Issue 806843002: Reland of Migrate DeviceUtils.ReadFile to adb_wrapper (try 3) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: added android_browser_backend_unittest Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 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 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Provides a variety of device interactions based on adb. 5 """Provides a variety of device interactions based on adb.
6 6
7 Eventually, this will be based on adb_wrapper. 7 Eventually, this will be based on adb_wrapper.
8 """ 8 """
9 # pylint: disable=W0613 9 # pylint: disable=W0613
10 10
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 _DEFAULT_TIMEOUT, _DEFAULT_RETRIES) 65 _DEFAULT_TIMEOUT, _DEFAULT_RETRIES)
66 def RestartServer(): 66 def RestartServer():
67 """Restarts the adb server. 67 """Restarts the adb server.
68 68
69 Raises: 69 Raises:
70 CommandFailedError if we fail to kill or restart the server. 70 CommandFailedError if we fail to kill or restart the server.
71 """ 71 """
72 pylib.android_commands.AndroidCommands().RestartAdbServer() 72 pylib.android_commands.AndroidCommands().RestartAdbServer()
73 73
74 74
75 def _JoinLines(lines):
76 # makes sure that the last line is also terminated, and is more memory
77 # efficient than first appending an end-line to each line and then joining
78 # all of them together.
79 return ''.join(s for line in lines for s in (line, '\n'))
80
81
75 class DeviceUtils(object): 82 class DeviceUtils(object):
76 83
77 _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$') 84 _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$')
78 85
79 def __init__(self, device, default_timeout=_DEFAULT_TIMEOUT, 86 def __init__(self, device, default_timeout=_DEFAULT_TIMEOUT,
80 default_retries=_DEFAULT_RETRIES): 87 default_retries=_DEFAULT_RETRIES):
81 """DeviceUtils constructor. 88 """DeviceUtils constructor.
82 89
83 Args: 90 Args:
84 device: Either a device serial, an existing AdbWrapper instance, or an 91 device: Either a device serial, an existing AdbWrapper instance, or an
(...skipping 779 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 CommandFailedError on failure. 871 CommandFailedError on failure.
865 CommandTimeoutError on timeout. 872 CommandTimeoutError on timeout.
866 """ 873 """
867 # Create the base dir if it doesn't exist already 874 # Create the base dir if it doesn't exist already
868 dirname = os.path.dirname(host_path) 875 dirname = os.path.dirname(host_path)
869 if dirname and not os.path.exists(dirname): 876 if dirname and not os.path.exists(dirname):
870 os.makedirs(dirname) 877 os.makedirs(dirname)
871 self.adb.Pull(device_path, host_path) 878 self.adb.Pull(device_path, host_path)
872 879
873 @decorators.WithTimeoutAndRetriesFromInstance() 880 @decorators.WithTimeoutAndRetriesFromInstance()
874 def ReadFile(self, device_path, as_root=False, timeout=None, retries=None): 881 def ReadFile(self, device_path, as_root=False,
882 timeout=None, retries=None):
875 """Reads the contents of a file from the device. 883 """Reads the contents of a file from the device.
876 884
877 Args: 885 Args:
878 device_path: A string containing the absolute path of the file to read 886 device_path: A string containing the absolute path of the file to read
879 from the device. 887 from the device.
880 as_root: A boolean indicating whether the read should be executed with 888 as_root: A boolean indicating whether the read should be executed with
881 root privileges. 889 root privileges.
882 timeout: timeout in seconds 890 timeout: timeout in seconds
883 retries: number of retries 891 retries: number of retries
884 892
885 Returns: 893 Returns:
886 The contents of the file at |device_path| as a list of lines. 894 The contents of |device_path| as a string. Contents are intepreted using
895 universal newlines, so the caller will see them encoded as '\n'. Also,
896 all lines will be terminated.
887 897
888 Raises: 898 Raises:
889 CommandFailedError if the file can't be read. 899 AdbCommandFailedError if the file can't be read.
890 CommandTimeoutError on timeout. 900 CommandTimeoutError on timeout.
891 DeviceUnreachableError on missing device. 901 DeviceUnreachableError on missing device.
892 """ 902 """
893 # TODO(jbudorick) Evaluate whether we want to return a list of lines after 903 return _JoinLines(self.RunShellCommand(
894 # the implementation switch, and if file not found should raise exception. 904 ['cat', device_path], as_root=as_root, check_return=True))
895 if as_root:
896 if not self.old_interface.CanAccessProtectedFileContents():
897 raise device_errors.CommandFailedError(
898 'Cannot read from %s with root privileges.' % device_path)
899 return self.old_interface.GetProtectedFileContents(device_path)
900 else:
901 return self.old_interface.GetFileContents(device_path)
902 905
903 @decorators.WithTimeoutAndRetriesFromInstance() 906 @decorators.WithTimeoutAndRetriesFromInstance()
904 def WriteFile(self, device_path, contents, as_root=False, force_push=False, 907 def WriteFile(self, device_path, contents, as_root=False, force_push=False,
905 timeout=None, retries=None): 908 timeout=None, retries=None):
906 """Writes |contents| to a file on the device. 909 """Writes |contents| to a file on the device.
907 910
908 Args: 911 Args:
909 device_path: A string containing the absolute path to the file to write 912 device_path: A string containing the absolute path to the file to write
910 on the device. 913 on the device.
911 contents: A string containing the data to write to the device. 914 contents: A string containing the data to write to the device.
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
1269 Returns: 1272 Returns:
1270 A Parallelizer operating over |devices|. 1273 A Parallelizer operating over |devices|.
1271 """ 1274 """
1272 if not devices: 1275 if not devices:
1273 devices = adb_wrapper.AdbWrapper.GetDevices() 1276 devices = adb_wrapper.AdbWrapper.GetDevices()
1274 devices = [d if isinstance(d, cls) else cls(d) for d in devices] 1277 devices = [d if isinstance(d, cls) else cls(d) for d in devices]
1275 if async: 1278 if async:
1276 return parallelizer.Parallelizer(devices) 1279 return parallelizer.Parallelizer(devices)
1277 else: 1280 else:
1278 return parallelizer.SyncParallelizer(devices) 1281 return parallelizer.SyncParallelizer(devices)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698