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

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

Issue 885443002: Roll Chrome into Mojo. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT mojo Created 5 years, 10 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
« no previous file with comments | « build/android/pylib/constants.py ('k') | build/android/pylib/device/device_utils_test.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 adb_wrapper.AdbWrapper.StartServer() 84 adb_wrapper.AdbWrapper.StartServer()
85 if not timeout_retry.WaitFor(adb_started, wait_period=1, max_tries=5): 85 if not timeout_retry.WaitFor(adb_started, wait_period=1, max_tries=5):
86 raise device_errors.CommandFailedError('Failed to start adb server') 86 raise device_errors.CommandFailedError('Failed to start adb server')
87 87
88 88
89 def _GetTimeStamp(): 89 def _GetTimeStamp():
90 """Return a basic ISO 8601 time stamp with the current local time.""" 90 """Return a basic ISO 8601 time stamp with the current local time."""
91 return time.strftime('%Y%m%dT%H%M%S', time.localtime()) 91 return time.strftime('%Y%m%dT%H%M%S', time.localtime())
92 92
93 93
94 def _JoinLines(lines):
95 # makes sure that the last line is also terminated, and is more memory
96 # efficient than first appending an end-line to each line and then joining
97 # all of them together.
98 return ''.join(s for line in lines for s in (line, '\n'))
99
100
94 class DeviceUtils(object): 101 class DeviceUtils(object):
95 102
96 _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$') 103 _VALID_SHELL_VARIABLE = re.compile('^[a-zA-Z_][a-zA-Z0-9_]*$')
97 104
98 def __init__(self, device, default_timeout=_DEFAULT_TIMEOUT, 105 def __init__(self, device, default_timeout=_DEFAULT_TIMEOUT,
99 default_retries=_DEFAULT_RETRIES): 106 default_retries=_DEFAULT_RETRIES):
100 """DeviceUtils constructor. 107 """DeviceUtils constructor.
101 108
102 Args: 109 Args:
103 device: Either a device serial, an existing AdbWrapper instance, or an 110 device: Either a device serial, an existing AdbWrapper instance, or an
(...skipping 772 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 CommandFailedError on failure. 883 CommandFailedError on failure.
877 CommandTimeoutError on timeout. 884 CommandTimeoutError on timeout.
878 """ 885 """
879 # Create the base dir if it doesn't exist already 886 # Create the base dir if it doesn't exist already
880 dirname = os.path.dirname(host_path) 887 dirname = os.path.dirname(host_path)
881 if dirname and not os.path.exists(dirname): 888 if dirname and not os.path.exists(dirname):
882 os.makedirs(dirname) 889 os.makedirs(dirname)
883 self.adb.Pull(device_path, host_path) 890 self.adb.Pull(device_path, host_path)
884 891
885 @decorators.WithTimeoutAndRetriesFromInstance() 892 @decorators.WithTimeoutAndRetriesFromInstance()
886 def ReadFile(self, device_path, as_root=False, timeout=None, retries=None): 893 def ReadFile(self, device_path, as_root=False,
894 timeout=None, retries=None):
887 """Reads the contents of a file from the device. 895 """Reads the contents of a file from the device.
888 896
889 Args: 897 Args:
890 device_path: A string containing the absolute path of the file to read 898 device_path: A string containing the absolute path of the file to read
891 from the device. 899 from the device.
892 as_root: A boolean indicating whether the read should be executed with 900 as_root: A boolean indicating whether the read should be executed with
893 root privileges. 901 root privileges.
894 timeout: timeout in seconds 902 timeout: timeout in seconds
895 retries: number of retries 903 retries: number of retries
896 904
897 Returns: 905 Returns:
898 The contents of the file at |device_path| as a list of lines. 906 The contents of |device_path| as a string. Contents are intepreted using
907 universal newlines, so the caller will see them encoded as '\n'. Also,
908 all lines will be terminated.
899 909
900 Raises: 910 Raises:
901 CommandFailedError if the file can't be read. 911 AdbCommandFailedError if the file can't be read.
902 CommandTimeoutError on timeout. 912 CommandTimeoutError on timeout.
903 DeviceUnreachableError on missing device. 913 DeviceUnreachableError on missing device.
904 """ 914 """
905 # TODO(jbudorick) Evaluate whether we want to return a list of lines after 915 return _JoinLines(self.RunShellCommand(
906 # the implementation switch, and if file not found should raise exception. 916 ['cat', device_path], as_root=as_root, check_return=True))
907 if as_root:
908 if not self.old_interface.CanAccessProtectedFileContents():
909 raise device_errors.CommandFailedError(
910 'Cannot read from %s with root privileges.' % device_path)
911 return self.old_interface.GetProtectedFileContents(device_path)
912 else:
913 return self.old_interface.GetFileContents(device_path)
914 917
915 @decorators.WithTimeoutAndRetriesFromInstance() 918 @decorators.WithTimeoutAndRetriesFromInstance()
916 def WriteFile(self, device_path, contents, as_root=False, force_push=False, 919 def WriteFile(self, device_path, contents, as_root=False, force_push=False,
917 timeout=None, retries=None): 920 timeout=None, retries=None):
918 """Writes |contents| to a file on the device. 921 """Writes |contents| to a file on the device.
919 922
920 Args: 923 Args:
921 device_path: A string containing the absolute path to the file to write 924 device_path: A string containing the absolute path to the file to write
922 on the device. 925 on the device.
923 contents: A string containing the data to write to the device. 926 contents: A string containing the data to write to the device.
(...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after
1288 Returns: 1291 Returns:
1289 A Parallelizer operating over |devices|. 1292 A Parallelizer operating over |devices|.
1290 """ 1293 """
1291 if not devices: 1294 if not devices:
1292 devices = adb_wrapper.AdbWrapper.GetDevices() 1295 devices = adb_wrapper.AdbWrapper.GetDevices()
1293 devices = [d if isinstance(d, cls) else cls(d) for d in devices] 1296 devices = [d if isinstance(d, cls) else cls(d) for d in devices]
1294 if async: 1297 if async:
1295 return parallelizer.Parallelizer(devices) 1298 return parallelizer.Parallelizer(devices)
1296 else: 1299 else:
1297 return parallelizer.SyncParallelizer(devices) 1300 return parallelizer.SyncParallelizer(devices)
OLDNEW
« no previous file with comments | « build/android/pylib/constants.py ('k') | build/android/pylib/device/device_utils_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698