Index: tools/telemetry/telemetry/page/page_set.py |
diff --git a/tools/telemetry/telemetry/page/page_set.py b/tools/telemetry/telemetry/page/page_set.py |
index df2884ed9523077c159f5649906cb473157e5fcd..b746ca455e03160a707131147ea5751226d501f6 100644 |
--- a/tools/telemetry/telemetry/page/page_set.py |
+++ b/tools/telemetry/telemetry/page/page_set.py |
@@ -4,12 +4,10 @@ |
import csv |
import inspect |
-import logging |
import os |
import sys |
from telemetry.core import util |
-from telemetry.page import cloud_storage |
from telemetry.page import page as page_module |
from telemetry.page import page_set_archive_info |
from telemetry.page.actions.navigate import NavigateAction |
@@ -34,7 +32,7 @@ class PageSetError(Exception): |
class PageSet(object): |
def __init__(self, file_path='', description='', archive_data_file='', |
credentials_path=None, user_agent_type=None, |
- make_javascript_deterministic=True, startup_url='', pages=None, |
+ make_javascript_deterministic=True, startup_url='', |
serving_dirs=None): |
self.file_path = file_path |
# These attributes can be set dynamically by the page set. |
@@ -43,18 +41,15 @@ class PageSet(object): |
self.credentials_path = credentials_path |
self.user_agent_type = user_agent_type |
self.make_javascript_deterministic = make_javascript_deterministic |
- self.wpr_archive_info = None |
+ self._wpr_archive_info = None |
self.startup_url = startup_url |
- if pages: |
- self.pages = pages |
- else: |
- self.pages = [] |
+ self.pages = [] |
if serving_dirs: |
self.serving_dirs = serving_dirs |
else: |
self.serving_dirs = set() |
- def _InitializeFromDict(self, attributes, ignore_archive=False): |
+ def _InitializeFromDict(self, attributes): |
if attributes: |
for k, v in attributes.iteritems(): |
if k in LEGACY_NAME_CONVERSION_DICT: |
@@ -68,7 +63,7 @@ class PageSet(object): |
for page_attributes in attributes['pages']: |
url = page_attributes.pop('url') |
page = page_module.Page( |
- url, self, base_dir=self._base_dir) |
+ url, self, base_dir=self.base_dir) |
for k, v in page_attributes.iteritems(): |
setattr(page, k, v) |
page._SchemeErrorCheck() # pylint: disable=W0212 |
@@ -79,7 +74,7 @@ class PageSet(object): |
delattr(page, legacy_name) |
self.AddPage(page) |
- # Prepend _base_dir to our serving dirs. |
+ # Prepend base_dir to our serving dirs. |
# Always use realpath to ensure no duplicates in set. |
self.serving_dirs = set() |
if attributes and 'serving_dirs' in attributes: |
@@ -87,49 +82,19 @@ class PageSet(object): |
raise ValueError('serving_dirs must be a list.') |
for serving_dir in attributes['serving_dirs']: |
self.serving_dirs.add( |
- os.path.realpath(os.path.join(self._base_dir, serving_dir))) |
- if not ignore_archive: |
- self._InitializeArchive() |
- |
- def _InitializeArchive(self): |
- # Create a PageSetArchiveInfo object. |
- if self.archive_data_file: |
- self.wpr_archive_info = page_set_archive_info.PageSetArchiveInfo.FromFile( |
- os.path.join(self._base_dir, self.archive_data_file)) |
- |
- # Attempt to download the credentials file. |
- if self.credentials_path: |
- try: |
- cloud_storage.GetIfChanged( |
- os.path.join(self._base_dir, self.credentials_path)) |
- except (cloud_storage.CredentialsError, |
- cloud_storage.PermissionError): |
- logging.warning('Cannot retrieve credential file: %s', |
- self.credentials_path) |
- |
- # Scan every serving directory for .sha1 files |
- # and download them from Cloud Storage. Assume all data is public. |
- all_serving_dirs = self.serving_dirs.copy() |
- # Add individual page dirs to all serving dirs. |
- for page in self: |
- if page.is_file: |
- all_serving_dirs.add(page.serving_dir) |
- # Scan all serving dirs. |
- for serving_dir in all_serving_dirs: |
- if os.path.splitdrive(serving_dir)[1] == '/': |
- raise ValueError('Trying to serve root directory from HTTP server.') |
- for dirpath, _, filenames in os.walk(serving_dir): |
- for filename in filenames: |
- path, extension = os.path.splitext( |
- os.path.join(dirpath, filename)) |
- if extension != '.sha1': |
- continue |
- cloud_storage.GetIfChanged(path) |
+ os.path.realpath(os.path.join(self.base_dir, serving_dir))) |
def AddPage(self, page): |
assert page.page_set is self |
self.pages.append(page) |
+ def AddPageWithDefaultRunNavigate(self, page_url): |
+ """ Add a simple page with url equals to page_url that contains only default |
+ RunNavigateSteps. |
+ """ |
+ self.AddPage(page_module.PageWithDefaultRunNavigate( |
+ page_url, self, self.base_dir)) |
+ |
# In json page_set, a page inherits attributes from its page_set. With |
# python page_set, this property will no longer be needed since pages can |
# share property through a common ancestor class. |
@@ -138,15 +103,15 @@ class PageSet(object): |
action_runner.RunAction(NavigateAction()) |
@staticmethod |
- def FromFile(file_path, ignore_archive=False): |
+ def FromFile(file_path): |
_, ext_name = os.path.splitext(file_path) |
if ext_name == '.py': |
- return PageSet.FromPythonFile(file_path, ignore_archive) |
+ return PageSet.FromPythonFile(file_path) |
else: |
raise PageSetError("Pageset %s has unsupported file type" % file_path) |
@staticmethod |
- def FromPythonFile(file_path, ignore_archive=False): |
+ def FromPythonFile(file_path): |
page_set_classes = [] |
module = util.GetPythonPageSetModule(file_path) |
for m in dir(module): |
@@ -162,7 +127,7 @@ class PageSet(object): |
abs_serving_dirs = set() |
for serving_dir in page_set.serving_dirs: |
abs_serving_dirs.add(os.path.realpath(os.path.join( |
- page_set._base_dir, # pylint: disable=W0212 |
+ page_set.base_dir, # pylint: disable=W0212 |
serving_dir))) |
page_set.serving_dirs = abs_serving_dirs |
for page in page_set.pages: |
@@ -176,28 +141,39 @@ class PageSet(object): |
raise PageSetError("""Definition of Run<...> method of all |
pages in %s must be in the form of def Run<...>(self, action_runner):""" |
% file_path) |
- # Set page's _base_dir attribute. |
+ # Set page's base_dir attribute. |
page_file_path = sys.modules[page_class.__module__].__file__ |
page._base_dir = os.path.dirname(page_file_path) |
- if not ignore_archive: |
- page_set._InitializeArchive() # pylint: disable=W0212 |
return page_set |
@staticmethod |
- def FromDict(attributes, file_path='', ignore_archive=False): |
+ def FromDict(attributes, file_path=''): |
page_set = PageSet(file_path) |
# pylint: disable=W0212 |
- page_set._InitializeFromDict(attributes, ignore_archive) |
+ page_set._InitializeFromDict(attributes) |
return page_set |
@property |
- def _base_dir(self): |
+ def base_dir(self): |
if os.path.isfile(self.file_path): |
return os.path.dirname(self.file_path) |
else: |
return self.file_path |
+ @property |
+ def wpr_archive_info(self): # pylint: disable=E0202 |
+ """Lazily constructs wpr_archive_info if it's not set and returns it.""" |
+ if self.archive_data_file and not self._wpr_archive_info: |
+ self._wpr_archive_info = ( |
+ page_set_archive_info.PageSetArchiveInfo.FromFile( |
+ os.path.join(self.base_dir, self.archive_data_file))) |
+ return self._wpr_archive_info |
+ |
+ @wpr_archive_info.setter |
+ def wpr_archive_info(self, value): # pylint: disable=E0202 |
+ self._wpr_archive_info = value |
+ |
def ContainsOnlyFileURLs(self): |
for page in self.pages: |
if not page.is_file: |