# Copyright (c) 2011 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""DownloadInfo: python representation for downloads visible to Chrome.
Obtain one of these from PyUITestSuite::GetDownloadsInfo() call.
class MyDownloadsTest(pyauto.PyUITest):
def testDownload(self):
self.DownloadAndWaitForStart('http://my.url/package.zip')
self.WaitForAllDownloadsToComplete()
info = self.GetDownloadsInfo()
print info.Downloads()
self.assertEqual(info.Downloads()[0]['file_name'], 'packge.zip')
See more tests in chrome/test/functional/downloads.py.
"""
import os
import simplejson as json
import sys
from pyauto_errors import JSONInterfaceError
class DownloadInfo(object):
"""Represent info about Downloads.
The info is represented as a list of DownloadItems. Each DownloadItem is a
dictionary with various attributes about a download, like id, file_name,
path, state, and so on.
"""
def __init__(self, downloads_dict):
"""Initialize a DownloadInfo from a string of json.
Args:
downloads_dict: a dict returned by the IPC command 'GetDownloadsInfo'.
A typical dict representing one download looks like:
{'downloads': [{'url': 'http://blah/a_file.zip',
'file_name': 'a_file.zip',
'state': 'COMPLETED',
...,
..., } ] }
Raises:
pyauto_errors.JSONInterfaceError if the automation call returns an error.
"""
# JSON string prepared in GetDownloadsInfo() in automation_provider.cc
self.downloadsdict = downloads_dict
if self.downloadsdict.has_key('error'):
raise JSONInterfaceError(self.downloadsdict['error'])
def Downloads(self):
"""Info about all downloads.
This includes downloads in all states (COMPLETE, IN_PROGRESS, ...).
Returns:
[downloaditem1, downloaditem2, ...]
"""
return self.downloadsdict.get('downloads', [])
def DownloadsInProgress(self):
"""Info about all downloads in progress.
Returns:
[downloaditem1, downloaditem2, ...]
"""
return [x for x in self.Downloads() if x['state'] == 'IN_PROGRESS']
def DownloadsComplete(self):
"""Info about all downloads that have completed.
Returns:
[downloaditem1, downloaditem2, ...]
"""
return [x for x in self.Downloads() if x['state'] == 'COMPLETE']