OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """PyAuto: Python Interface to Chromium's Automation Proxy. | 6 """PyAuto: Python Interface to Chromium's Automation Proxy. |
7 | 7 |
8 PyAuto uses swig to expose Automation Proxy interfaces to Python. | 8 PyAuto uses swig to expose Automation Proxy interfaces to Python. |
9 For complete documentation on the functionality available, | 9 For complete documentation on the functionality available, |
10 run pydoc on this file. | 10 run pydoc on this file. |
(...skipping 776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
787 retry_sleep: the sleep interval (in secs) before retrying |function|. | 787 retry_sleep: the sleep interval (in secs) before retrying |function|. |
788 Defaults to 0.25 secs. | 788 Defaults to 0.25 secs. |
789 args: the args to pass to |function| | 789 args: the args to pass to |function| |
790 expect_retval: the expected return value for |function|. This forms the | 790 expect_retval: the expected return value for |function|. This forms the |
791 exit criteria. In case this is None (the default), | 791 exit criteria. In case this is None (the default), |
792 |function|'s return value is checked for truth, | 792 |function|'s return value is checked for truth, |
793 so 'non-empty-string' should match with True | 793 so 'non-empty-string' should match with True |
794 debug: if True, displays debug info at each retry. | 794 debug: if True, displays debug info at each retry. |
795 | 795 |
796 Returns: | 796 Returns: |
797 True, if returning when |function| evaluated to True | 797 The return value of the calling function when |function| evaluates to |
798 True. | |
Nirnimesh
2012/08/08 21:58:31
append: (or matches expect_retval)
| |
798 False, when returning due to timeout | 799 False, when returning due to timeout |
799 """ | 800 """ |
800 if timeout == -1: # Default | 801 if timeout == -1: # Default |
801 timeout = self.action_max_timeout_ms() / 1000.0 | 802 timeout = self.action_max_timeout_ms() / 1000.0 |
802 assert callable(function), "function should be a callable" | 803 assert callable(function), "function should be a callable" |
803 begin = time.time() | 804 begin = time.time() |
804 debug_begin = begin | 805 debug_begin = begin |
805 while timeout is None or time.time() - begin <= timeout: | 806 while timeout is None or time.time() - begin <= timeout: |
806 retval = function(*args) | 807 retval = function(*args) |
807 if (expect_retval is None and retval) or expect_retval == retval: | 808 if (expect_retval is None and retval) or \ |
808 return True | 809 (expect_retval is not None and expect_retval == retval): |
810 return retval | |
809 if debug and time.time() - debug_begin > 5: | 811 if debug and time.time() - debug_begin > 5: |
810 debug_begin += 5 | 812 debug_begin += 5 |
811 if function.func_name == (lambda: True).func_name: | 813 if function.func_name == (lambda: True).func_name: |
812 function_info = inspect.getsource(function).strip() | 814 function_info = inspect.getsource(function).strip() |
813 else: | 815 else: |
814 function_info = '%s()' % function.func_name | 816 function_info = '%s()' % function.func_name |
815 logging.debug('WaitUntil(%s:%d %s) still waiting. ' | 817 logging.debug('WaitUntil(%s:%d %s) still waiting. ' |
816 'Expecting %s. Last returned %s.', | 818 'Expecting %s. Last returned %s.', |
817 os.path.basename(inspect.getsourcefile(function)), | 819 os.path.basename(inspect.getsourcefile(function)), |
818 inspect.getsourcelines(function)[1], | 820 inspect.getsourcelines(function)[1], |
(...skipping 4352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
5171 | 5173 |
5172 Returns: | 5174 Returns: |
5173 The SSID of the connected network or None if we're not connected. | 5175 The SSID of the connected network or None if we're not connected. |
5174 """ | 5176 """ |
5175 service_list = self.GetNetworkInfo() | 5177 service_list = self.GetNetworkInfo() |
5176 connected_service_path = service_list.get('connected_wifi') | 5178 connected_service_path = service_list.get('connected_wifi') |
5177 if 'wifi_networks' in service_list and \ | 5179 if 'wifi_networks' in service_list and \ |
5178 connected_service_path in service_list['wifi_networks']: | 5180 connected_service_path in service_list['wifi_networks']: |
5179 return service_list['wifi_networks'][connected_service_path]['name'] | 5181 return service_list['wifi_networks'][connected_service_path]['name'] |
5180 | 5182 |
5181 def GetServicePath(self, ssid): | 5183 def GetServicePath(self, ssid, encryption=None, timeout=30): |
5182 """Returns the service path associated with an SSID. | 5184 """Waits until the SSID is observed and returns its service path. |
5183 | 5185 |
5184 Args: | 5186 Args: |
5185 ssid: String defining the SSID we are searching for. | 5187 ssid: String defining the SSID we are searching for. |
5188 encryption: Encryption type of the network; either None to return the | |
5189 first instance of network that matches the ssid, '' for | |
5190 an empty network, 'PSK', 'WEP' or '8021X'. | |
5191 timeout: Duration to wait for ssid to appear. | |
5186 | 5192 |
5187 Returns: | 5193 Returns: |
5188 The service path or None if SSID does not exist. | 5194 The service path or None if SSID does not exist after timeout period. |
5189 """ | 5195 """ |
5190 service_list = self.GetNetworkInfo() | 5196 def _get_service_path(): |
5191 service_list = service_list.get('wifi_networks', []) | 5197 service_list = self.GetNetworkInfo().get('wifi_networks', []) |
5192 for service_path, service_obj in service_list.iteritems(): | 5198 for service_path, service_obj in service_list.iteritems(): |
5193 if service_obj['name'] == ssid: | 5199 service_encr = 'PSK' if service_obj['encryption'] in ['WPA', 'RSN'] \ |
5194 return service_path | 5200 else service_obj['encryption'] |
5195 return None | 5201 |
5202 if service_obj['name'] == ssid and \ | |
5203 (encryption == None or service_encr == encryption): | |
5204 return service_path | |
5205 self.NetworkScan() | |
5206 return None | |
5207 | |
5208 service_path = self.WaitUntil(_get_service_path, timeout=timeout, | |
5209 retry_sleep=1) | |
5210 return service_path or None | |
5196 | 5211 |
5197 def NetworkScan(self): | 5212 def NetworkScan(self): |
5198 """Causes ChromeOS to scan for available wifi networks. | 5213 """Causes ChromeOS to scan for available wifi networks. |
5199 | 5214 |
5200 Blocks until scanning is complete. | 5215 Blocks until scanning is complete. |
5201 | 5216 |
5202 Returns: | 5217 Returns: |
5203 The new list of networks obtained from GetNetworkInfo(). | 5218 The new list of networks obtained from GetNetworkInfo(). |
5204 | 5219 |
5205 Raises: | 5220 Raises: |
(...skipping 1453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
6659 successful = result.wasSuccessful() | 6674 successful = result.wasSuccessful() |
6660 if not successful: | 6675 if not successful: |
6661 pyauto_tests_file = os.path.join(self.TestsDir(), self._tests_filename) | 6676 pyauto_tests_file = os.path.join(self.TestsDir(), self._tests_filename) |
6662 print >>sys.stderr, 'Tests can be disabled by editing %s. ' \ | 6677 print >>sys.stderr, 'Tests can be disabled by editing %s. ' \ |
6663 'Ref: %s' % (pyauto_tests_file, _PYAUTO_DOC_URL) | 6678 'Ref: %s' % (pyauto_tests_file, _PYAUTO_DOC_URL) |
6664 sys.exit(not successful) | 6679 sys.exit(not successful) |
6665 | 6680 |
6666 | 6681 |
6667 if __name__ == '__main__': | 6682 if __name__ == '__main__': |
6668 Main() | 6683 Main() |
OLD | NEW |