Home | History | Annotate | Download | only in pyautolib
      1 # Copyright (c) 2011 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 
      5 """DownloadInfo: python representation for downloads visible to Chrome.
      6 
      7 Obtain one of these from PyUITestSuite::GetDownloadsInfo() call.
      8 
      9 class MyDownloadsTest(pyauto.PyUITest):
     10   def testDownload(self):
     11     self.DownloadAndWaitForStart('http://my.url/package.zip')
     12     self.WaitForAllDownloadsToComplete()
     13     info = self.GetDownloadsInfo()
     14     print info.Downloads()
     15     self.assertEqual(info.Downloads()[0]['file_name'], 'packge.zip')
     16 
     17 See more tests in chrome/test/functional/downloads.py.
     18 """
     19 
     20 import os
     21 import simplejson as json
     22 import sys
     23 
     24 from pyauto_errors import JSONInterfaceError
     25 
     26 
     27 class DownloadInfo(object):
     28   """Represent info about Downloads.
     29 
     30   The info is represented as a list of DownloadItems.  Each DownloadItem is a
     31   dictionary with various attributes about a download, like id, file_name,
     32   path, state, and so on.
     33   """
     34   def __init__(self, downloads_dict):
     35     """Initialize a DownloadInfo from a string of json.
     36 
     37     Args:
     38       downloads_dict: a dict returned by the IPC command 'GetDownloadsInfo'.
     39                    A typical dict representing one download looks like:
     40                    {'downloads': [{'url': 'http://blah/a_file.zip',
     41                                    'file_name': 'a_file.zip',
     42                                    'state': 'COMPLETED',
     43                                    ...,
     44                                    ..., } ] }
     45 
     46     Raises:
     47       pyauto_errors.JSONInterfaceError if the automation call returns an error.
     48     """
     49     # JSON string prepared in GetDownloadsInfo() in automation_provider.cc
     50     self.downloadsdict = downloads_dict
     51     if self.downloadsdict.has_key('error'):
     52       raise JSONInterfaceError(self.downloadsdict['error'])
     53 
     54   def Downloads(self):
     55     """Info about all downloads.
     56 
     57     This includes downloads in all states (COMPLETE, IN_PROGRESS, ...).
     58 
     59     Returns:
     60       [downloaditem1, downloaditem2, ...]
     61     """
     62     return self.downloadsdict.get('downloads', [])
     63 
     64   def DownloadsInProgress(self):
     65     """Info about all downloads in progress.
     66 
     67     Returns:
     68       [downloaditem1, downloaditem2, ...]
     69     """
     70     return [x for x in self.Downloads() if x['state'] == 'IN_PROGRESS']
     71 
     72   def DownloadsComplete(self):
     73     """Info about all downloads that have completed.
     74 
     75     Returns:
     76       [downloaditem1, downloaditem2, ...]
     77     """
     78     return [x for x in self.Downloads() if x['state'] == 'COMPLETE']
     79