OLD | NEW |
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 import inspect | 5 import inspect |
6 import os | 6 import os |
7 | 7 |
8 from telemetry import user_story as user_story_module | 8 from telemetry import user_story as user_story_module |
9 from telemetry.wpr import archive_info | 9 from telemetry.wpr import archive_info |
10 | 10 |
11 | 11 |
12 class UserStorySet(object): | 12 class UserStorySet(object): |
13 """A collection of user story. | 13 """A collection of user story. |
14 | 14 |
15 A typical usage of UserStorySet would be to subclass it and then calling | 15 A typical usage of UserStorySet would be to subclass it and then calling |
16 AddUserStory for each UserStory.. | 16 AddUserStory for each UserStory.. |
17 """ | 17 """ |
18 | 18 |
19 def __init__(self, archive_data_file='', cloud_storage_bucket=None, | 19 def __init__(self, archive_data_file='', cloud_storage_bucket=None, |
20 serving_dirs=None): | 20 serving_dirs=None): |
21 """Creates a new UserStorySet. | 21 """Creates a new UserStorySet. |
22 | 22 |
23 Args: | 23 Args: |
24 archive_data_file: The path to Web Page Replay's archive data, relative | 24 archive_data_file: The path to Web Page Replay's archive data, relative |
25 to self.base_dir. | 25 to self.base_dir. |
26 cloud_storage_bucket: The cloud storage bucket used to download | 26 cloud_storage_bucket: The cloud storage bucket used to download |
27 Web Page Replay's archive data. Valid values are: None, | 27 Web Page Replay's archive data. Valid values are: None, |
28 PUBLIC_BUCKET, PARTNER_BUCKET, or INTERNAL_BUCKET (defined | 28 PUBLIC_BUCKET, PARTNER_BUCKET, or INTERNAL_BUCKET (defined |
29 in telemetry.util.cloud_storage). | 29 in telemetry.util.cloud_storage). |
| 30 serving_dirs: A set of paths, relative to self.base_dir, to directories |
| 31 containing hash files for non-wpr archive data stored in cloud |
| 32 storage. |
30 """ | 33 """ |
31 self.user_stories = [] | 34 self.user_stories = [] |
32 self._archive_data_file = archive_data_file | 35 self._archive_data_file = archive_data_file |
33 self._wpr_archive_info = None | 36 self._wpr_archive_info = None |
34 archive_info.AssertValidCloudStorageBucket(cloud_storage_bucket) | 37 archive_info.AssertValidCloudStorageBucket(cloud_storage_bucket) |
35 self._cloud_storage_bucket = cloud_storage_bucket | 38 self._cloud_storage_bucket = cloud_storage_bucket |
36 self._base_dir = os.path.dirname(inspect.getfile(self.__class__)) | 39 self._base_dir = os.path.dirname(inspect.getfile(self.__class__)) |
37 # Convert any relative serving_dirs to absolute paths. | 40 # Convert any relative serving_dirs to absolute paths. |
38 self._serving_dirs = set(os.path.realpath(os.path.join(self.base_dir, d)) | 41 self._serving_dirs = set(os.path.realpath(os.path.join(self.base_dir, d)) |
39 for d in serving_dirs or []) | 42 for d in serving_dirs or []) |
40 | 43 |
41 @property | 44 @property |
42 def base_dir(self): | 45 def base_dir(self): |
43 """The base directory to resolve archive_data_file. | 46 """The base directory to resolve archive_data_file. |
44 | 47 |
45 This defaults to the directory containing the UserStorySet instance's class. | 48 This defaults to the directory containing the UserStorySet instance's class. |
46 """ | 49 """ |
47 return self._base_dir | 50 return self._base_dir |
48 | 51 |
49 @property | 52 @property |
50 def serving_dirs(self): | 53 def serving_dirs(self): |
51 return self._serving_dirs | 54 all_serving_dirs = self._serving_dirs.copy() |
| 55 for user_story in self.user_stories: |
| 56 if user_story.serving_dir: |
| 57 all_serving_dirs.add(user_story.serving_dir) |
| 58 return all_serving_dirs |
52 | 59 |
53 @property | 60 @property |
54 def archive_data_file(self): | 61 def archive_data_file(self): |
55 return self._archive_data_file | 62 return self._archive_data_file |
56 | 63 |
57 @property | 64 @property |
58 def bucket(self): | 65 def bucket(self): |
59 return self._cloud_storage_bucket | 66 return self._cloud_storage_bucket |
60 | 67 |
61 @property | 68 @property |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 return self.user_stories.__iter__() | 119 return self.user_stories.__iter__() |
113 | 120 |
114 def __len__(self): | 121 def __len__(self): |
115 return len(self.user_stories) | 122 return len(self.user_stories) |
116 | 123 |
117 def __getitem__(self, key): | 124 def __getitem__(self, key): |
118 return self.user_stories[key] | 125 return self.user_stories[key] |
119 | 126 |
120 def __setitem__(self, key, value): | 127 def __setitem__(self, key, value): |
121 self.user_stories[key] = value | 128 self.user_stories[key] = value |
OLD | NEW |